Diese Herausforderung ist inspiriert von Mathematik ist Tatsache. Programmierung ist nicht .
Die mathematische Notation für eine Fakultät oder eine Tatsache ist ein Ausrufezeichen !. Das Ausrufezeichen ist auch notin vielen Programmiersprachen ein gängiges Symbol .
Herausforderung:
Nehmen Sie eine Zeichenfolge mit Ziffern und Zeichen: + !Geben Sie als Eingabe und Ausgabe Folgendes ein:
Alles vor einem Ausrufezeichen sollte als mathematischer Ausdruck ausgewertet 2+2werden 4.
Alles nach einem einzelnen Ausrufezeichen sollte als Zubehör an das angehängt werden, was sich davor befindet. Also: 2+2!5sollte geben 45, weil 2+2=4, und 5ist ein Zubehör. 2+2!5+5sollte geben 410.
Da !bedeutet auch not, dass alles, was nachträglich kein Zubehör ist, nicht angehängt werden sollte. Also 2+2!!5sollte geben 4, da 5ist kein Zubehör. Nun not(not(true))==true, so 2+2!!!5geben soll 45. 2+2!!5!5+5sollte geben : 410, weil 2+2=4dann gefolgt von einer Fakultät und !5!5+5. Das erste 5ist keine Tatsache, sondern 5+5steht nach einem weiteren Ausrufezeichen und ist daher wieder eine Tatsache.
Erläuterungen:
- Die Ausrufezeichen befinden sich
+auf keiner Seite neben a. - Es wird keine Führung
+für Zahlen geben (es ist5nicht so+5). - Sie können optional eine führende Null einfügen, wenn dies das Ergebnis des Ausdrucks vor der ersten ist
!. Beide4und04werden als Ausgabe für Eingabe akzeptiert:0+0!4
Zusammenfassung: Bewerten Sie jede Summe (Behandlung !als Trennzeichen). Verwerfen Sie dann alle Zahlen, die nach einer geraden Zahl von !(ab dem Beginn der Zeichenfolge) erscheinen. Dann entfernen Sie alle !.
Testfälle:
!
<- 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
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes (in jeder Sprache)! Erklärungen sind ausdrücklich erwünscht!
25(siehe hinzugefügten Testfall). Noch wichtiger ist, 2!!3!5!7würde immer noch geben 25, weil es eine gerade Anzahl von !links von der gibt 7(so dass Sie nicht nur den Lauf direkt vor der Zahl zählen, sondern alle !links davon).
Row?