Niewypowiedziana liczba to liczba, która jest podzielna przez siedem lub ma siedem jako jedną z jej cyfr. Gra dla dzieci polega na pomijaniu niewypowiedzianych liczb
1 2 3 4 5 6 ( ) 8 9 10 11 12 13 ( ) 15 16 ( ) 18 ...
Wersja gry Cantora to sekwencja zdefiniowana przez rekurencyjne wypełnianie sekwencji „1 2 3 4 5 6 () 8 ...” w powyższych lukach ().
1 2 3 4 5 6 1 8 9 10 11 12 13 2 15 16 3 18 19 20 4 22 23 24 25 26 5 6 29 30 31 32 33 34 1 36 8 38 ...
Wydrukuj / wydrukuj przynajmniej pierwsze 7 ^ 7 liczb nieopisanej gry liczbowej Cantora ...
Chociaż definicja jest podana rekurencyjnie, nie ma obowiązku używania rekurencji w kodzie.
To jest golf golfowy , więc wygrywa program z najkrótszą liczbą bajtów!
Uwaga: Suma liczb od 1 do 7 ^ 7 wynosi 203511962727. Ostatnie 10 liczb w tym zakresie to 823534 823535 221563 108068 823538 823539 823540 823541 823542 221565.
Zrzut zrzutu 1000 pierwszych iteracji: http://pastebin.com/Ksiu9Svf
Odpowiedzi:
Pyth ,
252322 bajtówDzięki @Maltysen za -2 bajty
Program, który drukuje nieskończony strumień.
Wypróbuj online! (Wydajność jest płukana w odstępach czasu i kończy się co 1 minutę)
Jak to działa
źródło
7
jest liczbą pierwszą, więc podzielności można dokonać poprzez sprawdzenie faktoryzacjiPython 2,
77757470 bajtówDzięki @MartinEnder za sugerowanie limitu
9e5
który Ende r d aż po zmianie pracy.Dzięki @mschauer za zasugerowanie nieskończonego strumienia, oszczędzającego 4 bajty.
Jest to generator, który daje nieskończony strumień liczb.
źródło
if n%7<1or'7'in`n`else n
może być nieco szybszy (ta sama liczba bajtów), ponieważn%7<1
jest szybszy niż sprawdzanie łańcucha ior
powoduje zwarcie. Szkoda, żeyield[n,next(i)][n%7<1or'7'in`n`]
to nie zadziała.Perl,
47464139 bajtówZaoszczędź 5 bajtów dzięki @Dada
Wypróbuj online! TIO Nexus, teraz z obsługą Perla! Spowoduje to obcięcie wyniku po pewnym momencie, ale jeśli masz zainstalowany Perl, możesz uruchomić go lokalnie, aby uzyskać pełne wyjście.
Kod wykorzystuje kilka dziwnych dziwactw składni Perla, więc opiszę poniżej, jak to działa.
Podział kodu:
źródło
say$a[@a]=$_=...
wygrać 2 bajty, jeśli się nie mylę.$_
, oszczędza mi 5 bajtów. Dzięki!PHP,
80 (Wahooka) 5754 bajtówChociaż pomysł pochodzi od Wahooka. Myślę, że moja wersja jest na tyle inna, że stanowi własną odpowiedź:
źródło
Haskell,
6766 bajtówf
to nieskończona lista liczb.Wypróbuj online!
f
rozpoczyna nową iterację od1
oraz indeks, którego liczbę należy wybrać na 0. Za każdym razem, gdy jest przerwa, bierzemy nową iterację, wybierz jejith
element i kontynuujemy bieżącą iteracjęi+1
. Jeśli nie ma przerwy, bierzemy bieżący numerx
i kontynuujemy bez zwiększaniai
.Edycja: -1 bajt dzięki @BMO.
źródło
MATL ,
2625 bajtówWypróbuj online! z
9e5
zastąpionym przez9e4
, aby maksymalny czas działania i wielkość wyjściowa kompilatora online nie zostały przekroczone.Jak to działa
Używa iteracji zamiast rekurencji. (W rzeczywistości MATL nie ma rekurencji).
Najpierw generowana jest tablica liczb od
1
do9e5
(to wystarczy, ponieważ9e5
przekracza7^7
). Następnie, numery, które są wielokrotnością7
lub mają7
jako cyfry są identyfikowane i zastąpione1
,2
... Proces powtórzyć dopóki nie istnieją żadne numery, które muszą zostać wymienione.źródło
Tcl , 121 bajtów
Trywialne rozwiązanie wykorzystujące nieskończoną pętlę, nic szczególnego ..
Nie golfowany:
źródło
incr
. A jeśli wersja tcl> = 8,6,incr
zakłada pierwszą iterację przyrost nowej zmiennej od0
do,1
jeśli ta zmienna nie była wcześniej ustawiana; dzięki czemu możesz pozbyć się pierwszych dwóchset
instrukcji.PHP,
10680 bajtówDziękujemy Ismael Miguel za pomoc w rozwiązaniu trójskładnikowym i krótszym kodzie pętli używającym zamiast zamiast.
Nie można zweryfikować ostatnich części pełnej sekwencji z powodu maksymalnego czasu działania PhpFiddle wynoszącego 30 sekund. Wydaje się, że działa co najmniej do 1 K na podstawie danych wyjściowych dostarczonych przez PO.
Golf:
Oryginalna wersja gry w golfa :
źródło
for($n=1;;$n++)echo$a[]=!(strpos($n,7)>-1||$n%7==0)?"$n ":array_shift($a)." ";
Nie znam liczby bajtów, ale jestem pewien, że jest ona dużo mniejsza niż 106 bajtów. Wypróbuj i sprawdź, czy to działa.for($n=1;;$n++)echo$a[]=strpos($n,"7")>-1||$n%7==0?array_shift($a)." ":"$n ";
. Nie jestem pewien, czy można zastąpić$n%7==0
z!$n%7
ale warto spróbować.for(;;)echo$a[]=strpos(++$n,55)<-1&&$n%7?"$n ":$a[++$b-1];
(58 bajtów).++$b-1
ponieważ$a[null] === null
Julia, 62 bajty
Nic fajnego. Używa, że sekwencją w przerwach jest sama sekwencja. Wykonuje nadmierne kopie tablic, aby zaoszczędzić niektóre bajty.
źródło
Perl 6 ,
74 57 5453 bajtówSpróbuj
Rozszerzony:
Test:
źródło
~7
zamiast'7'
.Cejlon, 202 bajty
To nie jest funkcja, ale deklaracja obiektu implementująca nieskończoną sekwencję (Iterable). Obiekt można wydrukować bezpośrednio,
print(u)
generując to:{ 1, 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, 12, 13, 2, 15, 16, 3, 18, 19, 20, 4, 22, 23, 24, 25, 26, 5, 6, 29, 30, ... }
Aby wydrukować więcej, użyj
printAll(u)
. Poniższy kod wykorzystuje znaki nowej linii, a także drukuje sumę (i pierwszych 30 elementów pokazanych powyżej):Oto nieposkromiona i skomentowana wersja:
źródło
Rubinowy, 80 bajtów
l=->x{x%7==0||x.to_s[/7/]};a=(1..100);b=a.reject &l p a.map{|x|!l[x]?x:b.shift}
Pierwsze zgłoszenie, jestem pewien, że można to poprawić :)
źródło
34
(która jest8
obecnie) powinna być7
, ale ponieważ7
jest to niewymowna liczba, program powinien rozpocząć trzecią iterację i zamiast tego wydrukować1
.Dyalog APL , 39 bajtów
{(⍵⍴⍨⍴i)@(i←⍸('7'∊¨⍕¨⍵)∨0=7|⍵)⊢⍵}⍣≡⍳7*7
⍳7*7
wynosi 1 2 3 ... 7 7{ }⍣≡
jest operatorem punktu stałego - stosuj funkcję wielokrotnie, aż wynik się ustabilizujeA@I⊢B
zmienić operatora - wymienić elementy dla indeksówI
wB
zA
0=7|⍵
maska bitowa, dla której argument można podzielić przez 7'7'∊¨⍕¨⍵
maska bitowa, dla której format dziesiętny argumentu zawiera 7∨
lub⍸
przy jakich indeksach jest prawdą jedna z powyższych mas bitowych?i←
Przypisać doi
⍵⍴⍨⍴i
przekształć argument na liczbę elementów wi
źródło
C
157155 bajtówWygląda dobrze, nie zadałem sobie trudu, aby w pełni sprawdzić. Podnosi do 999999, który jest najwyraźniej wystarczająco duży.
Wersja bez golfa:
Wersja częściowo golfowa:
źródło
else
?(r=0)
większość czasu nie potrzebuję też aparatów ortodontycznych . Ale niektóre kompilatory są wybredne. Jestem zbyt leniwy, by teraz sprawdzić specyfikację.R, 86 bajtów
Korzysta z wbudowanej Prawdy R
T
(inicjowanej doTRUE
/1
) do zliczania liczb w sekwencji oraz wartości FalsyF
(inicjowanej doFALSE
/0
) do zliczania niewymownych. Poza tym program sprawdza po prostu, czy każdą liczbę można podzielić przez siedem, czy też zawiera liczbę.źródło
7%in%el(strsplit(c(T,""),""))
przez55%in%utf8ToInt(paste(T))
? (nie testowano)C - 115 bajtów
EDYCJA: Podziękowania dla @mschauer, który zauważył, że coś mi umknęło.
źródło
JavaScript, 80 bajtów
Ponieważ są tylko minimalne wymagania, ale nie wymagania maksymalne, to rozwiązanie działa w nieskończoność.
Aby sprawdzić, czy algorytm jest poprawny, możesz wykonać ten sam kod, drukując tylko 10 ostatnich liczb i sumę:
źródło
Mathematica, 82 bajty
źródło
JavaScript 81 bajtów
Oryginalny (98 bajtów)
Grał w golfa
źródło
p=console.log;for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);
?9e5
zamiastMath.pow(7,7)
, ponieważ wyzwaniem powiedział:Print/output AT LEAST the first 7^7
34 1 36 **8** 38
. Ale za to, co warte, obecna wersja może być grałem trochę więcej:for(c=i=0;++i<9e5;)console.log(!/7/.test(i)&&i%7?i:c++%6+1)
.Befunge, 100 lub 156 bajtów
Ta pierwsza wersja jest bardziej przenośna z tych dwóch, ograniczając się do 7-bitowych komórek pamięci, co dostajesz w interpretera referencyjnym.
Druga wersja działa tylko z interpretatorami, które mają 32-bitowe komórki pamięci, a zatem nie jest ściśle standardowym Befunge, ale pozwala nam przechowywać większe wartości w pamięci bez konieczności dzielenia ich na komórki.
W obu przypadkach program działa w nieskończoność, ale pierwsza wersja przepełni się wokół znaku 2 milionów, podczas gdy druga wersja powinna osiągnąć maksymalną wartość int (około 2 miliardów).
Możesz wypróbować online , ale musisz zabić proces, aby nie mógł działać wiecznie.
źródło
Clojure, 130 bajtów
Podstawowe zmniejszanie, śledzenie zawartości wektora wynikowego i liczby wartości, które zostały pominięte. Ostatni
0
bierze pierwszy element zredukowanego[r s]
,rest
upuszcza pierwszy element wyniku o indeksie 0.źródło
Perl6, 41 bajtów
źródło
Tcl , 64 bajty
Wypróbuj online!
źródło
JavaScript, 64 bajty
źródło
console.log
) odpowiedziami na JavaScript, to 70 bajtówJapt , 25 bajtów
Sprawdź sumę i ostatnie 10 elementów.
Generuje pierwsze 1 000 000 wpisów sekwencji i drukuje je. Milion to najkrótsza liczba
7**7 == 823543
w Japt.Końcowy znak nowej linii jest znaczący, ponieważ aktywuje ukryte przypisanie do
U
.Wygenerowanie listy zajmuje tylko około sekundy, ale wygenerowanie całej tablicy prawdopodobnie spowoduje zawieszenie się przeglądarki.
Rozpakowane i jak to działa
Wykorzystuje właściwość, że definicję rekurencyjną można rozwiązać, patrząc na już wygenerowaną sekwencję.
źródło