Écrire un programme qui prend en une chaîne contenant uniquement des espaces, les sauts de lignes, et les crochets: <
, >
( chevrons ). Sortie d' une chaîne d'espaces, les sauts de lignes et des barres obliques: /
, \
( soliduses ) dont les formes correspondent à l'entrée, mais tournées d' un quart de tour dans le sens horaire, avec une colonne d'espaces insérés entre chaque rangée de l'entrée d' origine (pour l' esthétique).
Par exemple, si l'entrée est la suivante:
<>
La sortie serait la suivante:
/\
\/
Si l'entrée est la suivante:
><<<>
<><
La sortie serait la suivante:
\/
/\ /\
\/ /\
/\ /\
\/
Si l'entrée est la suivante:
>> <<
<> <>
<
><
La sortie serait la suivante:
/\ \/
\/ \/
\/ /\
/\
/\ /\
\/ /\
Remarquez comment il y a une seule colonne d'espaces entre les lignes d'entrée d'origine dans les deux derniers exemples.
Vous pouvez écrire un programme complet qui prend l'entrée de n'importe quelle manière habituelle (ligne de commande, stdin) et imprime la sortie, ou vous pouvez écrire une fonction avec un argument de chaîne, qui imprime ou renvoie la sortie.
Les lignes ou colonnes de début et de fin vides d'espaces dans l'entrée n'ont pas besoin d'être présentes dans la sortie. De plus, il peut y avoir n'importe quelle quantité d'espaces de début et / ou de fin et / ou de nouvelles lignes dans la sortie, à n'importe quel emplacement, tant que les formes résultantes sont correctes. En d'autres termes, la traduction de l'art ascii n'a pas d'importance, seules les formes et leur relation les unes aux autres comptent .
Vous pouvez éventuellement supposer que l'entrée a une nouvelle ligne de fin.
Le code le plus court en octets gagne.
Réponses:
CJam, 35 octets
Essayez-le en ligne ici
la source
$
astuce astucieuse , il faisait encore 37 octets de long ...$
astuce m'a déjà sauvé de nombreuses fois;)CJam, 37 octets
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça marche
la source
Python 2, 105 octets
Pour toutes les mauvaises raisons, cela doit être l'une des plus belles utilisations
map(None, ...)
que j'ai eues jusqu'à présent. La sortie même des pads pour perfectionner le rectangle.Prenons le deuxième exemple:
map(None,*s.split("\n"))
effectue un pauvre hommezip_longest
, donnant:Remarquez comment la deuxième ligne est plus courte que la première, nous obtenons donc un
None
à la fin. Normalement, ce serait un problème, mais pour une raison quelconque, presque tout est comparable en Python 2, et en particulierCela signifie que l'expression
1-cmp(c,"<")
revient0, 1, 2
pour">", "<", None
respectivement, ce qui nous permet d'utiliser l'astuce de découpage de chaîne pour en extraire une"\/", "/\", " "
. En utilisant cela, nous imprimons la sortie ligne par ligne, joignant les groupes de 2 caractères avec des espaces.la source
Scala,
201188180 caractèresRemarque:
cela ne fonctionne que si la chaîne fournie a toutes les lignes de même longueur (c'est-à-dire remplies d'espaces)
explication:
J'utilise fold avec la valeur initiale de tuple de a
Seq[String]
et anInt
(au lieu d'écrireSeq.empty[String]
im écrit le plus courtSeq("")
et.init
après le pli), le pli fonctionne sur une collection de chaînes, chaque chaîne est une ligne dans l'entrée d'origine, et chaque ligne est doublé. l'astuce ici était de tester le modulo du char. puisque la'<'
valeur est 60 et la'>'
valeur 62, le test de modulo 4 donnera 0 ou 2. c'est pourquoi le pli porte également unInt
jeu de retournement à 0. et basculé entre 0 et 2 avec2-i
. chaque ligne impaire doit correspondre'>'
à'/'
et'<'
à'\\'
, et chaque ligne paire doit correspondre'>'
à'\\
'et'<'
à'/'
. c'est pourquoi je testec%4==i
et a frappé 2 oiseaux avec 1 pierre. le pli "reconstruit" la séquence initiale de chaînes à l'envers, puis (après avoir laissé tomber la dernière ligne), je transpose la séquence (c'est pourquoi toutes les chaînes doivent être exactement de la même longueur). en raison des implications impliquées, je dois le faire_.mkString
sur chaque ligne (précédemment colonne), puismkString("\n")
pour la sortie finale.la source
Perl - 119
Tout d'abord,
@l
est affecté comme une liste de listes représentant les caractères sur chaque ligne d'entrée avec des lignes dans l'ordre inverse. Il parcourt ensuite les colonnes de caractères, remplaçant les chevrons par les barres obliques correspondantes, joignant les éléments par des espaces et imprimant les barres obliques jointes sous forme de ligne.la source