Inspiré par Créer un mur binaire
Étant donné une liste d'entiers positifs, nous pouvons les écrire les uns au-dessus des autres de cette manière, par [2, 6, 9, 4]
exemple:
0010
0110
1001
0100
On peut imaginer cela comme un mur:
..#.
.##.
#..#
.#..
Cependant, c'est un mur très faible et il s'est effondré! Chaque 1
( #
) tombe jusqu'à ce qu'il touche le «sol» ou un autre 1
( #
). Les 0
s ( .
s) sont présents dans les taches laissées par les 1
s déplacés .
Cela devient le suivant:
....
....
.##.
####
Ce qui se traduit par:
0000
0000
0110
1111
Ce qui, en tant que liste de nombres, est [0, 0, 6, 15]
.
Un autre cas de test
[10, 17, 19, 23]
Cela devient:
01010
10001
10011
10111
qui devient:
00000
10011
10011
11111
traduire en:
[0, 19, 19, 31]
Défi
Étant donné une liste d'entiers positifs, appliquez cette transformation à la liste. Entrée / sortie sous forme de listes d'entiers positifs dans n'importe quel format raisonnable. Des échappatoires standard s'appliquent.
Il s'agit d'un code-golf , donc la réponse la plus courte en octets gagne!
la source
Réponses:
MATL , 4 octets
Essayez-le sur MATL Online
Explication
la source
Python , 68 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 50 octets
Explication: Supposons que deux rangées de mur ressemblent à ceci:
Le résultat doit être le suivant:
En d'autres termes, la première ligne devient le ET des deux lignes et la deuxième ligne devient le OU des deux lignes. Cela doit juste être répété suffisamment de fois pour que tous les bits tombent au fond.
la source
Gelée , 9 octets
Essayez-le en ligne!
la source
Japt , 16 octets
Essayez-le en ligne! en utilisant l'
-Q
indicateur pour formater le résultat du tableau.Explication
la source
mì2 z3 mn z mì2
null
au lieu d'espaces. Cela ne semble donc pas fonctionner. Etnull
est trié à droite des1
s, contrairement aux espaces, qui sont triés à gauche.Mathematica, 64 octets
est
\[Transpose]
Cela convertit l'entrée (une liste de nombres) en une liste de listes de chiffres, la remplit pour qu'elle soit une matrice carrée, la transpose, trie les lignes de sorte que le 1 "tombe" vers le bas, transpose en arrière, puis reconvertit en nombres .
la source
Python 3.5 , 60 octets
Essayez-le en ligne!
Prend l'entrée comme
f(2, 6, 9, 4)
. Suppose que l'entrée n'est pas vide. Utilise beaucoup de déballage de tuple .la source
Octave,
2925 octets4 octets enregistrés grâce à @Stewie
la source
de2bi/bi2de
enregistre 4 octets en octave. Fonctionne sur octave-online.net.J , 13 octets
Essayez-le en ligne!
Explication
la source
<convert from binary> <transpose> <sort each row> <transpose> <convert to binary> M
, où les deux premières fonctions ne sont que les inverses des deux dernières.05AB1E , 9 octets
Essayez-le en ligne!
Un algorithme un peu différent de Magic.
la source
ζ
, bon sang. Le mien supprimé, prenez mon +1.Dyalog APL,
242119 octetsEssayez-le en ligne! (modifié pour que TryAPL l'accepte comme valide)
Comment?
⎕
entrée évaluée (les tableaux sont séparés par des espaces)2⊥⍣¯1⊢
convertit chacun des arguments en binaire (transposé de ce qui est dans la question)↓
transforme un tableau 2D en un vecteur de vecteurs{⍵[⍋⍵]}¨
trie chacun des éléments du vecteur↑
transforme à nouveau le vecteur de vecteurs en tableau 2D2⊥
convertir du binaire (car il le transpose en quelque sorte, nous arrivons au résultat correct)la source
Dyalog APL (23 caractères)
Exemple
Merci à Zacharý de m'avoir corrigé sur celui-ci.
la source
(⊥⍣¯1)⍵
par⊥⍣¯1⊢⍵
. De plus, je ne pense pas que vous ayez besoin de la spécification de l'axe sur le split (↓[1]
=>↓
).⊥⍣¯1
doit vraiment être intégré). Et merci d'avoir bien saisi mon nom d'utilisateur.JavaScript,
127125 octetsEssayez-le en ligne
-2 octets grâce au charlatan des vaches
la source
(1<<c)&e
peut devenir2**c&e
Python 2, 142 octets
... et toujours au golf ... j'espère –– Toute aide appréciée!
Une grande partie de cela est pour remplir les nombres avec des zéros.
Plus lisible:
Cela crée un tableau des représentations de chaînes binaires, le remplit, le fait pivoter de 90 ° dans le sens des aiguilles d'une montre, trie chaque ligne, le fait pivoter de 90 ° en arrière, puis crée des entiers à partir de chaque ligne.
la source