Défi
Étant donné une grille rectangulaire de caractères ascii imprimables sous forme de chaîne ou via une entrée standard, écrivez une fonction ou un programme qui réduit les caractères non spatiaux en une pile en bas.
Les règles:
- La sortie a les mêmes dimensions et caractères que l'entrée.
- Un caractère non espace dans
(row a,column b)
ne peut pas avoir de caractère espace' '
dans(a-1, b)
,(a-1,b-1)
ou(a-1,b+1)
, où les lignes sont numérotées à partir du bas. Cela a pour conséquence que tous les pieux verticaux doivent s'effondrer latéralement. - Un personnage non spatial peut se déplacer dans la plupart des
(initial height - final height)
endroits vers la gauche ou la droite (voir Fig. 1). - Vous pouvez supposer que l'image a suffisamment d'espace pour se réduire sans que des caractères ne tombent de l'écran.
Figure 1: emplacements finaux possibles pour les caractères @#$
représentés par x,y,z
, respectivement.
..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.
L'ordre dans lequel les caractères s'effondrent peut être choisi librement. Les espaces de fin ne sont pas corrects, mais les retours à la ligne de fin le sont.
C'est le code-golf , donc la réponse la plus courte en octets l'emporte!
Exemple
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Une sortie possible:
--(_
/----|/|(o_)
/|/~\---~\\/o)
..."Have*you~mooed~today?"...
Réponses:
JavaScript (ES6),
1009088 octetsExige que la chaîne ait au moins deux lignes et toutes les lignes soient égales à la même longueur. Sortie pour l'image d'exemple:
Notez que comme il essaie de déplacer les éléments vers la droite si possible, le
*
n'est pas tombé entre leHave
et leyou
.Edit: Économisez 10% grâce à @ETHproductions. Sauvegardé encore 2 octets grâce à @DanielIndie.
Retina 0.8.2 , 50 octets
Essayez-le en ligne! Une approche légèrement différente de ma réponse JavaScript, qui utilise un groupe d'équilibrage pour faire correspondre un espace sous le caractère non-espace; le
(?<-1>)?
permet l'espace d'être une colonne à gauche tandis que le.?
permet l'espace d'être une colonne à droite.Rétine , 40 octets
Essayez-le en ligne! Port de ma réponse JavaScript. L'
0L$
étage atomique prend l'entrée et substitue les deux longueurs à la deuxième ligne, ce qui entraîne la commande qui effectue réellement le remplacement, qui est ensuite évaluée sur l'entrée d'origine par l'~
étage composé.la source
\n
par un saut de ligne littéral pour le réduire à deux chiffres ;-)l=s.search`\n`
économiser quelques octets.f=
est requis pour la récursivité, mais il me fait encore économiser 2 octets, merci!Python 2, 298 octets
Prend l'entrée comme une liste de chaînes (une par ligne)
Exemple: entrée:
Production:
la source
C, 252 octets
Code de test non golfé:
Résultat du test:
la source
Algodoo (non compétitif)
Entrée - exemple dégénéré utilisé.
Runnning - gravité par défaut et rebond.
Sortie - la précision peut être ajustée via les paramètres Friction et Densité sur les objets.
Algodoo est programmable par logique .
la source
JavaScript, 286 octets
Exemples
Production:
Un autre exemple:
Production:
Fonction non golfée
la source
c>" "
oùc
représente le personnage que vous testez.