4, 8, 15, 16, 23, 42
Napisz program, który wypisze nieskończoną sekwencję liczb. Numery nie mogą jednak nigdzie pojawiać się w kodzie źródłowym.
Następujący program nie jest prawidłowym programem Java do wyświetlania liczb, ponieważ liczby pojawiają się w kodzie źródłowym:
class TheNumbers {
public static void main(String[] args) {
for(int n = 0;;) System.out.println(
n == 4 ? n = 8 :
n == 8 ? n = 15 :
n == 15 ? n = 16 :
n == 16 ? n = 23 :
n == 23 ? n = 42 : (n = 4)
);
}
}
Definicja „Numery nie mogą pojawiać się w kodzie źródłowym” jest następująca:
- Nie wolno używać cyfry 4.
- Nie wolno używać cyfry 8.
- Nie wolno używać cyfry 1, a następnie cyfry 5.
- Nie wolno używać cyfry 1, a następnie cyfry 6.
- Nie wolno używać cyfry 2, a następnie cyfry 3.
Jeśli Twój język ignoruje pewne znaki, które można umieścić między cyframi, nie jest to poprawne podstawienie. Na przykład, jeśli twój język interpretuje literał 1_5
jako 15
, będzie to liczone jako cyfra 1, a następnie cyfra 5.
Alternatywne zasady są objęte ograniczeniem, więc na przykład:
- Binarne 100 nie może być używane jako zamiennik 4.
- Octal 10 nie może być stosowany jako zamiennik 8.
- Szesnastkowy F nie może być stosowany jako zamiennik 15.
Dlatego poniżej przedstawiono poprawny (ale niezbyt zainspirowany) program Java do wyświetlania liczb, ponieważ liczby nie pojawiają się w kodzie źródłowym:
class TheNumbers {
public static void main(String[] args) {
for(int n = '*';;) {
System.out.println(n -= '&');
System.out.println(n *= 2);
System.out.println(n += 7);
System.out.println(++n);
System.out.println(n += 7);
System.out.println(n += 19);
}
}
}
Zauważ, że w tym programie '*'
i '&'
są zastąpione liczbami całkowitymi 42 i 38, ponieważ w przeciwnym razie cyfry 4 i 8 pojawiłyby się w kodzie źródłowym.
Definicja „wyjścia sekwencji w nieskończoność” jest otwarta do interpretacji. Na przykład poprawny byłby program, który wypuszcza glify, które stają się mniejsze, aż stają się „nieskończenie” małe.
Kudos, jeśli jesteś w stanie wygenerować sekwencję w jakiś sposób, który nie jest zasadniczo zakodowany na stałe dla każdej liczby.
- Wyprowadzenie go do wzoru. Mam wrażenie, że nie ma jednego, ale może jest lub można go sfałszować.
- Naprawianie pseudolosowego generatora w celu zwrócenia sekwencji.
To konkurs popularności, więc bądź kreatywny. Odpowiedź z największą liczbą głosów 26 marca jest zwycięzcą.
źródło
This isn't an interesting question, IMHO, since the solution is pretty trivial. Please post in the sandbox next time.
byłoby to o wiele lepsze niżThis is a stupid question.
, ale to tylko moja osobista opinia.Odpowiedzi:
Jawa
Postanowiłem dodać kolejny wpis, ponieważ jest on zupełnie inny niż mój pierwszy (który bardziej przypominał przykład).
Ten program oblicza średnią z tablicy wprowadzonej przez użytkownika ...
... czy to robi?
źródło
Pyton
Edycja: Zgodnie z sugestią Nneonneo, skrypt nie zawiera teraz cyfr.
źródło
while True:
, aby twoja odpowiedź w ogóle nie zawierała cyfr.while True:
jest bardziej powszechny.Perl
W kodzie źródłowym nic nie jest ukryte. Nie. Jeśli kod nie działa, wpisz
use re "eval";
go wcześniej (wymagane w Perlu 5.18).Wyjaśnienie w spoilerze.
źródło
Brainfuck
Jestem taka zła w sztuce ASCII!
Przetestuj tutaj: http://ideone.com/kh3DYI
źródło
Unix C
Istnieje wiele miejsc, w których można znaleźć stałe liczbowe.
źródło
DO#
źródło
a(i)=a(i-1)+a(i-3)+a(i-5)
naprawdę wydaje się łatwiejszym rozwiązaniemDO#
Wykorzystując fakt, że dowolną sekwencję N elementów można wygenerować przez wielomian N-1, a wprowadzanie liczb wiązało się z wieloma dźwiękami i buczeniami. Dla porównania pochodną wielomianową I jest
Dla uproszczenia przypisałem czynniki do zmiennych nazwanych liczbami;)
Pierwsza wersja:
Podobało mi się implikowanie rosnącego napięcia, gdy liczba BEEP spada po każdej liczbie.
Potem pomyślałem, że mogę też obliczyć czynniki za pomocą sygnału dźwiękowego i boopsa:
Po tym trochę poszedł za burtę ...
Użycie domyślnego operatora w C # dla typów wartości pozwala na inicjalizację BEEEP do zera. W ten sposób w kodzie nie stosuje się literałów numerycznych. Podstawowy algorytm jest taki sam. ale współczynniki są obliczane liniowo.
źródło
re
Nie mogę używać cyfr 4, 8, 15, 16, 23 lub 42 w moim kodzie? Nie ma problemu, więc w ogóle nie będę używać liczb!
źródło
JavaScript + HTML
Anti-golf!
<pre>
Elementem wyświetla numer w sekwencji. Zawiera także cały kod niezbędny do przejścia do następnego numeru w sekwencji. Jest to więc<pre>
eval'd, co powoduje, że tekst<pre>
aktualizowanej wersji przypomina kolejną liczbę w sekwencji. Ten proces powtarza się bez końca.Oto jest w akcji!
źródło
do
Załóż okulary zezujące :-)
źródło
4
si dwa8
s.Haskell, 1 LoC
Zdecydowałem się na czytelny jednowarstwowy, aby pokazać, jak niesamowity jest Haskell. Postanowiłem też unikać wszystkich cyfr, na wszelki wypadek.
Dzięki wbudowanej leniwej analizie Haskell może manipulować (mapować, dzielić, łączyć, filtrować ...) nieskończenie długimi listami. Ma nawet wiele wbudowanych do ich tworzenia. Ponieważ ciąg znaków jest tylko listą znaków, nieskończenie długie ciągi znaków również nie są tajemnicą dla Haskella.
źródło
fromEnum
wygląda ładniej niżData.Char.ord
i jest nieco krótszyMatematyka
Możemy odpowiedzieć na to pytanie, skupiając się na powtarzających się częściowych mianownikach okresowego ciągłego ułamka pokazanego poniżej. Są tym, czego potrzebujemy.
W końcu zawierają one sekwencję nie kończącą się, którą próbujemy stworzyć: 4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 42 ...
W Mathematica uzyskuje się kwadratową irracjonalność odpowiadającą okresowej ciągłej części przez
gdzie 0 odnosi się do niejawnej części całkowitej.
Możemy to sprawdzić, odwracając operację:
4 i 8 naruszają jedną z zasad wyzwania. Podciąg
15
stanowi dodatkowe naruszenie. Możemy sformatować kwadratowy irracjonalny, aby spełnić zasady.Teraz chwytamy sekwencję zainteresowania:
I wydrukuj listę na zawsze ...
źródło
16
tego ułamka, kiedy pisałem o nim komentarz.C / C ++
Korzystanie tylko znaki
L
,O
,S
iT
wielokrotnie w tej kolejności:źródło
Jawa
Nie mogę znaleźć wzoru w tej sekwencji. Jeśli nie ma rozpoznawalnego wzoru, równie dobrze możemy po prostu zrzucić kilka małych liczb pierwszych, wcisnąć je do wbudowanego RNG Javy i nazwać to dniem. Nie rozumiem, jak to mogło pójść nie tak, ale z drugiej strony jestem optymistą :)
źródło
while(true)
: ideone.com/1xaPdOBash one-liner
Dodano podział linii dla czytelności. (Ab) wykorzystuje fakt, że są to pierwsze sześć liczb OEIS Sekwencja A130826 .
źródło
awk -F"[ ,]" '/%S/ {for (i=3;i<=9;i++) printf $i" "}'
docurl
.yes
i upuścić przekierowanie do za/dev/null
pomocącurl -s
. Coś w rodzajuyes $(curl -s "https://oeis.org/search?q=id:A$((130726+100))&t=text" | awk -F"[ ,]" '/%S/ {for (i=3;i<9;i++) printf $i" "}')
yes
icurl -s
- bezwstydnie dodałem to do mojej odpowiedzi. :-)C bez użycia liczb i bez wartości znaków
źródło
Podoba mi się pomysł użycia sekwencji
jak w tej odpowiedzi . Znalazłem go poprzez wyszukiwanie OEIS jako sekwencję A122115 .
Jeśli przejdziemy przez sekwencję w odwrotnej kolejności, znajdziemy odpowiedni pięciokrotność inicjalizacji, która nie zawiera 4, 8, 15, 16 lub 23.
Python3:
źródło
JavaScript
Żadne liczby to dobry ruch. Zamiast drukować sekwencję raz na przejście przez pętlę, drukuj tylko raz liczbę na przejście.
Dolna część łańcucha koduje liczby do wydrukowania, a górna część łańcucha koduje następny znak do znalezienia. Tam, gdzie dwie części spotykają się (jedna
F
), kody resetujące cykl.źródło
Pyton
Operatory bitowe i prosta matematyka.
źródło
Rubin
Generuje liczby poprzez osadzenie równie mistycznej sekwencji 0, ∞, 9, 0, 36, 6, 6, 63 ;
Z tego nie może wynikać nic dobrego.
źródło
C (
5450 znaków)Wysyłam odpowiedź na golfa, ponieważ gra w golfa przynajmniej sprawia przyjemność.
źródło
a=0;
. Jedynym efektem byłoby to, że możesz rozpocząć sekwencję w innym miejscu niż 4 (prawdopodobnie 8). W każdym razie to zepsuje sekwencję, gdy nastąpia
przepełnienie. Jest to technicznie niezdefiniowane zachowanie, ale prawdopodobnym rezultatem jest to, że wydrukujesz śmieci w połowie czasu.for
nie pomaga, jeśli nie ma inicjalizacji.for(;;)
to ta sama liczba znaków, cowhile()
. Zinterpretowałem zasady, aby nowe linie musiały tam być ... Ale mógłbym użyć rekurencji ogona z main ...Haskell
http://ideone.com/erQfcd
Edycja: Co użyłem do wygenerowania współczynników: https://gist.github.com/ion1/9578025
Edycja: Naprawdę podobał mi się program Agrif i skończyłem pisać ekwiwalent Haskell, jednocześnie go rozgryzając . Wybrałem inną bazę dla magicznej liczby.
http://ideone.com/kzL6AK
Edycja: Podobał mi się również jego drugi program i skończyłem na napisaniu implementacji kwadratowej irracjonalności Haskella ;-). Korzystając z biblioteki i magicznej liczby agriza, program wydrukuje sekwencję.
W ten sposób można szukać magicznej liczby za pomocą biblioteki:
Wydrukowana wartość oznacza liczbę
(−644047 + 1 √424477224534)/30815
. Wszystko, co musisz zrobić, to znaleźć czynniki, które pozbywają się niedozwolonych sekwencji cyfr w liczbach, nie zmieniając wartości wyrażenia.źródło
DO#
Znalazłem ziarno po wysłuchaniu jakiejś stacji radiowej podczas lotu nad Pacyfikiem.
źródło
Pyton
Podczas gdy wiele osób używało wzorców zaczerpniętych z OEIS, postanowiłem stworzyć własny zestaw funkcji do reprezentowania liczb.
Pierwszą funkcją, którą utworzyłem, była periodic (). Jest to funkcja, która powtarza się co sześć liczb wejściowych przy użyciu cyklicznych właściwości funkcji triggera. Wygląda to tak:
Następnie tworzę polynomial (). Korzysta z następującego wielomianu:
(W moim kodzie niektóre współczynniki są reprezentowane jako sumy, ponieważ zawierają utracone liczby jako jedną z ich cyfr).
Ten wielomian konwertuje dane wyjściowe funkcji periodic () na odpowiednią liczbę utraconą, jak poniżej:
Przez ciągłe zwiększanie i i przekazywanie go przez obie funkcje, otrzymuję utracone liczby powtarzające się nieskończenie.
(Uwaga: często używam float () w kodzie. To dlatego Python dokonuje podziału zmiennoprzecinkowego zamiast np. 2/3 = 0.)
źródło
4
inpolynomial
.Emacs Lisp 73 znaków
Najlepszy sposób na zapętlenie na zawsze? Cykliczna lista!
Ale czekaj, jest więcej!
? \ ^ D to dobry sposób na wstawienie znaku dla EOT, jednak gdybym tylko przesyłał plik, nie potrzebowałbym dosłownego „\ ^ D”, mógłbym po prostu wstawić znak „?” po którym następuje rzeczywisty znak EOT, co zmniejsza rzeczywistą liczbę potrzebnych znaków do: 63
Edytować
Pracowałem nad „żelem”, który nie jest jeszcze prawdziwym językiem, ale jest w zasadzie serią makr emacs lisp dla kodu golfa. W „żelu” byłoby to rozwiązanie:
i bez czekania:
44 znaki z ładnym wprowadzaniem postaci. Wyniósłby 34, gdyby nie przesłanie przez Internet.
źródło
Julia
Badając chwilę, znalazłem matematyczny sposób wyrażenia sekwencji za pomocą innych sekwencji bez użycia żadnej liczby (lub trudnych sposobów ich użycia):
Wynik:
źródło
C ++
Ładny, czysty język, taki jak C ++, pozwala na uporządkowanie źródła w czysty i czytelny sposób, a jego zaletą jest łatwość ręcznego kopiowania przy minimalnej dwuznaczności.
Tutaj rozwiązanie jest osiągane tylko za pomocą cyfry 1.
Test: http://ideone.com/fuOdem
źródło
System (podstęp)
http://ideone.com/QBzuBC
Prawdopodobnie łamie to zasadę „nie koduj liczb w innych bazach”, ale myślę, że jest na tyle niejasne, że się nie liczy. Na dowód tej niejasności te dwie magiczne liczby w bazie 51 to:
Edycja : Ta sama sztuczka, inna reprezentacja. Właściwie to jeszcze mi się podoba, ponieważ nie zależy to od arbitralnie wybranej bazy. Wymaga to jednak implementacji schematu z obsługą nieskończonej dokładności dla kwadratowych irracjonalnych, które (AFAIK) nie istnieją. Możesz jednak zaimplementować to w matematyce.
źródło
PHP
Myślałem, że nadszedł czas, aby ktoś przesłał odpowiedź php, nie najlepszą, ale i tak zabawną
Ahs to krzyki pasażerów podczas katastrofy samolotu
źródło
Perl
źródło