Wyzwanie:
Utwórz program lub funkcję, która pobierze liczbę całkowitą, która wyprowadza nowy program / funkcję, jak określono poniżej.
Wejście:
Liczba całkowita n
: czas w sekundach przed wybuchem bomby zegarowej.
Wynik:
Oryginalny program, który jako czas wprowadził czas w sekundach n
, wyświetli nowy program / funkcję, która wykonuje następujące czynności:
- Czy
n
minęły sekundy od uruchomienia poprzedniego programu? WydrukowaćBOOM!
- W przeciwnym razie: Wydrukuj program / funkcję, która po uruchomieniu zresetuje licznik z powrotem do
n
sekund (i działa tak samo jak pierwszy program / funkcja, która została uruchomiona ).
UWAGA: Nie jest dokładnie taki sam jak pierwszy wyprowadzony program / funkcja (przynajmniej w większości języków), ponieważ zmienił się czas rozpoczęcia (patrz przykład wyjaśnienia poniżej).
Przykład pseudokodu:
Powiedzmy, że oryginalny program jest, ABC
a dane wejściowe to 60
sekundy:
ABC
i 60
wyjścia DEF(60)
.
- Jeśli
DEF(60)
zostanie uruchomiony w ciągu 60 sekund, zostanie wygenerowany sygnał wyjściowyDEF_G(60)
, który działa dokładnie tak samo jakDEF(60)
, ale z nowym czasem rozpoczęcia. - Jeśli
DEF(60)
zostanie uruchomiony po 60 sekundach, zostanie wyprowadzonyBOOM!
.
Przykład wyjaśnienia, co mam na myśli przez „czas rozpoczęcia”:
- Program podstawowy z
60
sekundami wprowadzania jest uruchamiany w12:00:00
. Wysyła pierwszy program wyjściowy z czasem rozpoczęcia wynoszącym12:00:00
. - Ten pierwszy program wyjściowy z czasem rozpoczęcia
12:00:00
jest uruchamiany o godzinie12:00:45
. Wysyła drugi program wyjściowy z czasem rozpoczęcia wynoszącym12:00:45
. - Ten trzeci program wyjściowy z czasem rozpoczęcia
12:00:45
jest uruchamiany o godzinie12:01:25
. Wysyła czwarty program wyjściowy z czasem rozpoczęcia wynoszącym12:01:25
. - Czwarty program wyjściowy z czasem rozpoczęcia
12:01:25
jest uruchamiany o godzinie12:05:00
. WyjdzieBOOM!
.
Uwaga jak pierwsze wyjście byłoby wydrukować BOOM!
po 12:01:00
, ale program wyjście postępuje tak, mimo że 12:01:25
w punkcie 3, to będzie jeszcze wyjście następny program zamiast BOOM!
(bo wyjście-of-wyjścia programów został razy poza tym pierwszym programie wyjściowego wyjściowy) .
Zasady konkursu:
- Obowiązują domyślne zasady quine.
n
Powinny minąć przynajmniej sekundy. Więc jeśli wejście jest60
i czas rozpoczęcia był12:00:00
,12:01:00
to nadal będzie wypisywać program v2, ale przy12:01:01
nim będzie wypisywaćBOOM!
.- Programy wyjściowe nie przyjmą żadnych danych wejściowych ( z wyjątkiem pustego, nieużywanego parametru, jeśli jest krótszy ). Czas rozpoczęcia należy podawać kolejnym programom jako wartość „zakodowaną na stałe” (dlatego wyjście programu wyjściowego nie jest dokładnie takie samo jak poprzednie (w większości języków).
- Tylko rozmiar głównego programu / funkcji jest liczony w bajtach.
- Możesz wyprowadzić program / funkcję jako ciąg znaków (lub porównywalny rozsądny format, taki jak bajt / tablica znaków / lista), jako funkcję, jeśli Twój język to obsługuje, lub inne rozsądne formaty (zapytaj, jeśli nie jesteś pewien).
Główne zasady:
- To jest golf-golf, więc najkrótsza odpowiedź w bajtach wygrywa.
Nie pozwól, aby języki code-golf zniechęciły Cię do publikowania odpowiedzi w językach innych niż kodowanie Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Odpowiedzi:
JavaScript, 51 bajtów
Przetestuj w przeglądarce
stara wersja
Przetestuj w przeglądarce
źródło
return()=>
. I chociaż prawie nigdy nie programuję w JavaScript, sprawdziłem twój skrypt testowy, a nawet zmodyfikowałem go, dodając test funkcji wyjścia funkcji: Przetestuj go tutaj za pomocą czwartego testu funkcji. Wszystko wydaje się działać i mogę dodać, że jest zaskakująco krótki, więc daj +1 ode mnie. PS: Zgodnie z regułami powinien wypisywać ciąg zamiast funkcji. Ale zmienię trochę zasady, aby umożliwić jedno i drugie. Czy mógłbyś zmodyfikować skrypt, aby wyświetlał również funkcje do rejestrowania podczas testu?f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'
powinien działaćJavaScript, 53 bajty
Pokaż fragment kodu
Stara odpowiedź (zwracany powinien być ciąg znaków)
JavaScript, 78 bajtów
Pokaż fragment kodu
źródło
Java 8, 234 bajty
Przepraszam, że od razu opublikowałem własne wyzwanie. Ma to głównie na celu wyjaśnienie wyzwania i zastanawiałem się, czy dodać je do samego pytania, czy opublikować jako odpowiedź (i postanowiłem opublikować je jako odpowiedź, aby nie zagracać postu z wyzwaniem).
I chociaż chciałbym powiedzieć, że jest to także coś do (próbowania) bicia, nie warto nawet o tym wspominać, ponieważ ... cóż ... Java (prawie) zawsze zostaje pobita. ; p
Wypróbuj online.
Przykładowe dane wyjściowe:
Wypróbuj tutaj wyprowadzoną funkcję lambda.
Przykładowe dane wyjściowe:
Wyjaśnienie:
Główna funkcja przyjmuje liczbę całkowitą i zwraca ciąg znaków. Zasadniczo zwraca funkcję, która jest quine, z liczbą całkowitą i czasem rozpoczęcia (w sekundach jako znacznik czasu) jako wartości zakodowane na stałe.
Główna funkcja:
n=60
zastosowano w poniższych przykładach:Pierwszy program wyjściowy:
Drugi program wyjściowy:
To samo co pierwszy program wyjściowy, tyle że
70492.687613232
zastąpiony przez70548
.źródło
Perl 5 +
-p
, 88 bajtówProgramy wyjściowe muszą być uruchamiane
-M5.010
dlasay
, ale nie dla-p
.Wypróbuj online!
źródło
05AB1E , 50 bajtów
Można zdecydowanie zagrać w golfa nieco więcej, ale dość trudne jest wyprowadzenie pół-quine, która wyprowadza program quine ze zmodyfikowanymi wartościami.
Wypróbuj online lub spróbuj uruchomić 20-sekundowy przykład .
Wyjaśnienie:
Przykład wynikowego programu:
Który jest oparty na domyślnym Quine'a:
"34çìD«"34çìD«
.Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak
‘ÒÞ!
jest"BOOM!"
.UWAGA: Powodem, dla którego odstęp między nimi
çì
jest, jest to, że w przeciwnym razie jest interpretowany jako słownik-ciąg (triumph
) z powodu’...’
.źródło