Ermitteln Sie bei einer positiven Ganzzahl das kleinste positive Ganzzahl-Vielfache, dh einen Lauf von 9, gefolgt von einem optionalen Lauf von 0. Mit anderen Worten, ermitteln Sie das kleinste positive Ganzzahl-Vielfache, das mit dem regulären Ausdruck übereinstimmt /^9+0*$/
.
Wenn zum Beispiel die angegebene positive Ganzzahl 2 ist, wird 90 zurückgegeben, da 90 ein positives ganzzahliges Vielfaches von 2 ist und das kleinste ist, mit dem der reguläre Ausdruck übereinstimmt /^9+0*$/
.
Testfälle:
n f(n)
1 9
2 90
3 9
4 900
5 90
6 90
7 999999
8 9000
9 9
10 90
11 99
12 900
13 999999
14 9999990
15 90
16 90000
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt. Es gelten Standardlücken .
code-golf
arithmetic
Undichte Nonne
quelle
quelle
Antworten:
Jelly ,
1311 BytesProbieren Sie es online!
Wie es funktioniert
quelle
9
oder0
in deinem Code gemachtPython 2 ,
5554 BytesProbieren Sie es online!
quelle
Python 2 , 51 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
474342 Byte-4 Byte dank @Arnauld
-1 Byte dank @Luke
Tests
Rekursive Lösung (schlägt für 7, 13 und 14 fehl), 38 Byte
Genannt wie
f(5)()
. Erreicht die max Call - Stack Größe in Chrome und Firefox fürn=7
,n=13
undn=14
.Code-Snippet anzeigen
quelle
n=>eval('for(i=0;!/^9+0*$/.test(i);)i+=n')
Ruby , 36 Bytes
Brute-Forcing - dauert ewig für x = 17.
Probieren Sie es online!
quelle
Java 8,
6157 Bytes-4 Bytes (und schnellere Ausführung) dank @JollyJoker .
Erläuterung:
Probieren Sie es hier aus.
quelle
r%n
Scheck vermieden .n->{int r=0;for(;!(""+(r+=n)).matches("9+0*"););return r;}
for(;!(""+r).matches("9+0*");r+=n)
Python 3 , 56 Bytes
Probieren Sie es online!
quelle
Brachylog , 16 Bytes
Probieren Sie es online!
Das ist ziemlich langsam
Erläuterung
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
Die Eingabe wird immer wieder zu 0 addiert, bis das Ergebnis abzüglich der führenden 9 gleich 0 ist.
quelle
RProgN 2 , 18 Bytes
Erklärt
Probieren Sie es online!
quelle
Mathematik , 71 Bytes
Probieren Sie es online!
Keine sehr interessante Brute-Force-Lösung, aber sie schlägt die andere Mathematica-Antwort, bei der einige clevere Tricks zum Einsatz kommen.
Der einzige Vorteil, den Mathematica in Bezug auf diese Herausforderung hat, ist die Tatsache,
StringMatchQ
dass eine vollständige Übereinstimmung erforderlich ist, sodass ich dies9+0*
eher tun kann als^9+0*$
.quelle
"9"..~~"0"...
anstelle von speichernRegularExpression@"9+0*"
.Batch, 175 Bytes
Übernimmt die Eingabe für STDIN. Keine Brute-Force-Lösung, sondern basiert in der Tat auf meiner Antwort auf Fraction auf die exakte Dezimalzahl, sodass es für 17, 19 usw. funktioniert, die sonst ohnehin die Ganzzahlgrenze überschreiten würden.
quelle
Mathematica, 127 Bytes
Eingang
Ausgabe
Hier sind die ersten 20 Begriffe
quelle
Haskell , 53 Bytes
f
nimmt und gibt eine ganze Zahl zurück.Probieren Sie es online!
Dies ist eine Zeitüberschreitung von 17, was praktisch jenseits der Testfälle liegt. Eine schnellere Version in 56 Bytes:
Probieren Sie es online!
Wie es funktioniert
f
generiert alle Vielfachen vonn
, konvertiert jedes in einen String, filtert diejenigen mit dem richtigen Format heraus und nimmt dann das erste.Die schnellere Version verwendet stattdessen , dass die erforderlichen Zahlen der Form sind
10^a-10^b
,a>=1
,a>b>=0
. Für Golfzwecke wird auch die Tatsache ausgenutzt, dass für das Minimuma
nur eines arbeitenb
kann, wodurch es ermöglicht wird, dasb
s in der etwas kürzeren "falschen" Reihenfolge zu erzeugen .quelle
Ruby , 38 + 1 = 39 Bytes
Verwendet
-p
Flagge.-p
umgibt das Programm mit:gets
speichert sein Ergebnis in$_
.eval
wird verwendet, um es in eine Zahl umzuwandeln, da es kürzer ist als.to_i
, dann wird rohe Gewalt angewendet, die $ _ inkrementiert, bis es mit dem regulären Ausdruck übereinstimmt."#{}"
Wenn es sich um eine String-Interpolation handelt, ist sie kürzer als ein.to_s
Aufruf, da dies Klammern erfordern würde$_+=y
. Schließlich$_
wird gedruckt.Probieren Sie es online!
Probieren Sie alle Testfälle aus!
quelle
Dyalog APL, 34 Bytes
Rekursives dfns, basierend auf Dennis 'Python-Lösung .
quelle
C ++, 106 Bytes
Ausführliches Formular:
Probieren Sie es online!
quelle
[](int n){int T=9,j=10,m;while(t%n)if(t/j){t+=m/j;j*=10;}else{t=(t+1)*9;j=10;m=t;}return t;}}
94 Bytes. Behandeln Sie es im Wesentlichen als eine Funktionstask zum Speichern von Bytes, zum Speichern nicht benötigter Klammern und zum Speichern von Typnamen und -typen mithilfe der Lambda-Funktion.Python 2 , 79 Bytes
Probieren Sie es online!
Einige Erklärungen Es findet die kleinste natürliche Formen
10**n-10**b
mit ,n>b>=0
dass teilt die Eingabe.Einige IO
quelle
PHP , 39 Bytes
Probieren Sie es online!
PHP , 52 Bytes
Probieren Sie es online!
quelle
Swift 3.0, Bytes: 121
Probieren Sie es online!
quelle
let r=
das? Ich seher
nirgendwo anders erwähntPython 3 , 62 Bytes
Diese Funktion nimmt eine ganze Zahl
n
und initialisiertm
auf Null. Dann werden alle Nullen an den Enden von entferntm
und geprüft, ob das Ergebnis nur 9 enthält, und es wird zurückgegeben,m
wenn dies der Fall ist. Falls nicht, fügt sien
anm
und überprüft erneut, usw.Probieren Sie es online!
quelle
Java (OpenJDK 8) , 66 Bytes, drosselt nicht auf 17
Probieren Sie es online!
Länger als die Lösung von @ KevinCruijssen , kann jedoch etwas größere Zahlen verarbeiten. Es berechnet die Kandidatenzahlen wie 10 ^ 6 - 10 ^ 3 = 999000. 64-Bit-Longs sind immer noch die Obergrenze und brechen für n = 23.
Kann wahrscheinlich ein bisschen golfen werden, aber es hat schon zu lange gedauert, bis es funktioniert ...
quelle
> <> , 35 Bytes
Probieren Sie es online aus oder schauen Sie es sich auf dem Fischspielplatz an !
Angenommen, die Eingabe befindet sich bereits auf dem Stapel. Suchen Sie nach Zahlen der Form 10 a - 10 b , wobei a <b (ja, das ist ein Zeichen weniger als - es dauert weniger Bytes!), Bis dies durch die Eingabe teilbar ist, und drucken Sie dann 10 b - 10 a . Dies ist viel schneller als die Brute-Force-Methode (die in> <> ohnehin schwierig wäre).
quelle
V ,
19-14BytesProbieren Sie es online!
Erläuterung
quelle
JavaScript (ES6),
51 bis49 ByteNicht die kürzeste Annäherung, aber sie ist schnell böse.
quelle
Mathematica, 82 Bytes
Unter Verwendung des Einreichungsmusters von @Jenny_mathys Antwort ...
Eingang:
Ausgabe:
Und relativ zu dem Argument in Kommentaren bei @ Jenny_mathys Antwort mit @Phoenix ...
RepeatedTiming[]
der Anwendung auf den Eingang[17]
gibtalso eine halbe Millisekunde. Sich zu einem etwas größeren Eingang
[2003]
:etwas unter 4 Sekunden.
Testtabelle: Bei den ersten 30 positiven ganzen Zahlen sind die Ergebnisse
Erläuterung: Die einzige Magie hier ist der benutzerdefinierte Iterator ("Iterator" im CS-Sinne, nicht der M'ma-Sinn).
Dies wirkt sich auf die globalen Variablen
x
, die Anzahl der führenden "9"y
, die Anzahl der nachfolgenden "0" undd
die Gesamtzahl der Ziffern aus. Wir möchten die Anzahl der Stellen durchlaufen und für jede Wahl der Anzahl der Stellen mit den meisten "0" und den geringsten "9" beginnen. Daher initialisiert der Code zuerstd
auf 1, erzwingtx
1 undy
0. Der benutzerdefinierte Iterator überprüft, ob die Zeichenfolge der "0" gekürzt werden kann. In diesem Fall wird die Zeichenfolge von "0" um eins gekürzt und die Zeichenfolge von "1" um eins erhöht. Ist dies nicht der Fall, wird die Anzahl der Stellen erhöht, die Anzahl der "0" auf eins weniger als die Anzahl der Stellen gesetzt und die Anzahl der "9" auf 1 gesetzt.d
ist der gewünschte Wert vony
.)quelle
Ti-Basic (TI-84 Plus CE),
48 bis41 ByteDie Eingabe erfolgt
Prompt
während des Programms; Die Ausgabe wird in gespeichertAns
.Erläuterung:
Versucht Zahlen der Form (10 n ) (10 m –1) = 10 k –10 m , wobei m + n = k bei 1 beginnt und zunimmt, und für jeden Wert von k wird versucht, m = 1, n = k -1; m = 2, n = k - 2; ... m = k, n = 0; bis es ein Vielfaches von findet
X
.Dies funktioniert bis zu 16; 17 gibt einen Domänenfehler aus, da
remainder(
nur Dividenden bis zu 9999999999999 (13 Neunen) akzeptiert werden und 17 9999999999999999 (16 Neunen) ausgeben sollte.quelle
QBIC , 53 Bytes
Erläuterung
quelle
C (gcc) 126 Bytes
Probieren Sie es online!
Einige Erklärungen Es findet die kleinste natürliche Formen
10**n-10**b
mit ,n>b>=0
dass teilt die Eingabe.Einige IO
quelle
Perl 5 , 23 + 2 (-pa) = 25 Bytes
Brute-Force-Methode
Probieren Sie es online!
Es ist langsam, aber winzig.
Effizientere Methode:
41 + 2 (-pa) = 43 Bytes
Probieren Sie es online!
Es funktioniert gut für jede Eingabe, aber es ist längerer Code.
quelle