Usando apenas ASCII imprimível (códigos hexadecimais 20 a 7E), escreva um programa central N × N quadrado sem comentários, cercado por mais 4 camadas , criando um programa quadrado (N + 8) × (N + 8) (N> 0) . Para N = 3, o layout (a ser substituído pelo código real) fica assim:
44444444444
43333333334
43222222234
43211111234
4321CCC1234
4321CCC1234
4321CCC1234
43211111234
43222222234
43333333334
44444444444
- Os C representam o programa principal 3 × 3.
- Os 1s representam a primeira camada, os 2 representam a segunda camada, etc.
O programa sempre usa uma sequência de números inteiros separados por espaço, como 0 -1 31 -1 2 2 2
via stdin ou similar (devem ser apenas números simples, sem aspas ou colchetes ou algo assim). A saída depende de quais partes do layout foram executadas.
Existem cinco maneiras de executar o programa (novas linhas estão incluídas na execução). Cada um faz algo diferente da lista:
Execute apenas o núcleo:
CCC CCC CCC
Isso calcula o máximo dos valores absolutos dos elementos da lista de entrada e imprime
CORE
em uma nova linha várias vezes. Se o máximo for 0, nada será emitido (uma nova linha está correta).A saída para
0 -1 31 -1 2 2 2
seriaCORE CORE ...
31 vezes.
Execute o núcleo com a camada 1:
11111 1CCC1 1CCC1 1CCC1 11111
Isso gera a média (média aritmética ) dos valores da lista com precisão padrão de ponto flutuante.
- A saída para
0 -1 31 -1 2 2 2
seria 35/7 =5
(5.0
está correta).
- A saída para
Execute o núcleo com as camadas 1 e 2:
2222222 2111112 21CCC12 21CCC12 21CCC12 2111112 2222222
Isso gera uma lista separada por espaço da lista de entrada invertida.
- A saída para
0 -1 31 -1 2 2 2
seria2 2 2 -1 31 -1 0
.
- A saída para
Execute o núcleo com as camadas 1, 2 e 3 (o padrão deve ser óbvio).
Isso gera uma lista separada por espaços da lista de entradas classificadas.- A saída para
0 -1 31 -1 2 2 2
seria-1 -1 0 2 2 2 31
.
- A saída para
Execute o núcleo com as camadas 1, 2, 3 e 4.
Isso gera uma lista separada por espaço da lista de entradas com duplicatas removidas, a ordem não importa.- A saída para
0 -1 31 -1 2 2 2
poderia ser-1 0 2 31
.
- A saída para
Toda saída é para stdout ou uma alternativa semelhante.
Somente essas 5 combinações de layout especificaram o comportamento.
Notas
- Comentários não são permitidos no núcleo ou nas camadas ou combinações dos mesmos. Código que não é operacional ou não faz nada construtivo não conta como comentário.
- Lembre-se de que o núcleo pode ter qualquer dimensão N × N (positiva), mas as camadas têm apenas um caractere de espessura.
- Você pode assumir que a entrada não possui espaços à esquerda ou à direita e exatamente um espaço entre os números. Sempre conterá pelo menos um número. (As listas de saída também devem ser formatadas dessa maneira.)
- Você pode assumir que a lista e os cálculos necessários para a saída não terão valores que excedam (ou subcorrem) seus números inteiros (desde que o máximo seja algo razoável como 2 16 ).
Pontuação
Escrever este programa normalmente seria fácil. Escrever com um núcleo pequeno é difícil.
O programa com o menor tamanho de núcleo (o menor N) vence. Em caso de empate, o vencedor é o programa completo (o quadrado (N + 8) × (N + 8)) com o menor número de caracteres distintos (sem contar as novas linhas).
Por favor, reporte o seu valor N na parte superior da sua resposta.