Introdução
Escreva um programa completo que gire um bloco retangular de caracteres ASCII 90 graus no sentido horário. Quando o próprio programa é girado 90 graus no sentido horário, ele gira um bloco de caracteres ASCII 90 no sentido anti-horário.
Regras
- Muitos não usam built-ins que giram ou transpõem matrizes. Por exemplo, no MATLAB / Octave
rot90
e no operador de transposição'
não são permitidos. - Você deve escrever um programa completo que use STDIN e STDOUT ou o equivalente mais próximo.
- Seu programa deve ser retangular e assumir que a entrada também é retangular.
- A entrada e a saída são seqüências separadas por uma nova linha e não terão novas linhas à direita.
Quando executado com o código fonte como entrada, seu programa deve girar 90 graus no sentido horário. A saída deve ser um segundo programa no mesmo idioma que gira sua entrada 90 graus no sentido anti-horário. Quando o programa rotado recebe seu código fonte como entrada, ele deve emitir o código fonte do programa original.
Nota: Ambos os programas devem funcionar para qualquer entrada, não apenas seu próprio código-fonte; portanto, não é permitido um quine de um caractere.
Exemplo
Digamos que o seguinte seja um programa válido que gire sua entrada 90 graus em uma linguagem hipotética ExampleLang.
^f a2% 3
lk (^_^&
v
D8 $4 /
Quando executado como entrada, ele gera outro programa válido que gira sua entrada no sentido anti-horário:
D l^
8 kf
$ (a
4 ^2
_%
^
/v&3
Este segundo programa, quando fornecido a si próprio como entrada, gera o programa original. Observe que a linha em branco deve ter quatro espaços e há um espaço à direita na penúltima à última linha que não pode ser renderizado na remarcação. Esclarecer:
$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical
O programa mais curto vence. As brechas padrão são proibidas.
fonte
:.+
ser quebrado em várias linhas?:
e.
depende do caractere após eles, e os feeds de linha não são válidos após nenhum deles (e mesmo se fossem, isso mudaria o significado do programa).C (gcc) ,
14201399463 bytesAh ... a alegria das cordas de comprimento indeterminado!
Assume
sizeof(char*) == sizeof(int)
esizeof(char**) <= 16
.A nova abordagem
Experimente online!
Saída do acima
A solução foi embaraçosamente fácil no final. Você cria um programa A que gira as coisas no sentido horário e um programa B que gira no sentido anti-horário:
UMA
B
Faça um retângulo de proporções razoáveis e limite A a isso, e coloque guardas de comentários em torno dele:
Limite o programa B a um quadrado com a mesma largura que o de A mais dois (para as linhas extras de comentários na borda inferior), gire-o no sentido anti-horário e bata-o à direita do programa A e obtenha a solução acima.
A abordagem antiga
Experimente online!
Saída do acima
fonte