De todos os caracteres ASCII, é fácil dizer que alguns deles formam grupos que são rotações do mesmo caractere básico. Por exemplo V > ^ <
,. Isso permite a possibilidade de construir arte ASCII que pode ser girada em múltiplos de 90 graus e ainda permanecer arte ASCII.
O desafio
Seu objetivo é jogar golfe em um programa que aceite arte ASCII e o número de graus para girá-lo de STDIN e imprima a arte ASCII girada em STDOUT.
Na primeira linha de entrada, seu programa receberá um número N. Esse número representa a largura e a altura da arte ASCII.
Você receberá N mais linhas com exatamente N caracteres cada (a nova linha não é contada nesse número). O tamanho da arte será sempre um quadrado, embora possa ter preenchimento na forma de espaços para torná-lo um quadrado.
Você receberá mais um número na linha final: 90, 180 ou 270. Isso representa quantos graus no sentido horário a imagem deve ser girada.
Nota: A imagem inserida conterá apenas caracteres que podem ser girados na quantidade correta. Se a entrada não corresponder exatamente a esses requisitos, nenhum comportamento específico será necessário.
Como saída, seu programa deve imprimir exatamente N linhas de N caracteres, com novas linhas após cada linha. A imagem deve ser girada para que cada caractere no original seja substituído por uma versão girada e movido para o local correto na imagem.
Exemplos (arte ASCII não muito bonita)
Entrada
5
<- ||
| |V
+->+
|O
<--+
90
Resultado
^ +-^
| | |
| V
+-+--
O <-
(Rotações de 90 e 270 não parecerão muito boas porque os caracteres não são quadrados)
Entrada
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Resultado
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Caracteres suportados necessários
Para todas as rotações (90, 180 e 270), o programa deve poder girar:
- Spaces,
+
,@
,X
eO
não que a mudança V
>
<
^
|
-
e\
/
(girado em 180, eles permanecem iguais)
Para rotação de 180 graus, esses caracteres adicionais devem ser suportados
I
N
Z
%
:
0
=
S
~
$
#
que permanecem os mesmosP
d
,(
)
,[
]
,{
}
,M
W
, E9
6
v
, que não é um caractere suportado. Suponho que era para ser uma letra maiúsculaV
. Além disso, a última linha não é preenchida para ter 5 caracteres.P d, ( ), [ ], { }, M W, and 9 6
pode ser girado 90º ou 270º?Respostas:
GolfScript,
79757367 caracteresParece que as minhas soluções e as de Peter Taylor estão passando por uma certa convergência. Enfim, parece que ainda estou alguns caracteres à frente por enquanto. :-) Obrigado (e +1) a Peter e copie por idéias que eu descaradamente roubei.
Esse código ignora completamente o tamanho fornecido na primeira linha, pois é uma informação redundante. Ele deve manipular entradas com dimensões não quadradas, mas depende muito de todas as linhas de entrada serem preenchidas com o mesmo comprimento. Tentando rodar os caracteres
P
,d
,(
,)
,[
,]
,{
,}
,M
,W
,9
, ou6
por 90 ou 270 graus, pode produzir uma saída inesperada; todos os outros caracteres que não são explicitamente remapeados são mantidos inalterados.Ps. Aqui está a minha solução original de 79 caracteres:
fonte
C, 336 caracteres
Tenho certeza de que há espaço para melhorias.
fonte
javascript (181 caracteres)
Requer que todas as linhas sejam preenchidas no comprimento especificado.
fonte
\n
, cópia normal colar e equilibrar espaços para as primeiras / últimas linhas e não conseguiu fazê-lo funcionarGolfscript (
80 79 78 7776 caracteres)Nota: A inserção do "comportamento indefinido" permitido por entrada inválida pode produzir resultados um tanto curiosos, devido aos caracteres de espaço reservado (fora do ASCII) usados para determinados caracteres cuja rotação em 90 graus não está definida. Por exemplo,
(
seria mapeado para o ponto de código 160, que na ISO-8859-1 e Unicode é um espaço sem interrupção.fonte