Wir können die Teilbarkeit Streak definieren k
eine Reihe n
von der kleinsten nicht-negativen ganzen Zahl zu finden , k
so dass n+k
durch nicht teilbar ist k+1
.
Herausforderung
Schreiben Sie in der Sprache Ihrer Wahl ein Programm oder eine Funktion, die den Divisibility Streak Ihrer Eingabe ausgibt oder zurückgibt.
Beispiele:
n=13:
13 is divisible by 1
14 is divisible by 2
15 is divisible by 3
16 is divisible by 4
17 is not divisible by 5
Der Teilbarkeitsstreifen von 13
ist4
n=120:
120 is divisible by 1
121 is not divisible by 2
Der Teilbarkeitsstreifen von 120
ist1
Testfälle:
n DS
2 1
3 2
4 1
5 2
6 1
7 3
8 1
9 2
10 1
2521 10
Weitere Testfälle finden Sie hier .
Anmerkungen
- Basierend auf Projekt Euler Problem 601
- Diese Sequenz ist in OEIS zu finden und um 1 nach unten verschoben.
Regeln
- Sie können davon ausgehen, dass die Eingabe größer als 1 ist.
Wertung
Code-Golf : Die Einsendung mit der niedrigsten Punktzahl gewinnt.
k + 1
2, wobeik
die kleinste positive ganze Zahl ist. Entschuldigung für den Nitpick.k
das sich nicht teiltn-1
?n=7
wok=3
:n-1
ist teilbar durchk
.+1
.Antworten:
Pyth ,
65 BytesProbieren Sie es online!
quelle
Java 8,
44424139 BytesDurchgestrichen 44 ist immer noch regulär 44; (
-2 Bytes dank @LeakyNun .
-1 Byte dank @TheLethalCoder .
-2 Bytes dank @Nevay .
Erläuterung:
Probieren Sie es hier aus.
quelle
Haskell , 35 Bytes
Probieren Sie es online!
Using
until
ist auch 35 Bytesquelle
Schale , 7 Bytes
Probieren Sie es online!
quelle
05AB1E ,
76 BytesProbieren Sie es online!
Alternative 7-Byte-Lösungen:
<DLÖγнg
Ls<ÑKн<
quelle
JavaScript (ES6), 28 Byte
Probier es aus
quelle
Mathematica,
3027 BytesEine unbenannte Funktion, die ein ganzzahliges Argument akzeptiert.
Probieren Sie es auf Wolfram Sandbox
Verwendung:
quelle
Perl 5 ,
2321 + 1 (-p) = 22 BytesProbieren Sie es online!
quelle
Python 2 , 35 Bytes
Probieren Sie es online!
quelle
Cubix , 17 Bytes
Probieren Sie es online!
Cubified
I1
Richten Sie den Stapel mit Eingabe und Divisor ein%?
mach mod und teste;)qU)uqU
Wenn 0, Ergebnis entfernen und Eingabe und Divisor erhöhen. Etwas runder Pfad, zu dem man zurückkehren kann%
/;(O@
Wenn nicht 0, Ergebnis löschen, Divisor dekrementieren, ausgeben und beendenSchau es dir an
quelle
Python 2 ,
4341 Bytes2 Bytes dank Leaky Nun gespart !
Probieren Sie es online!
Python 2 , 40 Bytes
Probieren Sie es online!
quelle
Python 2 ,
4440 Bytes-4 Bytes dank Leaky Nun.
Probieren Sie es online!
quelle
Schnelle 4 , 56 Bytes
Dies ist eine vollständige Funktion
f
mit einem ganzzahligen Parameteri
, der die Ausgabe druckt.Probieren Sie es hier aus.
Schnelle 4 , 56 Bytes
Dies ist eine anonyme Funktion, die das Ergebnis zurückgibt.
Probieren Sie es hier aus.
Schauen Sie sich die Test Suite an!
quelle
C # (Mono) ,
41 bis39 BytesIm Wesentlichen eine Portierung von @Kevin Cruijssens Java 8-Antwort mit weiterem Golfen.
Probieren Sie es online!
quelle
Gleichstrom , 28 Bytes
Probieren Sie es online!
Das fühlt sich mit dem Inkrementieren und dem endgültigen Dekrementieren wirklich suboptimal an, aber ich kann keinen Weg finden, es zu verbessern. Grundsätzlich inkrementieren wir nur einen Zähler
i
und unseren Startwert, solange der Wert modi
weiterhin Null ist. Wenn dies nicht zutrifft, subtrahieren wir einen Zähleri
und drucken ihn aus.quelle
Gaia , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
J, 17 Bytes
Probieren Sie es online!
Ich glaube, hier ist noch Platz zum Golfen.
Erklärung (ungolfed)
Das cap (
[:
) soll sicherstellen, dass J das letzte Verb ({.@I.
) nicht als Teil eines Hakens behandelt.Das einzig Seltsame an dieser Antwort ist, dass
I.
der Index jeder Zahl ungleich Null so oft wie der Wert dieser Zahl dupliziert wird. z.BAber es spielt keine Rolle, da wir sowieso den ersten Index wollen (und da
i.
es einen aufsteigenden Bereich gibt, wissen wir, dass der erste Index der kleinste Wert sein wird).Zum Schluss noch ein kurzer Beweis, dass es gültig ist, die Teilung nur bis zu zu überprüfen
n
.Wir fangen an, die Teilbarkeit mit zu überprüfen
1 | n
, und gehen daher davon aus, dass der Streifen so weit geht, sobald wir die Teilbarkeit mit überprüftn
haben,n | 2n - 1
die niemals wahr sein wird (2n - 1 ≡ n - 1 (mod n)
). Daher wird der Streifen dort enden.quelle
Japt , 7 Bytes
Online testen!
quelle
x86-Maschinencode, 16 Byte
Die obige Funktion nimmt einen einzelnen Parameter
n
in dasECX
Register auf. Es berechnet seinen Teilbarkeitsstreifenk
und gibt diesen über dasEAX
Register zurück. Es entspricht der 32-Bit- Fastcall-Aufrufkonvention und kann daher mit Microsoft- oder Gnu-Compilern problemlos aus C-Code aufgerufen werden .Die Logik ist ziemlich einfach: Es wird nur ein iterativer Test ab 1 durchgeführt. Er ist funktional identisch mit den meisten anderen Antworten hier, aber handoptimiert für die Größe. Viele nette 1-Byte - Befehle gibt, einschließlich
INC
,DEC
,CDQ
, undXCHG
. Die hartcodierten Operanden für die Division haben uns ein wenig verletzt, aber nicht so schlimm.Probieren Sie es online!
quelle
PHP , 34 Bytes
Probieren Sie es online!
Einfach genug. Überprüft den Rest der Division (mod) jeder Schleife, während jeder Wert erhöht wird, und gibt aus, wenn die Zahl nicht mehr teilbar ist.
quelle
SOGL V0.12 , 8 Bytes
Probieren Sie es hier aus!
Nicht schlecht für eine Sprache, die für ganz andere Herausforderungen gemacht ist.
Erläuterung:
quelle
Mathematica, 40 Bytes
Probieren Sie es online! (Mathematik)
Mathematischer Ansatz: n + k ist genau dann durch k + 1 teilbar, wenn n-1 durch k + 1 teilbar ist. Und n-1 ist nicht durch n teilbar, ebenso
Range@#
wie genügend Zahlen.Ursprünglich habe ich vor zu verwenden
Min@Complement[Range@#,Divisors[#-1]]-1&
, aber das funktioniert auch.quelle
Julia 0.6.0
(47 Bytes)(38 Bytes)n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
Probieren Sie es online!
9 Bytes wurden dank Mr.Xcoder gekürzt
quelle
n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
C (gcc) , 34 Bytes
Probieren Sie es online!
quelle
i--
stattdessen vorn=i-1
Batch, 70 Bytes
Das Einzige, was dies tut, ist, das größte zu finden
i
, das sichLCM(1..i)
teiltn-1
.quelle
R , 43 Bytes
Anonyme Funktion.
Überprüfen Sie alle Testfälle!
quelle
Aceto ,
2827 BytesIch könnte ein Byte sparen, wenn ich nicht beenden muss.
Erläuterung:
Wir verwenden drei Stapel: Der linke Stapel enthält einen Zähler, der bei 2 beginnt, der rechte die angegebene Zahl (oder ihre Inkremente), und der mittlere Stapel wird für die Modulo-Operationen verwendet. Wir könnten natürlich alles in einem Stapel erledigen, aber auf diese Weise können wir die äußeren Stapel so einstellen, dass sie "klebrig" sind (Werte, die auftauchen, werden nicht wirklich entfernt) und uns viele Duplizierungsvorgänge ersparen. Hier ist die Methode im Detail:
Lesen Sie eine Ganzzahl, erhöhen Sie sie, machen Sie den aktuellen Stapel klebrig und "verschieben" Sie ihn (und uns) auf den Stapel links:
Gehe noch einen Stapel nach links, drücke eine wörtliche 2 und mache diesen Stapel auch klebrig. Merken Sie sich diese Position im Code (
@
) und "verschieben" Sie einen Wert und uns selbst wieder in den mittleren Stapel.Jetzt testen wir: Ist das Modulo der beiden oberen Zahlen nicht 0? Wenn ja, springe zum Ende, ansonsten gehe einen Stapel nach rechts, erhöhe und drücke den Wert und uns in die Mitte. Dann gehe zum linken Stapel, erhöhe ihn ebenfalls und springe zurück zu der Markierung, die wir vorher gesetzt haben.
Wenn das Ergebnis des Modulos nicht Null war, kehren wir die Position um, an der sich die IP bewegt, gehen einen Stapel nach links (wo unser Zähler lebt), dekrementieren ihn und drucken den Wert aus.
quelle
Ruby,
343231 BytesEin rekursives Lambda. Ruby ist noch neu, daher sind Vorschläge willkommen!
Probieren Sie es online!
quelle
F #,
86 Bytes84 BytesProbieren Sie es online!
Bearbeiten: -2 Zeichen von Oliver
quelle
r = if
?Befunge , 19 Bytes
Probieren Sie es online!
quelle