Aufgabe
Die Aufgabe ist sehr einfach. Geben Sie bei einer nicht leeren Zeichenfolge mit Zahlen , Groß- und Kleinbuchstaben die Summe der verbleibenden Zahlen aus. Beispielsweise:
a1wAD5qw45REs5Fw4eRQR33wqe4WE
Wenn Sie alle Buchstaben herausfiltern, erhalten Sie:
1 5 45 5 4 33 4
Die Summe dieser Zahlen ist 1 + 5 + 45 + 5 + 4 + 33 + 4 = 97
. So wäre die Ausgabe 97
.
Testfälle
a > 0
0 > 0
5 > 5
10 > 10
a0A > 0
1a1 > 2
11a1 > 12
4dasQWE65asAs5dAa5dWD > 79
a1wAD5qw45REs5Fw4eRQR33wqe4WE > 97
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Antworten:
GS2, 2 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Labyrinth , 8 Bytes
Nimm das, Pyth ...
Probieren Sie es online!
Erläuterung
Die übliche Grundierung (von Sp3000 gestohlen):
Was hier wirklich nützlich ist, ist, dass Labyrinth zwei verschiedene Eingabebefehle hat,
,
und?
. Ersteres liest ein einzelnes Byte von STDIN oder-1
bei EOF. Letzterer liest eine ganze Zahl aus STDIN. Dabei wird alles übersprungen, was keine Zahl ist, und dann die erste gefundene Dezimalzahl gelesen. Dieser kehrt0
bei EOF zurück, daher können wir ihn hier nicht verwenden, um zuverlässig nach EOF zu suchen.Die Hauptschleife des Programms ist dieses kompakte Bit:
Wenn
?
wir eine Ganzzahl lesen (alle Buchstaben ignorieren),+
addieren wir sie zur laufenden Summe (die als eine der impliziten Nullen am unteren Ende des Stapels beginnt). Dann lesen wir ein anderes Zeichen mit,
, um nach EOF zu suchen. Solange wir nicht bei EOF sind, wird das gelesene Zeichen ein Buchstabe sein, der einen positiven Zeichencode hat. Die IP dreht sich also nach rechts (aus Sicht von Westen).;
Wir verwerfen den Charakter, weil wir ihn nicht brauchen und betreten dann die Schleife erneut.Sobald wir bei EOF sind,
,
drückt man a,-1
so dass die IP stattdessen nach links (nach Osten) dreht.;
verwirft dies erneut-1
,!
druckt die laufende Summe als Ganzzahl und@
beendet das Programm.quelle
CJam, 13 Bytes
Problem behoben, bei dem dank Dennis mit Eingaben ohne Zahlen gearbeitet werden konnte! Außerdem wurde ein Byte gespeichert, indem das Buchstaben-Array durch ein ASCII-Array über Codepunkt 64 ersetzt wurde. Und dann ein weiteres Byte, das von Dennis gespeichert wurde!
Einfache Transliteration von Buchstaben zu Leerzeichen, dann Auswertung und Summe. Probieren Sie es online aus .
quelle
MATL , 8 Bytes
Probieren Sie es online!
quelle
Netzhaut ,
2211Probieren Sie es online!
11 Bytes (!) Gespart dank Martin!
Grundsätzlich nur dezimal bis unär, dann zählen die
1
s.quelle
$0
implizieren, wenn eine Substitution mit beginnt$*
. Es ist ein sehr verbreitetes Muster und das hätte dich Pyth schlagen lassen. ;)Japt, 2 Bytes
Online testen!
Wie es funktioniert
quelle
JavaScript ES6, 35 Byte
Wie es funktioniert
Erstens ersetzen wir jede Zeichenfolge von Nicht-Ziffern durch
"+"
. Grundsätzlich gibt es vier verschiedene Möglichkeiten, wie dies enden könnte:Die Fälle 1 und 2 sind bereits erledigt. Aber wir müssen irgendwie den letzten reparieren,
+
damit er keinen Fehler verursacht. Wir könnten es mit entfernen.replace(/\+$,"")
, aber das ist zu teuer. Wir könnten ein0
an das Ende anhängen , aber das würde sich auf die letzte Zahl auswirken, wenn die Zeichenfolge nicht mit einem endet+
. Ein Kompromiss ist das Anhängen.0
, das für sich genommen eine gültige Zahl ist und den Wert anderer Ganzzahlen nicht beeinflusst.Hier sind einige andere Werte, die ebenfalls funktionieren würden:
Alternative Version, auch 35 Bytes
Eine andere alternative Version, 36 Bytes
quelle
Pyth,
121110 BytesGlücklicherweise gibt
s
(convert to int) zurück,0
wenn es auf die leere Zeichenfolge angewendet wird, sodass ich mir keine Gedanken über die Tatsache machen muss, dasssplit("a1b", "\D+")
zurückgegeben wird["", "1", ""]
. Ebensosplit("a", "\D+")
kehrt zurück["", ""]
.Dies erlaubt mir sogar, jede Ziffer einzeln aufzuteilen, da
1 + 0 + 0 + 0 + 0 + 2
es dasselbe ist wie1 + 2
.Danke an Thomas Kwa für ein Byte!
quelle
Gol> <> , 4 Bytes
So kurz, ich brauche Dummy-Text ...
quelle
Perl 6 , 18 Bytes
Verwendung:
quelle
Gelee, 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Perl, 21 + 1 = 22 Bytes
Benötigt die
-p
Flagge:quelle
a
?0
;-)Julia, 35 Bytes
Dies ist eine anonyme Funktion, die eine Zeichenfolge akzeptiert und eine Ganzzahl zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Wir verwenden
matchall
, um ein Array zu erhalten, das aus Übereinstimmungen des regulären Ausdrucks besteht\d+
, die nur die Ganzzahlen in der Zeichenfolge sind. Wir müssen eine 0 vor der Zeichenkette anheften, sonst"a"
summieren wir in solchen Fällen über ein leeres Array, was einen Fehler verursacht. Wir wenden dannparse
auf jede Zeichenfolgenübereinstimmung an, die in Ganzzahlen konvertiert wird, und nehmen die Summe.quelle
parse
kann werden,int
wenn Sie die Verfallswarnung nicht stören.PHP, 64 Bytes
Führen Sie es als
https://eval.in/517817
quelle
<?
anstelle von verwenden<?php
?Javascript,
3239 BytesCode-Snippet anzeigen
quelle
Mathematica, 51 Bytes
Das falsche Ende der ausführlichen Mathematica-Builtins abfangen. 1 Byte aus mit Hilfe von @DavidC
quelle
DigitCharacter ..
spart 1 ByteDigitCharacter
funktioniert nicht wie geschrieben, weil es alle Ziffern entfernt, während wir alle Buchstaben entfernen möchten ...Total@ ToExpression@StringCases[#, DigitCharacter ..] &
R,
4643 BytesErläuterung
Probelauf
Bearbeiten: Ersetzt
[^0-9]
durch\\D
.quelle
PowerShell,
2826 BytesÜbernimmt die Eingabe
$args
und führt dann einen regulären Ausdruck aus,-replace
mit dem die Buchstaben ausgetauscht werden+0
, und leitet diesen aniex
(kurz fürInvoke-Expression
und ähnlich wieeval
).Alternative
Wenn Sie mit einer fremden Ausgabe einverstanden sind, können Sie auch bei
28 bis26 Byte Folgendes tun :Dies nimmt die Eingabezeichenfolge
$args
und-split
sie in ein Array von Zeichenfolgen auf den Nicht-Zahlen auf (wobei sie in dem Prozess entfernt werden). Zum Beispiel1a2b33
würde sich in['1','2','33']
. Das leiten wirMeasure-Object
mit dem-Sum
Parameter weiter. Die Ausgabe würde wie folgt aussehen:Bearbeiten - durr, brauche das nicht
[ ]
im regulären Ausdruck, da ich keine Liste möglicher Übereinstimmungen mehr spezifiziere ...quelle
Gema, 39 Zeichen
Probelauf:
quelle
Im Ernst, 13 Bytes
Probieren Sie es online!
Erläuterung:
quelle
a
. Sollte eine 1-Byte-Korrektur sein.Java, 70 Bytes
quelle
TI-Basic, 106 Bytes
Funktioniert mit TI-83/84-Taschenrechnern!
quelle
Clojure / ClojureScript, 35 Byte
quelle
R, 50 Bytes
Erfordert
gsubfn
installiert zu habenVerwendet
strtoi
, um zu numerisch zu zwingenquelle
Ruby 45 Bytes
(Erster Versuch bei der Arbeit, wird dies nochmals besuchen)
quelle
POSIX sh + tr + dc,
2725 BytesWandelt eine beliebige Folge von Nicht-Ziffern (einschließlich des abschließenden Zeilenumbruchs) in einen
+
Operator um, schreibt zwei Nullen auf den Stapel (falls die Eingabe mit einer Nicht-Ziffer beginnt), fügt sie alle hinzu und druckt das Ergebnis. Möglicherweise verbleibt eine zusätzliche Null am Ende des Stapels, aber das interessiert uns nicht.quelle
Lua, 51 Bytes
Ausnahmsweise mal ziemlich kurz! Noch kürzer als Java! Die Eingabe muss ein Befehlszeilenargument sein, damit sie funktioniert.
Ungolfed
quelle
Bash + GNU-Dienstprogramme, 29
Wenn es erforderlich ist, Eingaben ohne Nummern zu unterstützen (z. B.
a
), können wir dies tun:Bash + GNU-Dienstprogramme, 38
Dank @TobySpeight 1 Byte gespart.
quelle
a
. Wir diskutieren derzeit, ob das gültig ist oder nicht.;
anstelle von||
immer Null hinzufügen, ohne Schaden.Python 2, 70 Bytes
Ich stelle eine Python-Antwort nur zum Spaß.
Sehr einfach und verwendet Regex, um alle Zahlen in der Eingabe zu finden. Probieren Sie es online!
quelle
raw_input
python3 verwenden oder zu python3 wechseln. Eine kleinere Version (py3, 56 Bytes)import re;print(sum(map(int,re.findall('\d+',input()))))
.Oracle SQL 11.2, 105 Bytes
Der Regex konvertiert Buchstaben in ','
XMLTABLE erstellt eine Zeile pro Element in der Zeichenfolge, wobei ',' als Trennzeichen verwendet wird.
SUMME die Zeilen, um das Ergebnis zu erhalten.
NVL wird benötigt, um eine Zeichenfolge ohne Ziffer zu berücksichtigen.
quelle