Eingang:
Eine nicht-leere Liste / Vektor , wobei jedes Element einen Wert / Zeichen hält, die angibt , ob Sie sich verlassen werden auf oder nach unten . Ich benutze 1
und -1
, aber du kannst wählen, was du willst. Sie können nur zwei Werte verwenden, Sie können nicht 1,2,3...
und -1,-2,-3...
für oben bzw. unten verwenden.
Herausforderung:
Hier finden Sie die Zahlen in der geometrischen Reihe verwenden 1, 2, 4, 8, 16, 32 ... . Jedes Mal, wenn Sie mit dem Aufwärts- oder Abwärtszählen beginnen, zählen Sie in Schritten von 1 , dann 2 , dann 4 usw. Wenn Sie sich ändern und in die andere Richtung zählen, subtrahieren Sie zuerst 1 , dann 2 , dann 4 und so weiter. Die Ausgabe soll die Zahl sein, zu der Sie am Ende gelangen.
Beispiele:
Im folgenden Beispiel ist die erste Zeile die Eingabe, die zweite Zeile die Zahlen, die Sie hoch- / runterzählen, die dritte Zeile die kumulative Summe und die letzte Zeile die Ausgabe.
Beispiel 1:
1 1 1 1 1 1 1 1 1 1
1 2 4 8 16 32 64 128 256 512
1 3 7 15 31 63 127 255 511 1023
1023
Beispiel 2:
1 1 1 1 1 1 -1 -1 -1 -1 1 1 1
1 2 4 8 16 32 -1 -2 -4 -8 1 2 4
1 3 7 15 31 63 62 60 56 48 49 51 55
55
Wie Sie sehen können, wird der Wert, den wir zählen , durch das erste 1
oder -1
"Zurücksetzen" zurückgesetzt, und aufeinanderfolgende Sequenzen von 1
oder -1
bedeuten das Verdoppeln des Werts.
Beispiel 3:
-1 -1 1 1 -1 -1 -1
-1 -2 1 2 -1 -2 -4
-1 -3 -2 0 -1 -3 -7
-7
Einige zusätzliche Testfälle, um einige potenzielle Eckfälle zu berücksichtigen.
Die Eingabe erfolgt in der ersten Zeile. Die Ausgabe erfolgt in der Sekunde.
1
1
-------
-1
-1
-------
-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
0
Dies ist Code-Golf, so dass die kürzeste Einsendung in jeder Sprache gewinnt.
®ì2Ãx
umxì2
zwei Bytes zu speichern.