Questa sfida ispirata alla matematica è un fatto. La programmazione no .
La notazione matematica per un fattoriale o un fatto è un punto esclamativo !. Il punto esclamativo è anche un simbolo comune notin molti linguaggi di programmazione.
Sfida:
Prendi una stringa, contenente numeri e caratteri: + !come input e output quanto segue:
Tutto ciò che si trova davanti a un punto esclamativo dovrebbe essere valutato come un'espressione matematica, così 2+2sarebbe 4.
Tutto dopo un singolo punto esclamativo dovrebbe essere aggiunto come accessorio a tutto ciò che si trova di fronte, quindi: 2+2!5dovrebbe dare 45, perché 2+2=4, ed 5è un accessorio. 2+2!5+5dovrebbe dare 410.
Dal momento che !significa anche not, tutto ciò che non è un accessorio dopo il fatto non dovrebbe essere aggiunto. Quindi, 2+2!!5dovrebbe dare 4, dal momento che 5non è un accessorio. Ora, not(not(true))==truecosì 2+2!!!5dovrebbe dare 45. 2+2!!5!5+5dovrebbe dare:, 410perché 2+2=4, quindi seguito da un fattoriale e !5!5+5. Il primo 5non è un dato di fatto, ma 5+5è dopo un altro punto esclamativo, ed è quindi un fatto, ancora una volta.
chiarimenti:
- I punti esclamativi non saranno adiacenti a un
+lato. - Non ci saranno
+numeri iniziali (è5, non+5). - Opzionalmente puoi includere uno zero iniziale se questo è il risultato dell'espressione davanti al primo
!. Entrambi4e04sono accettati output per input:0+0!4
Riepilogo esecutivo: valutare ogni somma (trattando !come separatori). Quindi scarta tutti i numeri che compaiono dopo un numero pari di !(contando dall'inizio della stringa). Quindi rimuovere tutto !.
Casi test:
!
<- 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
Questo è code-golf quindi vince il codice più breve in byte (in ogni lingua)! Le spiegazioni sono fortemente incoraggiate!
25(vedi caso di prova aggiunto). Ancora più importante, 2!!3!5!7darei comunque 25, perché c'è un numero pari di !sinistra del 7(quindi non devi solo contare la corsa proprio davanti al numero, ma tutta la sua !sinistra).
Row?