Auf den Titel kommt es an ...
Nehmen Sie als Eingabe eine positive Ganzzahl n>=12
und ... tun Sie, was der Titel sagt.
Ja, dies ist in OEIS A187924 .
Einige Testfälle
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
Das ist Code-Golf . Kürzester Code in Bytes gewinnt!
Antworten:
Befunge, 81 Bytes
Probieren Sie es online!
Kann mindestens bis zu n = 70 verarbeiten. Danach überschreiten einige Werte bei den meisten Implementierungen die Stack-Zellengröße, und bei anderen dauert es so lange, dass es sich nicht lohnt, darauf zu warten.
Diese Einschränkungen gegeben, wir nicht einmal die Mühe versucht , Werte zu handhaben n größer als 99, was bedeutet , wir können leichter testen , ob der Wert Enden in n mit , indem Sie einfach den Wert Modulo 100 mit Vergleichen n .
Nachfolgend finden Sie eine detailliertere Aufschlüsselung des Codes.
Lies n von stdin und speichere im Speicher.
Initialisieren Sie den Testwert v auf 0 und starten Sie die Hauptschleife, indem Sie v nach vorne erhöhen .
Testen Sie, ob
v%n == 0
und kehren Sie an den Anfang der Hauptschleife zurück.Testen Sie, ob
v%100 == n
und kehren Sie an den Anfang der Hauptschleife zurück. Addieren Siedie Ziffern in v, indem Sie wiederholt v modulo 10 addieren und v durch 10 dividieren .
Prüfen Sie, ob die Summe gleich n ist , und kehren Sie an den Anfang der Hauptschleife zurück.
Ansonsten gib v aus und beende.
quelle
05AB1E , 14 Bytes
Probieren Sie es online!
Erläuterung
Bei Lösungen, für die große Präfixe erforderlich sind, tritt bei TIO ein Timeout auf
quelle
JavaScript (ES6),
5554 ByteÜbernimmt die Eingabe als Zeichenfolge. Benötigt einen Browser mit Schwanzrekursionsunterstützung für die größeren Ergebnisse. Bearbeiten: 1 Byte dank @Arnauld gespeichert.
quelle
eval([s,...a].join`-`)?
würde auch funktionieren, obwohl es nicht kürzer ist ...||
.Brachylog v2,
1210 BytesProbieren Sie es online!
Dies ist eine Funktionsübergabe, die Eingabe über
.
und Ausgabe über erzeugt?
(im Gegensatz zur normalen Konvention: Alle Brachylog-Funktionen haben genau zwei Argumente, die Eingabe- oder Ausgabeargumente sein können, aber die Sprache erzwingt keine bestimmte Argumentverwendung). Normalerweise halten wir Konventionen für die Verwendung von Argumenten bei PPCG nicht für relevant .Erläuterung
Eine frühere Version dieser Lösung hatte einen Sonderfall (
Ḋ|
dh "Ziffern buchstäblich zurückgeben") für einzelne Ziffern, aber die Frage besagt anscheinend, dass Sie das nicht überprüfen müssen (danke @DLosc, dass Sie dies abgefangen haben), also habe ich es entfernt es. (Die geschriebene Lösung funktioniert nicht mit einzelnen Ziffern, da Brachylog 1 nicht als Möglichkeit für ein Unbekanntes in einer Multiplikation betrachtet, um Endlosschleifen zu verhindern. Die Multiplikationen sind willkürlich.)Diese Antwort bezieht sich nun auf eine ziemlich direkte Übersetzung der Spezifikation. Beginnend mit
?
(der Ausgabe / Zahl, die wir suchen; ein Brachylog-Prädikat beginnt implizit immer mit?
) wirda₁.
behauptet, dass es.
(die Eingabe) als Suffix hat. Das;A×?
bedeutet dann , dass wir×
das Ergebnis mit etwas multiplizieren können, um es;A
zu produzieren?
. Schließlichẹ+
summiert (+
) die Ziffern (ẹ
) von?
und am Ende jedes Brachylog-Programms, das das Endergebnis erzeugt, steht standardmäßig eine implizite Zusicherung.
. Mit anderen Worten, dieses Programm ist ".
ist ein Suffix von?
,.
multipliziert mit etwas?
,.
ist die Ziffernsumme von?
", was einer wörtlichen Übersetzung des ursprünglichen Programms sehr nahe kommt.Dies
≜
ist erforderlich, damit die Ziffernsummenanforderung durchgesetzt wird. Ich nehme an, dass etwasẹ
Unbekanntes nicht mag, und so fordert das≜
Brachylog dazu auf, einen Brute-Force-Ansatz für diesen Teil des Programms anstelle von Algebra zu verwenden.quelle
Haskell , 72 Bytes
Probieren Sie es online!
Beachten Sie, dass die gefundene Zahl minus n ein Vielfaches von n und 10 ^ Länge (n) sein muss.
Inspiriert von Laikoni und total menschlich
quelle
lcm n(10^length(show n))
auflcm(10^length(show n))n
1 ByteAlice , 35 Bytes
Probieren Sie es online!
Erläuterung
Dieses Programm bietet eine sehr gute Mischung und Interaktion zwischen dem Cardinal-Modus (Integer-Verarbeitung) und dem Ordinal-Modus (String-Verarbeitung).
Das übliche Framework für Herausforderungen mit dezimaler E / A, die hauptsächlich im Kardinalmodus ausgeführt werden:
Und das eigentliche Programm:
quelle
Java (OpenJDK 8) ,
13611010392 Bytes-26 danke an JollyJoker
-7 Nochmals vielen Dank an JollyJoker
-11 danke an Oliver Grégoire
Probieren Sie es online!
Muss Java lieben! Es könnte gut sein, dass ich einen ineffizienten Ansatz verwende, aber keine eingebaute Prüfsummenfunktion und die doppelte Konvertierung in String, um nach dem Ende der Zahl zu suchen, Bytes kostet ...
Ungolfed:
quelle
(""+i).endsWith(""+a)
sollte arbeiten.n/=10
stattn=n/10
auch. Außerdem können Siei+=a
in der for-Schleife die Teilbarkeitsprüfung überspringen.Mathematica, 72 Bytes
-18 Bytes von @MartinEnder
Probieren Sie es online!
Hier ist eine andere Version von Martin Ender.
Dieser Ansatz kann bis zu
n=40
(41 überschreitet das Standard-Iterationslimit) gehen.Mathematica, 65 Bytes
Probieren Sie es online!
quelle
Python 2 , 74 Bytes
Diese Lösung geht davon aus
n <= sys.maxint
.Probieren Sie es online!
quelle
str(x)
mitx
in Back-Ticks zweimal, um 6 Byte zu sparen (wie können Sie Back-Ticks in Back-Ticks umgehen?).`
Backslash in Backticks ankreuzen.L
die den Algorithmus durcheinander bringen könnte.C (gcc)
7169 Bytes, schlägt bei 100 fehlIch habe es mit long und% 1000 aber mal ausprobiert
-2 Bytes dank Steadybox
Probieren Sie es online aus
quelle
Schale ,
20 - 19 -17 BytesDanke @Zgarb für -2 Bytes!
Probieren Sie es online!
quelle
C # (.NET Core) ,
90 8483 + 18 = 101 BytesProbieren Sie es online!
(""+n)
an einigen Stellen undn.ToString()
an anderen zu schreiben .quelle
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
spart 20 Bytes.n%100
? Was wäre , wennn>100
?Julia, 70 Bytes
quelle
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Sie können damit 5 Bytes einsparen. Probieren Sie es online!Ohm v2 , 16 Bytes
Probieren Sie es online!
quelle
Pip , 18 Bytes
Algorithmus inspiriert von Emignas Antwort . Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript REPL (ES5),
6059 Bytesquelle
Haskell , 75 Bytes
Probieren Sie es online!
Erläuterung:
Ich frage mich, ob der Teil "endet in
n
" verkürzt werden kann. Ich habe es auch versuchtshow n`elem`scanr(:)""(show x)
, aber es ist länger.quelle
Ruby ,
65 63 5453 BytesProbieren Sie es online!
quelle
Pyth ,
2221 BytesProbieren Sie es hier aus!
quelle
Haskell , 75 Bytes
Probieren Sie es online!
quelle
PowerShell , 84 Byte
Probieren Sie es online!
Einfacher Aufbau, aber langwierige Befehle. Timeout bei TIO für
n=100
, aber wenn wir expliziti
auf close setzen, wird es korrekt ausgegeben.Dies ist nur eine einfache
for
Schleife, die so lange fortgesetzt wird, wie eine der Bedingungen erfüllt ist. Die drei Bedingungen sind 1)$i%$n
, dh wir haben einen Rest; 2)$i-notmatch"$n$"
, dh es stimmt nicht mit den letzten Ziffern überein; und 3)([char[]]"$i"-join'+'|iex)-$n
, dh die$n
Summe der Ziffern ist ungleich (hier durch einfache Subtraktion überprüft, da Werte ungleich Null wahr sind). Innerhalb der Schleife werden wir einfach erhöht$i
.Wenn wir also keinen Rest haben, stimmt der reguläre Ausdruck überein und die Zahlen sind gleich. Alle drei Bedingungen sind erfüllt
$false
und wir verlassen die Schleife. Infolgedessen können wir einfach$i
in der Pipeline verbleiben und die Ausgabe ist implizit.quelle
PHP, 73 + 1 Bytes
Als Rohr mit laufen lassen
-R
.Schleifen
$i
durch ein Vielfaches von<input>
bis zusum_of_digits-<input>
undtail_of_i-$n
sind falsy; dann druckti
.quelle
m4, 210 Bytes
Definiert ein Makro
f
, das die Antwort berechnet. Es ist ein bisschen langsam - ungewöhnlich - aber ich verspreche, dass es funktioniert.Ich dachte, m4 wäre schön, weil es Ganzzahlen standardmäßig als Zeichenfolgen behandelt, aber das ist ziemlich schlecht.
quelle
Scala, 120 Bytes
Dies funktioniert bis zum
n = 70
Überlauf von ganzen Zahlen. Für ein zusätzliches ZeichenInt
kann das in a geändert werden,Long
und es können Werten > 100
berechnet werden.Hier ist die etwas längere ungolfed Version:
quelle
R , 115 Bytes
Probieren Sie es online!
Schreckliche R-Funktion. Inkrementiert
F
(beginnt um0
),n
bis ein Wert gefunden wird, der die erforderlichen Eigenschaften erfüllt, und gibt ihn dann zurück. Die Verwendung vonany
on für einendouble
Ausdruck gibt für jede Iteration der Schleife eine Warnung aus, hat jedoch keinen Einfluss auf die Korrektheit.Zeitüberschreitung bei TIO für ausreichend große Eingaben (n = 55 oder höher), sollte aber die Lösung bei genügend Zeit / Raum korrekt berechnen.
quelle
Perl 5,
4644 + 1 (-p) = 45 Bytes2 Bytes gespart dank Xcali, besser nicht zu finden
erste antwort
Probieren Sie es online aus
quelle
Jelly ,
2221 BytesProbieren Sie es online!
Bearbeiten: Auf eine einzelne Zeile komprimiert
Erläuterung
Ich habe viele Stunden gebraucht, um zu schreiben, weil ich Jelly gelernt habe, aber jetzt, wo ich fertig bin, bin ich so zufrieden. Lange wusste ich nicht, dass ich das brauchte
¤
und ich konnte es einfach nicht zum Laufen bringen. Ein Blick auf [diesen] [1] gut erklärten Code hat mir geholfen, den Deal zu besiegeln. Viele andere Jelly-Antworten in PPCG haben mich auch angeleitet.quelle
Javascript, 224 Bytes
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Un-Golf:Verwendung: 1. getNumber (12) 2. getNumber (13) 3. ....
quelle
getNumber
oder verkürzen solltensumDigits
.J ,
37-33BytesProbieren Sie es online!
Das Voranstellen des Iterationszählers ist ~ 5-mal schneller, aber 5 Byte länger:
Probieren Sie es online!
Inkrementierung um 100, 27 Bytes :
Probieren Sie es online!
quelle
Python 2 , 70 Bytes
Probieren Sie es online!
quelle