Écrivez un programme qui prend dans un bloc de texte rectangulaire composé de X
«et .
», comme ce brut A
:
......
..XX..
.X..X.
.XXXX.
.X..X.
.X..X.
Afficher une représentation de cette grille tournée de 45 degrés dans le sens antihoraire en traçant une barre oblique - vers l'avant ou vers l'arrière selon le contexte - partout une X
bordure a .
ou le côté de la grille (avec des espaces remplissant le reste):
/\/\
/ /\ \
\/ / \
/\/ /\ \
\ / \/
\ \
\ \
\/
Le nombre d'espaces de fin et de début (et les retours à la ligne) n'a pas d'importance tant que la forme des caractères X
dans l'entrée est conservée par les barres obliques. Vous pouvez supprimer des lignes ou des colonnes supplémentaires de .
.
Pour les E / S, vous pouvez utiliser n'importe quelle combinaison de paramètres de ligne de commande stdin / stdout / files / command. Par exemple, votre script peut prendre un nom de fichier du X.
modèle et réécrire le fichier avec le modèle de barre oblique. Ou votre script peut prendre le X.
modèle de stdin ligne par ligne (en appuyant une d
fois terminé) et afficher le résultat sur stdout.
L'entrée peut être arbitrairement grande, mais vous pouvez supposer qu'elle est toujours bien formatée.
Aucun caractère en plus / \
et les sauts de ligne ne doivent apparaître dans aucune sortie.
Notation
Le code le plus court en octets gagne. Utilisez https://mothereff.in/byte-counter comme compteur d'octets si vous utilisez des caractères non ASCII.
Bonus: moins 50 octets si vous pouvez modifier (remplacer, pas supprimer) un caractère de votre programme afin qu'il génère la grille oblique tournée à 45 degrés dans le sens des aiguilles d'une montre , par exemple:
/\/\
/ /\ \
/ \ \/
/ /\ \/\
\/ \ /
/ /
/ /
\/
Échantillons d'entrée
XXXXXXXXX
X.......X
X.XXXXX.X
X.X...X.X
X.X.X.X.X
X.X...X.X
X.XXXXX.X
X.......X
XXXXXXXXX
XXX...XXX....XXX...XXX
X..X..X..X..X.....X...
XXX...XXX...X.....X.XX
X.....X.....X.....X..X
X.....X......XXX...XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...X
X...X...............X...............X...........X...................X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...XXXXX...XXXXX...XXXXX...X...X
X...............X.......X...X...........X...........X...X...X.......X...X
XXXXXXXXX...X...XXXXXXXXX...XXXXXXXXX...XXXXX...X...X...X...XXXXXXXXX...X
X.......X...X...............X...........X...X...X...X...X...........X...X
X...X...XXXXXXXXXXXXX...X...X...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...............X...X...X.......X...........X...........X.......X...X
X...XXXXXXXXXXXXX...XXXXX...XXXXX...X...XXXXX...XXXXXXXXX...X...XXXXX...X
X...........X.......X...X.......X...X.......X...........X...X...........X
X...XXXXX...XXXXX...X...XXXXX...X...XXXXXXXXX...X...X...X...XXXXXXXXXXXXX
X.......X.......X...X...X.......X.......X.......X...X...X.......X.......X
XXXXXXXXXXXXX...X...X...X...XXXXXXXXX...X...XXXXX...X...XXXXX...XXXXX...X
X...........X...X...........X.......X...X.......X...X.......X...........X
X...XXXXX...X...XXXXXXXXX...XXXXX...X...XXXXX...XXXXX...XXXXXXXXXXXXX...X
X...X.......X...........X...........X.......X...X...X...............X...X
X...X...XXXXXXXXX...X...XXXXX...XXXXXXXXX...X...X...XXXXXXXXXXXXX...X...X
X...X...........X...X...X...X...X...........X...............X...X.......X
X...XXXXXXXXX...X...X...X...XXXXX...XXXXXXXXX...XXXXXXXXX...X...XXXXXXXXX
X...X.......X...X...X...........X...........X...X.......X...............X
X...X...XXXXX...XXXXX...XXXXX...XXXXXXXXX...XXXXX...X...XXXXXXXXX...X...X
X...X...................X...........X...............X...............X...X
X...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Questions connexes:
dessiner la courbe de Hilbert à l'aide de barres obliques
Aligner une forme ASCII à angle droit alignée horizontalement le long d'une diagonale
Réponses:
Python 2 -
236, 228, 226, 221, 250, 248246 - 50 = 196J'ai ajouté la fonction bonus en option qui fait basculer le sens horaire dans le sens antihoraire. Fondamentalement, la deuxième ligne fait simplement pivoter l'entrée de 90 degrés. Pour basculer entre les deux options, remplacez-le
s=zip(...)
par quelque chose commeS=zip(...)
(c.-à-d. Attribuez-le à une variable qui ne sera plus utilisée).la source
s
avecB
bys=B+s+B
.MATLAB - 286 - 50 = 236
Minifié:
Étendu:
Le code peut être encore réduit de 6 caractères (pour lier la piste actuelle) en éliminant la distribution au type
char
, mais cela entraîne un avertissement de MATLAB, et je ne savais pas si cela était autorisé.Il peut être réduit de 13 caractères supplémentaires si l'entrée doit avoir un format "balisé" tel que
['X..';'.X.';'..X']
, mais je n'ai pas pensé que cela était autorisé non plus. Actuellement, le script accepte seulement deux nombres (dimensions de ligne et de colonne) et lit ensuite dans une seule chaîne de caractères de la grille.Prime
En changeant le
1
dans l'appelx = rot90( ..., 1 );
en a0
, la transformation passe d'une rotation CCW 45 ° à une rotation CW 45 °. En fait, toutes les rotations possibles de 45 ° + n · 90 ° sont possibles en faisant passer ce paramètre de0
à3
.Exemples de sorties:
la source
Perl - 409
Lit depuis stdin et imprime vers stdout.
Exemples de sorties:
la source