Esse desafio é inspirado na matemática, é fato. Programação não é .
A notação matemática para um fatorial ou um fato é um ponto de exclamação !
. O ponto de exclamação também é um símbolo comum not
em muitas linguagens de programação.
Desafio:
Pegue uma sequência, contendo números e os caracteres: + !
como entrada e saída, o seguinte:
Tudo na frente de um ponto de exclamação deve ser avaliado como uma expressão matemática, assim 2+2
seria 4
.
Tudo depois de um único ponto de exclamação deve ser anexado como acessório ao que estiver à sua frente, portanto: 2+2!5
deve fornecer 45
, porque 2+2=4
e 5
é um acessório. 2+2!5+5
deve dar 410
.
Como !
também significa not
, qualquer coisa que não seja um acessório após o fato não deve ser anexada. Então, 2+2!!5
deve dar 4
, já que 5
não é um acessório. Agora, not(not(true))==true
então 2+2!!!5
deve dar 45
. 2+2!!5!5+5
deve dar:, 410
porque 2+2=4
, então seguido por um fatorial e !5!5+5
. O primeiro 5
não é um fato, mas 5+5
está atrás de outro ponto de exclamação e, portanto, é um fato, mais uma vez.
Esclarecimentos:
- Os pontos de exclamação não serão adjacentes a um
+
dos lados. - Não será levando
+
para os números (é5
, não+5
). - Opcionalmente, você pode incluir um zero à esquerda se esse for o resultado da expressão antes do primeiro
!
. Ambos4
e04
saída aceita para entrada:0+0!4
Resumo executivo: avalie cada soma (tratando !
como separadores). Em seguida, descarte todos os números que aparecerem após um número par de !
(contados desde o início da sequência). Depois remova tudo !
.
Casos de teste:
!
<- Empty string
5
5
12!
12
!87
87
!!5
<- Empty string
5+5!2+2
104
5+5!!2+2
10
1!2!3!4!5!6!7!8!9
12468
10+10!!2+2!!3+3!4+4
208
2!!3!5
25
2!!3!5!7
25
10!!!!!!!5
105
Isso é código-golfe, e o código mais curto em bytes (em cada idioma) vence! As explicações são fortemente encorajadas!
25
(veja o caso de teste adicionado). Mais importante2!!3!5!7
ainda daria25
, porque existe um número par de!
esquerdas do7
(para que você não conte apenas a corrida na frente do número, mas toda a!
esquerda dele).Row
?Respostas:
Retina ,
353129 bytesEconomizou 4 bytes, inspirando-se nos produtos ETH .
Agradecemos a Leo por salvar outros 2 bytes.
Experimente online!
fonte
JavaScript (ES6),
5856 bytesEconomizou dois bytes graças a Martin Ender .
Pode ser melhorado de alguma forma ...
fonte
replace
.1+1!5
. Eu acho que você esqueceueval
um pouco antes da!
.Gelatina , 16 bytes
Experimente online!
Explicação
A observação principal aqui é que podemos executar as etapas "fora de ordem"; em vez de avaliar as somas e depois ignorar as que não gostamos, podemos ignorar as somas em posições inválidas e depois avaliar o restante.
Avaliar uma soma como
"10+10"
a avaliará em um número, por exemplo20
, desvalorizá-lo em uma sequência"20"
,. Repetir esse processo não tem efeito adicional (é idempotente). Assim, avaliamos efetivamente todos os elementos da string, exceto a string nula, que permanece sem avaliação porque possui um comprimento zero.fonte
µ
em algum lugar (eµ
não funciona dentro de um loop, o que significa que você precisaria de algo ainda mais detalhado). Eu consegui fazê-lo funcionar comoṣ”!µḢW;m2$ȧVṾ$$€
, mas não é mais curto (e tem a característica acumulação de cifrões que tendem a acontecer quando você empurra o Jelly para o limite de sua capacidade de aninhar estruturas de controle.)Geléia , 18 bytes
Experimente online!
Como?
fonte
0+0
no meio da entrada (em um local onde não está sendo descartado); ele produz a cadeia nula, mesmo que deva produzir um dígito 0. #CJam , 20 bytes
Experimente online! (Conjunto de testes separados por avanço de linha.)
fonte
Ruby ,
5856 + 1 =5957 bytesUsa a
-p
bandeira. -2 bytes de Tutleman .Experimente online! (Uma linha extra de código foi adicionada para que ele pegasse todas as linhas de entrada e imprimisse a saída em linhas diferentes.)
fonte
eval$1
, não?Lote,
192184 bytesTer que lidar com as cordas vazias é inconveniente.
fonte
Pip , 18 bytes
Eu acho que é o mais curto possível ... embora eu tenha dito isso há três iterações atrás também.
Recebe entrada como argumento da linha de comando. Experimente online!
Explicação
fonte
R, 95 bytes
Provavelmente, há algum espaço para melhorias, mas no momento é o melhor que posso apresentar.
fonte