Flessibilità di Kolmogorov. AKA Sale!


12

Questa è una sfida a , , per produrre un output fisso senza input.

Il formato di output, tuttavia, è flessibile: può essere stampato su standard, stampato su errore standard, restituito come un elenco di caratteri, restituito come un elenco di byte o restituito come un elenco di numeri interi. Se pensi che qualsiasi altra cosa sembri ragionevole, basta chiedere nei commenti!

Ecco un semplice CODEGOLF di arte ASCII a lettere grandi :

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFF
C      O   O  D   D  E      G      O   O  L      F
C      O   O  D   D  EEE    G  GG  O   O  L      FFF
C      O   O  D   D  E      G   G  O   O  L      F
 CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

Senza nuove righe (o spazi finali su qualsiasi riga) è lungo 256 caratteri:

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFFC      O   O  D   D  E      G      O   O  L      FC      O   O  D   D  EEE    G  GG  O   O  L      FFFC      O   O  D   D  E      G   G  O   O  L      F CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

Gli indici (basati su 0) dei caratteri non spaziali sono:

1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255

Non è possibile utilizzare nessuno di questi 97 byte nel codice, ma è necessario produrre un elenco (o in modo simile l'output) di questi byte, in questo ordine, con i byte mancanti sostituiti dal 32 ° byte nella tabella codici che si sta utilizzando (in molti, molti code-pages un carattere spazio).

Puoi includere le newline * piuttosto carine (ma senza spazi finali sulle linee) se ti aiuta.

Ad esempio, utilizzando la tabella codici Jelly questo output è accettabile:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      12345
6      =   A  D   H  K      R      Y   ]  `      g
h      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓ
ƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ
 ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

... ma così è:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      123456      =   A  D   H  K      R      Y   ]  `      gh      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

... e così è:

[32, 1, 2, 3, 4, 32, 32, 32, 8, 9, 10, 32, 32, 32, 14, 15, 16, 17, 32, 32, 32, 21, 22, 23, 24, 25, 32, 32, 32, 29, 30, 31, 32, 32, 32, 32, 36, 37, 38, 32, 32, 32, 42, 32, 32, 32, 32, 32, 32, 49, 50, 51, 52, 53, 54, 32, 32, 32, 32, 32, 32, 61, 32, 32, 32, 65, 32, 32, 68, 32, 32, 32, 72, 32, 32, 75, 32, 32, 32, 32, 32, 32, 82, 32, 32, 32, 32, 32, 32, 89, 32, 32, 32, 93, 32, 32, 96, 32, 32, 32, 32, 32, 32, 103, 104, 32, 32, 32, 32, 32, 32, 111, 32, 32, 32, 115, 32, 32, 118, 32, 32, 32, 122, 32, 32, 125, 126, 127, 32, 32, 32, 32, 132, 32, 32, 135, 136, 32, 32, 139, 32, 32, 32, 143, 32, 32, 146, 32, 32, 32, 32, 32, 32, 153, 154, 155, 156, 32, 32, 32, 32, 32, 32, 163, 32, 32, 32, 167, 32, 32, 170, 32, 32, 32, 174, 32, 32, 177, 32, 32, 32, 32, 32, 32, 184, 32, 32, 32, 188, 32, 32, 191, 32, 32, 32, 195, 32, 32, 198, 32, 32, 32, 32, 32, 32, 205, 32, 207, 208, 209, 210, 32, 32, 32, 214, 215, 216, 32, 32, 32, 220, 221, 222, 223, 32, 32, 32, 227, 228, 229, 230, 231, 32, 32, 32, 235, 236, 237, 238, 32, 32, 32, 242, 243, 244, 32, 32, 32, 248, 249, 250, 251, 252, 32, 32, 255]

(Quest'ultimo è un output di elenco valido in qualsiasi lingua con qualsiasi code-page e si può usare anche qualsiasi formattazione ragionevole dell'elenco.)


Ecco il codice Python 3 che mostra i byte ASCII non disponibili.

* Anche se la stampa stessa potrebbe non essere così bella!


Non puoi usare nessuno di questi 97 byte nel tuo codice Significa che non posso usare questi caratteri ASCII: $%&*123456=ADHKRY]``ghosvz}~e nessuna nuova riga?
Tito

1
@Titus Se la tua tabella codici si allinea con ASCII, allora sì - o una scheda o uno qualsiasi degli altri caratteri nell'intervallo indicato, ad esempio non stampabili o estesi. (Inoltre - vedi lo script Python collegato al TIO)
Jonathan Allan,

2
Per quello che vale, ecco un validatore di codice (supponendo che non ci sia una tabella codici speciale).
Arnauld,

Ce l'ho quasi in PHP ... ho solo bisogno di un modo array_map(function($n){return sprintf("%6b",$n);},...)senza $(potrei farlo) E senza }(nessuna idea). Sì; Voglio imballare i dati!
Tito

Risposte:


7

Python 2 , 321 203 byte

print map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8,enumerate(bin(int(reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkf','')))))

Provalo online!


Spiegazione:

dall'interno:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkè il numero 25731972618407747697792173390589410779249734035626759409848989703511287412985codificato con caratteri consentiti. (No 123456è permesso)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') associa la stringa alla sua stringa decimale:

  • reduce(lambda x,y:x+y,'..','')è uguale a ''.join('..')(No oè consentito)
  • repr('..')invece di str('..')(No sè permesso)
  • 'abcdefijkl'.find(y) associa un carattere a una cifra.

enumerate(bin(int(...)))converte la stringa numerica in una stringa binaria ed enumera. Questo dà le coppie[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) converte l'elenco enumerato nel risultato finale.

  • map(lambda(i,x):.. , .. )invece di [... for(i,x)in ...](No o]è permesso)
  • lambda(i,x): ..converte ciascuna coppia (indice, valore) in indice o 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 equivale a:
    • x>'0'and i or 8+8+8+8, (Nessun opermesso)
    • [8+8+8+8,i][x>'0']oppure [8<<9-7,i][x>'0'], (No ]è permesso)
  • 8+8+8+8= 32(Nessun 23permesso)

Ciò significa che il programma è sostanzialmente lo stesso di:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]

Alcuni bei lavori di golf lì: D
Jonathan Allan,

7

C (gcc) , 318 byte

main(_){--_<88+80+88?printf((int[:>){77707-989908070??>,((int[:>){0xE8E8C79E^0xB0B0080,0xC07E0870^0xE0000C00,0xCC08099C^0xEE0C008E,0xE8888989^0xCC00808,0x9E088990^0x800C0000,0x990C8888^0x080ECC00,0xF9C7a088^0x080000C0,0x9F8C78F8^0x900000??>[_>>(0xC^0x9):>>>(_<<9+9+9>>9+9+9))<<(70^89)>>(70^89)?_:' '),main(_+9-7):0;??>

Provalo online!

Questo è un po 'un viaggio ...

1. Comprimere l'elenco

In qualche modo dovremo verificare se un dato numero intero è uno dei punti di codice speciali. Qualsiasi elenco "nudo" sarà troppo lungo, quindi utilizziamo un elenco di controllo. Questo elenco ha un valore diverso da zero in punti di codice "limitati" e un valore zero in quelli che non lo sono.

Purtroppo questo richiede ancora 512 byte solo per avere l'elenco (sembra 0,0,7,7,0,7,0,...). Questo può essere abbreviato con una maschera di bit.

Per usare la maschera di bit spezzeremo ogni byte in due pezzi. I primi 3 bit sceglieranno una maschera da un array, mentre gli ultimi 5 sceglieranno un bit nell'array. Non possiamo ridurre ulteriormente l'array perché gli interi a 32 bit utilizzati per impostazione predefinita non supportano più di 2 ^ 5 = 32 bit.

Usando un'implementazione di riferimento ho scritto:

int main() {
    int i;
    int vals[] = {1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255, 0};

    for (i = 0; i <= 0xFF; ++i) {
        int j,f;
        f = 0;
        for (j = 0; vals[j]; ++j)
            if (vals[j] == i)
                f = 1;
        if (f)
            printf("1");
        else
            printf("0");

        if (i%32 == 31)
            printf("\n");
    }

    return 0;
}

Sono stato in grado di generare i valori appropriati per questo nuovo array usando il comando echo "obase=16;ibase=2;$(./a.out | rev)" | bc. Questo passa l'output del programma sopra ( ./a.out) al revprogramma, che inverte ogni riga. Lo stampa insieme a un'intestazione in bc che imposta la base di output su 16 e la base di input su 2. In questo modo bc converte le cifre binarie in una maschera di bit esadecimale.

L'array risultante è visibile in questa soluzione 'beta':

f(){
    int x;
    int arr[] = {0xE3E3C71E, 0x207E0470, 0x22040912, 0xE4488181, 0x1E048990, 0x91024488, 0xF1C7A048, 0x9F1C78F8};
    for (x=0; x<=0xFF; ++x) {
        int mask = arr[x >> 5];
        int bit = mask >> (x & 0x1F);

        if (bit & 1)
            printf("%c", x);
        else
            printf(" ");
    }
}

2. Gestire i vincoli

Ci sono molti vincoli che devono essere inseriti nel codice sopra. Qui passo attraverso ciascuno di essi 1 per 1.

  1. Nessun incarico

Questo è sentito anche da altre lingue, senza assegnazione in C è molto difficile ottenere valori garantiti in variabili. Il modo più semplice per noi è scrivere la nostra funzione come programma completo. Il primo argomento di mainverrà passato il cui valore argcsarà 1 se chiamato senza argomenti.

  1. Nessun loop

I costrutti di ciclo solo in C sono for, whilee gotoognuno dei quali contengono caratteri limitati. Questo ci lascia con l'uso della ricorsione. La funzione principale inizierà da 1 e si ripeterà fino a quando l'argomento è> 256, nel frattempo diminuirà l'argomento internamente per utilizzare un valore con indice 0.

  1. Valori esadecimali

I valori nell'array sopra sono esadecimali, anche se convertiti in decimali, contengono alcuni simboli limitati, in particolare 123456 (AD può essere in maiuscolo). Per ovviare a questo, ogni costante viene XORata con un'altra in modo tale da rimuovere i caratteri limitati. 1 diventa 9 ^ B, 2 diventa C ^ E, 3 diventa B ^ 8, 4 diventa 8 ^ C, 5 diventa 9 ^ C e 6 diventa 9 ^ F (ci sono altri modi per farlo, ho scelto in questo modo) .

  1. Stampa

Le restrizioni non lasciano a noi molte funzioni di stampa. putchare putssono entrambi limitati, in partenza printf. Sfortunatamente dobbiamo inviare printfuna stringa di formato, idealmente "% c". Tutte queste stringhe hanno quel fastidioso segno di percentuale che desideriamo rimuovere. Fortunatamente assumiamo una macchina little-endian (perché apparentemente è quello che usa TIO, ed è piuttosto tipico). Costruendo il numero intero i cui byte in memoria sono 0x25 (%), 0x63 (c), 0x00 (\ 0), qualsiasi cosa (non importa, è dopo il terminatore null) possiamo semplicemente passare il suo indirizzo a printfe lo assumerà è una stringa. Uno di questi numeri che funziona è -989830363 (0xC5006325). Questo è facile da creare in base alle restrizioni come 77707-989908070.

C'è ancora il problema che non possiamo fare riferimento a nessun valore (perché non possiamo assegnarli e perché non possiamo usare &), quindi dobbiamo usare un array letterale (int []) {...}. In realtà lo usiamo anche per l'array di maschere di bit sopra.

  1. Parentesi di chiusura

Non possiamo usare ']' o '}' per chiudere le nostre matrici o funzioni. Fortunatamente C ha digrafi e trigrafi che funzionano. :>diventerà ], mentre ??>diventerà }. Ciò richiede che gcc esegua il -trigraphspassaggio, poiché ignora le trigrafi per impostazione predefinita (in violazione dello standard).

  1. Operazioni bit per bit

Non possiamo usare &per mascherare i bit fuori dal nostro indice, né possiamo usarli %per arrivarci alla vecchia maniera. Pertanto facciamo affidamento sul comportamento specifico dell'implementazione. In particolare spostiamo i nostri numeri interi a 32 bit abbastanza a sinistra per perdere bit, quindi di nuovo a destra. Ad esempio, per ottenere gli ultimi 5 bit del nostro numero, dobbiamo prima spostarlo a sinistra di 27 bit (lasciando abcde00000...), quindi spostarlo di nuovo a destra di 27 bit (lasciando ...00000abcde).

  1. Valori vari

Abbiamo bisogno di qualche altro valore letterale in tutto il codice - questi sono presi dalla risposta JS di Arnauld, più 27 (per la ragione sopra) sono aggiunti da me come 9+9+9.

3. Mettendolo insieme

Ecco la descrizione della fonte con tutte queste modifiche insieme.

main(_){                // This is our main entry point
--_<88+80+88            // This subtracts 1 from the argument (_) and checks if it is less than 256
    ?                   // If it is less than 256 we 'continue'
printf(                 // first we call printf with...
    (int[:>){           // An integer array that will be interpreted as a string
    77707-989908070     // With the value we determined above, to represent "%c\0\xC5"
    ??>,                // This is a trigraph for }, just as the :> above is a digraph for ]
    ((int[:>){          // We immediately create another integer array
0xE8E8C79E^0xB0B0080,   // Each row is the bit-mask for 32 characters
0xC07E0870^0xE0000C00,
0xCC08099C^0xEE0C008E,
0xE8888989^0xCC00808,
0x9E088990^0x800C0000,
0x990C8888^0x080ECC00,
0xF9C7a088^0x080000C0,
0x9F8C78F8^0x900000??>
[_>>(0xC^0x9):>         // This is {arr}[_>>5] just in a roundabout way
>>(_<<9+9+9>>9+9+9))    // Similarly this is (...)>>(_&0x1F)
<<(70^89)>>(70^89)      // This is <<31>>31 or &1, to check the last bit
?_:' ')                 // If its 1, we print the character, otherwise we print a space
,main(_+9-7):0;         // We recurse, the :0 is the other branch of the if, it terminates execution
??>

Ottimo lavoro! Bella spiegazione anche. (Non sono al 100% ma credo che l'intestazione dovrebbe contenere "C (gcc) -trigraphs")
Jonathan Allan,

1
È in discussione. Il codice non è specifico di gcc, non è completamente conforme agli standard, ma sulla mia macchina cc lo compila bene senza argomenti. Non esiste un compilatore integrato su TIO che sia conforme allo standard per impostazione predefinita, se esistesse (o una versione precedente di gcc), le trigrafi genererebbero solo avvisi.
LambdaBeta,

Usando l' ?:estensione g ++ , abusa bitwise shift modulo 32, 273 byte
user202729

È intelligente. Ho intenzione di mantenerlo così com'è, poiché questa versione non ha bisogno -trigraphsdell'opzione su alcuni compilatori C, mentre ?:richiede gcc che richiede -trigraphs.
LambdaBeta,

6

Brainfuck , 635 byte

++++++++++++++++++++++++++++++++.>+.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+....++++.+.+.<...>++++.<......>+++++++.+.+.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<......>+++++++.<...>++++.<..>+++.<......>+++++++.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.+.+.<....>+++++.<..>+++.+.<..>+++.<...>++++.<..>+++.<......>+++++++.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<.>++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.+.<..>>-.

Provalo online!

In risposta al fatto di essere stato finalmente sconfitto da Javascript, ho scoperto tutto quello che posso:

1 byte salvato avendo 32 nella cella 0 e incrementando la cella 1 (l'unica ragione per cui inizialmente l'ho avuto nell'altro modo era a causa di una soluzione rapida quando OrjanJohansen ha sottolineato che non potevo usare ])

1 byte salvato decrementando una terza cella (inizialmente a 0) per generare 255=-1

2 byte salvati stampando spazi tra i caratteri 31 e 36 senza usare, <>ma semplicemente fermandosi a 32 per stampare dalla cella 0 quando si incrementa da 31 a 33.

Brainfuck , 639 byte

>++++++++++++++++++++++++++++++++.<+.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.>....<+++++.+.+.>...<++++.>......<+++++++.+.+.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>......<+++++++.>...<++++.>..<+++.>......<+++++++.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.+.+.>....<+++++.>..<+++.+.>..<+++.>...<++++.>..<+++.>......<+++++++.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>.<++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.+.>..<+++.

Provalo online!

Per prima cosa generiamo il numero 32. Quindi passiamo attraverso l'incremento di una cella e il passaggio tra la stampa di quella cella e quella contenente 32. I numeri in costante aumento sono qualcosa che Brainfuck fa bene.

È bello battere Javascript con Brainfuck, non succede spesso!


Ci dispiace, ma ]non è un personaggio consentito. Anche se dovresti essere ancora in grado di risolverlo e battere il Javascript. :)
Ørjan Johansen,

@ ØrjanJohansen fixed
Level River St

Spiacenti, hai perso Javascript.
user202729

@utente202729 abbastanza buono! tuttavia, ho battuto Javascript per 3 giorni. Dato che non posso usare i loop perché ]non è consentito, penso che la mia risposta BF sia probabilmente ora ottimale.
Level River St

5

JavaScript (SpiderMonkey) , 1918 1598 1487 1431 byte

Risparmiato 56 byte grazie a @ user202729

print(8<<98,7/7,9-7,7>>97,8>>97,8<<98,8<<98,8<<98,8,9,0xa,8<<98,8<<98,8<<98,0xe,0xf,7+9,8+9,8<<98,8<<98,8<<98,7+0xe,7+0xf,8+0xf,9+0xf,78^87,8<<98,8<<98,8<<98,77^80,70^88,70^89,8<<98,8<<98,8<<98,8<<98,9<<98,70^99,77>>97,8<<98,8<<98,8<<98,98-070,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,9^070,80^98,80^99,87^99,87^98,9^077,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,70-9,8<<98,8<<98,8<<98,7^70,8<<98,8<<98,9^77,8<<98,8<<98,8<<98,7^79,8<<98,8<<98,70^0xd,((8<<98)+' ').repeat(8^0xe)+(8^90),((8<<98)+' ').repeat(8^0xe)+89,8<<98,8<<98,8<<98,7^90,8<<98,8<<98,7+89,((8<<98)+' ').repeat(8^0xe)+(7|97),7+97,((8<<98)+' ').repeat(8^0xe)+(77|98),8<<98,8<<98,8<<98,80|99,8<<98,8<<98,8^0x7e,8<<98,8<<98,8<<98,0x7a,8<<98,8<<98,0x7d,0x7e,0x7f,8<<98,8<<98,8<<98,8<<98,7+0x7d,8<<98,8<<98,0x87,0x88,8<<98,8<<98,0x8b,8<<98,8<<98,8<<98,0x8f,8<<98,8<<98,7+0x8b,((8<<98)+' ').repeat(8^0xe)+0x99,0x9a,0x9b,0x9c,((8<<98)+' ').repeat(8^0xe)+(7+0x9c),8<<98,8<<98,8<<98,0xa7,8<<98,8<<98,0xaa,8<<98,8<<98,8<<98,0xae,8<<98,8<<98,78+99,((8<<98)+' ').repeat(8^0xe)+0xb8,8<<98,8<<98,8<<98,0xbc,8<<98,8<<98,0xbf,8<<98,8<<98,8<<98,97+98,8<<98,8<<98,99+99,((8<<98)+' ').repeat(8^0xe)+0xcd,8<<98,0xcf,0xd0,7+0xca,7+0xcb,8<<98,8<<98,8<<98,7+0xcf,0xd7,0xd8,8<<98,8<<98,8<<98,0xdc,0xdd,0xde,0xdf,8<<98,8<<98,8<<98,7+0xdc,7+0xdd,7+0xde,7+0xdf,0xe7,8<<98,8<<98,8<<98,0xeb,0xec,0xed,0xee,8<<98,8<<98,8<<98,7+0xeb,7+0xec,7+0xed,8<<98,8<<98,8<<98,0xf8,0xf9,0xfa,0xfb,0xfc,8<<98,8<<98,0xff)

Provalo online!

Come?

Il fatto che =non è consentito è un killer di spettacolo in JS. Non è possibile eseguire alcuna assegnazione di variabili e inoltre non è possibile utilizzare alcuna funzione freccia.

0789+-/|^<<>>

  1 = 7/7     |   50 = 80^98   |  136 = 0x88    |  216 = 0xd8
  2 = 9-7     |   51 = 80^99   |  139 = 0x8b    |  220 = 0xdc
  3 = 7>>97   |   52 = 87^99   |  143 = 0x8f    |  221 = 0xdd
  4 = 8>>97   |   53 = 87^98   |  146 = 7+0x8b  |  222 = 0xde
  8 = 8       |   54 = 9^077   |  153 = 0x99    |  223 = 0xdf
  9 = 9       |   61 = 70-9    |  154 = 0x9a    |  227 = 7+0xdc
 10 = 0xa     |   65 = 7^70    |  155 = 0x9b    |  228 = 7+0xdd
 14 = 0xe     |   68 = 9^77    |  156 = 0x9c    |  229 = 7+0xde
 15 = 0xf     |   72 = 7^79    |  163 = 7+0x9c  |  230 = 7+0xdf
 16 = 7+9     |   75 = 70^0xd  |  167 = 0xa7    |  231 = 0xe7
 17 = 8+9     |   82 = 8^90    |  170 = 0xaa    |  235 = 0xeb
 21 = 7+0xe   |   89 = 89      |  174 = 0xae    |  236 = 0xec
 22 = 7+0xf   |   93 = 7^90    |  177 = 78+99   |  237 = 0xed
 23 = 8+0xf   |   96 = 7+89    |  184 = 0xb8    |  238 = 0xee
 24 = 9+0xf   |  103 = 7|97    |  188 = 0xbc    |  242 = 7+0xeb
 25 = 78^87   |  104 = 7+97    |  191 = 0xbf    |  243 = 7+0xec
 29 = 77^80   |  111 = 77|98   |  195 = 97+98   |  244 = 7+0xed
 30 = 70^88   |  115 = 80|99   |  198 = 99+99   |  248 = 0xf8
 31 = 70^89   |  118 = 8^0x7e  |  205 = 0xcd    |  249 = 0xf9
 32 = 8<<98   |  122 = 0x7a    |  207 = 0xcf    |  250 = 0xfa
 36 = 9<<98   |  125 = 0x7d    |  208 = 0xd0    |  251 = 0xfb
 37 = 70^99   |  126 = 0x7e    |  209 = 7+0xca  |  252 = 0xfc
 38 = 77>>97  |  127 = 0x7f    |  210 = 7+0xcb  |  255 = 0xff
 42 = 98-070  |  132 = 7+0x7d  |  214 = 7+0xcf  |
 49 = 9^070   |  135 = 0x87    |  215 = 0xd7    |

32

Lascia che shiftCount sia il risultato del mascheramento di tutti tranne i 5 bit meno significativi di rnum , ovvero calcola rnum e 0x1F.

8<<988<<232


32come 8<<9-7salva un byte per ciascuno 32.
TFeld

1
32 = 8<<98982(mod32)

3
"show-killer" o "fun-maker"?
Jonathan Allan,

2
@JonathanAllan ;-) Quest'ultimo esce dal primo!
Arnauld,

Scusa se sono stupido, ma perché ti colleghi a una vecchia versione di SpiderMonkey?
Solomon Ucko,

4

Haskell, 623 617 614 594 360 342 byte

Modifica: -234 byte grazie a @Lynn trovando un pattern che codifica come stringa. -18 byte grazie a @ Ørjan Johansen.

map(\i->cycle(8+8+8+8:filter(\_->" XXXX   XXX   XXXX   XXXXX   XXX    XXX   X      XXXXXX      X   X  X   X  X      X      X   X  X      XX      X   X  X   X  XXX    X  XX  X   X  X      XXXX      X   X  X   X  X      X   X  X   X  X      X XXXX   XXX   XXXX   XXXXX   XXXX   XXX   XXXXX  X"!!i>' ')(pure i))!!9)(take(0xf8+8)(iterate(9-8+)0))

Provalo online!

Come funziona

map(\i->    )                   -- map the lambda over the
        (take(0xf8+8)           -- first 256 elements of
           (iterate(9-8+)0))    -- the list [0,1,2,....]

                                -- the lambda is:

    cycle                       -- make an infinite list by repeating the list
      8+8+8+8:                  -- wih element 32 followed by
                  pure i        -- the singleton list with 'i'
       filter                   -- but keep 'i' only if
          \_->" XXXX..."!!i>' ' -- the pattern has an 'X' at index 'i', else
                                -- remove it to make an empty list
                                -- i.e. the cycled list is, if the pattern is
                                -- a space: [32,32,32,32,32,32,32,32,32,32,...]
                                -- an 'X':  [32, i,32, i,32, i,32, i,32, i,...]
                                --                                       ^
                                --                        9th element ---/ 
                      !!9       -- pick the 9th element which is the result
                                -- of the lambda

3
È possibile indicizzare (id:pure(\_->8+8+8+8))da until((||" XXXX XXX XXXX XXXXX XXX XXX X XXXXXX X X X X X X X X X XX X X X X XXX X XX X X X XXXX X X X X X X X X X X X XXXX XXX XXXX XXXXX XXXX XXX XXXXX X"!!i<'X').(<1))pred 1 e salvare un mucchio di byte.
Lynn,

1
342 byte con filterinvece di untilramificare (e cycleper evitare un extra ++pure(...)).
Ørjan Johansen,

3

Brain-Flak -r, 4190 4188 byte

(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())())()<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())

Provalo online!

Questo è un po 'difficile per Brain-flak poiché non possiamo usarlo ]o }. Significa che gli unici caratteri utili sono <>().

Ecco un programma Haskell che mi ha aiutato a scrivere questo

Conta solo saltando dove gli spazi devono essere e spingendoli individualmente.


Questo è decisamente ottimale?
user202729

@ user202729 Sospetto di no. Potrebbe essere però. Non c'è un sacco di spazio di manovra ma sono ben lungi dall'essere in grado di dimostrare che è ottimale. Anche se dal momento che non abbiamo {}una ricerca al computer potrebbe effettivamente trovare l'ottimale in tempi limitati.
Ad Hoc Garf Hunter,

Finisco per scrivere un programma che genera la soluzione ottimale, tuttavia è un po 'più lento di quello che mi aspetto. Tuttavia, è ancora abbastanza veloce per essere eseguito.
user202729

@ user202729 Beh, non era ottimale. Ne ho trovato uno più corto.
Ad Hoc Garf Hunter,

3

JavaScript (SpiderMonkey) , 1001 919 789 441 byte

print(/u/.exec().map.call('0777700077700077770007777700077700007770007000000777777000000700070070007007000000700000070007007000000770000007000700700070077700007007700700070070000007777000000700070070007007000000700070070007007000000707777000777000777700077777000777700077700077777007',''.repeat.bind(Number)).map(/u/.exec().find.bind(/()/.exec().fill(Number.bind(0,88-070)).fill(/u/.exec().fill,!0),''.indexOf)).map(Map.call.bind(Map.call)))

Provalo online!

Finalmente batte BF !!!

Idea generale

Convertire ogni carattere della stringa di stringa lunga nel suo indice o 32, dipende dal valore.

Array.prototype.map? Come ottenere array

Forza bruta per vedere quali oggetti sono accessibili accedendo alle proprietà degli oggetti (perché ]non è consentito, quindi sono accessibili solo le proprietà con il nome che corrisponde a un identificatore).

RegExp.prototype.execrestituisce un oggetto simile ad un array quando c'è una corrispondenza. Quando non viene fornito alcun argomento, per impostazione predefinita l'argomento è undefined, quindi /u/.exec()corrisponde e restituisce un array.

Ottieni 2 valori distinti arbitrari su 2 personaggi diversi

Vogliamo avere (x,y)=>x=='0'?32:y, ma non possiamo usare =.

Invece, lo faremo

new Array(a)
    .map(x=>x=='0'?()=>32:function()this)
    .map((x,y,z)=>x.call(y,z))

Possiamo inserire mapla stringa su alcune funzioni, ma =>non è consentito, quindi è possibile utilizzare solo alcune funzioni. Potrebbe avere thisdegli argomenti associati e alcuni (quindi ha la forma (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

Dopo aver considerato un elenco di funzioni ( repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply), decido che verranno utilizzate le seguenti funzioni (dopo aver considerato tutte le altre combinazioni)

  • repeat: numero -> stringhe diverse.
  • find: thisArg -> primo elemento nella corrispondenza dell'array.

L'idea generale sarebbe:

[].map.call('07070707...', (x,y,z)=>[elem1,elem2].find(somefunction,x,y,z)

dove somefunctionconsidera l' thisargomento ( x) e il primo argomento ( elem1o elem2) e restituisce se corrisponde.

L'ultima funzione della freccia viene riscritta [].find.bind([elem1,elem2],somefunction).

Matrice letterale

Possiamo usare regex exec per ottenere un array, e fillcon valori diversi. Ad esempio, /()/.exec()restituisce un array di lunghezza 2, quindi possiamo riempirlo di cui abbiamo bisogno.

Di somefunctioncosa abbiamo bisogno?

Abbiamo bisogno di uno che restituisca un valore di verità / falsità dipende da this(che è 1 di 2 funzioni che restituiremo) e dal primo argomento (deve essere una stringa o un array).

Per questo, ho usato indexOf- restituisce valore errato se il primo argomento è un prefisso thisdell'argomento.

Rappresenta i letterali delle funzioni


1
inciampa alla fine della spiegazione e finisce per appendere fuori da un ramo
Ørjan Johansen,

2

TI-Basic (serie 83), 578 byte

8XFact8-ΔTbl
seq(X and XX≤8+8 or 8≤X and X≤Xmax or 7+7≤X and X<9+9 or 7+7+7≤X and X<8π or 9π<X and X<πXmax or 9 nCr 7≤X and X+X<77 or X=7²-7 or 7²≤X and X≤7*9-9 or X=70-9 or X=8²+ΔTbl or X=78-Xmax or X=9*8 or X=89-7-7 or X=89-7 or X=89 or X=900-807 or X=88+8 or 809-707<X and X≤97+77-70 or 9X=999 or 8X=990-70 or X=888-770 or X=899-777 or 8*7+77-8≤X and X+X<Ans or 7²X/77=77+7 or 999+77<8X and 7X<970-9-7 or 8²X=8888+8 or X+X=99+99+88 or 7X=9099-8077 or 9+8≤X/9 and X<997-770-70 or X=99+8² or X=87+80 or X=80+90 or X=87+87 or X=87+90 or X=87+97 or X=98+90 or X=999-808 or X=97+98 or X=99+99 or X=99+99+7 or 9²8<πX and X+X+X≤70*9 or 70π-π-π<Xand X+X+X≤9²8 or 70π<X and X<70π+π or 997-770≤X and X+X+X≤99*7 or 77+79+79≤X and X+8+9≤Ans or 77π<X and X<Ans-Xmax or 7*8*9-8≤X+X and X+X≤7*8*9 or X=Ans,X,0,Ans
8XFact+Ansseq(X,X,⁻8XFact,70π+π

TI-Basic ha una sua "code-page" molto speciale con strane scelte di design come spostare il carattere dello spazio su 0x29 in modo che 0x20 possa essere il randM(comando.

È difficile capire come ottenere TI-Basic per produrre il giusto tipo di oggetto. Le stringhe non funzionerebbero per diversi motivi: non c'è modo di fare riferimento a un token senza usare il token e inoltre non ci è permesso il "personaggio. Non possiamo semplicemente scrivere un elenco, perché {e }sono vietati. Sono consentiti i caratteri [e ]per le matrici, ma una matrice 1 per 256 non funziona, poiché le matrici sono consentite al massimo 99 righe e colonne. Non possiamo usare per assegnare alle variabili, e non siamo in grado di ottenere le variabili di lista ʟo L₁attraverso L₆comunque.

Quindi qui, scriviamo una formula logica complicata con disuguaglianze che dice quando un personaggio è uno di quelli che vogliamo produrre. Quindi usiamo il seq(comando per generare un elenco con 1in quelle posizioni e 0altrove. Da lì, un altro seq(comando e un po 'di aritmetica completano il lavoro.

Questa è stata la parte eccitante; il resto è giocare a golf nelle costanti e probabilmente non l'ho fatto il più possibile. Uno dei trucchi che uso è che, per impostazione predefinita, Xmaxè 10, XFactè 4 ed ΔTblè 1.


Mentre una matrice 1 * 256 non funziona, puoi creare qualcosa come una matrice 3 * 99 e utilizzare div / mod per indicizzare la matrice?
user202729

Oh, anche noi non possiamo indicizzare le cose, perché (è proibito.
Misha Lavrov,

Esiste un'espressione condizionale (se a allora b altro c) o piano o mod? La precisione numerica è ~ 15 cifre decimali giusto?
user202729

Tutti questi esistono. Non siamo in grado di ottenere una voce di matrice con [A](I,J), e da quello che ho capito tu vuoi fare qualcosa come [A](int(I/99),I-99int(I/99))leggere tutti gli elementi della matrice [A]- non possiamo farlo. (A proposito, )è anche proibito. Fortunatamente, non dobbiamo chiudere le parentesi finali, ma limita il modo in cui possiamo usare molti comandi.)
Misha Lavrov

Sto pensando di utilizzare un numero per codificare un array, simile a una maschera di bit. Mi piace (123456789 >> X) e 1 in Python.
user202729

1

Brain-Flak -r, 3894 byte

(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())<((())((()())()))>)))(((((((()()()()()()()())(()()()()()()()()())(()()()()()()()()()())()()()()())))<((((((((()()()()()()()()()()()()()())((((((((((()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()())()))))<((((((((((((()()()()()()()()()()()()()()()()()()()()())())())())())()()()()()()())))<((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()())())())()))))()()()())())())>)))()()()()()()()()()())>))))))()()())())())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())>)))())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())())<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())

Provalo online!

Ho scritto un programma per generare il programma Brain-Flak ottimale per qualsiasi output. Supponiamo che:

  • <> non viene utilizzato
  • Il mio programma è corretto

, quindi questa soluzione è ottimale.

O(n5)


1

Python 2 , 162 157 byte

Avvertenza : personaggi non stampabili a venire!

print map(lambda(i,x):(x>'0'and i-0xe0/7)+0xe0/7,enumerate(bin(reduce(lambda x,y:(x<<0xd-7)-x+y,bytearray('7?QcZ;+BqiQJUS!?B0W![<LBU7X!frQd(SQdB\0')))))

Provalo online!

Basato sulla risposta esistente di TFeld , ma con alcune modifiche:

A bytearrayè simile a strquello che è iterabile, tuttavia iterandolo fornisce numeri interi, non caratteri. Possiamo usarlo per codificare un valore letterale di base N e reduce(lambda x,y: x*N+y, my_bytearray)per decodificarlo.

Poiché i file Python 2 non hanno una codifica per impostazione predefinita, è possibile utilizzare solo caratteri in ASCII (0..127). Byte null, newline, barre rovesciate e virgolette richiedono 1 byte in più.

Inoltre, non è possibile utilizzare tutte le basi.

Ho scritto un programma per trovare la rappresentazione più breve di n, date quelle restrizioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.