Twoim zadaniem jest utworzenie najkrótszego programu (A), który generuje inny program (B) z najbardziej unikalnymi bajtami, który z kolei generuje oryginalny program (A). Zasadniczo grasz w golfa w połowie pary programów ouroboros ( zwanych też okresową iteracją quine), a drugą w kręgle. A i B mogą być w różnych językach.
Zasady i punktacja
Twój końcowy wynik to <number of unique bytes in B> / <number of bytes in A>
. Najwyższy wynik wygrywa. Należy zauważyć, że teoretyczny maksymalny wynik to 256.
- Program A musi mieć co najmniej jeden bajt
- Program B nie może składać się całkowicie z braku operacji, tzn. Co najmniej jeden znak musi w jakiś sposób wpływać na wynik.
- W przypadku obu programów obowiązują standardowe zasady quines . W szczególności, quinesy błędów nie są dozwolone w żadnym przypadku.
Ze względu na spójność formatu odpowiedzi rozpocznij odpowiedź od czegoś takiego:
# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
code-golf
code-challenge
quine
code-bowling
Wołowina
źródło
źródło
aaaaa
ma jeden unikalny bajt iabcde
ma 5 unikalnych bajtów.Odpowiedzi:
Japt i Japt , wynik: 255/38 = 6,71
Program A :
Program B ma ponad 8kB długości, tak długo, że link się łamie, więc nie wkleję całego. Oto próbka:
Nie mogłem znaleźć sposobu na uruchomienie
NUL
bajtu, dlatego program B ma tylko 255 unikalnych znaków. Program B zasadniczo składa się z 255 kopii jednego programu, w którym za każdym razem zmienia się jeden nieistotny bajt, a pierwsze 254 wykonania są ignorowane.Dla wyjaśnienia zacznę od tej uproszczonej wersji A, aby łatwiej było omówić wynikowy B.
Program ten oparty jest na podstawowej, przystosowanej do obciążenia Jine quine . Ciąg na początku zawiera duplikat reszty programu,
iQ ²
wstawia cytat i duplikuje się, aby utworzyć ciąg reprezentujący cały program, a następnie¯23
przycina siebie i wszystko po nim. Powstały ciąg jest programem, który wysyła program A :Odniosę się do tego ciągu jako
U
.Ostatnia linia A powiela
U
kilka razy za każdym razem z niewielką zmianą. W szczególności dla każdej liczbyX
w zakresie[1...3]
wypisuje,"#c" + U
gdziec
jest znak z kodem znakówX
. Domyślnym działaniem Japt jest wypisywanie tych ciągów bez znaków cudzysłowu i oddzielanie ich przecinkami, więc jest to wynik naszego Uproszczonego A (zwróć uwagę, że między każdym#
a"iQ
:Zadzwonimy ten uproszczony B .
Uproszczony B ma prostą strukturę, na przemian z
#c
iU
. Na szczęście do tej odpowiedzi, każdy#c
iU
jest traktowany jako oddzielone przecinkiem, aw tej sytuacji zachowanie to jest wszystko z wyjątkiem bardzo ostatnioU
nie ma wpływu na wyjściu. Jedyną częścią Uproszczonego B, która wpływa na wynik, jest:Co jest identyczne z
U
tym, że znamy już wyniki Uproszczone A.Jedyna różnica między uproszczonym A i programem A polega na tym, że zamiast generować kopie dla zakresu,
[1...3]
prawdziwy program generuje kopie dla zakresu[1...256]
. To powoduje, że 256 wersji#c
każdej z nich ma inny znak, chociaż ostatnia wersja „Ā” jest znakiem wielobajtowym, więc nie dodaje żadnych unikalnych bajtów, ale wszystko oprócz ostatniegoU
jest nadal ignorowane.źródło
27
za każdym razem, gdy zapisywane są bajty, ale poza tym wydaje się, że działa.Program A, Gol> <> , 256/20 bajtów = 12,8
Wypróbuj online!
Program B, Gol> <>
Wypróbuj online!
Program naprzemiennie wyświetla dane wyjściowe, po których następuje każdy bajt, a sam wyświetla dane wyjściowe.
Wyjaśnienie:
źródło
Program A: 05AB1E , wynik:
256/41256/31 bajtów = 8,258 ...Wypróbuj online.
Program B: 05AB1E
Wypróbuj online.
Wyjaśnienie:
Najkrótsza quine dla 05AB1E to:
0"D34çý"D34çý
( 14 bajtów ) dostarczona przez @OliverNi . Moja odpowiedź wykorzystuje zmodyfikowaną wersję tego quinu, dodając₅Ýç'q†vy27ǝD}J
.Program B zakończy się, gdy tylko osiągnie
q
, więc rzeczywisty program B to:Wszystko później jest ignorowane, a wierzchołek stosu (
0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ
) jest generowany niejawnie.źródło