Eingang:
Eine ganze Zahl
Ausgabe:
Summe der Eingabe selbst + Länge der Eingabe + jede einzelne Ziffer der Eingabe.
nr + nr-length + {sum of digits} = output
Beispiele:
Eingabe: 99
Ausgabe: 99
(nr) + 2
(nr-Länge) + (9 + 9)
(Ziffern) →119
Eingabe: 123
Ausgabe: 123 + 3 + (1 + 2 + 3)
→132
Herausforderungsregeln:
Die Eingabe kann auch negative Eingaben enthalten, die speziell aufgelöst werden. Das
-
/ Minus-Zeichen steht auch+1
für die Länge und ist Teil des erstendigit
.
Beispielsweise:Eingabe:
-123
Ausgabe:-123 + 4 + (-1 + 2 + 3)
→-115
- Sie können davon ausgehen, dass die Eingabe oder Ausgabe jemals außerhalb des Bereichs einer (32-Bit-) Ganzzahl liegen wird.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Halbverwandt: Summe aller Ziffern zählen
code-golf
number
arithmetic
integer
Kevin Cruijssen
quelle
quelle
-123
sollte die Summe Kette(-1 + 1 + 2 + 3)
statt(-1 + 2 + 3)
, nicht wahr?-1 + 2 + 3
. Für diese Herausforderung habe ich mich entschieden, das-
/ Minus-Zeichen mit der ersten Ziffer als eine negative Ziffer zu verbinden, um es ein bisschen interessanter zu machen.Antworten:
05AB1E,
2820188 BytesErläuterung
Probieren Sie es online aus
Dank @Adnan 10 Bytes gespart
quelle
ÐgsS'+ýO
.Python 2, 39 Bytes
Testsuite
Mit dem gleichen Auswertungs-Trick wie in meiner Pyth-Antwort .
quelle
eval
und kannjoin
ich die negative erste Ziffer für negative Eingaben nehmen? Ich würde zu erwarten ,-123
so etwas wie werden- + 1 + 2 + 3
ausgeschrieben, aber anscheinend ist es nicht .. (Oder ist es, und es automatisch zusammengeführt ,- + 1
um-1
als zweiter Schritt?)-123
wird"-+1+2+3"
nach dem Beitritt was das richtige Ergebnis ergibt wenn dueval
es. Versuchen Sieeval("-+1")
zum Beispiel, was ergibt-1
.- + 1
->- 1
. Der unäre Plus-Operator existiert, ist also- + 1
im Wesentlichen derselbe wie-(+(1))
.+a
ist dasselbe wiea
für Zahlen.Pyth,
1110 BytesDanke an @LeakyNun für ein Byte!
Testsuite
Erläuterung
quelle
CJam, 18
Probieren Sie es online aus
Erläuterung:
quelle
Brachylog ,
3532 BytesErläuterung
quelle
XSLT 1.0 (ohne EXSLT), 673 Byte
Leicht aufgeblasen:
Mit xsltproc ausführen:
Ja,
ild.xsl
wird zweimal übergeben: Einmal als XSLT-Dokument und dann als zu transformierendes XML-Dokument. Ein Eingabedokument muss vorhanden sein, da ein XSLT-Prozessor in der Regel einen Start benötigt. (XSLT wurde entwickelt, um eine Umwandlung von einem Eingabedokument in ein Ausgabedokument zu definieren. Eine Umwandlung ausschließlich mit Befehlszeilenparametern durchzuführen, wie ich es hier getan habe, ist untypisch.) Für dieses Programm reicht jedes wohlgeformte XML-Dokument als Eingabe aus Und da XSLT eine Anwendung von XML ist, ist jede wohlgeformte XSLT-Transformation per Definition ein wohlgeformtes XML-Dokument.quelle
name="i" select="..."
zB<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
etc. Ich denke , wennxsltproc
Sorgen über Leerzeichen es wird nicht unquoted lassen Dinge von.MATL, 20 Bytes
Probieren Sie es online
Alle Testfälle
Erläuterung
quelle
Clojure, 102 Bytes
Anonyme Funktion, die einen String erstellt, der aussieht
(+ -123 4 -1 2 3 )
und ihn auswertet. Alles ziemlich ausführlich wie es ist, konstruiere eine Zeichenfolge aus der Zahl und ihrer Länge und ordne dann jedes Symbol der Zeichenfolgendarstellung der Zahl mit Ausnahme des Minus für sich selbst zu, plus Leerzeichen und Minus bleiben gleichSie können es hier sehen: https://ideone.com/FG4lsB
quelle
Dyalog APL ,
191716 BytesNimmt String und kehrt zurück
≢
length+
plus#
in der Root-Namespace-⍎
Auswertung von'\d'⎕R'&+'
Regex-Append-Ziffern mit einem Plus,,
gefolgt von⊢
der nicht geänderten Zeichenfolge–3 danke an ngn
quelle
Matlab,
7667 Bytes9 Bytes gespart dank @Luis Mendo
Erläuterung:
quelle
sum(t+1)+n
ist kürzer alssum([n numel(t) t])
Gleichstrom, 57 Bytes
Erklärt:
Das war weitaus komplizierter als ich erwartet hatte! Gute Herausforderung :)
quelle
10~
für einenA~
!Bash + Coreutils, 36 Bytes
Erläuterung:
In sed werden
\B
auch Übereinstimmungen zwischen zwei aufeinanderfolgenden Nicht-Wort-Zeichen gefunden. Bei einer negativen Zahl wird also eine Übereinstimmung zwischen '^' und '-' gefunden. Beachten Sie zum Beispiel den0$1
Trick, den Sie\B
zum Geben brauchen0-1+2+3
.Beispiel ausführen : 'input.txt' enthält alle Testfälle in der Anweisung der Frage
Ausgabe:
quelle
$()
. Es gibt zwei alternative Möglichkeiten, dies mit Backticks zu tun, aber beide ergeben am Ende eine 36-Byte-Lösung:sed 's:\B:+:g'<<<0$1
undsed s:\\\B:+:g<<<0$1
.PowerShell v4, 48 Bytes
Dies sollte in v2 + funktionieren, aber ich habe es nur in v4 getestet.
Übernimmt die Eingabe
$n
. Erstellt ein neues Array mit dem,
Operator aus$n
und dem.length
Zeitpunkt, zu dem$n
es in eine Zeichenfolge konvertiert wird. Verkettet damit den String$n
, der als char-Array umgewandelt wurde. Dann wird das gesamte Array-join
zusammen mit+
editiert, bevor es weitergeleitet wirdiex
(ähnlich wieeval
). Das Ergebnis verbleibt in der Pipeline und die Ausgabe ist implizit.Bei der Eingabe
-123
würde das Array beispielsweise so aussehen(-123, 4, -, 1, 2, 3)
, und der String nach dem-join
würde so aussehen-123+4+-+1+2+3
. DannInvoke-Expression
passiert das und das Ergebnis ist-115
wie erwartet.quelle
Faktor mit
load-all
175 BytesNun, das ist nicht sehr kurz. Die spezielle Behandlung von unärem Minus ist wirklich ärgerlich; Ich denke, ich könnte es besser machen und werde es vielleicht tun.
Verwenden dieses Ersetzungsregex:
Wir können die Testfälle des OP in eine Faktor-Testsuite verwandeln.
quelle
C #, 118 Bytes
quelle
1+ ++i
ist völlig lächerlich imos[i]<46
, um für minus++i+1
?SpecBAS - 147 Bytes
Baut einen String auf, der dann ausgeführt wird. Funktioniert leider
EXECUTE
nicht mit der?
Kurzschrift fürPRINT
, hat aberTEXT
1 Zeichen gespeichert.quelle
C # 106 Bytes
Ich habe Java geschlagen, mein Leben ist abgeschlossen
Ungolfed (irgendwie)
quelle
(n)=>{....
für eine anonyme Lambdan=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
Obwohl Sie +18 hinzufügen müssen, fürusing System.Linq;
die Sie auch in Ihrer aktuellen Antwort vergessen haben.Java 8,
1741361221071059378 Bytes-14 Bytes dank @LeakyNun .
-15 Bytes dank @cliffroot .
Erläuterung:
Probieren Sie es online aus.
quelle
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
es fühlte sich endlich an, als würde man in Java golfen @LeakyNun Funktioniert Ihre Variante? es gibt zuerst falsche Antworten und stürzt dann ab.0
.38
zu48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
yayPerl 6 - 30 Bytes
So wörtlich wie es nur geht
Verwenden Sie es als anonyme Funktion
quelle
JavaScript (ES6), 38 Byte
Verwendet den alten Join-and-Eval-Trick. Sparen Sie 4 Bytes, wenn Sie auf einer Zeichenketteneingabe bestehen können:
quelle
C ++, 255 Bytes
quelle
Perl 5 - 37 Bytes
Eingabe erfolgt in $ _
quelle
Javascript (mit externer Bibliothek) (45 Bytes)
Mit einer Bibliothek, die ich geschrieben habe, um LINQ auf Javascript zu bringen, konnte ich Folgendes schreiben:
quelle
C
13211611380Function
f()
nimmt die Eingabe als Zeichenfolge und gibt das Ergebnis als Ganzzahl zurück. Vollversion des Programms (113 Bytes):Erfordert ein Argument.
quelle
Perl, 27 Bytes
22 Byte Code + 5 für
-paF
.Erläuterung
Verwendet die
-a
Autosplit-Option mit einem leeren Trennzeichen (-F
), um ein Array der übergebenen Ziffern zu erstellen. Verwendet die magische Variable,$"
die steuert, welches Zeichen zum Verbinden eines Arrays verwendet wird, wenn es in einen String interpoliert wird (wir verwenden es)"+"
hier), und die Tatsache, dass eine Liste Im skalaren Kontext wird die Länge der Liste (die Anzahl der Stellen) zurückgegeben.Verwendung
Perl, 27 Bytes
22 Byte Code + 5 für
-paF
.Alternative Lösung, das ist viel lesbarer für keine Bytes mehr. Ich bevorzuge die andere, da sie kryptischer aussieht!
quelle
Gleichstrom, 56 Bytes
Nicht kürzer als Joes oben, aber eine etwas andere Implementierung (und eine, die negative Zahlen als Eingabe im Vergleich zu einem Subtraktionsbefehl verwendet). Kann wahrscheinlich mehr golfen werden, aber das Mittagessen dauert nur so lange.
quelle
R, 108 Bytes
Ein bisschen zu spät zur Party aber hier geht es weiter:
Um die Ziffern einer beliebigen Zahl im Allgemeinen zu teilen (z. B. um sie zu summieren), muss R zuerst in eine Zeichenfolge konvertiert und anschließend in einen Zeichenfolgenvektor aufgeteilt werden. Um die Elemente zusammenzufassen, muss der Zeichenfolgenvektor in numerisch oder ganzzahlig konvertiert werden. Dies zusammen mit der Ausnahme mit der Summe der Ziffern einer negativen Zahl verbraucht eine Menge Bytes.
Die Ausnahme kann ein wenig (auf 96 Byte) golfen werden, wenn Warnmeldungen zulässig sind.
In diesem Fall wird der Zeichenfolgenvektor direkt mit in eine Ganzzahl konvertiert
as.integer
. Doch für negative Zahlen das erste Element in dem Vektor wird ein Minuszeichen:"-"
. Dies verursacht einige Probleme, z. B .:as.numeric(c("-",1,2,3))
wird zurückgegebenNA 1 2 3
und eine Warnmeldung. Um dies zu umgehen, entfernen Sie die NA und multiplizieren Sie das erste Element mit,-1
bevor Sie die Summe berechnen.quelle
RProgN, 30 Bytes
Explination
Probieren Sie es online!
quelle
Perl 5 , 22 + 1 (-p) = 23 Bytes
Probieren Sie es online!
quelle
AWK ,
64 6361 BytesProbieren Sie es online!
Die TIO-Verbindung verfügt über 6 zusätzliche Bytes
s=j=0;
, um eine mehrzeilige Eingabe zu ermöglichen. Dies ist die kürzeste Methode, die ich finden konnte. Ich bin gespannt, ob es in kürzer gemacht werden kannAWK
.2 Bytes gespeichert, danke Kevin
quelle
$0=n+s+$0
auf$0+=n+s
(-2 Bytes) golfen werden ?