Nehmen Sie eine Zeichenfolge als Eingabe und führen Sie eine Addition / Subtraktion aller Stellen in der Zeichenfolge durch und geben Sie die Summe dieser Operationen als Ergebnis aus.
Regeln
- Die Ziffern in der Zeichenfolge werden von links nach rechts gelesen
- Wenn eine Ziffer (n) ungerade ist, Addition mit der nächsten Ziffer (n + n1) durchführen
- Wenn eine Ziffer (n) gerade ist, subtrahieren Sie mit der nächsten Ziffer (n - n1)
- Wenn Sie die letzte Ziffer in der Zeichenfolge erreicht haben, führen Sie den Vorgang mit der ersten Ziffer in der Zeichenfolge aus
- Die Ausgabe ist die Summe aller resultierenden Werte
- Wenn die Zeichenfolge nur eine Ziffer enthält, führen Sie die Operation mit sich selbst aus (n + n oder nn).
- Wenn die Zeichenfolge keine Ziffern enthält, ist die Ausgabe 0
Beispiel
Input: r5e6o9mm!/3708dvc
Process: (5+6) + (6-9) + (9+3) + (3+7) + (7+0) + (0-8) + (8-5)
Output: 32
Anmerkungen
- Es wird entweder die Funktion oder das vollständige Programm akzeptiert
- Die maximale Länge der Eingabe hängt von der Beschränkung Ihrer Sprache für eine Zeichenfolge ab
- Keine Einschränkungen bei der Zeicheneingabe, sondern nur Ziffern mit halber Breite werden für die Ausgabe berücksichtigt
- Wenigste Bytes gewinnt
""
,"0"
,"1"
Antworten:
Jelly ,
17 1512 BytesProbieren Sie es online!
Probieren Sie Testfälle aus.
Das Programm behält nur die Ziffern bei, die auf eine ungerade Ziffer folgen, und berechnet dann die doppelte Summe.
quelle
K (oK) ,
47434031 BytesLösung:
Probieren Sie es online!
Erläuterung:
Entfernen Sie alles aus dem String, das keine Zahl ist (und konvertieren Sie gleichzeitig), modulo 2, multiplizieren Sie mit 2, multiplizieren Sie mit x, das um 1 gedreht wurde, und addieren Sie.
Naive Lösung:
Entfernen Sie alles aus einer Zeichenfolge, die keine Zahl ist (und konvertieren Sie gleichzeitig), nehmen Sie ein Schiebefenster mit zwei Elementen, ermitteln Sie, ob sie ungerade oder gerade sind, und wenden Sie gegebenenfalls Addieren / Subtrahieren an.
Probieren Sie es online!
Anmerkungen:
quelle
x:48!x@&x in,/$!10
->x^:(x-:48)^!10
':
als "Schiebefenster" nicht bewusst - interessant.Python 2 , 86 Bytes
Probieren Sie es online!
quelle
Perl 6 , 41 Bytes
Probieren Sie es online!
Verwendet die gleiche Logik wie Dylnans Gelee-Antwort . Dies summiert nur Ziffern, die auf eine ungerade Zahl folgen und multipliziert dann mit 2.
quelle
Powershell,
807876 Bytes-2 Bytes danke Neil mit Retina-Lösung
-2 Bytes danke AdmBorkBork
Testskript:
Erläuterung
Zuallererst: Es wird 2 * n addiert, wenn die vorherige Ziffer ungerade ist, und 0, wenn die vorherige Ziffer gerade ist.
Extra 99 Bytes
Inspiriert von @Neil. Regex-Übereinstimmungsziffern mit der vorherigen Ziffer sind ungerade.
Matches
ist eine automatische Variable .quelle
|?{$_}
für-ne''
und ein anderes$d="$args"-split'\D*'-ne''
ausgetauscht wird, indem Sie in Parens wie wechseln($d="$args"-split'\D*'-ne'')+$d[0]
.MATL ,
1817 BytesProbieren Sie es online!
(-1 Byte dank Luis Mendo / Giuseppe / beiden!)
Erläuterung:
Die Grundidee ist, dass Zahlen, die auf gerade Zahlen folgen, ignoriert werden können, während Zahlen, die auf ungerade Zahlen folgen, verdoppelt werden - und das Endergebnis ist die Summe dieser verdoppelten Werte.
Ich dachte nicht, dass eine
f
Paritätsprüfungo
notwendig wäre, aber aus irgendeinem Grund sieht MATL das Array von 0 und 1, das sich aus dem ergibt, nichto
als logisches Array, sondern nimmt sie stattdessen als numerische Indizes und Indizes in Positionen1
undend
.quelle
!U
anstelle von verwenden48-
. Die Transponierung scheint hier nichts auszusetzen.o
für diedouble
Eingabe ist nurmod(...,2)
, so ist die Ausgabedouble
. NetterNaN
Eingabetrick! Dennis hatte eine Idee und wird diese wahrscheinlich bald beheben!U
statt48-
o
ein logisches Array ausgegeben - oder nicht? (Ich muss gestehen, dass ich mich noch nie mit dem numerischen Typensystem von MATLAB befasst habe.) Und ja, ich dachte, esNaN
wäre ein netter Sentinel, da es wahrscheinlich nirgendwo eine tatsächliche Eingabe gibt, aber gut zu wissen, dass es nicht mehr lange benötigt wird !K (ngn / k) , 33 Bytes
Probieren Sie es online!
{
}
ist eine Funktion mit Argumentx
!10
ist die Liste0 1 ... 9
$
in Strings konvertieren,/
verkettenx^
bedeutetx
ohne was auf der rechten Seitex^x^
bedeutetx
gekreuzt mit dem, was auf der rechten Seite ist, dh nur die Ziffern behaltenx
-48+
subtrahieren48
, das ist der ASCII-Code von"0"
x:
zuweisenx
2!
mod 22*
multipliziert mit 21_x,*x
ist ein Tropfen von:x
gefolgt von dem ersten vonx
; dhx
um einen Schritt nach links gedreht+/
Summequelle
Japt (v2.0a0),
25 bis19 Byte-6 Bytes dank Shaggy .
Probieren Sie es hier aus .
Diesmal funktioniert es ohne Ziffern! Die Eingabe ist eine Liste von Zeichen.
quelle
x
Funktion. Pingen Sie mich im Chat an, wenn Sie Fragen haben.05AB1E ,
129 BytesSpart 1 Byte gegenüber der naiven Methode durch Verwendung des Paritätstricks von Dylnan. Sparte
3 Byte dank Mr. Xcoder
Probieren Sie es online!
Erläuterung
quelle
þÀIþ€ÉÏSO·
,þÀDÁ€ÉÏSO·
,þÀ¹þ€ÉÏSO·
oderþÀsþ€ÉÏSO·
passieren alle Testfälle für -2 Bytes?þDÁ€ÉÏSO·
für -3 tun :)Retina , 37 Bytes
Probieren Sie es online! Erläuterung:
Fügen Sie ein Duplikat der ersten Ziffer hinzu.
Finde alles, dessen erste vorherige Ziffer ungerade ist.
Wandle alle Übereinstimmungen in unäre um und verdopple sie. (Nicht-Ziffern werden als Null behandelt.)
Nimm die Summe. Wenn es keine Übereinstimmungen gab, ergibt dies nach Bedarf Null.
Das Beste, was ich in Retina 0.8.2 machen konnte, waren 44 Bytes:
Probieren Sie es online! Erläuterung:
Nicht-Ziffern löschen.
Fügen Sie eine Kopie der ersten Ziffer an.
Löschen Sie Ziffern, die keiner ungeraden Ziffer folgen.
In Unary konvertieren.
Verdopple sie.
Nimm die Summe.
quelle
Gelee , 15 Bytes
Probieren Sie es online!
quelle
1ịṭƊ
JavaScript (ES6), 56 Byte
Nimmt die Eingabe als Array von Zeichen.
Probieren Sie es online!
Kommentiert
quelle
JavaScript (Node.js) ,
85848382 Byte-1 Bytes dank ovs
Probieren Sie es online!
Übernimmt die Zeichenfolgeeingabe, findet die Ziffern als ein Array von Zeichen oder gibt ein leeres Array zurück, wenn keines gefunden wird, und verwendet dann Typenzwang, um sicherzustellen, dass die Werte korrekt addiert / subtrahiert werden. Die Vorwärtssuche erhöht den Index vor und verwendet eine Nullprüfung, um die Kürze zu verbessern. Anschließend überprüft der letzte Teil, ob die Zahl ungerade oder gerade ist, um dann die Addition oder Subtraktion zu erzwingen (+ und - sind - usw.).
quelle
n-0
kann sein+n
R , 58 Bytes
Probieren Sie es online!
quelle
array
Ausgabe nichts ausmacht .xxx
sodass es 68 Bytes umfasst, wenn Sie die Änderung in der Indexierung verwendena
, um zu generiereny
.strtoi
stattas.double
, aber ja, das sollte in Ordnung sein.Perl 5 , 48 Bytes
Probieren Sie es online!
Ich mag, wie kryptisch das aussieht, aber es ist eine ziemlich unkomplizierte Schleife um alle Zahlen in der Zeichenfolge.
quelle
Julia 0,6 ,
7769 BytesProbieren Sie es online!
quelle
C Scharfe 180 Bytes
Das ist nicht sehr gut Golfen, lol.
Ungolfed:
quelle
Stax , 14 Bytes
Führen Sie es aus und debuggen Sie es
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
JavaScript (ES6), 52 Byte
Erwartet die Eingabe als Array von Zeichen. Vorsichtsmaßnahme: Aufgrund der Bitverschiebung hat die Ausgabe eine Obergrenze von
2^31-1
Probieren Sie es online!
Erläuterung
Verdoppelt im Wesentlichen die Summe der Ziffern nach ungeraden Werten.
quelle