Ispirato da Hyperprogramming: N + N, N × N, N ^ N tutto in uno .
Grazie a @MartinEnder e @trichoplax per il loro aiuto nella sandbox.
definizioni
Hyperquines
Definire un hyperquine di ordine n come un programma completo simile a un quine o una funzione P che soddisfa tutte le regole che si applicano ai quines corretti e, inoltre, ha la seguente struttura.
P è la concatenazione di gruppi di caratteri ‡ costituiti da n copie dello stesso personaggio. Quando viene eseguito P , l' output è la concatenazione degli stessi gruppi, aumentata di un'altra copia del personaggio.
Esempi
In un ipotetico linguaggio di programmazione in cui il codice sorgente
aabbcc
genera l'outputaaabbbccc
, questo programma costituisce un'iperquina di ordine 2 .La definizione non richiede che i caratteri di gruppi diversi siano diversi.
Se il codice sorgente
aabbcc
genera l'outputaaaabbbbcccc
, il programma è un hyperquine di ordine 1 ; il codice sorgente è costituito da sei gruppi di caratteri singoli, l'output di sei coppie di caratteri.In GS2 , il programma vuoto viene stampato
\n
e il programma\n
stampa\n\n
. Tuttavia,\n
né lo\n\n
sono né le hyperquine, dal momento che non soddisfano tutte le proprietà delle quine appropriate ; nessuna parte del codice sorgente codifica una parte diversa dell'output.
Catene iperquine
Definire una catena hyperquine di lunghezza n come sequenza finita di n programmi completi o n funzioni
(P 1 , ..., P n ) che soddisfa i seguenti vincoli.
Le uscite di P 1 , ..., P n-1 sono rispettivamente P 2 , ..., P n .
P 1 , ..., P n sono iperquine.
Gli ordini di P 1 , ..., P n formano una sequenza strettamente crescente di numeri interi adiacenti .
Infine, definire una catena iperquina infinita come una sequenza infinita di programmi o funzioni completi (P 1 , P 2 , ...) in modo tale che ogni intervallo iniziale (P 1 , ..., P n ) costituisca una catena iperquina di lunghezza n .
Esempi
In un ipotetico linguaggio di programmazione in cui il codice sorgente
aabbcc
genera l'outputaaabbbccc
, che a sua volta genera l'outputaaaabbbbcccc
, la coppia (aabbcc
,aaabbbccc
) costituisce una catena hyperquine di lunghezza 2 .Si noti che
aaaabbbbcccc
- l'output dell'ultima hyperquine nella catena - non deve produrre un output specifico; non deve nemmeno essere un codice sorgente valido.Continuando l'esempio precedente, se
aaaabbbbcccc
genera l'uscitaaaaaabbbbbccccc
, la tripletta (aabbcc
,aaabbbccc
,aaaabbbbcccc
) costituisce una catena hyperquine di lunghezza 3 .Se questo modello continua sempre, la sequenza (
aabbcc
,aaabbbccc
,aaaabbbbcccc
, ...) costituisce una catena infinita hyperquine.La coppia di programmi (
abc
,aabbcc
) con output (aabbcc
,aaaabbbbcccc
) non è una catena hyperquine, poiché gli ordini delle hyperquine sono entrambi 1 , quindi non formano una sequenza strettamente crescente.La coppia di programmi (
aabbcc
,aaaabbbbcccc
) con output (aaaabbbbcccc
,aaaaabbbbbccccc
) non è una catena hyperquine, poiché gli ordini delle hyperquine sono 1 e 4 , quindi non formano una sequenza di numeri interi adiacenti.
Regole
Compito
In un linguaggio di programmazione a tua scelta, scrivi una catena di hyperquine non banale, cioè una catena che consiste di almeno 2 hyperquine.
Come al solito, i tuoi programmi non possono accettare alcun input o accedere al proprio codice sorgente in qualsiasi forma.
Se il tuo interprete stampa una nuova riga implicita, le tue hyperquine devono tenerne conto.
Si applicano tutte le scappatoie standard , in particolare quelle relative alle quine.
punteggio
Vince la catena iperquina più lunga . Se due o più invii sono in parità, l'inoltro tra questi che inizia con l'iperquina più breve (misurata in caratteri ‡ ) vince. Come al solito, il tempo di pubblicazione è l'ultimo tiebreaker.
‡ È necessario utilizzare la stessa codifica dei caratteri per codice sorgente, output, conteggio dei caratteri ed esecuzione. Ad esempio, il programma Python nonprint 42
è un invio UTF-32 a 2 caratteri, poiché l'interprete tratta ogni byte come un singolo carattere. Se la tua lingua preferita non è basata sui caratteri, tratta tutti i singoli byte come caratteri.