Myślę, że hipoteza Collatza jest już dobrze znana. Ale co, jeśli odwrócimy zasady?
Zacznij od liczby całkowitej n> = 1.
Powtórz następujące kroki:
Jeśli n jest parzyste , pomnóż go przez 3 i dodaj 1.
Jeśli n jest nieparzyste , odejmij 1 i podziel ją przez 2.
Zatrzymaj się, gdy osiągnie 0
Wydrukuj iterowane liczby.
Przypadki testowe:
1 => 1, 0
2 => 2, 7, 3, 1, 0
3 => 3, 1, 0
10 => 10, 31, 15, 7, 3...
14 => 14, 43, 21, 10, ...
Zasady:
Ta sekwencja nie działa dla wielu liczb, ponieważ wchodzi w nieskończoną pętlę. Nie musisz zajmować się tymi sprawami. Wystarczy wydrukować powyższe przypadki testowe.
Zasugerowałem, aby odjąć 1 i podzielić przez dwa, aby podać prawidłową liczbę całkowitą, aby kontynuować, ale nie jest konieczne obliczanie w ten sposób. Możesz podzielić przez 2 i rzutować na liczbę całkowitą lub dowolną inną metodę, która da oczekiwany wynik.
Musisz również wydrukować początkowe dane wejściowe.
Dane wyjściowe nie muszą być sformatowane jako przypadki testowe. To była tylko sugestia. Jednak kolejność iterowana musi być przestrzegana.
Najmniejszy kod wygrywa.
0
na końcu?Odpowiedzi:
Perl 6 , 30 bajtów
Wypróbuj online!
Anonimowy blok kodu, który zwraca sekwencję.
Wyjaśnienie:
źródło
Haskell ,
4039 bajtówWypróbuj online!
Teraz bez końcowego 0.
źródło
Czysty , 53 bajty
Wypróbuj online!
źródło
Galaretka , 9 bajtów
Wypróbuj online!
źródło
Python 2,
545244 bajty-2 bajty dzięki Mr. Xcoder
Z pewnością musi być szybszy sposób. Dziwne, że kiedy próbowałem lambda, było tak samo. Prawdopodobnie mam halucynacje.
Wypróbuj online!
źródło
0
jest to teraz opcjonalne, więc krócej jest pozbyć się drugiegoprint
Haskell ,
76 69 6156 bajtówWydaje mi się, że to za długo. Tutaj
l
powstaje nieskończona lista sekwencji odwrotnej-collatz, a anonimowa funkcja w pierwszym wierszu po prostu odcina ją we właściwym miejscu.Dzięki za -5 bajtów @ ØrjanJohansen!
Wypróbuj online!
źródło
(>0)
powinno wystarczyć. Jest teżodd
funkcja.Rdza ,
6564 bajtówWypróbuj online!
źródło
05AB1E ,
1514 bajtów-1 bajt dzięki @MagicOctopusUrn .
Wypróbuj online.
Wyjaśnienie:
źródło
[Ð=_#Èi3*>ë<2÷
z=
zamiastD,
.JAEL , 18 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 31 bajtów
Wypróbuj online!
Lub 30 bajtów w odwrotnej kolejności.
źródło
Pyth , 12 bajtów
Wypróbuj tutaj jako pakiet testowy!
źródło
Wolfram Language (Mathematica) , 35 bajtów
Wypróbuj online!
0<Echo@# && ...&
to ocena zwarcia: drukuje wejście#
, sprawdza, czy jest ono dodatnie, a jeśli tak, ocenia...
. W tym przypadku...
jest#0[3#+1-(5#+3)/2#~Mod~2]
; ponieważ#0
(szczelina zerowa) jest samą funkcją, jest to wywołanie rekurencyjne3#+1-(5#+3)/2#~Mod~2
, które upraszcza,3#+1
kiedy#
jest parzysta, a(#-1)/2
kiedy#
jest nieparzysta.źródło
Common Lisp , 79 bajtów
Wypróbuj online!
źródło
PowerShell,
5352 bajtyWypróbuj online!
Edycja:
-1 bajt dzięki @mazzy
źródło
for(;$i)
zamiast tegowhile($i)
Emojicode 0,5 , 141 bajtów
Wypróbuj online!
źródło
Stax , 11 bajtów
Uruchom i debuguj
źródło
MathGolf , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
kod maszynowy x86, 39 bajtów
Zestaw (składnia NASM):
Wypróbuj online!
źródło
R ,
6661 bajtów-5 bajtów dzięki Robertowi S. w konsolidacji ifelse
if
i usuwaniu nawiasów, a x! = 0 do x> 0zamiast
Wypróbuj online!
źródło
perl -Minteger -nlE, 39 bajtów
źródło
Dodaj ++ ,
383533 bajtówWypróbuj online!
Jak to działa
d
3*1+
D
x
x
+?
x+?
x
x
x
$f>x
x
x
źródło
Retina 0.8.2 , 46 bajtów
Wypróbuj online! Wyjaśnienie:
Konwertuj na unary.
Powtarzaj, aż wartość przestanie się zmieniać.
Wydrukuj wartość dziesiętną.
Jeśli jest równy, pomnóż przez 6 i dodaj 3.
Odejmij 1 i podziel przez 2.
Końcowy znak nowej linii można pominąć, dodając znak
;
przed{
.źródło
Czerwony , 70 bajtów
Wypróbuj online!
źródło
Rakieta , 75 bajtów
Wypróbuj online!
Odpowiednik rozwiązania Common Lisp firmy JRowan.
źródło
C # (.NET Core) , 62 bajty
Wypróbuj online!
Nie golfowany:
źródło
Dart , 49 bajtów
Wypróbuj online!
źródło
Schemat Gambit (gsi) , 74 bajty
Wypróbuj online!
źródło