Ce défi est le premier d'une série de deux défis sur la répétition. Le second sera bientôt disponible.
Dans une langue appelée la répétition (quelque chose que je viens d'inventer), il y a une chaîne infinie de 12345678901234567890...
, avec 1234567890
répétition pour toujours.
La syntaxe suivante est disponible pour les numéros de sortie:
+-*/
: Cela insère l'opérateur dans la chaîne de chiffres répétitifs.- Exemples:
+
->1+2
=3
(L'+
insère un+
entre1
et2
)+*
->1+2*3
=1+6
=7
(Identique à ci-dessus, sauf que deux opérateurs sont utilisés maintenant)/
->1/2
=0
(la répétition utilise une division entière)//
->1/2/3
=0/3
=0
(la répétition utilise "l'association gauche" avec plusieurs soustractions et divisions)
- Chaque opérateur est inséré de sorte qu'il ait un chiffre à sa gauche, sauf s'il y en a
c
(voir ci-dessous).
- Exemples:
c
: Concatène avec le chiffre suivant de la chaîne.- Exemples:
c+
->12+3
=15
(Lec
"continue" le1
et le concatène avec le chiffre suivant,,2
pour former12
)+c
->1+23
=24
ccc
->1234
- Exemples:
()
: Supports pour le traitement des nombres.- Exemples:
(c+)*
->(12+3)*4
=15*4
=60
(la répétition utilise l'ordre des opérations)(c+)/c
->(12+3)/45
=15/45
=0
(cc+c)/
->(123+45)/6
=168/6
=28
- Exemples:
s
: Ignorer un nombre (supprime le nombre de la chaîne infinie).s+
->2+3
=5
(s
saute1
)csc
->124
(le premierc
concats1
et2
, less
sauts3
et les derniersc
concats12
à4
)+s+
->7
(La première+
ajoute1
et2
à faire3
,s
skips3
, et la finale+
ajoute3
à4
faire7
)cs*(++)
->12*(4+5+6)
=12*15
=180
Dans les exemples ci-dessus, seule une quantité finie de chiffres dans la chaîne infinie est utilisée. Le nombre de chiffres utilisé est équivalent à number of operators, concats and skips + 1
.
Votre tâche consiste, lorsque vous recevez une chaîne de code de répétition, à sortir le résultat.
Voici des exemples d'entrée et de sortie:
++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180
C'est le golf de code, donc le code le plus court en octets gagne!
Spécifications:
- Vous avez la garantie que le résultat n'ira jamais au-dessus
2^31-1
. - Vous avez également la garantie que l'entrée ne comprendra que les symboles
+-*/cs()
. - Un programme vide sortira
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
la source
la source
~
s? Ne nous laisse pas pendre.s+
c'est2+3
son premier exemple. Ets
continue de m'écouter. Je me demande comment se+s()+
développe. S'il est1+(2)+4
alors(
vient avant2
maiss
qui vient même avant les(
skips apparemment encore3
, non2
. Si toutefois le résultat est1+(3)+4
alors l'effet d'uns
dépend de ce qui vient après (comparez-le avec+s+
)sc
est23
ets+
est1+3
? Nes
sautez le1
maintenant ou2
? Tous les exemples utilisent la première opération sur les opérandes1
et2
... ilsc
devrait en être ainsi13
.Réponses:
JavaScript (ES6), 110 octets
La division très simple, mais entière ajoute 25 octets. Pour une raison quelconque, une expression régulière dans JS ne peut pas correspondre à la fois au début d'une chaîne et au premier caractère, ce qui ajoute également quelques octets.
Comment ça fonctionne
)
) qui n'est pas immédiatement avant a(
.c
, un chiffre +s
au début (1s2
->2
), et chacuns
+ un chiffre (3s4
->3
).1/2
->(1/2|0)
).la source
ss+
retourne6
, quand il est censé revenir7
(Les deuxs
sautent1
et2
, donc les+
ajouts3
et4
)./^|,|$/g
ne correspondra qu'une seule fois au début car les deux correspondances auront le même index.$
n'a pas le même problème car la correspondance a un index supérieur à toute autre correspondance possible.Lot, 332 octets
Le comportement de
s
rend cela très gênant. (Peut-êtrecs
devrait - on évaluer vers13
et-s
vers-2
?) Variables:s
chaîne d'entrée (explicitement effacée car set / p ne change pas la variable si vous n'entrez rien)e
expression partielle en arithmétique entière normale (à laquelle nous pouvons passerset/a
sous forme deeval
)d
chiffre suivant de la chaîne infinie de chiffresr
côté droit du dernier opérateur. Nous ne pouvons pas concaténer cela immédiatement parce que cela(
doit venir en premier, mais nous devons le stocker pours
ne pas l'incrémenter. Heureusement, cela finit par rendre la manipulation de)
légèrement plus facile.c
caractère actuel.la source