Sie erhalten eine Zeichenfolge. Es enthält 9 eindeutige Ganzzahlen von 0 bis 9. Sie müssen die fehlende Ganzzahl zurückgeben. Die Zeichenfolge sieht folgendermaßen aus:
@riker Das scheint eine Zahl zu sein, die in einer Sequenz fehlt. Hier scheint es darum zu gehen, eine Ziffer zu finden, die in einer Menge fehlt.
DJMcMayhem
10
@Riker Ich würde nicht denken, dass es ein Duplikat ist, da die verknüpfte Abfrage eine streng inkrementelle Folge (von möglicherweise mehrstelligen Zahlen) aufweist, während sie hier in willkürlicher Reihenfolge ist.
AdmBorkBork
3
Hallo Josh! Da es bisher noch niemand erwähnt hat, leite ich Sie an die Sandbox weiter, wo Sie Vorschläge für zukünftige Herausforderungen veröffentlichen und ein aussagekräftiges Feedback erhalten können, bevor Sie sie an main senden. Das hätte geholfen, Details auszubügeln (wie STDIN / STDOUT) und das doppelte Dilemma zu lösen, bevor Sie hier Abwertungen erhalten haben.
AdmBorkBork
1
Es ist so schade, dass 9-x% 9 für jede Ziffer außer 0 funktioniert. Vielleicht findet jemand, der klüger als ich ist, einen Weg, es zum Laufen zu bringen.
Bijan
2
Bei mehreren Antworten wird eine Ganzzahl als Funktionseingabe verwendet. Ist das erlaubt
32043 kann in eine schönere Nummer geändert werden. 99066 ist zentrumsymmetrisch (ändert sich nicht, wenn um 180 Grad um die Mitte gedreht) oder vielleicht 97779 (Palindrom, zwei verschiedene Ziffern)
Sarge Borsch
1
Wenn das OP erlaubt, die Zahl zweimal zu drucken, 764**4können zwei Bytes gespart werden.
@KarlKastor, Modulo 15 in Basis 16 funktioniert analog zu Modulo 9 in Basis 10. Modulo Base-1 ist konstant, wenn die Summe der Ziffern verwendet wird, nur weil 10 ≡ 1 (Mod Base-1). Die Summe aller möglichen Ziffern ist konstant, daher ist die fehlende Ziffer die Differenz zwischen dieser Konstante und der eingegebenen Zahl (Modulo-Basis-1).
Die Summe aller Ziffern in Ascii ist 525. Dieses Programm summiert die Eingabe und subtrahiert sie von 525, um die fehlende Ziffer zu erhalten.
((([]())[]{}){()()({}[()])}{} )
Will push 525. Dies nutzt die Tatsache aus, dass wir wissen, dass es zunächst 9 Eingabeelemente geben wird. Dies bedeutet, dass der []Wert 9 ergibt, wodurch wir schnell zu großen Zahlen wie 525 gelangen können.
Als nächstes haben wir das bisschen:
[{{}}]
Dadurch werden die Eingaben summiert und von der Gesamtsumme subtrahiert.
Wenn Sie das negative(sum(input()))zum Ende bewegen , können Sie den stapelhohen Nil missbrauchen, um 525 leichter zu schieben. (([][][]()()()){()()({}[()])}{}[{{}}])sollten Sie 10 Bytes sparen
Probieren Sie es online! Verbrauch: (477-).sum.map fromEnum $ "123456890". 477 ist die Summe der Zeichencodes der Ziffern 1 bis 9 mit Ausnahme von 0. Diese anonyme Funktion berechnet 477 abzüglich der Summe aller Ziffernzeichencodes, um den fehlenden zu finden.
Das Umwandeln der Zeichen in Ints dauert ein Byte länger:
Ich mag die Art und Weise, wie alle Golfsprachen (und sogar einige Nicht-Golfsprachen) denselben Algorithmus verwenden, aber Jelly hat die kürzesten Namen für die von ihm verwendeten Builtins und die geringste Anzahl für die Umkehrung der Argumente ḟ.
1
@ ais523 APL ist Buchstabe für Buchstabe gleich (außer dass es sich um ein APL-Snippet handelt und nicht um eine Funktion / ein Programm): Ø= ⎕, D= D, ḟ= ~, wie in ⎕D~'867953120'.
Adám
3
Ich, während ich durch die Antworten scrolle: "Ich sage 3 Zeichen in Jelly voraus." Bingo. : ^ D
DLosc
9
Rubin, 14
Summiert die ASCII-Codes und subtrahiert von 48 * 9 + 45
Bearbeiten Sie 1 Byte und speichern Sie @Neil mit einem viel intelligenteren Trick
Das Xoring aller Werte von 1 bis 9 ergibt 1. Oder 1 noch einmal und das Ergebnis ist 0. Wenn also ein einzelner Wert fehlt, ist das Ergebnis der fehlende Wert.
Port von @ xnors Python-Antwort, außer dass JavaScript nur einen Restoperator anstelle eines Modulo-Operators hat, daher kann ich das nicht in einem einzigen Schritt tun. Bearbeiten: 6 Bytes dank @Arnauld gespeichert.
@Arnauld Ich sehe das nicht, wenn s[0]!='0'es funktioniert , aber es gibt bereits eine Antwort, die verwendet wird eval.
Neil
Könntest du tun s=>(15-`0x${s}`%15)%15?
Arnauld
@Arnauld Bah, und das hatte ich auch schon für den Batch-Port getan ...
Neil
6
Gehirnfick, 17 15 Bytes
-[-[->-<],]>++.
Probieren Sie es hier aus .
Diese Lösung funktioniert nur mit Standard-Brainfuck (8-Bit-Zellen), da es sich um ein Wrapping handelt.
Es ist ein seltener Tag, an dem Brainfuck tatsächlich antreten kann, aber diese Herausforderung stimmte einfach ziemlich gut mit der BF-Spezifikation überein!
Anstatt diese Antwort direkt aufzuschlüsseln, möchte ich die Iterationen durchgehen, die ich gemacht habe, weil ich denke, dass dies verständlicher (und interessanter) wäre.
Hinweis: Diese Lösung ist weitgehend von der Brain-Flak-Antwort von Wheat Wizard inspiriert .
Erläuterung
Schritt 1, 26 Bytes
In seiner Antwort wies Wheat Wizard darauf hin, dass sich die Summe der ASCII-Werte von 0-9 zu 525 summiert. Und da Standard-Brainfuck nur einen Begriff von [0,255] hat, ergibt dies den Wert 525% 256 = 13 . Das heißt, wenn Sie die ASCII-Werte der Eingabe von 13 subtrahieren, erhalten Sie die fehlende Ziffer.
Die erste Version dieses Programms war:
1. Setzen Sie 13 in die erste Zelle
2. Nehmen Sie Eingaben in die zweite Zelle
3. Subtrahieren Sie die zweite Zelle von der ersten Zelle
4. Springen Sie zu 2, wenn noch Eingaben vorhanden sind
5. Drucken Sie die erste Zelle
Und hier ist der Code für die einfache Lösung:
+++++++++++++ #Set the first cell to 13
>, #Take inputs into the second cell
[[<->-],] #Subtract the second cell from the first cell and repeat until inputs are over
<. #Print the first cell
Schritt 2, 19 Bytes
Wie in seiner Antwort ausgeführt, können wir, da wir wissen, dass die Eingabe genau die Länge 9 hat, diesen Wert als Konstante verwenden und diese lange Zeichenfolge von + gleich am Anfang entfernen.
Es ist auch egal, zu welchem Zeitpunkt wir 13 addieren (danke, kommutative Eigenschaft!), Also mischen wir es mit den Schritten Subtraktion und Drucken.
, #Take input to enter the loop
[[->-<], #Subtract the first cell from the second cell
>+<] #Add 1 for each input; totaling 9
>++++ #Add the missing 4 to make 13
. #And print
Dies war meine ursprüngliche Antwort auf dieses Problem, aber wir können es besser machen.
Schritt 3, 17 Bytes
Interessanterweise funktioniert die vorherige Antwort auch dann, wenn wir mit einem + anstelle von einem beginnen.
+[[->-<],>+<]>++++.
Brainfuck benötigte etwas in einer Zelle, um eine Schleife zu beginnen. Wir haben diese zusätzlichen 4 am Ende naiv hinzugefügt, wenn es an anderen Orten gegangen sein könnte.
-[[->-<],>+<]>++.
Mit etwas völlig absichtlich (sprich: Versuch und Irrtum) Schleife Tricks, Anfahren des Programm mit einem - führt zu zwei interessanten Ergebnissen:
Man wird zur zweiten Zelle hinzugefügt (1 Byte am Ende speichern).
Die Schleifen werden ein weiteres Mal ausgeführt, insgesamt 10 statt 9 (wobei ein weiteres Byte eingespart wird).
1 + 10 + 2 = 13, und wir erhalten die ursprüngliche Antwort.
Rückblickend ist dies wahrscheinlich ein übermäßiger Aufschub für solch ein einfaches Brainfuck-Programm.
Schritt 4, 15 Bytes
Nachdem ich ein bisschen mehr über diese Lösung nachgedacht hatte, konnte ich 2 Bytes abschneiden.
Ich wollte etwas über den vorherigen Schritt klarstellen:
Das Minus zum Eingeben der Schleife addiert effektiv 1, aber was es tatsächlich tut, ist das Subtrahieren von 255 von der zweiten Zelle (was zu 1 führt).
Rückblickend ist es offensichtlich, aber das Subtrahieren von 1 von der ersten Zelle ist dasselbe wie das Addieren von 1 zu der zweiten Zelle (weil alles in der ersten Zelle von der zweiten Zelle subtrahiert wird).
-[-[->-<],]>++.
Ich konnte das "> + <" durch Hinzufügen eines "-" am Anfang der ersten Schleife entfernen. Es muss dorthin gehen und nicht dorthin, wo das "> + <" war, da das Programm ansonsten eine Endlosschleife ausführt.
Reine Funktion, die einen String als Eingabe nimmt und eine Ganzzahl zurückgibt. Mathematica hat lange Befehlsnamen und zögert, zwischen Zeichenfolgen und Ganzzahlen zu konvertieren, was es bei dieser Herausforderung besonders schlimm macht. Das Beste, was ich finden konnte, war der Algorithmus aus Level River Sts Ruby-Antwort , der eine Berechnung basierend auf der Summe der ASCII-Codes der Eingabezeichenfolge durchführt. In Mathematica wird nur ein langer Befehlsname verwendet.
verwendet den Trick aus Rods Antwort , um eine Zeichenfolge zu generieren, die alle Ziffern enthält, und entfernt dann alle Ziffern mit Ausnahme der fehlenden.
PHP, 41
for($b=1;$i<9;$b^=$argv[1][$i++]);echo$b;
Dieser benutzt xor, weil ich es noch nicht gesehen habe.
Schön, dass ich nicht an Trimmen denke. Alternatives Werte32043,32286,33144,35172,35337,35757,35853,37176,37905,38772,39147,39336,40545,42744,43902,44016,45567,45624,46587,48852,49314,49353,50706,53976,54918,55446,55524,55581,55626,56532,57321,58413,58455,58554,59403,60984,61575,61866,62679,62961,63051,63129,65634,65637,66105,66276,67677,68763,68781,69513,71433,72621,75759,76047,76182,77346,78072,78453,80361,80445,81222,81945,83919,84648,85353,85743,85803,86073,87639,88623,89079,89145,89355,89523,90144,90153,90198,91248,91605,92214,94695,95154,96702,97779,98055,98802,99066
Jörg Hülsermann
5
Bash + Coreutils, 19 Bytes
Ich habe eine kürzere Bash-Lösung gefunden, die einen interessanten Prüfsummenansatz verwendet:
Der sumBefehl gibt eine Prüfsumme und eine Blockanzahl aus. Ich kenne nicht viele Details, aber bei Verwendung der Option -s(System V-Algorithmus) entspricht die Prüfsumme der ASCII-Summe jedes eingegebenen Zeichencodes. Somit bleibt die Prüfsumme konstant, wenn sich die Reihenfolge der gleichen Eingabezeichen ändert.
Gegeben 867953120als Testfall (letztes Beispiel), hier ist , wie das Skript funktioniert:
sum -sAusgänge 473 1. Wenn keine ganze Zahl fehlte, wäre die Prüfsumme 525 gewesen.
dc -e524?drückt 524 und dann den Pipe-Eingang. Der Stapel ist: 1 473 524. Die Idee ist, die Prüfsumme von 525 zu subtrahieren, aber da die Summe auch 1 ergibt, muss ich damit arbeiten.
--P. Nach dem Auftragen der zwei Subtraktionen (524- (473-1)), ist der Stapel: 52. Mit 'P' gebe ich das Zeichen mit diesem ASCII-Code aus: 4die fehlende Ziffer.
function m(s)
character(len=10)::s,t
t='0123456789'
do j=1,10
k=0
do i=1,9
if(s(i:i)==t(j:j))k=1
end do
if(k==0)m=j-1
end do
end
Nicht sehr kurz, fürchte ich.
Ungolfed:
integer function m(s)
implicit none
character(len=9)::s
character(len=10)::t
integer:: i, j, k
t='0123456789'
do j=1,10
k=0
do i=1,9
if (s(i:i) == t(j:j)) k=1
end do
if (k==0) m=j-1
end do
end function m
A, e# The range from 0 to 9: [0 1 2 3 4 5 6 7 8 9]
s e# Cast to a string: "0123456789"
q e# The input
- e# Remove all characters from the range that are in the input
e# Implicit output
xImplementierung ist alt und ziemlich fehlerhaft, weshalb Sie brauchen ẹ.
Fatalize
Sie können tatsächlich argumentieren, dass so etwas ¬∋ℕnur aus drei Zeichen bestehen sollte - das habe ich zuerst versucht -, aber es gibt mehrere Gründe, warum dies nicht der Fall ist, und ich glaube nicht, dass es eine plausible Möglichkeit gibt, Brachylog so zu ändern, dass dies der Fall ist.
Eine solche ¬∋ℕArbeit ist in Prolog nicht möglich, es sei denn, Sie programmieren speziell, was Sie damit nicht meinen not in. ¬in Brachylog ist gleichbedeutend mit \+in Prolog, und seine Bedeutung ist die von "nicht unter der Annahme der geschlossenen Welt nachweisbar", anstatt "mir Auswahlpunkte für alles zu geben, was dies nicht überprüft" (was fast immer eine unendliche Anzahl von Dingen ist) )
Fatalize
Der einzige Weg, dies in Prolog zu tun, wäre, das ℕim Voraus zu "kennzeichnen" , aber das würde bedeuten, mit Brachylogs Auswertungsreihenfolge basierend auf dem Inhalt der Prädikate zu basteln. Das ist jedoch nur eines der Probleme; Es gibt eine Menge anderer.
3
Common Lisp, 47 Bytes
(lambda(s)(- 45(reduce'+ s :key'digit-char-p)))
Ungolfed:
(lambda (s) (- 45 (reduce '+ s :key 'digit-char-p)))
Erklärung:
(reduce '+ s :key 'digit-char-p)
Dies durchläuft die Zeichen in einer Schleife s, konvertiert sie in Ziffern und fügt sie hinzu. Digit-char-p gibt die Nummer des Zeichens günstigerweise als "wahren" Wert zurück, sodass es als Test oder Konvertierung verwendet werden kann.
(- 45 ...)
Subtrahieren von 45 gibt die Ziffer zurück, die in der Eingabe fehlte.
Verwendet die gleiche Art von Verfahren , wie diese Gehirn-Flakfeuer Antwort.
Erstellen Sie den Wert -525 auf dem Stapel, indem Sie 5, 2, verketten, 5, verketten und negieren drücken.
Holen Sie sich dann wiederholt die Eingabe und fügen Sie sie hinzu, bis das Ende der Eingabe erreicht ist.
Entfernen Sie die letzte Eingabe, negieren Sie das letzte Additionsergebnis (machen Sie es positiv), geben Sie das Zeichen aus und halten Sie an.
Der Grund für die Arbeit von -525 bis ist, dass die Zeichenausgabe bei jeder Eingabe-Iteration getroffen wird. Da der Wert negativ ist, wird nichts ausgegeben, bis die Schleife verlassen und der negative Wert positiv gemacht wird.
Die Summe der ASCII-Werte reicht von 477 bis 468, je nachdem, welche Zahl fehlt. Durch Subtrahieren von 7 erhalten wir den Bereich -470 bis -461. Durch Modifizieren dieser Zahl um 10 erhalten wir den Bereich 0 - 9, den wir dann drucken können.
~+; ;# Sums the ASCII values of all characters to stdIn
~ # The # doesn't skip over the ~ because it's on the end of a line
~ Once EOF is hit, the ~ reverses the IP's direction
;# Jump the ; that was used before
--7 Subtract the sum from 7 (really just 0 - (sum - 7))
%a Mod it by 10
@. Print and exit
Der Grund, warum ich die ASCII-Werte verwende, anstatt eine Ganzzahleingabe zu verwenden, ist, dass der &Befehl in Try it Online bei EOF angehalten wird (obwohl die IP umgekehrt werden sollte). Das ~funktioniert aber einwandfrei.
Die Summe der ASCII-Werte aller 10 Stellen ist 525. Durch Subtrahieren der Summe der angegebenen Stellen von 525 erhalten wir den ASCII-Wert des fehlenden Zeichens.
#v~+ Sums the ASCII values of all characters on stdIn
Moves to the next line when this is done
>'i5* Pushes 525 (105 * 5)
-- Subtracts the sum from 525
@ , Prints and exits
Nimmt Eingaben entgegen $n, erstellt einen Bereich 0..9(dh 0, 1, 2 ... 9) und verwendet dann eine Where-ObjectKlausel (the |?{...}), um die Zahl zu ermitteln, die Regex ausführt -notmatch. Das bleibt in der Pipeline, die Ausgabe ist implizit.
Ich mag es, weil man es laut aussprechen kann. "žHISK", rief er, als er seinen Zauberstab über den Zylinder schwenkte und ein kleines weißes Kaninchen in einer Rauchwolke auftauchte.
Antworten:
Python 2 ,
1816 Bytes+ Schönheit dank @Sarge Borsch
Probieren Sie es online!
99066**2
Dies ist nur eine kürzere Möglichkeit, eine Zeichenfolge zu generieren, die 0 bis 9 enthältquelle
764**4
können zwei Bytes gespart werden.764**4
fehlt5
,8
und9
763**4
=338920744561
Python , 22 Bytes
Probieren Sie es online!
Eine arithmetische Lösung. Interpretiert die Eingabezeichenfolge als hexadezimal, negiert sie und nimmt das Ergebnis Modulo 15.
quelle
APL (Dyalog) , 4 Bytes
Abgeleitete Funktion
⎕D
D igits∘
(Verknüpft ein linkes Argument mit der folgenden dyadischen Funktion, um eine monadische Funktion zu erstellen.)~
außer [das Argument]Probieren Sie es online!
Funktionszug
⎕D
D igits~
außer⊢
das richtige argumentProbieren Sie es online!
Explizites Programm
⎕D
D igits~
außer⍞
ZeicheneingabeProbieren Sie es online!
quelle
Brain-Flak ,
483836 + 3 = 39 Bytes10 Bytes gespart dank DJMcMayhem!
Probieren Sie es online!
Erläuterung
Die Summe aller Ziffern in Ascii ist 525. Dieses Programm summiert die Eingabe und subtrahiert sie von 525, um die fehlende Ziffer zu erhalten.
Will push 525. Dies nutzt die Tatsache aus, dass wir wissen, dass es zunächst 9 Eingabeelemente geben wird. Dies bedeutet, dass der
[]
Wert 9 ergibt, wodurch wir schnell zu großen Zahlen wie 525 gelangen können.Als nächstes haben wir das bisschen:
Dadurch werden die Eingaben summiert und von der Gesamtsumme subtrahiert.
quelle
negative(sum(input()))
zum Ende bewegen , können Sie den stapelhohen Nil missbrauchen, um 525 leichter zu schieben.(([][][]()()()){()()({}[()])}{}[{{}}])
sollten Sie 10 Bytes sparenHaskell ,
2423 BytesProbieren Sie es online! Verbrauch:
(477-).sum.map fromEnum $ "123456890"
. 477 ist die Summe der Zeichencodes der Ziffern 1 bis 9 mit Ausnahme von 0. Diese anonyme Funktion berechnet 477 abzüglich der Summe aller Ziffernzeichencodes, um den fehlenden zu finden.Das Umwandeln der Zeichen in Ints dauert ein Byte länger:
Probieren Sie es online!
quelle
Gelee , 3 Bytes
Filtert (
ḟ
) einfach die Eingabezeichenfolge aus "0123456789" (ØD
).Probieren Sie es online!
quelle
ḟ
.Ø
=⎕
,D
=D
,ḟ
=~
, wie in⎕D~'867953120'
.Rubin, 14
Summiert die ASCII-Codes und subtrahiert von 48 * 9 + 45
Verwenden Sie wie folgt
quelle
JavaScript (ES6), 26
Bearbeiten Sie 1 Byte und speichern Sie @Neil mit einem viel intelligenteren Trick
Das Xoring aller Werte von 1 bis 9 ergibt 1. Oder 1 noch einmal und das Ergebnis ist 0. Wenn also ein einzelner Wert fehlt, ist das Ergebnis der fehlende Wert.
Prüfung
quelle
s=>eval([1,...s].join`^`)
Speichert ein Byte.Retina ,
27 2119 Bytes-6 Dank an Basic Sunset
-2 Dank an Martin Ender
Probieren Sie es online!
Ersetze jede Ziffer mit so vielen
_
s und 51
s:Entfernen Sie alle
_
s und a1
für jedes:Zähle die Anzahl der
1
verbleibenden s:quelle
.
.^
5
^.
$*9¶
.
$*_
+`_¶_
¶
_
_
zu gewechselt haben1
, um ein Byte zu speichern.)05AB1E , 6 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
31292822 BytePort von @ xnors Python-Antwort, außer dass JavaScript nur einen Restoperator anstelle eines Modulo-Operators hat, daher kann ich das nicht in einem einzigen Schritt tun. Bearbeiten: 6 Bytes dank @Arnauld gespeichert.
quelle
s=>[...s].map(c=>r-=c,r=45)|r
;-)reduce
.s[0]!='0'
es funktioniert , aber es gibt bereits eine Antwort, die verwendet wirdeval
.s=>(15-`0x${s}`%15)%15
?Gehirnfick,
1715 BytesProbieren Sie es hier aus . Diese Lösung funktioniert nur mit Standard-Brainfuck (8-Bit-Zellen), da es sich um ein Wrapping handelt.
Es ist ein seltener Tag, an dem Brainfuck tatsächlich antreten kann, aber diese Herausforderung stimmte einfach ziemlich gut mit der BF-Spezifikation überein!
Anstatt diese Antwort direkt aufzuschlüsseln, möchte ich die Iterationen durchgehen, die ich gemacht habe, weil ich denke, dass dies verständlicher (und interessanter) wäre.
Hinweis: Diese Lösung ist weitgehend von der Brain-Flak-Antwort von Wheat Wizard inspiriert .
Erläuterung
Schritt 1, 26 Bytes
In seiner Antwort wies Wheat Wizard darauf hin, dass sich die Summe der ASCII-Werte von 0-9 zu 525 summiert. Und da Standard-Brainfuck nur einen Begriff von [0,255] hat, ergibt dies den Wert 525% 256 = 13 . Das heißt, wenn Sie die ASCII-Werte der Eingabe von 13 subtrahieren, erhalten Sie die fehlende Ziffer.
Die erste Version dieses Programms war:
1. Setzen Sie 13 in die erste Zelle
2. Nehmen Sie Eingaben in die zweite Zelle
3. Subtrahieren Sie die zweite Zelle von der ersten Zelle
4. Springen Sie zu 2, wenn noch Eingaben vorhanden sind
5. Drucken Sie die erste Zelle
Und hier ist der Code für die einfache Lösung:
Schritt 2, 19 Bytes
Wie in seiner Antwort ausgeführt, können wir, da wir wissen, dass die Eingabe genau die Länge 9 hat, diesen Wert als Konstante verwenden und diese lange Zeichenfolge von + gleich am Anfang entfernen.
Es ist auch egal, zu welchem Zeitpunkt wir 13 addieren (danke, kommutative Eigenschaft!), Also mischen wir es mit den Schritten Subtraktion und Drucken.
Dies war meine ursprüngliche Antwort auf dieses Problem, aber wir können es besser machen.
Schritt 3, 17 Bytes
Interessanterweise funktioniert die vorherige Antwort auch dann, wenn wir mit einem + anstelle von einem beginnen.
Brainfuck benötigte etwas in einer Zelle, um eine Schleife zu beginnen. Wir haben diese zusätzlichen 4 am Ende naiv hinzugefügt, wenn es an anderen Orten gegangen sein könnte.
Mit etwas völlig absichtlich (sprich: Versuch und Irrtum) Schleife Tricks, Anfahren des Programm mit einem - führt zu zwei interessanten Ergebnissen:
1 + 10 + 2 = 13, und wir erhalten die ursprüngliche Antwort.
Rückblickend ist dies wahrscheinlich ein übermäßiger Aufschub für solch ein einfaches Brainfuck-Programm.
Schritt 4, 15 Bytes
Nachdem ich ein bisschen mehr über diese Lösung nachgedacht hatte, konnte ich 2 Bytes abschneiden.
Ich wollte etwas über den vorherigen Schritt klarstellen:
Das Minus zum Eingeben der Schleife addiert effektiv 1, aber was es tatsächlich tut, ist das Subtrahieren von 255 von der zweiten Zelle (was zu 1 führt).
Rückblickend ist es offensichtlich, aber das Subtrahieren von 1 von der ersten Zelle ist dasselbe wie das Addieren von 1 zu der zweiten Zelle (weil alles in der ersten Zelle von der zweiten Zelle subtrahiert wird).
Ich konnte das "> + <" durch Hinzufügen eines "-" am Anfang der ersten Schleife entfernen. Es muss dorthin gehen und nicht dorthin, wo das "> + <" war, da das Programm ansonsten eine Endlosschleife ausführt.
quelle
Oktave , 22 Bytes
Probieren Sie es online!
quelle
Mathematica, 25 Bytes
Reine Funktion, die einen String als Eingabe nimmt und eine Ganzzahl zurückgibt. Mathematica hat lange Befehlsnamen und zögert, zwischen Zeichenfolgen und Ganzzahlen zu konvertieren, was es bei dieser Herausforderung besonders schlimm macht. Das Beste, was ich finden konnte, war der Algorithmus aus Level River Sts Ruby-Antwort , der eine Berechnung basierend auf der Summe der ASCII-Codes der Eingabezeichenfolge durchführt. In Mathematica wird nur ein langer Befehlsname verwendet.
quelle
PHP, 27
verwendet den Trick aus Rods Antwort , um eine Zeichenfolge zu generieren, die alle Ziffern enthält, und entfernt dann alle Ziffern mit Ausnahme der fehlenden.
PHP, 41
Dieser benutzt xor, weil ich es noch nicht gesehen habe.
quelle
32043,32286,33144,35172,35337,35757,35853,37176,37905,38772,39147,39336,40545,42744,43902,44016,45567,45624,46587,48852,49314,49353,50706,53976,54918,55446,55524,55581,55626,56532,57321,58413,58455,58554,59403,60984,61575,61866,62679,62961,63051,63129,65634,65637,66105,66276,67677,68763,68781,69513,71433,72621,75759,76047,76182,77346,78072,78453,80361,80445,81222,81945,83919,84648,85353,85743,85803,86073,87639,88623,89079,89145,89355,89523,90144,90153,90198,91248,91605,92214,94695,95154,96702,97779,98055,98802,99066
Bash + Coreutils, 19 Bytes
Ich habe eine
kürzereBash-Lösung gefunden, die einen interessanten Prüfsummenansatz verwendet:Probieren Sie es online!
Erläuterung:
Der
sum
Befehl gibt eine Prüfsumme und eine Blockanzahl aus. Ich kenne nicht viele Details, aber bei Verwendung der Option-s
(System V-Algorithmus) entspricht die Prüfsumme der ASCII-Summe jedes eingegebenen Zeichencodes. Somit bleibt die Prüfsumme konstant, wenn sich die Reihenfolge der gleichen Eingabezeichen ändert.Gegeben
867953120
als Testfall (letztes Beispiel), hier ist , wie das Skript funktioniert:sum -s
Ausgänge473 1
. Wenn keine ganze Zahl fehlte, wäre die Prüfsumme 525 gewesen.dc -e524?
drückt 524 und dann den Pipe-Eingang. Der Stapel ist:1 473 524
. Die Idee ist, die Prüfsumme von 525 zu subtrahieren, aber da die Summe auch 1 ergibt, muss ich damit arbeiten.--P
. Nach dem Auftragen der zwei Subtraktionen (524- (473-1)), ist der Stapel:52
. Mit 'P' gebe ich das Zeichen mit diesem ASCII-Code aus:4
die fehlende Ziffer.quelle
Fortran 95,
146128 BytesNicht sehr kurz, fürchte ich.
Ungolfed:
quelle
CJam , 5 Bytes
Probieren Sie es online!
quelle
GNU sed , 36 Bytes
Beinhaltet +1 für
-r
Probieren Sie es online!
quelle
Brachylog (2), 5 Bytes
Probieren Sie es online!
Sollte wohl kürzer sein (ich bin immer noch verwirrt, warum das
ẹ
notwendig ist), aber das ist das Beste, was ich tun kann.Erläuterung
quelle
x
Implementierung ist alt und ziemlich fehlerhaft, weshalb Sie brauchenẹ
.¬∋ℕ
nur aus drei Zeichen bestehen sollte - das habe ich zuerst versucht -, aber es gibt mehrere Gründe, warum dies nicht der Fall ist, und ich glaube nicht, dass es eine plausible Möglichkeit gibt, Brachylog so zu ändern, dass dies der Fall ist.¬∋ℕ
Arbeit ist in Prolog nicht möglich, es sei denn, Sie programmieren speziell, was Sie damit nicht meinennot in
.¬
in Brachylog ist gleichbedeutend mit\+
in Prolog, und seine Bedeutung ist die von "nicht unter der Annahme der geschlossenen Welt nachweisbar", anstatt "mir Auswahlpunkte für alles zu geben, was dies nicht überprüft" (was fast immer eine unendliche Anzahl von Dingen ist) )ℕ
im Voraus zu "kennzeichnen" , aber das würde bedeuten, mit Brachylogs Auswertungsreihenfolge basierend auf dem Inhalt der Prädikate zu basteln. Das ist jedoch nur eines der Probleme; Es gibt eine Menge anderer.Common Lisp, 47 Bytes
Ungolfed:
Erklärung:
Dies durchläuft die Zeichen in einer Schleife
s
, konvertiert sie in Ziffern und fügt sie hinzu. Digit-char-p gibt die Nummer des Zeichens günstigerweise als "wahren" Wert zurück, sodass es als Test oder Konvertierung verwendet werden kann.Subtrahieren von 45 gibt die Ziffer zurück, die in der Eingabe fehlte.
quelle
Cubix , 18 Bytes
Erweitert
Probieren Sie es hier aus
Verwendet die gleiche Art von Verfahren , wie diese Gehirn-Flakfeuer Antwort.
Erstellen Sie den Wert -525 auf dem Stapel, indem Sie 5, 2, verketten, 5, verketten und negieren drücken.
Holen Sie sich dann wiederholt die Eingabe und fügen Sie sie hinzu, bis das Ende der Eingabe erreicht ist.
Entfernen Sie die letzte Eingabe, negieren Sie das letzte Additionsergebnis (machen Sie es positiv), geben Sie das Zeichen aus und halten Sie an.
Der Grund für die Arbeit von -525 bis ist, dass die Zeichenausgabe bei jeder Eingabe-Iteration getroffen wird. Da der Wert negativ ist, wird nichts ausgegeben, bis die Schleife verlassen und der negative Wert positiv gemacht wird.
quelle
PHP, 37 Bytes
quelle
Bash (+ Dienstprogramme),
2219 Bytesseq
anstelle der geschweiften Klammer -3 Bytes (Thx @Riley!)Prüfung
Probieren Sie es online!
quelle
$1
würden, wäre dies offensichtlicher ...seq
anstelle von verwendenecho
:seq 0 9|tr -d \\n$1
Google Sheets,
3933 BytesCode:
6 Bytes gespart dank Steve Kass.
Vorheriger Code:
Ergebnis:
quelle
=REGEXEXTRACT(0&49^9,"[^"&A1&"]")
ist auch eine gültige Lösung, wenn man eine ähnliche Logik voraussetzt. Aktualisierte Antwort.Befunge 98,
1412 BytesIch habe 1 Byte gespart, indem ich das Programm auf 1 Zeile verschoben habe, und 1 Byte, indem ich etwas besser rechnete
Probieren Sie es online!
Erläuterung
Die Summe der ASCII-Werte reicht von 477 bis 468, je nachdem, welche Zahl fehlt. Durch Subtrahieren von 7 erhalten wir den Bereich -470 bis -461. Durch Modifizieren dieser Zahl um 10 erhalten wir den Bereich 0 - 9, den wir dann drucken können.
Der Grund, warum ich die ASCII-Werte verwende, anstatt eine Ganzzahleingabe zu verwenden, ist, dass der
&
Befehl in Try it Online bei EOF angehalten wird (obwohl die IP umgekehrt werden sollte). Das~
funktioniert aber einwandfrei.Altes Programm , 14 Bytes
Die Summe der ASCII-Werte aller 10 Stellen ist 525. Durch Subtrahieren der Summe der angegebenen Stellen von 525 erhalten wir den ASCII-Wert des fehlenden Zeichens.
quelle
PowerShell , 30 Byte
Probieren Sie es online!
Nimmt Eingaben entgegen
$n
, erstellt einen Bereich0..9
(dh0, 1, 2 ... 9
) und verwendet dann eineWhere-Object
Klausel (the|?{...}
), um die Zahl zu ermitteln, die Regex ausführt-notmatch
. Das bleibt in der Pipeline, die Ausgabe ist implizit.quelle
Röda , 28 Bytes
Probieren Sie es online!
quelle
Pyth, 5 Bytes
Versuch es!
Erläuterung
"-jUT" funktioniert auch ein bisschen, erzeugt aber Zeilenumbrüche für jeden Int.
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle