De tous les caractères ASCII, il est facile de dire que certains d'entre eux forment des groupes qui sont des rotations du même caractère de base. Par exemple V > ^ <
,. Cela permet la possibilité de construire de l'art ASCII qui peut être tourné par multiples de 90 degrés et qui reste toujours de l'art ASCII.
Le défi
Votre objectif est de jouer à un programme qui accepte l'art ASCII et le nombre de degrés pour le faire pivoter depuis STDIN, et imprime l'art ASCII tourné vers STDOUT.
Sur la première ligne de saisie, votre programme recevra un numéro N. Ce nombre représente la largeur et la hauteur de l'art ASCII.
Vous recevrez alors N lignes supplémentaires d'exactement N caractères chacune (la nouvelle ligne n'est pas comptée dans ce nombre). La taille de l'art sera toujours un carré, bien qu'elle puisse avoir un rembourrage sous forme d'espaces pour en faire un carré.
Vous recevrez alors un autre numéro sur une dernière ligne: 90, 180 ou 270. Cela représente le nombre de degrés dans le sens horaire que l'image doit pivoter.
Remarque: L'image entrée ne contiendra que des caractères pouvant être tournés de la bonne quantité. Si l'entrée ne correspond pas exactement à ces exigences, aucun comportement spécifique n'est requis.
En sortie, votre programme doit imprimer exactement N lignes de N caractères, avec des retours à la ligne après chaque ligne. L'image doit être pivotée de sorte que chaque caractère de l'original ait été remplacé par une version pivotée et a été déplacé au bon endroit dans l'image.
Exemples (pas très beau art ASCII)
Contribution
5
<- ||
| |V
+->+
|O
<--+
90
Production
^ +-^
| | |
| V
+-+--
O <-
(Les rotations de 90 et 270 ne seront pas très bonnes car les personnages ne sont pas des carrés)
Contribution
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Production
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Caractères pris en charge requis
Pour toutes les rotations (90, 180 et 270), le programme doit pouvoir tourner:
- Espaces,
+
,@
,X
etO
qui ne changera jamais V
>
<
^
|
-
et\
/
(tourné de 180, ils restent les mêmes)
Pour une rotation à 180 degrés, ces caractères supplémentaires doivent être pris en charge
I
N
Z
%
:
0
=
S
~
$
#
qui restent les mêmesP
d
,(
)
,[
]
,{
}
,M
W
Et9
6
v
, qui n'est pas un caractère pris en charge. Je suppose que c'était censé être une majusculeV
. De plus, la dernière ligne ne contient pas 5 caractères.P d, ( ), [ ], { }, M W, and 9 6
peut jamais être tourné à 90º ou 270º?Réponses:
GolfScript,
79757367 caractèresIl semble que mes solutions et celles de Peter Taylor connaissent une certaine convergence. Quoi qu'il en soit, on dirait que j'ai encore quelques caractères devant pour le moment. :-) Merci (et +1) à Peter et à la copie pour les idées que j'ai volées sans vergogne.
Ce code ignore complètement la taille indiquée sur la première ligne, car il s'agit d'informations redondantes. Il devrait même gérer les entrées avec des dimensions non carrées, mais cela dépend beaucoup de toutes les lignes d'entrée remplies à la même longueur. En essayant de faire tourner les caractères
P
,d
,(
,)
,[
,]
,{
,}
,M
,W
,9
, ou6
de 90 ou 270 degrés peuvent produire des résultats inattendus; tous les autres caractères qui ne sont pas explicitement remappés sont conservés inchangés.Ps. Voici ma solution originale de 79 caractères:
la source
C, 336 caractères
Je suis sûr qu'il y a place à amélioration.
la source
javascript (181 caractères)
Nécessite que chaque ligne soit rembourrée à la longueur donnée.
la source
\n
, copier-coller normal et équilibrer les espaces sur les premières / dernières lignes et je n'ai pas réussi à le faire fonctionnerGolfscript (
80 79 78 7776 caractères)NB La saisie du "comportement indéfini" autorisé par une entrée non valide peut produire une sortie quelque peu curieuse, en raison des caractères d'espace réservé (en dehors de l'ASCII) utilisés pour certains caractères dont la rotation de 90 degrés n'est pas définie. Par exemple,
(
serait mappé au point de code 160, qui dans ISO-8859-1 et Unicode est un espace insécable.la source