Diese Herausforderung basiert auf dieser Stackoverflow-Frage .
Mit einer positiven Zahl als Eingabe geben Sie diese als Summe jeder Ziffer multipliziert mit ihrer Zehnerpotenz aus.
Eingang
Eine Zahl, eine Ganzzahl, eine Zeichenfolge oder eine Liste von Ziffern / Zeichen.
- Die Zahl ist ausschließlich positiv.
- Wenn Sie die Nummer als Zeichenfolge oder Liste akzeptieren, beginnt sie nicht mit einem
0
.
Ausgabe
Eine Zeichenfolge, die eine Summe aller relevanten 10-Basis-Ziffern darstellt, die jeweils mit ihrer jeweiligen 10-Basis-Potenz multipliziert werden. Eine Summe wird dargestellt als a + b
. +
Wenn Sie möchten, können Sie auf jeder Seite des Zeichens bis zu ein Leerzeichen verwenden . Die Operanden werden in absteigender Reihenfolge aufgelistet.
0
kann niemals ein gültiger Operand sein.- Das
+
(von Leerzeichen umgebene oder nicht von Leerzeichen umgebene) Zeichen darf nicht der führende oder nachfolgende Teil sein.
Beispiele
Input Output
12 10 + 2
or 10+2
or 10 +2
or 10+ 2
9 9
123 100 + 20 + 3
10 10
101 100 + 1
Ungültige Ausgaben
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
Antworten:
Python 3:
838079 BytesProbieren Sie es online!
Mein erster Code Golf Beitrag.
-3 Bytes von ovs. Vielen Dank für diesen nützlichen Tipp :) -4 Bytes von mypetlion. Danke für diesen Verkürzungstipp :)
quelle
if'0'<t[i]
ändern und Ihre Formel vonx-i-1
in ändernx+~i
. Hier ist ein TIO-Link mit schrittweisen Änderungen.print
Anweisung inprint(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
, um 1 Byte zu speichern.Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 47 Byte
Übernimmt die Eingabe als Ganzzahl.
Probieren Sie es online!
Kommentiert
quelle
R , 55 Bytes
Angenommen, alle Ganzzahlen liegen unter 1e10, was ohnehin größer als die maximale 32-Bit-Ganzzahl ist ...
Probieren Sie es online!
quelle
10^(nchar(n):1-1
würde theoretisch für jede ganze Zahl arbeiten ...Shakespeare Programming Language ,
807806805804 BytesProbieren Sie es online!
-23 Byte, wenn zuerst ein Nullzeichen ausgegeben werden darf
Erläuterung
quelle
Python 2 , 64 Bytes
Probieren Sie es online!
Python 2 , 66 Bytes
Probieren Sie es online!
quelle
Jelly ,
1211 BytesEin vollständiges Programm, das die Nummer als Ziffernliste (im Python-Format) akzeptiert und das Ergebnis druckt.
Probieren Sie es online!
Wie?
Vorherige @ 12 Bytes:
quelle
Haskell,
6054 BytesEdit: -6 Bytes dank Delfad0r.
Nimmt die eingegebene Nummer als Zeichenfolge.
Probieren Sie es online!
quelle
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
spart 6 Bytes Probieren Sie es online! .05AB1E , 10 Bytes
Einfache Implementierung.
Eingabe als Ziffernliste.
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 64 Bytes
Eine unbenannte Funktion, die eine Liste von Ziffern aufnimmt
n
und eine Zeichenfolge zurückgibt.Probieren Sie es online!
enumerate(n)
würde Tupel vonindex, item
acrossn
mit einem Index ab ergeben0
.Doch
enumerate
auch einen optionalen Startindex als zweites Argument nimmt, um diese Einstellung zu-len(n)
uns Indizes (gete
n)-len(n)
,-len(n)+1
...,-1
.Das heißt , die Anzahl der erforderlichen nachfolgende Nullen für jeden Punkt (
b
) ist-1-e
, das ist~e
so~e*'0'
die erforderlichen nachgestellten Nullen erhält.`b`
Ruft eine Zeichenfolgendarstellung der Ganzzahlziffer abb
und+
verknüpft diese mit diesen Nullen.if b
filtert die Einträge mitb==0
.'+'.join(...)
Fügt dann die resultierenden Zeichenfolgen mit+
Zeichen zusammen.quelle
Python 2,
827371 Bytes-9 Bytes dank @ovs
-2 Bytes dank @JonathanAllan
Probieren Sie es online
quelle
Haskell ,
565552 Bytes-4 byte dank nimi .
Probieren Sie es online!
Erläuterung
Probieren Sie es online!
quelle
Perl 6 , 38 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine Liste von Ziffern verwendet und eine Zeichenfolge zurückgibt.
Erläuterung:
quelle
APL (Dyalog),
464140 Bytes-5 Bytes dank @dzaima
Anonyme Präfixfunktion. Übernimmt die Eingabe als Zeichenfolge. TIO
(Dies ist mein erstes Mal, dass ich APL auf PPCG verwende, wahrscheinlich golfen kann. Verfluche dich auch, Nullen!)
quelle
⎕IO←0
Retina , 19 Bytes
Probieren Sie es online!Link enthält Testfälle. Erläuterung:
Listen Sie alle Ziffern ungleich Null auf
Fügen Sie für jede Ziffer so viele Nullen hinzu, wie hintere Ziffern vorhanden waren.
Trennen Sie jedes Ergebnis mit
+
s anstelle der Standard-Newline.Retina 0.8.2 , 21 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Listet alle Suffixe der Eingabe auf, die mit Ziffern ungleich Null beginnen.
Ersetzen Sie alle nachfolgenden Ziffern durch Nullen.
Verbinden Sie die Ergebnisse mit
+
s.quelle
C (gcc) ,
7169 BytesJeder Schritt der rekursiven Funktion subtrahiert den zu druckenden Teil und übergibt den Rest der Zahl.
Danke an ceilingcat für den Vorschlag.
Probieren Sie es online!
quelle
Brachylog ,
3532 Bytes-3 Bytes, weil 0 keine gültige Eingabe ist
Probieren Sie es online! oder Testsuite
Erläuterung
quelle
|∧Ṡ
vom Ende entfernen können . :)Brachylog v2, 15 Bytes
Probieren Sie es online!
Sehr, sehr ineffizient.
Irgendwie schafft es dies, nur 6 Bytes für den in den meisten Sprachen schwierigen Teil (Aufteilen der Zahl in die Form a 10 b, wobei a eine einzelne Ziffer ist, in absteigender Reihenfolge) und ganze 9 Bytes für den "Join with" zu verwenden
+
"(was in den meisten Golfsprachen eingebaut ist, aber nicht in Brachylog).Im Gegensatz zu den meisten meiner Brachylog-Einreichungen (die Funktionen sind) ist dies ein vollständiges Programm, bei dem die Eingabe von der Standardeingabe übernommen und die Ausgabe auf der Standardausgabe erstellt wird.
Erläuterung
(Der Grund dafür
wᵐ
ist,c
dass wir es mit einer heterogenen Liste zu tun haben, die sowohl Zahlen als auch Zeichenfolgen enthält. Statt diese zu mischen, ist es am einfachsten, sie alle einzeln auszudrucken.)Der Algorithmus überwindet dabei alle additiven Partitionen der Eingabe, bis er eine passende findet (!). Brachylog bevorzugt die Unterteilung in weniger Möglichkeiten und sortiert die Möglichkeiten in aufsteigender Reihenfolge. Die erste Lösung ist also die Umkehrung der Lösung, nach der die Frage gestellt wird. Wir müssen es also nur umkehren, um die gewünschte Lösung zu erhalten.
quelle
Sauber , 73 Bytes
Probieren Sie es online!
Definiert die Funktion,
$ :: String -> String
die eine Zeichenfolge übernimmt und eine Zeichenfolge zurückgibt.quelle
Canvas ,
1413 BytesProbieren Sie es hier aus!
quelle
Attache , 37 Bytes
Probieren Sie es online!
Punktfreie Version (41 Bytes):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
Erläuterung
quelle
C (gcc) 87 Bytes
Probieren Sie es online!
quelle
Powershell,
5552 BytesSkript erwartet ein Array von Zeichenfolgen, jede Zeichenfolge enthält eine Ziffer. Testskript:
Ausgabe:
quelle
Japt , 13 Bytes
Nimmt die Eingabe als ein Array von Ziffern.
Versuch es
Erläuterung
Alternative
Übernimmt die Eingabe als Array von Ziffernfolgen.
Versuch es
quelle
Java 10,
8278 BytesAntwort von Port of Arnauld auf JavaScript (ES6) .
-2 Bytes dank @ceilingcat .
-2 Bytes danke an Arnauld .
Probieren Sie es online aus.
Erläuterung:
quelle
n%m
einer Variablen für die Lesbarkeit zugewiesen.)m<n
funktionieren.SNOBOL4 (CSNOBOL4) ,
134133129 BytesProbieren Sie es online!
Sparte ein ganzes Byte, indem du Zeichenketten verarbeitest und nicht Arithmetik!
quelle
sed -E ,
10999977574 BytesJede Zeile der Eingabe wird als separate Nummer betrachtet. Probieren Sie es online aus .
Erläuterung:
… Kann man wohl weiter Golf spielen.
quelle
01010101010
oder000000
entsprechend der Herausforderungsspezifikation anfassen. Spart das irgendwelche Bytes?Brainfuck, 147 Bytes
Probieren Sie es online! (Sie müssen das mit "!" Markierte Kästchen ankreuzen und Ihre Eingabe nach dem "!" In der zweiten Codezeile eingeben, andernfalls werden Sie für immer nach Eingaben gefragt.)
Es wird wahrscheinlich nicht die kürzeste Antwort sein oder auf die kürzeste Antwort golfen, aber es hat ziemlich Spaß gemacht, dies in Brainfuck zu versuchen, also könnte ich es auch posten.
Wie @JoKing hervorhob, entfernt dieses Programm keine Nullen. Ich werde versuchen, das zu beheben, aber es könnte ziemlich schwierig sein.
Erläuterung:
quelle
APL (Dyalog Unicode) , 20 Byte
Probieren Sie es online!
Übernimmt die Eingabe als Vektor von Ziffern. Ausgaben mit einem Leerzeichen vor und nach jedem
+
und enthält eine variable Anzahl führender Leerzeichen.Das ist ein Zug. Es ist wie folgt unterteilt.
Die erste Funktion ist
⌽
, dies kehrt das Array um,1 0 2
wird also2 0 1
.Dann kommen wir
(10×⊢)\
zu dem umgekehrten Array. Dieser Teil ist inspiriert von Ngns Antwort auf die Boustrophedonise-Herausforderung. Die Erklärung von ngn auszuleihen, wenn ein Vektor von Ziffern gegebenA B C ...
ist und(10×⊢)\
auf diesen Vektor angewendet wird, ergibt das Folgende.Auf
2 0 1
,(10×⊢)\
gibt2 0 100
.Als nächstes kommt
0~⍨
. Dies entfernt alle0
s aus dem Array und gibt2 100
.Endlich kommt das
+
s.{⍵'+'⍺}/
ist eine Reduktion, die von rechts beginnt und das linke Argument mit einem verkettet+
, gefolgt vom rechten Argument. Tatsächlich wird das Array beim Einfügen von+
s umgekehrt . Das gibt100 '+' 2
, was als angezeigt wird100 + 2
.quelle
MathGolf ,
121110 BytesProbieren Sie es online!
Erläuterung
Der erste Befehl wird nicht benötigt, da die Eingabe als Ziffernliste erfolgen kann.
Ich könnte einen paarweisen Multiplikationsoperator hinzufügen, der aus einem Byte besteht, der aber derzeit nicht Teil der Sprache ist. Dann könnte ich ein Byte aus dieser Lösung entfernen.
quelle