Usando solo ASCII stampabile (codici esadecimali da 20 a 7E), scrivi un programma core N × N quadrato senza commenti che è circondato da altri 4 livelli , creando un programma quadrato (N + 8) × (N + 8) (N> 0) . Per N = 3 il layout (da sostituire con il codice effettivo) è simile al seguente:
44444444444
43333333334
43222222234
43211111234
4321CCC1234
4321CCC1234
4321CCC1234
43211111234
43222222234
43333333334
44444444444
- Le C rappresentano il programma principale 3 × 3.
- Gli 1 rappresentano il primo strato, i 2 rappresentano il secondo strato, ecc.
Il programma prende sempre una stringa di numeri interi separati da spazio come 0 -1 31 -1 2 2 2
via stdin o simili (dovrebbe essere solo i numeri semplici, senza virgolette o parentesi o altro). L'output dipende da quali parti del layout sono state eseguite.
Esistono cinque modi per eseguire il programma (le nuove righe sono incluse nell'esecuzione). Ognuno fa qualcosa di diverso dall'elenco:
Esegui solo il core:
CCC CCC CCC
Questo calcola il massimo dei valori assoluti degli elementi dell'elenco di input e lo stampa
CORE
su una nuova riga più volte. Se il massimo è 0 non viene emesso nulla (una nuova riga va bene).L'output per
0 -1 31 -1 2 2 2
sarebbeCORE CORE ...
31 volte.
Esegui il core con il livello 1:
11111 1CCC1 1CCC1 1CCC1 11111
Ciò genera la media (media aritmetica ) dei valori di elenco sulla precisione standard in virgola mobile.
- L'output per
0 -1 31 -1 2 2 2
sarebbe 35/7 =5
(5.0
va bene).
- L'output per
Esegui il core con i livelli 1 e 2:
2222222 2111112 21CCC12 21CCC12 21CCC12 2111112 2222222
Ciò genera un elenco separato da spazi dell'elenco di input invertito.
- L'output per
0 -1 31 -1 2 2 2
sarebbe2 2 2 -1 31 -1 0
.
- L'output per
Esegui il nucleo con i livelli 1, 2 e 3 (il modello dovrebbe essere ovvio).
Ciò genera un elenco separato da spazi dell'elenco di input ordinato.- L'output per
0 -1 31 -1 2 2 2
sarebbe-1 -1 0 2 2 2 31
.
- L'output per
Esegui il core con i livelli 1, 2, 3 e 4.
Questo genera un elenco separato da spazi dell'elenco di input con i duplicati rimossi, l'ordinamento non ha importanza.- L'output per
0 -1 31 -1 2 2 2
potrebbe essere-1 0 2 31
.
- L'output per
Tutto l'output è stdout o un'alternativa simile.
Solo queste 5 combinazioni di layout hanno comportamenti specifici.
Gli appunti
- Non sono consentiti commenti nel nucleo o nei livelli o combinazioni di questi. Il codice che non funziona o non fa nulla di costruttivo non viene considerato come un commento.
- Ricorda che il nucleo può avere qualsiasi dimensione (positiva) N × N, ma i livelli hanno solo un carattere di spessore.
- Si può presumere che l'input non abbia spazi iniziali o finali e esattamente uno spazio tra i numeri. Conterrà sempre almeno un numero. (Anche gli elenchi di output devono essere formattati in questo modo.)
- Si può presumere che l'elenco e i calcoli necessari per l'output non abbiano valori che traboccano (o underflow) i numeri interi (purché il loro massimo sia qualcosa di ragionevole come 2 16 ).
punteggio
Scrivere questo programma normalmente sarebbe facile. Scriverlo con un piccolo core è difficile.
Vince il programma con la dimensione del nucleo più piccola (la N più piccola). In caso di parità, il vincitore è il programma completo (il quadrato (N + 8) × (N + 8)) con il minor numero di caratteri distinti (senza contare le nuove righe).
Si prega di segnalare il valore N nella parte superiore della risposta.