To była zabawa! Jednak z trzema cyframi zabawa skończyła się zbyt wcześnie. To wyzwanie jest podobne, ale będziemy kontynuować zabawę.
Wyzwanie
Wydrukuj jak najwięcej cyfr Golden Ratio φ. Złoty współczynnik jest definiowany jako liczba, która spełnia φ = (φ + 1) / φ, a pierwszych 100 cyfr podaje:
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Wyzwanie to nie dotyczy komputerów φ! Chodzi o wydrukowanie jak największej liczby cyfr bez użycia metody podwójnego wykonania tej czynności. Znajdź więc tyle kreatywnych sposobów na zdobycie swoich cyfr, ile możesz!
Ograniczenia
Samo drukowanie cyfr φ byłoby nieco zbyt proste, więc oto zasady:
- Musisz konstruować liczbę w kolejności od lewej do prawej , drukując ją kawałek po kawałku lub konstruując ciąg znaków od lewej do prawej i drukując go na końcu - możesz nawet wygenerować tablicę cyfr, a następnie połączyć wydrukuj, o ile zrobisz to po kolei. W poniższych regułach „print” i „output” mogą odnosić się do dowolnego z tych procesów (np. Jeśli budujesz ciąg, a ciąg zawiera
1.6
to, co1.6
już zostało wydrukowane). - W przypadku kodu otrzymujesz budżet 15 znaków na cyfrę . Okres ten nie wlicza się do tego budżetu, ale również musi zostać wydrukowany. Pamiętaj, że ograniczenie dotyczy tylko całkowitego rozmiaru kodu: możesz użyć więcej niż 15 znaków na dowolną cyfrę, o ile średnio nie używasz więcej. W rzeczywistości możesz narastać „dług” w postaciach i „spłacać” później. Np. Do wydrukowania
1.618
masz 60 znaków. - Biblioteka standardowa zawiera / importy nie liczą się do rozmiaru kodu. Ale nie możesz za darmo podać tych skrótów!
- Nie wolno używać cyfr, które obecnie generujesz, ani cyfr, które już wydrukowałeś. Np.
1
Może pojawić się nigdzie w kodzie źródłowym, ponieważ jest to pierwsza cyfra. Kod, który wyprowadza8
in1.618
może stosować dowolne lub wszystkie cyfry[0234579]
, ale żadna[168]
. W tym celu wszystkie literały, które są równoważne pojedynczej cyfrze, są traktowane jak ta cyfra . Więc jeśli twój język może reprezentować,9
ponieważ'\t'
nie możesz go używać nigdzie, gdzie nie możesz go użyć9
. - Nie wolno tworzyć wielu cyfr jednocześnie. Powinno być możliwe wyraźne podzielenie kodu na części generujące jedną cyfrę na raz.
Nie wolno odwoływać się do żadnej wbudowanej funkcji, operatora matematycznego / logicznego / bitowego / łańcucha, zmiennej lub stałej, które zostały użyte w kodzie, który wygenerował wcześniejszą cyfrę. Wyjątek stanowią funkcje konwersji liczb całkowitych na ciąg, konkatenacja ciągów i funkcje drukowania, które mogą być potrzebne dla każdej cyfry. Zauważ, że nie ma znaczenia, jaką nazwą odwołujesz się do jakiejkolwiek wbudowanej: tylko dlatego, że masz alias wbudowanej
PI
do obup
iq
nie oznacza, że możesz użyćp
raz iq
raz. Podobnie, są dopuszczone do używania nazwy dwukrotnie, jeśli odnosi się do dwóch różnych wbudowanych wtyczek, jak strunylength
i tablicylength
.Jeśli twój język programowania nie ma funkcji, dokonaj najlepszego osądu co do jego odpowiednika - np. W przypadku skryptów bash, wywoływanie innych programów powinno być zgodne z regułami nałożonymi na funkcje
- Twoje zgłoszenie musi być napisane w jednym języku. Więc nie trzeba wykonywać interpretera innego języka, aby uzyskać dostęp do wbudowanych również w tym języku.
Implikacje
Powyższe zasady implikują następujące punkty, ale dodaję je tutaj, aby uniknąć pytań, które już pojawiły się w piaskownicy:
- Nie wolno nadpisywać części danych wyjściowych, drukując niektóre odstępy (zwykle
'\b'
) pomiędzy nimi. - Pętle generujące / wysyłające wiele cyfr są zabronione. (Pętle obliczające jedną cyfrę są jednak w porządku.)
- Używanie zaciemnionej wersji
(1 + √5)/2
lub dzielenie liczb Fibonacciego w celu uzyskania więcej niż jednej cyfry jest zabronione. - Nie można wstępnie obliczyć 10 cyfr i zapisać ich w 10 zmiennych, a następnie po prostu odwołać się do nich, ponieważ odniesienia do zmiennych nie generują cyfry - robi to kod wypełniający zmienną, więc jest to naruszenie reguły 6.
- W rzeczywistości nie można ponownie użyć żadnych poprzednich (lub wyników pośrednich), ponieważ oznaczałoby to, że dwie cyfry współużytkują kod do wygenerowania .
- W przeciwnym razie możesz użyć dowolnych środków (które nie muszą być czysto matematyczne), aby wygenerować cyfry. (I powinieneś!)
- W rzeczywistości nie trzeba niczego obliczać, jeśli można wyciągnąć prawidłowe cyfry z wielu różnych miejsc przy użyciu standardowej biblioteki.
- Państwo może użyć odpowiedniego operatora wielokrotnie podczas generowania pojedynczej cyfry, więc
2+2+2
jest uczciwa gra wygenerować pierwszy6
(choć to mało prawdopodobne, najkrótsza). - Państwo może użyć dowolnego dosłownym tak często, jak chcesz, ponieważ nie są one wbudowane w stałych. Tak długo, jak nie musisz drukować
5
, możesz tyle5
s w swoim kodzie, ile chcesz. - Nie można na stałe zakodować wyniku, ponieważ wymagałoby to użycia cyfr, które są wyprowadzane.
W skrócie: nie używaj żadnej metody generowania cyfr dwa razy i nie używaj cyfry, którą obecnie wyprowadzasz lub któraś już wydrukowała.
Jeśli zauważysz lukę, która pozwala uzyskać (quasi-) nieskończony wynik, nie rujnuj wyzwania, wykorzystując go, ale daj mi znać, żebym mógł sprawdzić, czy luki można naprawić bez zerwania czegokolwiek.
Punktacja
Program, który poprawnie drukuje największą liczbę cyfr, wygrywa. W przypadku remisu krótszy kod zrywa remis.
Dodaj nieskomentowaną wersję, która określa, która część kodu generuje którą cyfrę.
PS: Jeśli ktoś przekroczy 100 cyfr powyżej, oto kilka innych .
x = (x+1)/x
(lub x^2 = x+1
) (lub x^2-x+1
).