Quelqu'un a empilé à la hâte les cadeaux de Noël, et c'est un vrai gâchis:
========================
| |
========================
=============
| |
| |
| |
| |
| |
| |
=============
=======
| |
| |
| |
=======
===================
| |
| |
| |
===================
=================
| |
| |
| |
| |
=================
=======
| |
| |
=======
Comme, sérieusement, comment ce haut présente-t-il un équilibre égal? C'est probablement un marteau. Pour éviter que cette tour de cadeaux ne s'effrite, vous devez réorganiser les cadeaux pour qu'ils s'empilent bien:
=======
| |
| |
=======
=======
| |
| |
| |
=======
=============
| |
| |
| |
| |
| |
| |
=============
=================
| |
| |
| |
| |
=================
===================
| |
| |
| |
===================
========================
| |
========================
Les règles
- Chaque cadeau se compose d'un haut et d'un bas de
=
caractères et d'une ou plusieurs rangées centrales, composées de deux|
séparées par des espaces. La largeur du présent est la même dans toutes ses rangées. - Il n'y a pas de lignes vides.
- Les cadeaux consécutifs se chevaucheront dans au moins une colonne.
- Les cadeaux doivent être empilés par ordre décroissant de largeur. En cas d'égalité, le plus grand présent devrait aller en dessous du plus plat présent.
- Les cadeaux doivent être centrés sur le présent en dessous. Si le cadeau ne peut pas être placé exactement au centre (parce que la différence de largeur est étrange), vous pouvez choisir l'une ou l'autre position à un demi-caractère du centre.
- Vous pouvez ou non supposer que l'entrée a une seule nouvelle ligne de fin, mais veuillez énoncer votre hypothèse.
- Votre solution ne doit pas fonctionner pour une entrée vide, mais doit être capable de gérer un seul cadeau.
- Vous pouvez écrire un programme ou une fonction, qui prend une entrée via STDIN ou un argument de fonction et renvoie le résultat ou l'imprime dans STDOUT.
- Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
Japt , 18 octets
Essayez-le en ligne!
J'utilise une stratégie suffisamment différente de l'autre réponse de Japt pour que je pense qu'elle valait sa propre réponse. Prend l'entrée et la sortie sous forme de tableau de lignes
Explication:
Je ne sais pas exactement pourquoi le "tri par défaut" fonctionne comme ça, mais j'ai testé que la boîte la plus haute des deux avec la même largeur se trouve en bas, quelle que soit la première entrée.
la source
"=="
par'=²
pour enregistrer un octet.Rubis, 164
Beau défi! Je ne pouvais pas descendre beaucoup plus loin.
Explication
L'entrée
String
est découpée en unArray
où chaque cadeau est un élément. Ensuite, le tableau est trié par le nombre de caractères de canal et trié à nouveau par le nombre de signes égaux.Il supprime ensuite tous les espaces blancs de tête et imprime chaque ligne individuellement, centrée sur la largeur du plus grand présent.
Il se comporte de la même façon avec ou sans retour à la ligne sur l'entrée.
Version lisible
la source
05AB1E ,
2320 octets-3 octets grâce à @ErikTheOutgolfer .
Essayez-le en ligne.
Explication:
Remarques:
c
de fin en majusculesC
.|
peut être supprimé si nous sommes autorisés à prendre l'entrée comme une liste de lignes de chaîne.|
supprime quand même.la source
ðδÛ
peut être utilisé à la place d’εðÛ}
ici,¶'=.ø
est identique à…=\n=
(\n
signifie nouvelle ligne),0'=.ø
est identique à…=0=
..ø
place des chaînes de 3 caractères littéraux .. Et merci pourðδÛ
. En fait, jamais utiliséδ
auparavant et je n'avais aucune idée que cela fonctionnait comme ça.Attaché , 91 octets
Essayez-le en ligne!
Non golfé
la source
Perl 5
-n0
, 123 octetsEssayez-le en ligne!
la source
Python 2 ,
221196 octetsEssayez-le en ligne!
Attend une chaîne entre guillemets sans retour à la ligne en fin de ligne.
Pas génial, mais c'est le mieux que je puisse faire.
la source
Japt ,
232019 octetsApproche similaire à la solution de Kevin . Le premier octet peut être supprimé si nous pouvons prendre l'entrée comme un tableau de lignes.
Essayez-le
la source
Je suis un peu novice en matière de code-golf, et pas du tout comme un expert en javascript mais le défi est intéressant et amusant. Je voudrais voir quelles astuces un vrai expert en js utiliserait.
Hypothèses
Code
L'entrée est en
g[]
. Sortie enm[]
.Le code fonctionne par
la construction d'un tableau d'objets, chaque objet représentant une boîte, avec deux membres: K, une clé de tri étant les (largeur x 100 + hauteur) et O, un tableau des chaînes (coupées) constituant la boîte. Lors de la construction du tableau, le code se souvient de la largeur de la zone la plus large.
Le tableau des objets boîte est trié dans l'ordre par la clé K. Lorsque les boîtes ont la même largeur, la clé s'assure qu'elles sont triées par hauteur.
Après avoir trié les boîtes, les chaînes de chaque boîte sont poussées dans le tableau de sortie avec des espaces de tête ajoutés, ce qui positionne la boîte au centre du plus large.
Essayez-le en ligne!
la source