Wenn ein Wert x gegeben ist, finden Sie den kleinsten numerischen Wert größer als y , der multipliziert und mit x geteilt werden kann, während alle ursprünglichen Ziffern beibehalten werden.
- Die neuen Nummern verlieren keine Ziffern.
- Die neuen Nummern erhalten keine Ziffern.
Zum Beispiel:
Eingabe: x = 2, y = 250000
- Original: 285714
- Abteilung: 142857
- Multiplikation: 571428
Dies ist wahr, weil 285714 größer als y ist ; dann , wenn sie durch unterteilt x Ergebnisse in 142857 und wenn multipliziert mit x führt zu 571.428 . In beiden Tests sind alle Originalziffern von 285714 vorhanden und es wurden keine zusätzlichen Ziffern hinzugefügt.
Die Regeln
- X sollte 2 oder 3 sein, da die Berechnung zu hoch ist.
- Y muss eine ganze Zahl größer als Null sein .
- Der kürzeste Code gewinnt.
Testfälle
Dies sind meine häufigsten Testfälle, da sie am schnellsten zu testen sind.
- x = 2, y = 250000 = 285714
- x = 2, y = 290000 = 2589714
- x = 2, y = 3000000 = 20978514
- x = 3, y = 31000000 = 31046895
- x = 3, y = 290000000 = 301046895
Klarstellungen
- Die Art der Aufteilung spielt keine Rolle. Wenn Sie irgendwie 2,05, 0,25 und 5,20 bekommen können, dann fühlen Sie sich frei.
Viel glück, euch allen!
Antworten:
Schale , 14 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
-
was falsch war.Brachylog v2, 15 Bytes
Probieren Sie es online aus!
Nimmt Eingaben in das Formular vor
[x,y]
.Erläuterung
Kommentar
Hier zeigt sich die Schwäche von Brachylog, mehrere Werte mehrmals wiederzuverwenden. Dieses Programm ist fast alles Sanitär und sehr wenig Algorithmus.
Daher erscheint es möglicherweise bequemer, den Wert von y einfach fest zu codieren (es gibt einen Kommentar zu dieser Frage, in dem angenommen wird, dass 2 der einzig mögliche Wert ist). Es gibt jedoch tatsächlich Lösungen für y = 3, was bedeutet, dass die Installation leider auch den Wert von y verarbeiten muss . Das kleinste, das mir bekannt ist, ist das Folgende:
(Die Technik, mit der ich diese Zahl gefunden habe, ist nicht ganz allgemein, daher ist es möglich, dass es eine kleinere Lösung mit einem anderen Ansatz gibt.)
Es ist jedoch unwahrscheinlich, dass Sie dies mit diesem Programm überprüfen . Brachylog's
p
ist sehr allgemein geschrieben und enthält keine Optimierungen für Sonderfälle (z. B. für den Fall, dass sowohl die Eingabe als auch die Ausgabe bereits bekannt sind). Dies bedeutet, dass Sie die Überprüfung in O ( n log n ) eher durch Sortieren durchführen können als das O ( n !) für den Brute-Force-Ansatz, von dem ich vermute, dass er verwendet wird). Infolgedessen dauert es sehr lange, bis überprüft wird, ob 105263157894736842 eine Permutation von 315789473684210526 ist (ich habe es jetzt einige Minuten lang ohne offensichtlichen Fortschritt laufen lassen).(BEARBEITEN: Ich habe die Brachylog-Quelle aus diesem Grund überprüft. Wenn Sie
p
zwei bekannte Ganzzahlen verwenden, generiert der verwendete Algorithmus alle möglichen Permutationen der betreffenden Ganzzahl, bis eine gefunden wird, die der Ausgabe-Ganzzahl als Algorithmus entspricht ist „Eingang → indigits, permute indigits → outdigits, outdigits → Ausgang“. Ein effizienter Algorithmus wäre, die outdigits / Ausgangs - Beziehung einzurichten zuerst , so dass die Rückverfolgung innerhalb der Permutation berücksichtigen könnte , die Ziffern zur Verfügung stehen.)quelle
p
nichtpermutation/2
mit zwei bekannten Listen ausgeführt wird, selbst wenn zwei bekannte Ganzzahlen als Argumente angegeben werden. es erzeugt alle Permutationen der ersten ganzen Zahl (unter Verwendung vonpermutation/2
mit einer bekannten Liste) und vergleicht sie dann gegen die zweite ganze Zahl ist .Perl 6 , 56
54BytesProbieren Sie es online aus!
Interessante Alternative, Berechnung von n * x k für k = -1,0,1:
quelle
Sauber , 92 Bytes
Probieren Sie es online aus!
Ziemlich einfach. Erklärung kommt in einer Weile.
quelle
q 65 Bytes
Teilen Sie die Zahl auf Basis 10, sortieren Sie jede aufsteigende Zahl und prüfen Sie, ob sie gleich ist. Wenn nicht, erhöhen Sie y und gehen Sie erneut
quelle
JavaScript (ES6),
767369 Byte3 Bytes wurden mithilfe
eval()
von gespeichert, wie von @ShieruAsakoto vorgeschlagenNimmt Eingabe als
(x)(y)
.Probieren Sie es online aus!
Eine rekursive Version wäre 62 Byte , aber hier ist sie wegen der hohen Anzahl erforderlicher Iterationen nicht gut geeignet.
Wie?
Beispiel:
Wenn Sie zwei Arrays zusammenfügen, wird jedes davon implizit zu einer durch Kommas getrennten Zeichenfolge gezwungen. Die letzte Ziffer des ersten Arrays wird direkt mit der ersten Ziffer des zweiten Arrays ohne Komma verkettet, wodurch dieses Format eindeutig ist.
Beispiel:
Aber:
Kommentiert
quelle
x=>F=y=>(g=x=>r=[...x+''].sort()+'')(y*x)!=g(y)|r!=g(y/x)?F(y+1):y
Kann einen Stapelüberlauf verursachen, wenn y weit von der Lösung entfernt ist.eval
:x=>y=>eval("for(;(g=x=>r=[...x+''].sort()+'')(y*x)!=g(y)|r!=g(y/x);y++);y")
eval()
Idee. Mein erster Versuch war zwar rekursiv, aber ich gab wegen der hohen Anzahl erforderlicher Iterationen auf.Haskell,
7674 BytesDank Lynns Kommentar wurden zwei Bytes rasiert
quelle
f
können Sie sein,f x y=[n|n<-[y+1..],all(==s n)[s$n*x,s$n/x]]!!0
aber wenn Sie Ihre Antwort als Operator definieren, werden zwei Bytes gespeichert:x!y=…
und dann lautet Ihre Antwort(!)
:)Japt, 24 Bytes
Ziemlich naive Lösung bei ein paar Bieren; Ich bin sicher, es gibt einen besseren Weg.
Versuch es
quelle
315789473684210526
ist die erste Lösung fürx=3
, Javascript oder Japt können es nicht richtig berechnen, da es nicht mit doppelter Genauigkeit passt.Python 2 , 69 Bytes
Probieren Sie es online aus!
quelle
f=lambda x,y,S=sorted:y*(S(`y`)==S(`y*x`)==S(`y/x`))or f(x,y+1)
sollte funktionieren, aber es erreicht das Rekursionslimit ziemlich schnell, und ich weiß nicht, was die PPCG-Regeln dazu zu sagen haben.Gelee ,
1413 Bytes-1 danke an Erik den Outgolfer (`` verwendet make_digits,
D
war also nicht erforderlich)+2 behebt einen Fehler (nochmals danke an Erik den Outgolfer für den Hinweis auf das Off-by-One-Problem)
Ein vollständiges Programm, das das Ergebnis druckt (als dyadischer Link wird eine Liste der Länge 1 erhalten).
Probieren Sie es online aus!
Wie?
Beachten Sie, dass, wenn die Division nicht genau ist, die implizite Dezimalanweisung (äquivalent zu a
D
), die vor der Sortierung angewendet wird, einen Bruchteil ergibt,z. B.:
1800÷3D
->[6,0,0]
while
1801÷3D
->[6.0,0.0,0.33333333333337123]
quelle
D
.>=
ich total verpasst! Hatte keine Ahnung,Ṣ
dass make_digits darauf gesetzt war - danke. Muss aber später repariert und aktualisiert werden ...Mathematica,
8274 Bytes-8 Bytes dank tsh
Funktion, die Argumente als akzeptiert
[x,y]
. Effektiv eine Brute - Force, die überprüft , ob die sortierten Liste von Ziffern sucheny
,y/x
undxy
ist gleich.Probieren Sie es online aus!
quelle
x=3
, aber ich bin nicht sicher, ob es wahr istx=2
.v = a[1]*10^p[1] + a[2]*10^p[2] + ... + a[n]*10^p[n]
,u = a[1] * 10^q[1] + ... + a[n] * 10^q[n]
. Undu-v = a[1]*(10^p[1]-10^q[1]) + ... + a[n]*(10^p[n]-10^q[n])
da gilt10^x-10^y=0 (mod 9)
immer.u-v=0 (mod 9)
hält immer. Wenn es eine falsche Antwort gibtw
, seitw*x-w=0 (mod 9)
undw-floor(w/x)=0 (mod 9)
: haben wirfloor(w/x)=0 (mod 9)
. wennfloor(w/x)*x <> w
,w-floor(w/x)*x>=9
aber dieser Konflikt mit der Tatsache, dassw-floor(w/x)*x<x
während x 2 oder 3 sein könnte.w=0 (mod 9)
folgt daraus,w*x-w=0 (mod 9)
dassx-1
es nicht durch 3 teilbar ist.IntegerQ
Test ausschließe, erzeugt er einige Fehler, wenn er versucht,IntegerDigits
Brüche zu bearbeiten, aber Mathematica geht immer noch an ihnen vorbei und liefert die richtige Antwort. Ich bin mir nicht sicher, ob Fehler bei der Berechnung zulässig sind, auch wenn die endgültige Antwort korrekt ist.APL (NARS), 490 Zeichen, 980 Byte
Prüfung
Ich dachte, das Problem sei eine bequeme Zahl, die variieren kann, so dass man die 3 Zahlen r, r * x, r * x * x so hat, wie r zu einem Wert beginnt, dass r * x in der Nähe von y liegt (wobei x und y Eingaben sind des Problems mit den gleichen Buchstaben wie der Hauptbeitrag). Ich habe die Beobachtung verwendet, dass, wenn die erste Ziffer von r d ist als in r, auch die Ziffern d * x und d * x * x erscheinen müssen, um r (oder besser r * x) zu einer Lösung zu machen.
quelle
05AB1E , 16 Bytes
Probieren Sie es online aus. (HINWEIS: Sehr ineffiziente Lösung. Verwenden Sie daher Eingaben in der Nähe des Ergebnisses. Dies funktioniert auch lokal für größere Eingaben, bei TIO tritt jedoch nach 60 Sekunden eine Zeitüberschreitung auf.)
Erläuterung:
quelle