Esse desafio é o primeiro de uma série de dois desafios sobre Repetição. O segundo será lançado em breve.
Em uma linguagem chamada Repetition (algo que acabei de inventar), existe uma sequência infinita de 12345678901234567890...
, com1234567890
repetindo sempre.
A seguinte sintaxe está disponível para gerar números:
+-*/
: Isso insere o operador na sequência de dígitos repetidos.- Exemplos:
+
->1+2
=3
(+
insere um+
entre1
e2
)+*
->1+2*3
=1+6
=7
(O mesmo que acima, exceto que dois operadores são usados agora)/
->1/2
=0
(Repetição usa divisão inteira)//
->1/2/3
=0/3
=0
(A repetição usa "associação à esquerda" com várias subtrações e divisões)
- Cada operador é inserido para ter um dígito à esquerda, a menos que haja
c
(veja abaixo).
- Exemplos:
c
: Concatena com o próximo dígito na sequência.- Exemplos:
c+
->12+3
=15
(Oc
"continua"1
e o concatena com o próximo dígito2
, para formar12
)+c
->1+23
=24
ccc
->1234
- Exemplos:
()
: Colchetes para processar números.- Exemplos:
(c+)*
->(12+3)*4
=15*4
=60
(a repetição usa a ordem das operações)(c+)/c
->(12+3)/45
=15/45
=0
(cc+c)/
->(123+45)/6
=168/6
=28
- Exemplos:
s
: Pula um número (remove o número da sequência infinita).s+
->2+3
=5
(s
pula1
)csc
->124
(a primeirac
concats1
e2
, oss
saltos3
e as finaisc
concats12
a4
)+s+
->7
(O primeiro+
adiciona1
e2
fazer3
,s
saltos3
, ea final+
acrescenta3
a4
fazer7
)cs*(++)
->12*(4+5+6)
=12*15
=180
Nos exemplos acima, apenas uma quantidade finita de dígitos na cadeia infinita é usada. O número de dígitos usados é equivalente a number of operators, concats and skips + 1
.
Sua tarefa é, quando receber uma sequência de códigos de repetição, gerar o resultado.
Exemplos de entrada e saída são:
++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180
Este é o código golf, pelo que o código mais curto em bytes vence!
Especificações:
- Você está garantido que o resultado nunca será superior
2^31-1
. - Você também tem a garantia de que a entrada consistirá apenas dos símbolos
+-*/cs()
. - Um programa vazio será exibido
1
.
code-golf
math
code-golf
string
number
arithmetic
code-golf
ascii-art
kolmogorov-complexity
code-golf
number-theory
code-golf
math
code-golf
stack-exchange-api
code-golf
ascii-art
code-golf
string
code-golf
number
integer
code-golf
number
arithmetic
code-golf
puzzle-solver
code-challenge
quine
palindrome
polyglot
clismique
fonte
fonte
~
s? Não nos deixe esperando.s+
é2+3
o primeiro exemplo. E aindas
continua me incomodando. Eu me pergunto como se+s()+
expande. Se é1+(2)+4
então(
vem antes,2
mas os
que vem antes mesmo do(
aparentemente ainda pula3
, não2
. Se, contudo, o resultado é1+(3)+4
então o efeito de ums
depende do que vem depois dela (compará-lo com+s+
)sc
é23
es+
é1+3
? Será ques
pular a1
agora ou o2
? Todos os exemplos usam a primeira operação em operandos1
e2
... assimsc
deve ser13
.Respostas:
JavaScript (ES6), 110 bytes
Muito simples, mas a divisão inteira adiciona 25 bytes. Por alguma razão, uma regex em JS não pode corresponder ao início de uma sequência e ao primeiro caractere, portanto, isso adiciona alguns bytes também.
Como funciona
)
) que não está imediatamente antes de a(
.c
um, um dígito +s
no início (1s2
->2
) e cadas
um + um dígito (3s4
->3
).1/2
->(1/2|0)
).fonte
ss+
retorna6
, quando se destina a retornar7
(os doiss
pulam1
e2
, então os+
adiciona3
e4
)./^|,|$/g
só corresponderá uma vez no início, porque ambas as correspondências teriam o mesmo índice.$
não tem o mesmo problema porque a correspondência possui um índice maior do que qualquer outra correspondência possível.Lote, 332 bytes
O comportamento de
s
torna isso muito estranho. (Talvezcs
deva avaliar para13
e-s
para-2
?) Variáveis:s
string de entrada (explicitamente apagada porque set / p não altera a variável se você não inserir nada)e
expressão parcial na aritmética inteira normal (à qual podemos passarset/a
como forma deeval
)d
próximo dígito da sequência infinita de dígitosr
lado direito do operador mais recente. Não podemos concatenar isso imediatamente porque(
precisa vir primeiro, mas precisamos armazená-lo para ques
não o incremente. Felizmente, acaba tornando o manuseio)
um pouco mais fácil.c
caractere atual.fonte