Reihenfolge:
- Wir beginnen um
1
. - Wir addieren zuerst den aktuellen 1-indizierten Wert zur vorherigen Zahl in der Sequenz.
- Dann wenden wir die folgenden mathematischen Operationen an, um sie auf diesen aktuellen Wert anzuwenden:
- Teilbar durch
2
? => Ergänzung - Teilbar durch
3
? => Subtraktion - Teilbar durch
4
? => (Addition UND) Multiplizieren - Nicht teilbar durch weder
2
,3
noch4
? -> Weiter mit aktuellem Summenergebnis
- Teilbar durch
Ausgabe:
Gib die ersten 100 Zahlen in dieser Reihenfolge aus:
1, 1, 21, 25, 30, 216, 223, 223, 2169, 2179, 2190, 2202, 2215, 2215, 2245, 2261, 2295, 2295, 2333, 2353, 2395, 2417, 56649, 56649, 56699, 56725, 1533033, 1533061, 1533090, 45993600, 45993631, 45993631, 1517792001, 1517792035, 1517792070, 1517792106, 1517792143, 1517792143, 1517792221, 1517792261, 1517792343, 1517792343, 1517792429, 1517792473, 1517792563, 1517792609, 71336257041, 71336257041, 71336257139, 71336257189, 3638149121841, 3638149121893, 3638149121946, 196460052588000, 196460052588055, 196460052588055, 11198222997525633, 11198222997525691, 11198222997525750, 11198222997525810, 11198222997525871, 11198222997525871, 11198222997525997, 11198222997526061, 11198222997526191, 11198222997526191, 11198222997526325, 11198222997526393, 11198222997526531, 11198222997526601, 795073832824398753, 795073832824398753, 795073832824398899, 795073832824398973, 59630537461829934225, 59630537461829934301, 59630537461829934378, 4651181922022734887568, 4651181922022734887647, 4651181922022734887647, 376745735683841525912529, 376745735683841525912611, 376745735683841525912694, 376745735683841525912778, 376745735683841525912863, 376745735683841525912863, 376745735683841525913037, 376745735683841525913125, 376745735683841525913303, 376745735683841525913303, 376745735683841525913485, 376745735683841525913577, 376745735683841525913763, 376745735683841525913857, 35790844889964944961834465, 35790844889964944961834465, 35790844889964944961834659, 35790844889964944961834757, 3543293644106529551221660545, 3543293644106529551221660645
Hier sind die ersten 10 Zahlen in der Reihenfolge mit Erklärung:
// Starting number of the sequence:
1
// 1 (previous number in the sequence)
// + 2 (current index in 1-indexed sequence)
// = 3 -> 3 - 2 (3 is divisible by 3, so we subtract the current index 2)
// = 1
1
// 1 (previous number in the sequence)
// + 3 (current index in 1-indexed sequence)
// = 4 -> 4 + 3 (4 is divisible by 2, so we first add the current index 3)
// = 7 -> 7 * 3 (and 4 is also divisible by 4, so we then also multiply the current index 3)
// = 21
21
// 21 (previous number in the sequence)
// + 4 (current index in 1-indexed sequence)
// = 25 (25 is not divisible by 2, 3 nor 4)
25
// 25 (previous number in the sequence)
// + 5 (current index in 1-indexed sequence)
// = 30 -> 30 + 5 (30 is divisible by 2, so we first add the current index 5)
// = 35 -> 35 - 5 (and 30 is also divisible by 3, so we then also subtract the current index 5)
// = 30
30
// 30 (previous number in the sequence)
// + 6 (current index in 1-indexed sequence)
// = 36 -> 36 + 6 (36 is divisible by 2, so we first add the current index 6)
// = 42 -> 42 - 6 (and 36 is also divisible by 3, so we then also subtract the current index 6)
// = 36 -> 36 * 6 (and 36 is also divisible by 4, so we then also multiply the current index 6)
// = 216
216
// 216 (previous number in the sequence)
// + 7 (current index in 1-indexed sequence)
// = 223 (223 is not divisible by 2, 3 nor 4)
223
// 223 (previous number in the sequence)
// + 8 (current index in 1-indexed sequence)
// = 231 -> 231 - 8 (231 is divisible by 3, so we subtract the current index 8)
// = 223
223
// 223 (previous number in the sequence)
// + 9 (current index in 1-indexed sequence)
// = 232 -> 232 + 9 (232 is divisible by 2, so we first add the current index 9)
// = 241 -> 241 * 9 (and 232 is also divisible by 4, so we then also multiply the current index 9)
// = 2169
2169
// 2169 (previous number in the sequence)
// + 10 (current index in 1-indexed sequence)
// 2179 (2179 is not divisible by 2, 3 nor 4)
2179
Herausforderungsregeln:
- Wenn Ihre Sprache nichts unterstützt, das größer als 2 31 -1 ist, können Sie die Sequenz bis zu diesem Maximum fortsetzen (also die ersten 46 Zahlen, bis - und einschließlich -
1,517,792,609
). - Das Ausgabeformat ist flexibel. Sie können ein Array oder eine Liste zurückgeben, eine durch Leerzeichen, Kommas usw. getrennte Zeichenfolge. Ihr Anruf.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
code-golf
sequence
number-theory
division
Kevin Cruijssen
quelle
quelle
Antworten:
05AB1E ,
2423 Bytes-1 Byte dank Kevin Crujissen
Probieren Sie es online!
Erläuterung:
quelle
UX
entfernt werden kann, aber ich kann es nicht. Ich lande auch bei 24 Bytes, weil es bei0
statt beginnt1
. Ich habe es jetzt vorher erhöht, aber dann müssen wir101
mal Endlosschleifen statt100
.. Ah na ja.UX
ist ein Dorn im Auge. Ich habe versucht , für eine Weile , um es loszuwerden und mit einem Bündel von 24 und 25 Variationen endete:1тF=NÌ©+DÑ3L>Ãv®…-*+yè.V
,1тL>v=y+©3F®NÌÖiy…+-*Nè.V
... Ich hielt es nicht für die Zählervariable verwenden, das ist interessant.тF
stattƵ0µ
. Ich habe das in bearbeitet, danke! (PS: Es sollte wirklich ein¼¾
¼¾
wäre nett, obwohl ich es, um ganz ehrlich zu sein, fast nie so benutze. Das Single-Byte-Builtin, das ich momentan am meisten bevorzuge, ist eine zweite©®
Variable, die nicht popt . Beginnen""
Sie vielleicht mit einer leeren Zeichenfolge, wie Sie bereits in einer anderen Herausforderung erwähnt haben.R
858279767270 Bytesungolfed:
Vielen Dank an @rturnbull für den Hinweis, dass ich die Module überprüfen kann,
(!z%%3)
anstatt sie(z%%3<1)
zu verwenden, und dass die Definitionz
eines Ereignisses bei der ersten Verwendung erfolgt.3-4 Zeichen durch missbräuchliche Vektorerweiterung weggolfen: Die Antwort hat ursprünglich begonnen,
s=1:56...
aber wir müssen das nicht tun, die Länge vons
wird nach Bedarf verlängert.3 weitere Bytes gespart, indem die letzte Bedingung durch einen Aufruf der
"if"
Funktion ersetzt wurde (ja, es ist eine ordnungsgemäße Funktion in R!)Sparte 4 weitere Bytes durch Ersetzen
s
durchT
. Dies ist eine eingebaute Entsprechung,TRUE
die auch gleich ist1
. Ich erkannte es zur gleichen Zeit wie @rturnbull (ehrlich!)Dies leidet unter einigen numerischen Problemen, sobald wir 2 ^ 52 überschreiten, aber ich kann nichts dagegen tun --- R kann nur
double
Typen für Zahlen verwenden, die größer sind als2^31-1
, aber sie speichern Ganzzahlen bis zu 2 ^ 52 genau. Daher darf ich nur die ersten 56 Terme ausgeben (der letzte Term, der "richtig" ist), wodurch ein Byte über den 100-Längen-Fall gespart wird.Hier ist die Ausgabe der 56-fachen Version:
quelle
1,517,792,609
). ", Aber dies von Natürlich gilt auch für andere Nummern als 32-Bit. Wenn R nichts Größeres verarbeiten kann, sind die ersten 56 Zahlen völlig in Ordnung. Und ja, wenn Sie wissen, dass es niemals höher als 56 werden kann, können Sie das100
to ändern56
, um ein Byte zu speichern.z%%2<1
(usw.)!z%%2
.!
nicht%%
, aber anscheinend ist es so!T
und verwendens
, um das zu entfernens=1;
und weitere vier Bytes zu sparen. Es ist möglich, die Definition vonz
in die Definition vons[i]
(T[i]
nun ja) wie folgt zu falten :T[i]=((z=i+T[i-1])+ ...
Dies bedeutet, dass Sie die geschweiften Klammern verlieren können, wodurch weitere Bytes eingespart werden. EDIT: Oh, ich sehe, dass Sie denT
Trick getan haben , während ich meinen Kommentar schrieb! Große Köpfe denken ähnlich, sagen sie.Python 3,
8278767472 BytesAusgabe:
Vorschläge sind willkommen!
quelle
while
Schleife und ordnen Sie die Arithmetik für -2 neu an .05AB1E ,
343130 BytesProbieren Sie es online!
Erläuterung
quelle
Python 2, 76 Bytes
Ziemlich Standardimplementierung, ich denke, mit einer exec-Anweisung anstatt einer while-Schleife wurden 2 Bytes oder so gespart. Eine rekursive Methode kann kürzer sein, ich stelle mir vor, dass xnor bald auftaucht;)
Wenn ich die Updates verwenden würde, die TheNumberOne herausgefunden hat, wäre ich bei 69 Bytes (aber dann würde ich kopieren)
Ausgabe:
quelle
JavaScript,
7563 BytesAndere Version:
Beide enden bei Index 57 (0-indiziert), da dann die Ausgabe die Größe der sicheren JavaScript-Nummer (2 53 - 1) überschreitet . Es stellt sich heraus, dass eine Schleife auch mit ES6 viel kürzer ist als eine rekursive Funktion:
Dieser gibt ein Array der ersten 57 Elemente zurück.
quelle
map
Version auch der Vollständigkeit halber ausprobiert und sie hat auch 75 Bytes erreicht.Brain-Flak
476 466 462 456446 Bytes6 Bytes dank Weizen-Assistent gespart
Probieren Sie es online!
Das ist wirklich langsam. TIO kann nicht mit den ganzen 100 Zahlen umgehen (das Limit scheint 22 oder 23 zu sein). In diesem Beispiel werden also nur die ersten 20 generiert, aber der Code würde auch für 100 funktionieren.
Kurze Erklärung:
quelle
({}<>[({})]<>)(<()>)
kann ersetzt werden durch(<({}<>[({})]<>)>)
Java 7, 316 Bytes
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
C #, 120 Bytes
So wie kein gesunder Mensch in Java Golf spielen würde, sollte kein gesunder Mensch in C # Golf spielen! Aber scheiß drauf, ich wollte sehen, was ich kann. Das
1M
Castingf
ist eine Dezimalzahl, die genau genug für diese Antwort ist, ohne dass ich schreiben mussdecimal
. Durch das Inkrementieren an Ort und Stelle werden außerdem einige Bytes in meiner Python-Antwort gespart. Am Ende sind es noch 50 Bytes länger.Hier ist die lesbarere (und lauffähigere) Version:
quelle
while
,for
indem Sie denfor(int n=1;n<101;)
void k(){for(decimal f=1,d,n=1;n<101;)Console.WriteLine(f=((d=++n+f)+n*((d%2<1?1:0)-(d%3<1?1:0)))*(d%4<1?n:1));}
Batch, 110 Bytes
Verwendet die Formel von @ETHproductions, wurde jedoch leicht angepasst, da Batch keine hat
?:
. Batch verwendet 32-Bit-Ganzzahlen mit Vorzeichen, sodass die Schleife bei 46 endet.quelle
Perl, 75 Bytes
Der Code gibt jeden Wert in einer neuen Zeile aus und berechnet alle 100 Werte.
quelle
-Mbigint
, keine Klammer um1..100
, und!($a%2)*$_
statt($a%2?0:$_)
(dasselbe füra%3..
) sollte ein paar Bytes speichern;)Haskell,
7064 Bytesscanl1(#)[1..100]
gibt die Liste mit den ersten 100 Elementen zurück. Ein Byte weniger, wenn ich im Bereich 2 ^ 31 bleiben kann (->[1..46]
).scanl1
ist wiefoldl1
, sammelt aber die Zwischenergebnisse in einer Liste. Die Teilbarkeitstests werden über die Hilfsfunktion durchgeführt,%
die zurückgibt,0^0 = 1
ob sie teilbar ist oder0^x = 0
nicht.quelle
J, 46 Bytes
Wendet die in der Challenge beschriebene Methode an.
Verwendung
Mit dem zusätzlichen Befehl
(,.~#\)
werden Indizes zu jedem Wert hinzugefügt.quelle
Perl 6 , 62 Bytes
Probieren Sie es online!
WIRKLICH musste ich arbeiten, um meine Byteanzahl unter die der anderen nicht-golfsprachigen Lösungen zu bringen.
quelle