Odnosząc się do drukowanych kodów znaków ASCII w systemie dziesiętnym, wiemy, że od 32 do 126 mamy drukowalne znaki, przy czym 32 to (spacja). Wyzwanie polega na napisaniu programu zawierającego tylko znaki od 32 do 125 (z wyłączeniem 126), który po uruchomieniu drukuje własny kod źródłowy, z tym wyjątkiem, że każdy znak w kodzie źródłowym ma zwiększony o jeden kod ASCII.
Na przykład, jeśli kod źródłowy to
main(){printf("Hello World");}
jego wyjście byłoby
nbjo)*|qsjoug)#Ifmmp!Xpsme#*<~
Zabrania się:
- Odczytywanie / pisanie / korzystanie z zewnętrznych plików lub pamięci (w tym Internetu)
- Odczytywanie / echo własnego kodu źródłowego
- Kody źródłowe zawierające mniej niż 2 znaki (nie są zabawne). Musi być większy lub równy 2.
Dzięki temu jest to konkurs popularności, w którym po odczekaniu co najmniej dwóch tygodni odpowiedź w dowolnym języku z najwyższymi ocenami wygrywa, a mniejsza liczba postaci decyduje o zwycięstwie.
popularity-contest
quine
Fixed Point
źródło
źródło
~
z GolfScript naprawdę jest do kitu. Założę się, że zrobiłeś to celowo. :-)Odpowiedzi:
Python (27 znaków)
W powłoce Pythona następujący skrypt wyświetli pożądany wynik:
Tak! generuje:
źródło
co? , 5 znaków
Zauważ, że piąty znak jest spacją po
Ntbg
. To ta sama sztuczka, co w jednej z moich poprzednich odpowiedzi .Ntbg
jest niepoprawną ścieżką, więc interpreter wyświetliOuch!
Powinieneś uruchomić ją w następujący sposób:źródło
PHP (351)
Jestem pewien, że istnieje lepszy sposób, aby to zrobić, ponieważ jestem nowy w kodowaniu, ale oto moje rozwiązanie PHP:
Wynik:
źródło
TI-BASIC, 10
Do kalkulatora TI-83/84!
Wyjścia:
źródło
GolfScript, 15 znaków
Wynik:
Wypróbuj online.
Dość proste rozwiązanie oparte na technice, której użyłem do wejścia na wyzwanie „rotating quine” . Jedynym trudnym szczegółem jest to, że znak
~
(ASCII 126) jest niedozwolony przez reguły wyzwania, więc nie mogę go użyć do wykonania mojego bloku kodu. Na szczęście1*
może być używany jako jego synonim.Wyjaśnienie:
Blok kodu
{`{)}%"/2+"}
jest powielany przez.
, a druga kopia wykonywana przez1*
(technicznie, pętlę z jedną iteracją), pozostawiając drugą kopię na stosie. Wewnątrz bloku kodu,`
uszeregowuje blok kodu i zapętla{)}%
(kody ASCII) jego znaków, zwiększając każdy o jeden. Na koniec"/2+"
wypycha dosłowny ciąg/2+
(który jest.1*
przesuwany o jeden) na stos. Na końcu programu interpreter GolfScript automatycznie drukuje wszystko na stosie.Ps. Tak, wiem, że jest to konkurs popularności, a nie ścisłe gry w golfa , ale co jeszcze mam zrobić z GolfScript - sztuką ASCII? ;-)
źródło
JavaScript, 117 znaków
Wiem, że to nie jest golf golfowy, ale i tak grałem w golfa.
(Nie czytam własnego kodu źródłowego; po prostu używam funkcji
Function
obiektutoString
).źródło
Java - 1331 bajtów, 618 bajtów i 504 bajtów
Oto java. Fajne jest to, że jest dość czytelny i elastyczny. Możesz eksperymentować, aby zmienić
SHIFT
zmienną na 0, a będzie to quine. Możesz go zmienić na dowolną wartość, w tym na wartości ujemne, i odpowiednio zmieni kod.Jednak jedyną wadą w poprzedniej klasie są podziały wierszy, które nie są dozwolone w specyfikacji pytania (są poza zakresem od 32 do 125). Daję więc tutaj wersję golfa, która jest wolna od łamania linii (i nie ma dziwactw do ich obsługi). Możesz edytować wartość
S
zmiennej, aby zmienić przesunięcie. Ma 618 bajtów:Z pewnością, jeśli porzucimy dokładną regulację przesunięcia i zakodujemy wartość przesunięcia, możemy wykonać całkowicie golfową wersję z 504 bajtami:
źródło
Perl 5, 284 znaków zawiera linie
Niedopuszczenie do użycia ~ uczyniło to nieco trudniejszym.
źródło
Python, 99
Wynik:
Można to skrócić do 75 znaków , ale po wydruku wyświetli nowy znak wiersza, co technicznie łamie zasady:
źródło
\x09
) na końcu, ponieważ tabulator przesunięty o jeden jest nową linią (\x0A
). Wtedy twoja skrócona wersja będzie działać z 76 bajtami.Stax , 16 bajtów
Uruchom i debuguj
Dostosowanie
"34bL"34bL
quine. Ponieważ teraz"
staje się,#
co nie wymaga ucieczki, możemy po prostu dołączyć go do ciągu.źródło
Lua - 192
Całkiem proste,
źródło
C - 156
Tylko klasyczny Quine C z wymaganymi modyfikacjami
PS, najwyraźniej
sprintf(f,...,f,...)
to segfault.źródło
JavaScript (276)
Bez użycia
.toString()
:źródło
Ruby, 63
Cholera, nie mogę użyć heredoka na tym.
Ruby ma natywną metodę,
.succ
która robi to na znaku, a drukowanie bez nowego wiersza jest krótsze niż drukowanie przy użyciu, więc działa to całkiem nieźle.źródło
C, 153
Kolejna modyfikacja klasycznego quine w c ...
źródło
> <>, 16 bajtów
Wypróbuj tutaj!
Jest to mniej więcej standardowy quine w> <> (bez użycia
g
instrukcji). Jedyne różnice polegają na tym, że nie odczytuje własnego kodu źródłowego i zwiększa każdy znak o 1 przed wysłaniem.Wyjścia
*> <> , 15 bajtów (niekonkurencyjne)
Wypróbuj tutaj!
źródło
Tcl , 89 bajtów
Wypróbuj online!
Tcl , 89 bajtów
Wypróbuj online!
Dwa podejścia; ta sama długość bajtu!
źródło
Haskell , 64 bajty
Wypróbuj online!
źródło
Perl 5 , 55 bajtów
Wypróbuj online!
źródło
J, 42 bajtów
źródło