PPCG nie ma już dość quines ...
Wyzwanie:
Twoim zadaniem jest stworzenie programu „A0”. Gdy ten program jest uruchamiany bez danych wejściowych, nic nie wyświetla. Gdy ten program jest uruchamiany z wejściem, wyprowadza „A1”. Gdy „A1” jest uruchamiane bez wejścia, wyprowadza „A0”. Gdy „A1” jest uruchamiane z wejściem, wyprowadza „A2”. Prawie, „A (k)” wyświetli „A (k-1)”, gdy uruchomi się bez wejścia, i wyśle „A (k + 1)”, gdy uruchomi się z wejściem.
Detale
Uważam, że to wyzwanie jest dość proste; tak naprawdę nie ma innych zasad. Nawiasem mówiąc, każdy program musi zawierać co najmniej 1 bajt. Możesz założyć, że dane wejściowe będą się składać tylko ze znaków ASCII i możesz zignorować spacje, jeśli chcesz, ale nie możesz podać konkretnych danych wejściowych. Dane wyjściowe mogą być do STDOUT lub STDERR, ale wszystkie programy muszą być wysyłane do tego samego. Drugi może również zawierać tekst (więc możesz wyprowadzać dane do STDOUT, a następnie wyjść z błędem). Dzięki @Dennis za zwrócenie na to uwagi.
Wszystkie programy muszą być w tym samym języku, a każdy program musi być unikalny w stosunku do pozostałych.
Wynik jest równy długości programu „A0”. Ponieważ jest to wyzwanie dla golfa, wygrywa najniższy wynik!
Odpowiedzi:
Pip , 28 bajtów
Wypróbuj online!
Wyjaśnienie
To jest zmodyfikowana wersja najkrótszej znanej piny Pip
V Y"`V Y`.RPy"
. Quine działa poprzez zdefiniowanie łańcucha, wciągnięcie go doy
zmiennej, a następnie ocenę. Podczas oceny ciąg przyjmuje repr zy
(w ten sposób zawija wartośćy
podwójnych cudzysłowów) i konkatenuje dosłowny wzór`V Y`
z przodu.Nasza strategia jest umieszczenie
0
w programie, a następnie zastąpić0
ze10
jeśli było wejście lub wymienić10
ze0
gdyby nie było wejście. (A zatem A ( k ) będzie zawierać liczbę składającą się z k 1, po której następuje 0.)0
i10
są wygodne, ponieważ istnieją wbudowane zmienne (i
it
odpowiednio) z tymi wartościami, więc możemy się do nich odwoływać bez użycia rzeczywistych cyfr .Zamiast tego
RPy
chcemy,RP yRit
czy był jakiś wkład, aRP yRti
jeśli nie. Możemy połączyć te dwa przypadki, zamieniając wartościt
ii
jeśli istnieje input (I#q Sti
), to robimyRP yRti
. (Mamy do testu#q
, na długości wejścia, ponieważ wejścia jak0
są falsey).Teraz musimy tylko wpisać literał
0
w kodzie i obsłużyć specjalny przypadek, w którym A0 nie generuje żadnych danych wyjściowych. Oba można rozwiązać, testując0+i
i zwracając,u
jeśli jest to falsey:110+i
.).i
it
są zamieniane, a ich liczbai
wynosi 10.,0+i
nadal jest to prawda.i
wynosi wciąż 0 i0+i
jest falsey. Zamiast rdzenia quine wyprowadzamy wyjścieu
, które jest wbudowaną zmienną zerową. Drukowanie zero nie daje wyników.źródło
Python 2, 93 bajty
Kończy się podawanie linii.
Wypróbuj z wejściem | Wypróbuj bez wkładu
Zostało to zmodyfikowane z mojej odpowiedzi na podobne pytanie.
Jeśli jest wejście, to będzie rosło
p
. Tak otrzymany program będziep=2+...
,p=3+...
itpźródło
input()
i wymagać, aby dane wejściowe były otoczone cytatami, zamiast używaniaraw_input()
. Jeśli chcesz wprowadzić zero, użyj"0"
.