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
.
s+
é 2+3
o primeiro exemplo. E ainda s
continua me incomodando. Eu me pergunto como se +s()+
expande. Se é 1+(2)+4
então (
vem antes, 2
mas o s
que vem antes mesmo do (
aparentemente ainda pula 3
, não 2
. Se, contudo, o resultado é 1+(3)+4
então o efeito de um s
depende do que vem depois dela (compará-lo com +s+
)
sc
é 23
e s+
é 1+3
? Será que s
pular a 1
agora ou o 2
? Todos os exemplos usam a primeira operação em operandos 1
e 2
... assim sc
deve ser 13
.
~
s? Não nos deixe esperando.