Inspirowane hiperprogramowaniem: N + N, N × N, N ^ N wszystko w jednym .
Dzięki @MartinEnder i @trichoplax za pomoc w piaskownicy.
Definicje
Hyperquines
Zdefiniuj hiperquinę rzędu n jako pełny program lub funkcję P przypominającą quine, która spełnia wszystkie reguły mające zastosowanie do odpowiednich quines, a ponadto ma następującą strukturę.
P jest konkatenacją znaków ‡ grup składających się z n kopii tego samego znaku. Kiedy P jest wykonywane, wynikiem jest konkatenacja tych samych grup, powiększona o jeszcze jedną kopię znaku.
Przykłady
W hipotetycznym języku programowania, w którym kod źródłowy
aabbcc
generuje dane wyjścioweaaabbbccc
, program ten stanowi hiperquinę rzędu 2 .Definicja nie wymaga, aby znaki z różnych grup były różne.
Jeśli kod źródłowy
aabbcc
generuje dane wyjścioweaaaabbbbcccc
, program jest hiperquine rzędu 1 ; kod źródłowy składa się z sześciu jednoznakowych grup, a wynik sześciu par znaków.W GS2 pusty program jest drukowany
\n
, a program jest\n
drukowany\n\n
. Jednak\n
ani\n\n
hiperquiny, ani te nie są, ponieważ nie spełniają one wszystkich właściwości właściwych quines ; żadna część kodu źródłowego nie koduje innej części wyniku.
Łańcuchy Hyperquine
Zdefiniuj hiperquinowy łańcuch długości n jako skończoną sekwencję n pełnych programów lub n funkcji
(P 1 ,…, P n ), która spełnia następujące ograniczenia.
Wyjściami P 1 ,…, P n-1 są odpowiednio P 2 ,…, P n .
P 1 ,…, P n są hiperkwinami.
Rzędy P 1 ,…, P n tworzą ściśle rosnącą sekwencję sąsiednich liczb całkowitych.
Na koniec zdefiniuj nieskończony łańcuch hiperquinowy jako nieskończoną sekwencję pełnych programów lub funkcji (P 1 , P 2 ,…) tak, aby każdy początkowy przedział (P 1 ,…, P n ) stanowił łańcuch hiperquinowy o długości n .
Przykłady
W hipotetycznym języku programowania, w którym kod źródłowy
aabbcc
generuje dane wyjścioweaaabbbccc
, które z kolei generują dane wyjścioweaaaabbbbcccc
, para (aabbcc
,aaabbbccc
) stanowi hiperquinowy łańcuch o długości 2 .Zauważ, że
aaaabbbbcccc
- wynik ostatniej hiperquiny w łańcuchu - nie musi generować określonego wyniku; nie musi to być nawet poprawny kod źródłowy.Kontynuując poprzedniego przykładu, jeśli
aaaabbbbcccc
wytwarza sygnał wyjściowyaaaaabbbbbccccc
, trójkę (aabbcc
,aaabbbccc
,aaaabbbbcccc
) stanowi łańcuch hyperquine długości 3 .Jeśli ten wzór trwa wiecznie, sekwencja (
aabbcc
,aaabbbccc
,aaaabbbbcccc
, ...) stanowi nieskończony łańcuch hyperquine.Para programów (
abc
,aabbcc
) z wyjściami (aabbcc
,aaaabbbbcccc
) nie jest łańcuchem hiperquin, ponieważ oba rzędy hiperquin są równe 1 , więc nie tworzą ściśle rosnącej sekwencji.Para programów (
aabbcc
,aaaabbbbcccc
) z wyjściami (aaaabbbbcccc
,aaaaabbbbbccccc
) nie jest łańcuchem hiperquin, ponieważ rzędy hiperquin to 1 i 4 , więc nie tworzą one sekwencji sąsiednich liczb całkowitych.
Zasady
Zadanie
W wybranym języku programowania napisz nietrywialny łańcuch hiperquinowy, tj. Łańcuch składający się z co najmniej 2 hiperkwin.
Jak zwykle, twoje programy nie mogą pobierać żadnych danych wejściowych ani uzyskiwać dostępu do własnego kodu źródłowego w żadnej formie.
Jeśli twój interpreter wypisuje ukrytą nową linię, hiperquiny muszą to uwzględnić.
Obowiązują wszystkie standardowe luki - zwłaszcza te związane z quinesami.
Punktacja
Najdłuższy łańcuch hiperquiny wygrywa. Jeśli dwa lub więcej zgłoszeń jest powiązanych, zgłoszenie spośród tych, które zaczyna się od najkrótszej hiperquiny (mierzonej w znakach ‡ ) wygrywa. Jak zwykle czas publikacji jest ostatecznym rozstrzygnięciem.
‡ Musisz użyć tego samego kodowania znaków dla kodu źródłowego, wyniku, liczby znaków i wykonania. Na przykład, program Python print 42
jest nie 2 znaków UTF-32 uległość, ponieważ interpreter traktuje każdy bajt jako pojedynczego znaku. Jeśli wybrany język nie jest oparty na znakach, wszystkie bajty należy traktować jak znaki.