Défi
Vous êtes donné une représentation ASCII-art de caractères sur un plan comme entrée par toute méthode raisonnable. Il ne contiendra que:
[a-z]
représentant des personnages mobiles. Chaque lettre apparaîtra au tableau au plus une fois.#
représentant des murs inamovibles.
représentant un espace vide
Par exemple:
abcdef.gh#..
.......ij.#.
#..#.......#
...#.#...###
.#.......#q#
.........###
Vous recevez également une chaîne représentant les changements de gravité. Il ne contiendra que:
>
représentant un changement de gravité vers la droite<
représentant un changement de gravité vers la gauche^
représentant un changement de gravité vers le hautv
représentant un changement de gravité vers le bas
Par exemple:
v>^
Votre programme doit simuler chaque changement de gravité de manière séquentielle jusqu'à ce que tous les personnages cessent de bouger (ils heurtent un mur ou un autre personnage). Les personnages qui "tombent du bord de la carte" sont définitivement supprimés et les personnages peuvent "s'empiler" les uns sur les autres.
Dans cet exemple, au début il y a la gravité vers le bas ( v
), donc c
, e
, g
, h
, i
et j
tomber en bas de la carte. Tous les autres personnages glissent vers le bas jusqu'à atteindre un mur, laissant la carte comme ceci:
.........#..
a..d......#.
#..#.f.....#
.b.#.#...###
.#.......#q#
.........###
Ensuite, nous passons à la gravité vers la droite ( >
), ce qui nous laisse avec ceci: Notez comment les a
piles à côté du d
.
.........#..
........ad#.
#..#......f#
..b#.#...###
.#.......#q#
.........###
Enfin, nous simulons la gravité vers le haut ( ^
), pendant laquelle le a
et le b
tombent de la carte.
.........#..
.........d#.
#..#......f#
...#.#...###
.#.......#q#
.........###
Votre tâche consiste à générer les caractères restants après les décalages gravitationnels. Ils peuvent être donnés dans n'importe quel ordre. Pour cet exemple, vous pouvez générer n'importe quelle permutation dedfq
.
Cas de test
Pour la carte suivante:
abcde
.....
##.##
v = abde
v> = <nothing>
Pour la carte suivante:
######
#....#
abcdef
#.gh..
######
> = <nothing>
< = gh
^> = bcde
v< = bghef
Réponses:
JavaScript (ES6),
251233 octetsEdit: 18 octets enregistrés grâce à @WashingtonGuedes.
Fonctionne en faisant tourner la grille d'entrée quatre fois pour chaque caractère directionnel, mais dans la direction où le caractère directionnel correspond au caractère de boucle, nous faisons la chose de gravité gauche. Pseudocode:
la source
JavaScript (ES6), 199
Même algortihm de la réponse de @ Neil. La grille est tournée quatre fois pour chaque caractère directionnel, lorsque dans la bonne position le décalage de gravité vers la gauche est appliqué à chaque ligne.
la source
Pyth, 143 octets
(Avons-nous vraiment besoin d'autant d'octets?)
Essayez-le en ligne!
Comment ça fonctionne
Nous définissons une fonction
left
qui fait la gravité vers la gauche.Ensuite, les autres directions sont implémentées en jouant avec le tableau de sorte que la direction souhaitée soit vers la gauche, puis faites
left
.L'algorithme de
left
est ici:".X"
par"X."
, oùX
représente une lettre.L'ensemble du programme est divisé en 6 sections:
Première section
Deuxième section
Troisième section
Quatrième section
Cinquième section
Sixième section
la source
Rubis, 306 octets
Fonction anonyme. Technique assez détournée qui pourrait probablement être optimisée.
la source