Défi
Étant donné une liste d'entiers, montrez comment le tri par gravité serait effectué.
Tri par gravité
En ordre de gravité, imaginez les nombres sous forme de rangées d'astérisques. Ensuite, tout tombe, et les nouvelles lignes seront évidemment triées. Regardons un exemple:
[2, 7, 4, 6]
:
**
*******
****
******
-------
**
****
*******
******
-------
** | 2
**** | 4
****** | 6
******* | 7
Notez que c'est à peu près un tri de bulles parallélisé.
Spécifications exactes
À chaque itération, en commençant par la ligne du haut, prenez chaque astérisque de la ligne qui n'a pas d'astérisque en dessous et déplacez-le d'une ligne vers le bas. Continuez ainsi jusqu'à ce que la liste soit triée.
Contribution
L'entrée sera une liste d'entiers strictement positifs.
Sortie
Pour la sortie, vous devez sortir chaque étape. Vous pouvez choisir deux caractères ASCII imprimables non blancs, l'un pour les "astérisques" et l'autre pour les "tirets" de séparation. Les rangées d'astérisques doivent être séparées par une nouvelle ligne standard (par exemple \n
ou \r\f
). La ligne de tirets doit être au moins de la largeur de la ligne la plus large (sinon vos astérisques vont tomber trop bas!). Une rangée de tirets tout en bas est facultative. Un retour à la ligne à la fin est autorisé. Les espaces de fin sur chaque ligne sont autorisés.
Cas de test
l'entrée sera représentée sous forme de liste, puis la sortie sera répertoriée immédiatement ci-dessous. Les cas de test sont séparés par un double saut de ligne.
[4, 3, 2, 1]
****
***
**
*
----
***
** *
* *
**
----
**
* *
** *
***
----
*
**
***
****
[6, 4, 2, 5, 3, 1]
******
****
**
*****
***
*
------
****
** **
****
***
* **
***
------
**
****
*** **
* *
***
*****
------
**
***
* *
*** **
****
*****
------
**
*
***
****
******
*****
------
*
**
***
****
*****
******
[8, 4, 2, 1]
********
****
**
*
--------
****
** ****
* **
**
--------
**
* **
** ****
****
--------
*
**
****
********
N'hésitez pas à corriger mes cas de test s'ils sont faux, je les ai faits à la main :)
Remarque: ne sortez pas la liste triée à la fin. :)
Notation
Tous vos programmes seront écrits les uns sur les autres. Vous ne voudriez pas que des morceaux de votre programme tombent, alors assurez-vous d'avoir le code le plus court!
Réponses:
Pyth , 27 octets
Essayez-le en ligne!
la source
Perl 5 , 118 octets
115 octets de code +
-pla
drapeaux.Essayez-le en ligne!
Cela semble un peu trop long. Mais encore une fois, traiter les chaînes multilignes avec l'expression régulière n'est généralement pas facile.
J'utilise
Y
au lieu de*
et_
au lieu de-
.la source
Octave, 104 octets
* Nécessite un package d'images.
Essayez-le en ligne!
Explication:
la source
Python,
203199 octetsla source
map
renvoie un tableau immédiatement afin que vous n'ayez pas besoin de le répartir. Vous voudriez assigner une variable à'\n'.join
pour vous aider à compenser le manquesep='\n'
, mais c'est probablement encore plus court de cette façon.Japt ,
6962 octets-7 octets grâce à @Shaggy
Apprendre Japt et vouloir essayer un défi plus compliqué. Sorties avec
x
s et"
s au lieu d'astérisques et de tirets; prend l'entrée comme un tableau de nombres. Suppose que le tri sera terminé dans lesinput.length
étapes; corrigez-moi si ce n'est jamais le cas.Essayez-le en ligne!
Explication
la source
R ,
210205 octetsEssayez-le en ligne!
lit dans la liste depuis stdin; séparés par des
+
caractères au lieu de-
. C'est beaucoup plus long que je ne l'aurais pensé. Profite du fait que la comparaison est'*'>'+'
évaluéeFALSE
mais l''*'>' '
estTRUE
, au moins sur TIO (sur ma machine que j'ai utilisée'='
qui avait l'air un peu mieux).Géré au golf à 5 octets de toutes les techniques que j'ai apprises depuis la rédaction de la réponse originale.
Essayez-le en ligne!
la source
Haskell ,
213211208 octetsEssayez-le en ligne!
la source
Javascript, 274 octets
Exemple d'extrait de code:
la source