Hallo, willkommen bei PPCG. Herausforderungen für eine einzelne Sprache werden hier bei PPCG normalerweise verpönt. Vielleicht könnten Sie es in eine allgemeine Herausforderung ändern: Geben Sie bei gegebener Zeichenfolge die Summe aller Zahlen in der Zeichenfolge aus und ignorieren Sie alles andere (dh "the 5is 108 seCONd4 a", 117weil 5+108+4=117). Außerdem sollte jede 'Frage' hier ein gewinnendes Bedingungs-Tag haben . In diesem Fall gehe ich davon aus, dass es [Code-Golf] ist (die kürzestmögliche Lösung)?
Kevin Cruijssen
4
Es scheint, dass Sie eine ähnliche Frage zu SO gestellt haben, die tendenziell bestätigt, dass es sich nicht um eine PPCG-Herausforderung handelt und Sie eher nach "verwendbarem" Code als nach Golfcode suchen. Ich würde empfehlen, stattdessen Ihre ursprüngliche Frage zu SO zu verbessern, damit sie besser zu den Regeln der Website passt.
Arnauld
4
Ich habe Ihren Beitrag überarbeitet, um unseren Standards zu entsprechen. Fühlen Sie sich frei zu bearbeiten, wenn das Ergebnis nicht zu Ihnen passt.
Was ist mit diesem Fall, wenn string x='-12hello3';Sie negative ganze Zahlen zählen (dh -12 + 3 === -9)?
Shaun Bebbers
Antworten:
4
Javascript, 34 32 Bytes
s=>eval(s.match(/\d+/g).join`+`)
Ordnen Sie alle Ziffern zu und verbinden Sie sie, indem Sie +sie in 5 + 108 + 4 umwandeln. Bewerten Sie das Ergebnis.
Funktioniert nur mit positiven ganzen Zahlen.
Ich denke, die Verwendung von string.length in der Konsole zum Zählen von Zeichen ist keine gute Idee, wenn es Escape-Zeichen enthält ... Hoppla, es wurde behoben. Nochmals
vielen Dank
Eine etwas bessere Option wäre console.log(f.toString().length), aber es ist auch nicht 100% zuverlässig.
þм# Only leave the non-digits of the (implicit) input-string# i.e. "the 5is 108 seCONd4 a" → "the is seCONd a"
S # Split it into a list of characters# → ["t","h","e"," ","i","s"," "," ","s","e","C","O","N","d"," ","a"]¡# Split the (implicit) input-string by each of these characters# → ["","","","","5","","","108","","","","","","","4","",""]þ# Remove the empty strings by only leaving the digits# → ["5","108","4"]
O # And sum these numbers (which is output implicitly)# → 117
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung: Der SumOperator von Charcoal extrahiert automatisch Zahlen aus einer Zeichenfolge. Wenn die Zeichenfolge jedoch keine nichtstelligen Zeichen enthält, wird stattdessen die digitale Summe verwendet. Daher verkette ich ein Null-Byte, um dies zu vermeiden. Das Ergebnis wird dann für die implizite Ausgabe in einen String zurückgesetzt.
Warum nicht. Obligatorische Regex-Antwort. Könnte wahrscheinlich 6 mit Python 2 andocken, aber was auch immer. Gilt nicht mehr, da ich einen Eval-Ansatz anstelle einer Karte verwende.
import re;# Import regex module
x=lambda y: eval()# Run as Python code'+'.join()# Joined by '+'
re.findall('\d+',y)# A list of all matches of regex \d+ in string y
Nett! In Ihrem TIO sollten Sie z == l[1]stattdessen verwenden z is l[1]. Der aktuelle Code kann falsch negative Ergebnisse liefern, wenn die Zahlen hoch genug sind.
Eine ziemlich einfache. IIn Cubix wird die erste Ganzzahl in der Eingabe genommen und auf den Stapel verschoben. Dies hat den Effekt, dass alle Zeichen übersprungen werden. Der Rest befasst sich mit dem zusätzlichen und Erkennen des Endes der Eingabe.
I! Geben Sie eine Ganzzahl ein und testen Sie sie auf 0
s+q;;Wenn nicht Null, tauschen Sie TOS (Kräfte und anfängliche 0) und addieren Sie. Schieben Sie das Ergebnis auf die Unterseite des Stapels und reinigen Sie die Oberseite. Kehren Sie zum Anfang zurück.
/i? Wenn Null, leiten Sie um und führen Sie eine Zeicheneingabe durch, um dies zu überprüfen
|?;/Wenn sich das Positive (Zeichen) nach rechts in ein Reflect ?verwandelt, wird es durch den Checker zurückgeschoben und biegt vom Stack nach rechts auf den Pop ab, wobei 0 auf TOS verbleibt. Die IP wird dann zurück in die Hauptschleife umgeleitet.
I>p.O@ Wenn negativ (Ende der Eingabe), biegen Sie links ab, geben Sie eine ganzzahlige Eingabe ein, bringen Sie die Unterseite des Stapels nach oben, geben Sie aus und halten Sie an.
Eine interessantere, aber indirekte Antwort (37 Bytes): {Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Erläuterung
Sum##N=>MatchAll&"\\d+"
Dies hat die Form:
f##g=>h&x
was, wenn es erweitert und in Klammern gesetzt wird, wird:
f ## (g => (h&x))
##setzt zwei Funktionen zusammen, =>erstellt eine Funktion, die die linke Funktion über dem Ergebnis der rechten Funktion &abbildet , und bindet ein Argument an eine Seite einer Funktion. Für die Eingabe _entspricht dies:
{ f[Map[g, h[_, x]]] }
Zuerst MatchAlllaufen dann Ziffern ( \\d+). Danach konvertieren wir jeden Lauf mit der NFunktion in eine tatsächliche Ganzzahl . Schließlich nehmen wir die Summe dieser Zahlen mit Sum.
s->{// Lambda functionlong c=0;// Sum is zerofor(Matcher m=Pattern.compile("\\d+").matcher(s);// Prepare regex matcher
m.find();// While the string contains unused matches...
c+=newLong(m.group()));// Add those matches to the outputreturn c;// Return the output}
Ich denke nicht, dass dies richtig ist: Das (einzige) Beispiel des OP schlägt vor, dass aufeinanderfolgende Ziffern eine einzelne Ganzzahl bilden sollten, also sollte "123" 123 erzeugen, nicht 6 wie Ihr Code.
Michail
Das ist bedauerlich, ich werde es überarbeiten, wenn ich kann
-4 bytesmit Long::newanstelle von Long::valueOf. -1 bytedurch Kürzen des regulären Ausdrucks - wenn wir später bereits leere Zeichenfolgen entfernen, sind einige Extras beim Teilen in Ordnung.
Erklärt
s->// Lambda (target type is ToLongFunction<String>)
java.util.Arrays.stream(// Stream the result of
s.split("\\D")// splitting on non-digits).filter(t->!t.isEmpty())// Discard any empty strings.mapToLong(Long::new)// Convert to long.sum()// Add up the stream's values.
"the 5is 108 seCONd4 a"
,117
weil5+108+4=117
). Außerdem sollte jede 'Frage' hier ein gewinnendes Bedingungs-Tag haben . In diesem Fall gehe ich davon aus, dass es [Code-Golf] ist (die kürzestmögliche Lösung)?string x='-12hello3';
Sie negative ganze Zahlen zählen (dh -12 + 3 === -9)?Antworten:
Javascript,
3432 Bytess=>eval(s.match(/\d+/g).join`+`)
Ordnen Sie alle Ziffern zu und verbinden Sie sie, indem Sie
+
sie in 5 + 108 + 4 umwandeln. Bewerten Sie das Ergebnis.Funktioniert nur mit positiven ganzen Zahlen.
2 Bytes dank Arnauld gespeichert
quelle
console.log(f.toString().length)
, aber es ist auch nicht 100% zuverlässig.Perl 6 , 14 Bytes
Probieren Sie es online aus!
Anonymer Codeblock, der die Summe aller Ziffernreihen zurückgibt
quelle
05AB1E ,
116 BytesProbieren Sie es online aus.
Erläuterung:
quelle
¡
!R ,
644845 BytesNachdem ich den PowerShell-Eintrag gesehen hatte, konnte ich dies weiter spielen.
Probieren Sie es online aus!
quelle
t=
ist hier eher ausreichend alstext
APL (Dyalog Unicode) , 11 Bytes
Anonyme stillschweigende Präfektfunktion
Probieren Sie es online aus!
⊢
das Argument⊆
partitioniert (Läufe von True werden zu Stücken, Läufe von False sind Trennzeichen) durch∊
Mitgliedschaft∘
von⎕D
dem Satz von Ziffern#⍎¨
Bewerten Sie jeden im Root-Namespace+/
Summequelle
Retina 0,8,2 , 8 Bytes
Probieren Sie es online aus!
quelle
PowerShell , 29 Byte
Probieren Sie es online aus!
quelle
Holzkohle , 5 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung: Der
Sum
Operator von Charcoal extrahiert automatisch Zahlen aus einer Zeichenfolge. Wenn die Zeichenfolge jedoch keine nichtstelligen Zeichen enthält, wird stattdessen die digitale Summe verwendet. Daher verkette ich ein Null-Byte, um dies zu vermeiden. Das Ergebnis wird dann für die implizite Ausgabe in einen String zurückgesetzt.quelle
Haskell , 50 Bytes
Probieren Sie es online aus!
Es gibt wahrscheinlich einen besseren Weg, aber dies ist der offensichtlichste.
quelle
Zsh , 21 Bytes
Probieren Sie es online aus!
Leider beschwert sich Bash, weil es
0108
als oktal interpretiert wird . Zsh nicht (außersetopt octalzeroes
)quelle
Bash, 43 Bytes
Ersetzt jede Nicht-Zahl durch ein Leerzeichen und summiert sie dann zusammen.
-5 Bytes dank GammaFunction
quelle
{
}
anstelle von verwendendo
done
.Python 3 ,
635956 BytesWarum nicht. Obligatorische Regex-Antwort.
Könnte wahrscheinlich 6 mit Python 2 andocken, aber was auch immer.Gilt nicht mehr, da ich einen Eval-Ansatz anstelle einer Karte verwende.Erläuterung:
Probieren Sie es online aus!
quelle
z == l[1]
stattdessen verwendenz is l[1]
. Der aktuelle Code kann falsch negative Ergebnisse liefern, wenn die Zahlen hoch genug sind.Java 10, 66 Bytes
Dies ist ein Lambda von
String
bisint
.Negative Ganzzahlen werden nicht unterstützt. Vermutlich ist das okay.
Probieren Sie es online aus
Danksagung
quelle
[^0-9]
für\D
ein paar Bytes, können Sie auch wechselnlong
undString
fürvar
(obwohl Sie den Rückgabetyp wird sich ändern müssenint
Ruby,
3227 ZeichenDanksagung
quelle
*?+
anstelle von.join ?+
-7 Bytes verwenden. Siehe ary * strCubix , 17 Bytes
Probieren Sie es online aus!
Schau es dir an
Eine ziemlich einfache.
I
In Cubix wird die erste Ganzzahl in der Eingabe genommen und auf den Stapel verschoben. Dies hat den Effekt, dass alle Zeichen übersprungen werden. Der Rest befasst sich mit dem zusätzlichen und Erkennen des Endes der Eingabe.I!
Geben Sie eine Ganzzahl ein und testen Sie sie auf 0s+q;;
Wenn nicht Null, tauschen Sie TOS (Kräfte und anfängliche 0) und addieren Sie. Schieben Sie das Ergebnis auf die Unterseite des Stapels und reinigen Sie die Oberseite. Kehren Sie zum Anfang zurück./i?
Wenn Null, leiten Sie um und führen Sie eine Zeicheneingabe durch, um dies zu überprüfen|?;/
Wenn sich das Positive (Zeichen) nach rechts in ein Reflect?
verwandelt, wird es durch den Checker zurückgeschoben und biegt vom Stack nach rechts auf den Pop ab, wobei 0 auf TOS verbleibt. Die IP wird dann zurück in die Hauptschleife umgeleitet.I>p.O@
Wenn negativ (Ende der Eingabe), biegen Sie links ab, geben Sie eine ganzzahlige Eingabe ein, bringen Sie die Unterseite des Stapels nach oben, geben Sie aus und halten Sie an.quelle
PHP ,
4039 BytesProbieren Sie es online aus!
Mit
php -nF
Eingabe ausführen ist von STDIN. Beispiel:quelle
Haskell , 43 Bytes
Probieren Sie es online aus!
Nutzt aus
reads
.quelle
Voraus , 13 Bytes
Dies funktioniert, weil
I
der Eingabestream einfach nach dem nächsten Token durchsucht wird, das wie eine Zahl aussieht, und alles andere ignoriert.Probieren Sie es online aus!
quelle
QuadR , 9 Bytes
Probieren Sie es online aus!
+/
die Summe von⍎
Auswertung als APL von⍵
das Ergebnis von\D
Ersetzen jeder Nicht-Ziffer durchquelle
Japt
-x
, 5 BytesProbieren Sie es online aus!
quelle
Attache , 23 Bytes
Probieren Sie es online aus!
Eine interessantere, aber indirekte Antwort (37 Bytes):
{Sum!Reap[ReplaceF[_,/"\\d+",Sow@N]]}
Erläuterung
Dies hat die Form:
was, wenn es erweitert und in Klammern gesetzt wird, wird:
##
setzt zwei Funktionen zusammen,=>
erstellt eine Funktion, die die linke Funktion über dem Ergebnis der rechten Funktion&
abbildet , und bindet ein Argument an eine Seite einer Funktion. Für die Eingabe_
entspricht dies:Zuerst
MatchAll
laufen dann Ziffern (\\d+
). Danach konvertieren wir jeden Lauf mit derN
Funktion in eine tatsächliche Ganzzahl . Schließlich nehmen wir die Summe dieser Zahlen mitSum
.quelle
APL (NARS), Zeichen 13, Bytes 26
Prüfung:
quelle
C # (Visual C # Interactive Compiler),
117111 ByteProbieren Sie es online aus.
quelle
Perl 5
-p
, 17 BytesProbieren Sie es online aus!
quelle
Japt v2.0a0
-x
, 3 BytesEine weitere Probefahrt für meinen (sehr WIP) Dolmetscher.
Versuch es
quelle
Java 8,
53130 Bytes105 Bytes + 25 Bytes für den Regex-Import
Probieren Sie es online aus!
Erläuterung
quelle
SNOBOL4 (CSNOBOL4) , 81 Bytes
Probieren Sie es online aus!
quelle
Schnell, 109 Bytes
Probieren Sie es online aus!
quelle
Pip , 6 Bytes
Behandelt
-123
als negative ganze Zahl. Probieren Sie es online aus!Wenn Bindestriche ignoriert und nicht als Minuszeichen behandelt werden sollen, funktioniert das Folgende für 7 Bytes :
XD
ist eine voreingestellte Variable für`\d`
;+XD
Fügt den Regex-+
Modifikator hinzu , sodass er mit einer oder mehreren Ziffern übereinstimmt.quelle
Java (JDK) ,
989493 ByteProbieren Sie es online aus!
-4 bytes
mitLong::new
anstelle vonLong::valueOf
.-1 byte
durch Kürzen des regulären Ausdrucks - wenn wir später bereits leere Zeichenfolgen entfernen, sind einige Extras beim Teilen in Ordnung.Erklärt
quelle