Ich denke, die Collatz-Vermutung ist bereits bekannt. Aber was ist, wenn wir die Regeln umkehren?
Beginnen Sie mit einer ganzen Zahl n> = 1.
Wiederholen Sie die folgenden Schritte:
Wenn n selbst multiplizieren es mit 3 und 1 addieren.
Wenn n ungerade ist , subtrahiere 1 und dividiere es durch 2.
Stoppen Sie, wenn es 0 erreicht
Drucken Sie die iterierten Zahlen.
Testfälle:
1 => 1, 0
2 => 2, 7, 3, 1, 0
3 => 3, 1, 0
10 => 10, 31, 15, 7, 3...
14 => 14, 43, 21, 10, ...
Regeln:
Diese Sequenz funktioniert nicht für viele Zahlen, da sie in eine Endlosschleife eingeht. Sie müssen diese Fälle nicht bearbeiten. Es reicht aus, nur die obigen Testfälle auszudrucken.
Ich schlug vor, 1 zu subtrahieren und durch zwei zu dividieren, um eine gültige Ganzzahl zu erhalten, um fortzufahren, aber es ist nicht erforderlich, auf diese Weise berechnet zu werden. Sie können durch 2 teilen und in eine Ganzzahl oder eine andere Methode umwandeln, die die erwartete Ausgabe liefert.
Sie müssen auch die erste Eingabe drucken.
Die Ausgabe muss nicht als Testfall formatiert werden. Es war nur ein Vorschlag. Die iterierte Reihenfolge muss jedoch eingehalten werden.
Der kleinste Code gewinnt.
0
am Ende ausdrucken ?Antworten:
Perl 6 , 30 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine Sequenz zurückgibt.
Erläuterung:
quelle
Haskell ,
4039 BytesProbieren Sie es online!
Jetzt ohne die letzte 0.
quelle
Sauber , 53 Bytes
Probieren Sie es online!
quelle
Gelee , 9 Bytes
Probieren Sie es online!
quelle
Python 2,
545244 Bytes-2 Bytes dank Mr. Xcoder
Es muss auf jeden Fall einen schnelleren Weg geben. Seltsamerweise, als ich ein Lambda probierte, war es das gleiche bytecount. Ich halluziniere wahrscheinlich.
Probieren Sie es online!
quelle
0
jetzt optional ist, ist es kürzer, um das zweite loszuwerdenprint
Haskell ,
76 69 6156 BytesIch denke, das ist viel zu lang. Hier
l
wird eine unendliche Liste der Inverse-Collatz-Sequenz erstellt, und die anonyme Funktion in der ersten Zeile schneidet sie nur an der richtigen Stelle ab.Vielen Dank für -5 Bytes @ ØrjanJohansen!
Probieren Sie es online!
quelle
(>0)
sollte also ausreichen. Es gibt auch eineodd
Funktion.Rust ,
6564 BytesProbieren Sie es online!
quelle
05AB1E ,
1514 Bytes-1 Byte dank @MagicOctopusUrn .
Probieren Sie es online aus.
Erläuterung:
quelle
[Ð=_#Èi3*>ë<2÷
mit=
stattD,
.JAEL , 18 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 31 Byte
Probieren Sie es online!
Oder 30 Bytes in umgekehrter Reihenfolge.
quelle
Pyth , 12 Bytes
Probieren Sie es hier als Testsuite aus!
quelle
Wolfram Language (Mathematica) , 35 Byte
Probieren Sie es online!
0<Echo@# && ...&
ist eine Kurzschlussauswertung: Sie druckt den Eingang#
, prüft, ob er positiv ist, und wertet ihn aus...
. In diesem Fall...
ist#0[3#+1-(5#+3)/2#~Mod~2]
; da#0
(der nullte Schlitz) die Funktion selbst ist, ist dies ein rekursiver Aufruf3#+1-(5#+3)/2#~Mod~2
, der vereinfacht,3#+1
wann#
gerade und(#-1)/2
wann#
ungerade ist.quelle
Common Lisp , 79 Bytes
Probieren Sie es online!
quelle
PowerShell,
5352 BytesProbieren Sie es online!
Edit:
-1 Byte dank @mazzy
quelle
for(;$i)
stattdessen versuchenwhile($i)
Emojicode 0,5 , 141 Bytes
Probieren Sie es online!
quelle
Stax , 11 Bytes
Führen Sie es aus, und debuggen Sie es
quelle
MathGolf , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
x86-Maschinencode, 39 Byte
Assembly (NASM-Syntax):
Probieren Sie es online!
quelle
R ,
6661 Bytes-5 Bytes dank Robert S. beim Konsolidieren von ifelse in
if
und Entfernen von Klammern und x! = 0 bis x> 0Anstatt von
Probieren Sie es online!
quelle
perl -Minteger -nlE, 39 Bytes
quelle
Add ++ ,
383533 BytesProbieren Sie es online!
Wie es funktioniert
Zunächst definieren wir eine Funktionf( x ) Führt die invertierte Collatz-Operation mit nur einem Argument aus x gibt dann das Ergebnis aus. Das ist,
Im Funktionsmodus verwendet Add ++ ein Stapelspeichermodell, andernfalls werden Variablen verwendet. Bei der Berechnungf( x ) sieht der Stack zunächst so aus S= [ x ] .
Wir duplizieren dann diesen Wert (S= [ x , x ] . Wir ergeben dann die erste mögliche Option,3 x + 1 ( ⌊ x2⌋ , Verlassen S= [ 3 x + 1 , ⌊ x2⌋ ] .
d
), um zu ergeben3*1+
), tauschen Sie die oberen beiden Werte aus und berechnen Sie dannAls nächstes drängen wirx zu S , und berechnen Sie das Bit von x dh x%2 , wo ein%b bezeichnet den Rest beim Teilenein durch b . Das lässt uns mitS= [ 3 x + 1 , ⌊ x2⌋ , ( x%2 ) ] . Zuletzt ( x%2 ) . Wenn das so ist0 , wir geben das erste Element zurück dh 3 x + 1 , sonst geben wir das zweite Element zurück, ⌊ x2⌋ .
D
wählen wir das Element an dem von angegebenen Index ausDamit ist die Definition vonf( x ) wir haben es jedoch noch nicht in die Praxis umgesetzt. Die nächsten drei Zeilen sind vom Funktionsmodus in den Vanillemodus gewechselt, in dem wir Variablen bearbeiten. Genauer gesagt bearbeiten wir in diesem Programm nur eine Variable, die aktive Variable , die durch den Buchstaben dargestellt wird
x
. Jedoch,x
kann von Befehlen weggelassen , wo sie offensichtlich das andere Argument ist.Beispielsweisex ≤ 0 . Die Schleife ist sehr einfach, bestehend aus einer einzigen Anweisung: f( x ) Weisen Sie das dann zu
+?
ist identisch mitx+?
und weist die Eingabe zux
, aber wiex
die aktive Variable kann sie weggelassen werden. Als nächstes geben wir diex
gesamte while-Schleife aus, die so lange wiederholt wird$f>x
. Alles was dies tut ist ausgeführtx
und aktualisieren Sie esx
bei jeder Iteration der Schleife.quelle
Retina 0.8.2 , 46 Bytes
Probieren Sie es online! Erläuterung:
In Unary konvertieren.
Wiederholen, bis sich der Wert nicht mehr ändert.
Den Wert dezimal ausgeben.
Wenn es gerade ist, multiplizieren Sie mit 6 und addieren Sie 3.
Subtrahiere 1 und dividiere durch 2.
Der abschließende Zeilenumbruch kann durch Hinzufügen eines
;
vor dem unterdrückt werden{
.quelle
Rot , 70 Bytes
Probieren Sie es online!
quelle
Schläger , 75 Bytes
Probieren Sie es online!
Entspricht der Common Lisp-Lösung von JRowan.
quelle
C # (.NET Core) , 62 Byte
Probieren Sie es online!
Ungolfed:
quelle
Dart , 49 Bytes
Probieren Sie es online!
quelle
Gambit-Schema (gsi) , 74 Bytes
Probieren Sie es online!
quelle