Wir haben kürzlich die Schwelle von 10.000 Fragen zu PPCG erreicht. Hurra! Feiern wir dies mit einer einfachen Herausforderung.
Eingang
Zwei ganze Zahlen und , beide in , so dass .
Aufgabe
Ihre Aufgabe ist es, einer dieser ganzen Zahlen eine einzelne Ziffer oder beiden eine einzelne Ziffer hinzuzufügen, sodass . Wenn Sie und eine Ziffer hinzufügen , muss dies nicht unbedingt dieselbe Ziffer sein.
Die neue Ziffer kann am Anfang, am Ende oder irgendwo in der Mitte der ursprünglichen Ganzzahl eingefügt werden. Sie können jedoch keine führende Null hinzufügen.
Beispiel:
Für folgende Transformationen:
Aber diese sind ungültig :
Bei und gibt es zwei mögliche Lösungen:
Ausgabe
Sie müssen eine Liste aller möglichen Lösungen drucken oder ausgeben.
Für das obige Beispiel wäre die erwartete Ausgabe [[9238,762],[9273,727]]
.
Regeln
- I / O kann in jedem vernünftigen, eindeutigen Format verarbeitet werden. Sie können Zeichenfolgen, Ziffernlisten usw. anstelle von ganzen Zahlen verwenden.
- Die Eingabe hat garantiert mindestens eine Lösung.
- Sie dürfen die Ausgabe nicht deduplizieren. Es wäre jedoch wünschenswert, wenn der Testcode ihn mit einer gewissen Nachbearbeitung deduplizieren würde, beispielsweise in der Fußzeile von TIO.
- Dies ist eine Code-Golf- Herausforderung.
Testfälle
Input --> Output
934, 654 --> [[9346,654]]
737, 628 --> [[7372,2628]]
9122, 88 --> [[9122,878]]
923, 72 --> [[9238,762],[9273,727]]
998, 3 --> [[9968,32],[9987,13]]
900, 10 --> [[9900,100],[9090,910]] NB: solutions such as [9000,1000] are NOT valid
(more than one digit added to 10)
363, 632 --> [[3673,6327],[3638,6362]]
288, 711 --> [[2881,7119],[2882,7118],[2883,7117],[2884,7116],[2885,7115],[2886,7114],
[2887,7113],[2888,7112],[2889,7111]]
365, 635 --> [[365,9635],[1365,8635],[2365,7635],[3365,6635],[4365,5635],[5365,4635],
[6365,3635],[7365,2635],[8365,1635],[9365,635],[3065,6935],[3165,6835],
[3265,6735],[3465,6535],[3565,6435],[3665,6335],[3765,6235],[3865,6135],
[3965,6035],[3605,6395],[3615,6385],[3625,6375],[3635,6365],[3645,6355],
[3655,6345],[3675,6325],[3685,6315],[3695,6305],[3650,6350]]
output a list of all possible solutions
Oh Mist. Das wäre für meine Runensprache schwierig. Ich könnte wahrscheinlich ein Programm schreiben, das eine Lösung ausgeben könnte !Antworten:
Haskell ,
99 97 8281 Bytes-16 Bytes dank Delfad0r (Eingaben als Liste nehmen, Missbrauch verwenden, den wir nicht deduplizieren müssen -> n kann immer in [0,4] sein und eine clevere Kombination aus Eingabeformat und verwenden
ap
)!Probieren Sie es online!
quelle
R , 96 Bytes
Probieren Sie es online!
Erklärung (ungolfed)
Wir weisen
?
zupaste
. Dadurch können wir etwas Cooles tun:a<-b?c<-d
Inline-Zuweisungen innerhalb despaste
Anrufs, die wir mit keinem anderen Operator als durchführen können?
, da sie eine niedrigere Priorität als haben<-
.Nun, wie @JoKing freundlicherweise hervorhob, kann es Fälle geben, in
900 10
denen zwei Einfügungen stattfinden könnten, wie z9100 8100
. Aus diesem Grund filtern wir Übereinstimmungen heraus, bei denen die Anzahl der Zeichen in einer der beiden Zahlen um mehr als 1 zugenommen hat. Der schnellste Weg dazu ist der Levenshtein-Bearbeitungsabstand, anadist
den wir binden+
.quelle
Pyth,
282725242220 BytesProbieren Sie es hier online aus oder überprüfen Sie alle Testfälle hier - die Testsuite dedupliziert das Ergebnis, indem Sie a voranstellen
{
.Die Eingabe erfolgt als Liste von Zeichenfolgen.
Bearbeiten 4: Saved weitere 2 Bytes, dank Herrn Xcoder -
v
vectorises standardmäßig undL
Verwendungenm
darunter, so Mapping über Bereich impliziert ist, so dass dieU
unneccesary zuEdit 3: Einführung in die globale Verwendung des
;
Operators, um dank FryAmTheEggman und issacg den Zugriff auf 10 zu behalten und 2 Bytes zu sparen:Edit 2: Ich habe vergessen, dass der Summenoperator existiert, wie peinlich ...
Bearbeiten 1: In der Vorgängerversion wurde eine Liste von Ganzzahlen als Eingabe akzeptiert, wobei die Zeichenfolgenkonvertierungen für 27 Byte manuell durchgeführt wurden:
quelle
T
, aber in Funktionsblöcken werden die Variablen neu als Iterationsvariablen eingesetzt - im Filterblock ist die Iterationsvariable einfach soT
, also kann sie nicht verwendet werden. Das heißt, das10 ^ 4
wäre^10 4
, was 5 Bytes lang ist, also leider nicht kürzerT
inUT
noch 10, für den[0,10)
Bereich. Aberf...T
dasT
ist eine Iterationsvariable für die Filter werden. Danke für die Erklärung, das macht Sinn! Wenn Sie diesT4^
früher tun , speichern Sie es in einer Variablen und verwenden Sie diese Variable im Filter. Das sind natürlich auch (mindestens) 5 Byte.10000
mit^;4
.;
hat immer den Wert der Iterationsvariablen im globalen Kontext, in diesem Fall 10. Also^;4
ist das, wonach Sie suchen.fq^;4sT*FmvsmXLkdThl
. ( Pyth schlägt Jelly? OO Hurra )Perl 6 , 64 Bytes
Probieren Sie es online!
Dies ist ein Port der Antwort von GB, in dem mithilfe eines regulären Ausdrucks überprüft wird, ob die Nummern gültig sind. Danke an nwellnhof für die Portierung.
Alte Antwort,
127 110, 88 Bytes-22 bytes dank nwellnhof!
Probieren Sie es online!
Anonymer Codeblock, der eine Liste mit zwei Zahlen aufnimmt und eine Liste mit Zahlenpaaren zurückgibt.
Anstatt mit dem Einfügen der Ziffern herumzuspielen, überprüft diese Lösung jede Zahlenkombination, die sich auf 10000 summiert, und filtert, dass die angegebenen Zahlen Teil des Paars sind.
Erläuterung:
quelle
(i,1e4-i)
anstatt über alle zu iterieren(i,j)
und sie zu filtern?R ,
179 161 150144 BytesProbieren Sie es online!
35 Bytes, die von @JayCe und @Giuseppe gespeichert wurden.
Erläuterung
Die Hilfsfunktion g holt sich alle möglichen Einfügungen.
Hauptfunktion.
Ich habe nach der Tatsache bemerkt, dass dies im Wesentlichen die gleiche Logik wie die Pyth- Antwort ist.
quelle
F
und%*%
Ruby ,
9391 BytesProbieren Sie es online!
Probieren Sie jede einzelne Zahl bis zu 10000 aus und verwenden Sie den regulären Ausdruck, um zu überprüfen, ob die Zahlen übereinstimmen.
quelle
Gelee , 30 Bytes
Probieren Sie es online!
Ein bisschen ungeschickt, weil Jelly keine Einfügung hat.
Erläuterung
quelle
PHP,
162159 Bytesschönes Beispiel für eine Generatorfunktion!
Nimmt Eingaben von Befehlszeilenargumenten entgegen. druckt Duplikate. Laufen Sie mit
-nr '<code>
oder versuchen Sie es online .quelle
Pyth, 18 Bytes
Demonstration , Testsuite (Testsuite wird mit Leading dedupliziert
{
).Die Eingabe erfolgt in Form einer Liste mit zwei Zeichenfolgen.
XLRRTT
: L und R führen verschachtelte Maps aus. Da es 3 davon gibt, führen wir eine dreifach verschachtelte Karte derX
Funktion durch. In diesem FallX
fügt die Funktion ein Zeichen an einer bestimmten Position in eine Zeichenfolge ein.Die Zeichenfolge ist die Eingabe, die implizit und von der ersten platziert wird
R
. Das Zeichen erstreckt sich über0 ... 9
, so dass wir alle möglichen eingegebenen Ziffern haben, und wird durch das platziertL
. Der Bereich ist gegeben durchT
, der implizit gesetzt ist10
, der implizit behandelt wird als[0 ... 9]
. Die Position reicht über0 ... 9
, was ausreichend ist, da das Einfügen einer Zahl nach der 10. Position niemals nützlich sein wird. Doppelte Ergebnisse sind in Ordnung. Der Bereich wird sekundengenau platziertR
und sekundengenau angegebenT
.v
: Verschachtelte Besetzungszeichenfolgen in Ints.sM
: Reduzieren Sie die zweite Ebene der Listen, und geben Sie nach dem Einfügen der Ziffern für jede eingegebene Nummer eine Liste aller möglichen Zahlen ein.*F
: Nehmen Sie das kartesische Produkt der beiden Listen möglicher Zahlen.fqsT^;4
: Filtern Sie nach den Paaren, deren Produkt ist10000
.;
Nimmt den Wert von10
hier, wie erT
als Filtervariable verwendet wird, und;
immer den Wert der Variablen, die verwendet wird.quelle
Japt ,
30292523 BytesNimmt Eingaben als ein Array von Zeichenfolgen und gibt ein Array von Zeichenfolgen aus.
Versuch es
Erläuterung
quelle
Javascript (Node) -
183136123 Bytes123 Bytes dank Shaggy
136 Bytes danke an Arnauld
Alter Code
Nicht stolz darauf, aber ich dachte, ich würde sowieso einreichen. Erstellt eine Zeichenfolgeprototypfunktion, die der Zuordnung ähnelt und die den Großteil der Bytes einnimmt. Die Funktion durchläuft nur beide Permutationen und findet, wenn 1000-ab 0 ist. Übernimmt die Eingabe als Zeichenfolge.
Probieren Sie es online!
Ungolfed
quelle
String.prototype
,function
,let
,this
) und mit einigen anderen Optimierungen.map()
anstelle der äußerenfor
Schleife verwenden. NB: Der einzige Grund, warum wirj
als ersten Parameter der Rückruffunktion verwenden, ist, dass wir möchten, dass er in diesem Bereich definiert wird.Jelly , 23 Bytes
Ein monadischer Link, der eine Liste von Ziffernlisten akzeptiert
(zB für das Beispiel von 923 und 72 ist die Eingabe
[[9,2,3],[7,2]]
)Probieren Sie es online!(Fußzeile macht es so, dass E / A ein Paar von zwei Ganzzahlen ist und eine [formatierte] Liste von Ganzzahlenpaaren aus.)
Oder sehen Sie die Testsuite an .
Wie?
Überprüft alle Paare von "Zahlen" (Ziffernlisten), die sich auf 10000 summieren, auf Gültigkeit, indem alle Möglichkeiten zur Auswahl von n-1 Ziffern aus diesen "Zahlen" unter Beibehaltung der Reihenfolge gebildet werden; und behält diejenigen bei, die gültig sind (wobei die Gültigkeit auch zulässt, dass die zu prüfende "Nummer" der ursprünglichen "Nummer" entspricht).
quelle
Stax , 24 Bytes
Führen Sie es aus und debuggen Sie es
Diese Programme nehmen die beiden Eingänge wie folgt als Array von Zeichenfolgen.
quelle
Holzkohle , 33 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Falls Sie das nicht verstanden haben, werden alle Wertepaare durchlaufen, die sich zu 10000 addieren (als Zeichenfolgen). Anschließend wird gezählt, wie oft jede Eingabe mit dem Ergebnis des Löschens von bis zu 1 Zeichen aus dem jeweiligen Wert übereinstimmt. Wenn die Mindestanzahl ungleich Null ist, stimmen beide Eingaben überein, und dies ist eine mögliche Lösung.
quelle
Python 3,
165 160 153 125117 Bytesset
aus dem Rückgabewert zu entfernen, 5 Byte gespart , da die Ausgabe Duplikate enthalten kann.range(len(s))
durchrange(5)
.itertools
verschachtelte Listenverständnisse zu ersetzen (und ein Leerzeichen zu entfernen).VerwendenAkzeptiert Zeichenfolgen als Eingabe und gibt eine Menge von Ints als Ausgabe zurück.itertools
und eine einfache Hilfsfunktion.quelle
set
in der letzten Zeile keine -5 Bytes aufrufen .Rubin , 110 Bytes
Akzeptiert Zeichenfolgen als Eingabe und gibt ein Array mit ganzen Zahlen zurück.
Basierend auf der Python Version. Für eine gegebene ganze Zahl
C
Erstellt ein Array von Zahlen, das durch Hinzufügen einer Ziffer erstellt werden kann.Das Lambda iteriert über jedes mögliche Paar und wählt dasjenige aus, dessen Summe 10000 ist.
Probieren Sie es online!
quelle
05AB1E (Legacy) , 36 Byte
Kann ohne Zweifel im Wesentlichen Golf gespielt werden. Insbesondere das Einfügen der Ziffern, einschließlich einer führenden / nachfolgenden.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle (
ê
in der Fußzeile steht "Eindeutig machen und sortieren").Erläuterung:
quelle
Gelee , 25 Bytes
Probieren Sie es online!
Nicht die kürzeste Jelly-Lösung hier, aber vielleicht kann jemand Golf spielen? Ich bin ratlos
quelle