Trier les manuels
L'école commence bientôt (si ce n'est pas déjà fait) et il est donc temps de mettre de l'ordre dans nos manuels. Vous devez trier vos livres par ordre alphabétique mais cela prend trop de temps, vous décidez donc d'écrire un programme pour le faire.
Exemples
Contribution:
_
| | _
|F| | |
|o|_|P|
|o|B|P|
| |a|C|
| |r|G|
|_|_|_|
Sortie:
_
| |_
|F| |
_|o|P|
|B|o|P|
|a| |C|
|r| |G|
|_|_|_|
Contribution
L'entrée sera un ensemble de livres qui doivent être réorganisés par ordre alphabétique. Il contiendra seulement: |
, _
, et
A-Za-z
. Les titres des livres sont lus verticalement, de haut en bas.
Vous pouvez choisir de supposer que l'entrée est remplie d'espaces pour s'adapter à un rectangle. Si vous choisissez de compléter votre entrée avec des espaces, veuillez le préciser dans votre réponse.
La hauteur de livre très maximale que votre programme devra gérer est de 5 120 lignes sans échouer.
Les livres seront toujours d'une épaisseur et leur sera toujours au moins un livre en entrée
Sortie
La sortie devra être le même ensemble de livres organisés par ordre alphabétique. La hauteur des livres doit rester la même et le titre doit avoir le même espacement du haut lorsqu'il est réorganisé.
Les livres doivent être classés par ordre alphabétique. Si votre langue possède une fonction de tri, vous pouvez l'utiliser. Sinon, vous pouvez utiliser le tri alphabétique comme décrit ici .
Exemples de titres de livres
_
| |
| |
|F|
|o|
|o|
| |
| |
|B|
|a|
|r|
| |
| |
|_|
Le titre de ce livre est:
"Foo Bar"
Les titres des livres ne contiendront que des lettres et des espaces.
Les espaces de fin sont autorisés
Gagnant
C'est le code-golf donc le code le plus court en octets gagne.
Réponses:
CJam, 60 octets
J'ai essayé de porter ma réponse Python, qui est également similaire à l'approche de @ RetoKoradi .
Essayez-le en ligne . L'entrée doit être complétée par des espaces pour former un rectangle.
la source
Python 3, 231 octets
Juste un petit hack. Zip les livres, trier, rezip, en prenant soin des colonnes
|
pendant que nous y sommes.Saisissez une chaîne multiligne, remplie d'espaces de fin dans un rectangle. La sortie a un espace de fin de plus sur chaque ligne que nécessaire.
Ungolfed
la source
Ruby (
209204200198 octets)La
transpose
fonction de cette solution nécessite que toutes les lignes soient de la même longueur, d'où la nécessité de compléter l'entrée avec des espaces.Explication
la source
ruby
version est requise? Avec 2.1.2 pour l'échantillon d'entrée de la question, j'obtiens «transpose»: la taille de l'élément diffère (6 devrait être 2) (IndexError) ».gsub(?|,' ')
→tr(?|,' ')
.Python 2 - 399 octets
S'attend à ce que l'entrée n'ait pas de retour à la ligne de fin.
la source
CJam,
756665 octetsCela attend une entrée remplie d'espaces pour former un rectangle.
Essayez-le en ligne
Merci à @ Sp3000 et @Dennis pour les suggestions sur la coupe des chaînes sur le chat, ainsi que pour m'avoir indiqué que le
$
opérateur peut prendre un bloc comme argument.Je ne suis toujours pas entièrement satisfait de la deuxième boucle. Mais après avoir essayé quelques autres options sans plus de succès, je me fatigue.
Explication:
la source
Scala
359341 octetss'attend à ce que toutes les lignes soient de la même longueur (c.-à-d. remplies d'espaces)
non golfé et commenté:
la source