(na podstawie tego postu i dyskusji na czacie - wielkie dzięki dla Dennisa dla TIO!)
Wyzwanie
Wybierz język, który jest obecnie dostępny w witrynie TryItOnline , na przykład PowerShell . Napisz kod w tym języku na tej stronie, który nie wymaga żadnych danych wejściowych, tak że po kliknięciu przycisku Uruchom dane wyjściowe na tej stronie są dokładnie takie same, jak w polu „Zwykły adres URL”, gdy Zapisz / Zapisz zamiast tego jest kliknięty przycisk.
Dla fikcyjnego przykładu załóżmy, że aaa
był to kod rozwiązania tego problemu w PowerShell. Następnie wynik kliknięcia Uruchom z, aaa
jako że kod https://tio.run/#powershell
powinien zostać wyświetlony https://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AA
, który jest również polem „Zwykły adres URL” po kliknięciu przycisku Zapisz / Zapisz .
Punktacja
Powstały URL to poddanie się tego wyzwania. Zwycięzcą jest najkrótszy adres URL mierzony w bajtach. W powyższym przykładzie adres URL https://tio.run/##K8gvTy0qzkjNyfn/PzEx8f9/AA
oznacza poddanie się wyzwaniu ( 44 bajty) . Najkrótszy adres URL, który spełnia resztę tego wyzwania, wygrywa wyzwanie i zdobywa punkty brownie (punktów nie można wymienić). Biorąc pod uwagę, że istnieje wyraźna minimalna możliwa długość, jeśli dwa zgłoszenia wiążą się ze sobą, wcześniejsze zgłoszenie wygrywa.
Generowanie adresów URL
To początek algorytmu generowania adresu URL w repozytorium. Możesz zobaczyć, jak jest brany główny obszar kodu, dołączane są wszelkie dodatkowe elementy, łańcuch jest deflowany i konwertowany do Base64, a następnie ##
dodawany itd. Nie będę tutaj wchodził w szczegóły. część wyzwania polega na analizie i zrozumieniu, w jaki sposób generowane są adresy URL w celu wykorzystania potencjalnych dziwactw w tym algorytmie.
Zasady / wyjaśnienia
- Rzeczywisty kod nie powinien pobierać żadnych danych wejściowych i generować tylko wyjściowy adres URL quine-URL.
- Oznacza to, że tylko pola tekstowe, które powinny być zaludnione po kliknięciu na URL sąCode
,Header
,Footer
lub odpowiadające im pola „Compiler flaga”; teInput
iArguments
pola są zabronione i musi pozostać pusty / nieużywane. Kliknięcie przycisku Uruchom powinno tylko zmienićOutput
pole. W przypadku tego wyzwaniaDebug
pole jest ignorowane we wszystkich sytuacjach. - Zwykłe reguły quine mają zastosowanie do kodu w możliwym zakresie (na przykład kod nie może odczytać własnego kodu źródłowego za pośrednictwem
.code.tio
). - W zgłoszeniu podaj opis działania kodu.
- Przesyłanie „oszukiwanej” quiny poprzez przesłanie żądania ściągnięcia Git do repozytorium TIO w celu utworzenia „trickowego” adresu URL lub skrótu itp. Jest niedozwolone.
- Podobnie, wysyłanie żądania ściągnięcia w celu aktualizacji określonego języka w celu utworzenia „sztuczkowego” adresu URL jest niedozwolone.
- Bądź miły dla serwerów Dennisa i nie nadużywaj ich, ani nie próbuj wykorzystywać exploitów na potrzeby tego wyzwania.
źródło
https://tio.run/##a+a
linków do programu, który generuje dane wyjściowehttps://tio.run/##a+a
, czy jest poprawne, nawet jeśli wygenerowane łączesaveState
byłobyhttps://tio.run/##a@a
Odpowiedzi:
Python 2 , długość adresu URL = 170 bajtów
Wypróbuj online!
Zależy to od trzech zbiegów okoliczności:
=
znaków dopełniających.+
znaków.źródło
Bash ,
174166165157 bajtówTo koduje następujący program Bash.
Wypróbuj online!
Dzięki @ jimmy23013 za grę w golfa o 8 bajtów poza moim oryginalnym podejściem, za podejście, które pozwoliło zaoszczędzić kolejny bajt, i za grę w golfa o kolejne 8 bajtów poza tym podejściem!
źródło
base64 | tr -d \\n
na terminalu ... Dzięki!Pyth , długość adresu URL = 134 bajty
Kod:
Wypróbuj online!
Wykorzystuje wbudowaną funkcję Pytli zlib (
.Z
) i wbudowaną implementację base64.Jak to działa
Etap zewnętrzny:
Wewnętrzny etap, uzyskany przez zastąpienie białych znaków w ciągu
J
podwójnymi cudzysłowami:(Szkoda, że pole „Input” jest niedozwolone lub miałbym rozwiązanie 118-bajtowe ).
źródło
PowerShell, 274 bajty
Wszystko dzięki poniższemu fragmentowi:
Wypróbuj online!
źródło
JavaScript (Node.js) , 214 bajtów
Wypróbuj online!
źródło