Diese Herausforderung ist die erste in einer Serie mit zwei Herausforderungen zum Thema Wiederholung. Der zweite wird bald auf sein.
In einer Sprache namens Wiederholung (nur aus etwas I), besteht dort eine unendliche Reihe von 12345678901234567890...
, mit 1234567890
immer wiederholen.
Die folgende Syntax steht für die Ausgabe von Zahlen zur Verfügung:
+-*/
: Dies fügt den Operator in die Zeichenfolge sich wiederholender Ziffern ein.- Beispiele:
+
->1+2
=3
(Das+
fügt ein+
zwischen1
und ein2
)+*
->1+2*3
=1+6
=7
(Wie oben, außer dass jetzt zwei Operatoren verwendet werden)/
->1/2
=0
(Wiederholung verwendet Ganzzahldivision)//
->1/2/3
=0/3
=0
(Wiederholung verwendet "linke Assoziation" mit mehreren Subtraktionen und Divisionen)
- Jeder Operator wird so eingefügt, dass er eine Ziffer links davon hat, es sei denn, es gibt eine
c
(siehe unten).
- Beispiele:
c
: Verkettet mit der nächsten Ziffer in der Zeichenfolge.- Beispiele:
c+
->12+3
=15
(Dasc
"setzt" das fort1
und verkettet es mit der nächsten Ziffer, um2
sich zu bilden12
)+c
->1+23
=24
ccc
->1234
- Beispiele:
()
: Klammern für die Verarbeitung von Nummern.- Beispiele:
(c+)*
->(12+3)*4
=15*4
=60
(Wiederholung verwendet die Reihenfolge der Operationen)(c+)/c
->(12+3)/45
=15/45
=0
(cc+c)/
->(123+45)/6
=168/6
=28
- Beispiele:
s
: Überspringe eine Zahl (entfernt die Zahl aus der unendlichen Zeichenfolge).s+
->2+3
=5
(s
überspringt1
)csc
->124
(Die erstenc
Concats1
und2
, dies
Skips3
und die letztenc
Concats12
zu4
)+s+
->7
(Das erste+
fügt hinzu1
und2
zu machen3
,s
überspringt3
und das letzte+
fügt hinzu,3
um4
zu machen7
)cs*(++)
->12*(4+5+6)
=12*15
=180
In den obigen Beispielen wird nur eine endliche Anzahl von Ziffern in der unendlichen Zeichenfolge verwendet. Die Anzahl der verwendeten Ziffern entspricht number of operators, concats and skips + 1
.
Ihre Aufgabe ist es, das Ergebnis auszugeben, wenn Sie eine Zeichenfolge mit Wiederholungscode erhalten.
Beispiele für Eingabe und Ausgabe sind:
++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180
Dies ist Code Golf, also gewinnt der kürzeste Code in Bytes!
Technische Daten:
- Sie werden garantiert, dass das Ergebnis niemals darüber hinausgeht
2^31-1
. - Sie werden auch garantiert, dass die Eingabe nur aus den Symbolen besteht
+-*/cs()
. - Ein leeres Programm wird ausgegeben
1
.
quelle
~
s? Lass uns nicht hängen.s+
ist2+3
als erstes Beispiel. Unds
nervt mich immer noch. Ich frage mich, wie sich+s()+
ausdehnt. Wenn es1+(2)+4
dann(
vorher kommt,2
aber dass
kommt noch bevor das(
scheinbar noch überspringt3
, nicht2
. Wenn jedoch das Ergebnis ist,1+(3)+4
danns
hängt die Wirkung von a davon ab, was danach kommt (vergleiche es mit+s+
)sc
ist23
unds+
ist1+3
? Hats
überspringen die1
jetzt oder2
? Alle Beispiele verwenden die erste Operation für Operanden1
und2
...sc
sollten es auch sein13
.Antworten:
JavaScript (ES6), 110 Byte
Sehr einfache, aber ganzzahlige Division fügt 25 Bytes hinzu. Aus irgendeinem Grund kann ein regulärer Ausdruck in JS nicht sowohl mit dem Anfang einer Zeichenfolge als auch mit dem ersten Zeichen übereinstimmen, sodass auch einige Bytes hinzugefügt werden.
Wie es funktioniert
)
), das nicht unmittelbar vor a steht(
.c
eine Ziffer +s
am Anfang (1s2
->2
) und jeweilss
+ eine Ziffer (3s4
->3
).1/2
->(1/2|0)
).quelle
ss+
kehrt zurück6
, wenn es zurückkehren soll7
(Die beidens
überspringen1
und2
, also das+
Hinzufügen3
und4
)./^|,|$/g
stimmt zu Beginn nur einmal überein, da beide Übereinstimmungen den gleichen Index haben würden.$
hat nicht das gleiche Problem, da die Übereinstimmung einen größeren Index hat als jede andere mögliche Übereinstimmung.Stapel, 332 Bytes
Das Verhalten von
s
macht dies sehr umständlich. (Vielleichtcs
sollte zu13
und-s
zu bewerten-2
?) Variablen:s
Eingabezeichenfolge (explizit ausgeblendet, da set / p die Variable nicht ändert, wenn Sie nichts eingeben)e
Teilausdruck in normaler ganzzahliger Arithmetik (die wirset/a
als eine Form von übergeben könneneval
)d
nächste Ziffer aus der unendlichen Ziffernfolger
rechte Seite des neuesten Bedieners. Wir können dies nicht sofort verketten, da(
es zuerst kommen muss, aber wir müssen es speichern, damits
es nicht erhöht wird. Glücklicherweise)
erleichtert dies die Handhabung etwas.c
aktueller Charakter.quelle