W tym wyzwaniu zbudujesz program, który rośnie wraz z upływem wieków… Aż do 2017 roku.
Wyzwanie
Ilekroć w opisie wyzwania jest napisane „program”, można również przeczytać „funkcja”.
Po przesłaniu dane wyjściowe wygenerują program o długości THE LENGTH OF YOUR SUBMISSION
+ 1
bajtów.
Gdy ten program zostanie wykonany, wyświetli program o długości THE LENGTH OF YOUR SUBMISSION
+ 2
bajtów… i tak dalej.
Jednak gdy program osiągnie długość 2017 bajtów, musi zamiast tego wyjść 2017
i wyjść.
Zasady
- Wynik końcowego programu musi być
2017
i tylko2017
. To może być ciągiem lub liczbę całkowitą, ale musi to czytać2017
i nie2017.0
lub0x7E1
czy inne tego typu bzdury. - Brak standardowych luk .
- Tylko twój początkowy program może wymagać danych wejściowych, które zostaną dodane do twojego bajtu.
Więc jeśli twój program początkowy ma 324 znaki i zajmuje 13 bajtów, twój wynik będzie wynosił 324 + 13 = 337, a program przez niego wyprowadzony musi mieć 338 bajtów.- Używanie flag wiersza poleceń (np.
perl -X
) Jest jednak w porządku - o ile zarówno program początkowy, jak i wszystkie generowane programy używają tych samych flag. Również one liczą się do całkowitej liczby bajtów. Kreski, ukośniki itp. Przed flagą wiersza poleceń nie liczą się do sumy, więc np.perl -X
Liczy się jako jeden dodatkowy bajt.
- Używanie flag wiersza poleceń (np.
- Jeśli zwrócisz funkcję, powinna to być funkcja rzeczywista, a nie ciąg znaków, który po ocenie tworzy funkcję.
- Niewłaściwe quiny (jeśli twój program jest quine) są niedozwolone.
Przykład
Pseudokod, 99 bajtów
IF (PROGRAM LENGTH == 2017) PRINT 2017 ELSE PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)
Twoje zgłoszenie może działać inaczej, o ile będzie zgodne z powyższymi zasadami.
;;;
dozwolone, jest dozwolone?Odpowiedzi:
*> <> ,
292830 bajtówWypróbuj tutaj! (* spróbuj z 2017 bajtami )
* ustaw opóźnienie na 0ms lub być może będziesz musiał długo czekać
Dodaje to dodatkowe
każde kolejne uruchomienie. Jeśli ma 2017 bajtów i jest uruchomiony, wygeneruje 2017 i zatrzyma wykonywanie bez innych danych wyjściowych.
Aktualizacja: Zapisano 1 bajt, sprawdzając, czy długość jest mniejsza niż 2017, a nie równa
Aktualizacja 2: Naprawiono wyjście dla +2 bajtów
Wyjaśnienie
źródło
when your program has reached a length of 2017 bytes
, nie 2016Python 2.7, 90 bajtów
Oto stosunkowo prosty:
Spróbuj pierwszej iteracji tutaj! Spróbuj tutaj przedostatniej iteracji! Wypróbuj ostatnią iterację tutaj!
Nie golfowany:
źródło
p='';...
i1929else
, ale pamiętaj, że drukowanie drukuje również nowy wiersz na końcu, więc powinieneś dodać końcowy znak nowej linii do swojego programu, w przeciwnym razie powiększy się o dwa bajty po pierwszym uruchomieniu.Microscript II, 38 bajtów
źródło
> <> , 34 bajty
Wypróbuj online! Zauważ, że aby przetestować to dla mniejszych wartości, twoja wartość (minus 1) musi być możliwa do wygenerowania w 7 bajtach.
Wyjaśnienie
źródło
Java, 251 bajtów (Eclipse IDE)
Zakłada się, że projekt został wykonany w środowisku Eclipse, przy użyciu konwencji
.java
plików w SRC działającego katalogu. Istnieją inne sposoby wykrycia źródła, ale nie sądzę, aby było to sprzeczne z regułami.Zasadniczo otwiera kod źródłowy .java i dołącza As do 2017 r. (Po komentarzu). Gdy rozmiar pliku źródłowego osiągnie w sumie 2017 bajtów, zamiast tego zostanie wydrukowany 2017.
źródło
C, 197 bajtów
źródło
Python 2,
21716778 bajtówZauważ, że powinna pojawić się nowa linia. Użyłem podobnych koncepcji do tego, co użył Calconym, więc dziękuję za inspirację!
Wypróbuj online
Spróbuj w 2016 roku ; Wypróbuj w 2017 roku
Poprzednia wersja:
Ten program używa
inspect
modułu do uzyskania bieżącego numeru linii. Następnie drukuje się sam z dodatkową linią po imporcie, która zmienia numer linii dla następnego programu. Powinien tu również znajdować się nowy wiersz.Wypróbuj online
źródło
CJam ,
393330 bajtówz wejściem
Wypróbuj online!
Jest to funkcjonalnie równoważne z moją poprzednią wersją, z tym wyjątkiem, że unika potrzeby pisania i unikania cudzysłowów. Poprzednia wersja:
Które wyjścia
które wyjścia
i tak dalej. Wreszcie program
Wyjścia
2017
.Jak to działa
Ale co właściwie robi kod na wejściu?
Jeśli pierwsza liczba programu nie jest równa 2017, to wypisze program, w którym liczba ta zostanie zwiększona jeszcze raz, niż była tym razem. Jeśli ma wartość równą 2017 r. (Tzn. Została zwiększona 1984 razy), po prostu pchnij 2017 i zakończ. Pierwszy numer zaczyna się od 33 (długość kodu); każdy przyrost zwiększa długość kodu o 1 ORAZ tę liczbę o 1, więc gdy liczba 33 zostanie zwiększona na tyle, aby stać się 2017, kod będzie również miał długość 2017 bajtów.
źródło
JavaScript,
9883 bajtyTo było spore wyzwanie… Zgaduję, że otrzymałem to, że wymagałem zwrotu rzeczywistych funkcji, a nie tylko źródła funkcji.
Oryginalna funkcja
Używam
function
zamiast=>
tutaj, ponieważ ten ostatni nie obsługuje nazwanych funkcji, po prostu przypisując funkcje anonimowe do zmiennej.Pierwsza iteracja
Uruchomienie powyższego w konsoli przeglądarki zwraca funkcję, która po rzutowaniu na ciąg wygląda następująco:
Dostać się do 2017 roku
Ponieważ każda funkcja zwraca nową funkcję, możesz wywołać oryginalną funkcję / jej wynik 1934 razy, aby uzyskać 2017 .
Testowane z Firefoksem.
źródło