Murs binaires affaiblis

HyperNeutrino 08/18/2017. 14 answers, 1.278 views
code-golf number binary binary-matrix

Inspiré par Créer un mur binaire

Étant donné une liste d'entiers positifs, nous pouvons les écrire tous les uns au-dessus des autres comme ceci, pour [2, 6, 9, 4] par exemple:

0010
0110
1001
0100 

Nous pouvons l'imaginer 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 points laissés par les 1 s déplacés.

Cela devient le suivant:

....
....
.##.
#### 

Ce qui se traduit par:

0000
0000
0110
1111 

Lequel, 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 à:

[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 tout format raisonnable. Les failles standard s'appliquent.

Ceci est un , donc la réponse la plus courte en octets gagne!

5 Comments
1 Leaky Nun 07/29/2017
Plus de tests? Vous savez, les testcases non carrés seraient bons.
HyperNeutrino 07/29/2017
@LeakyNun Bien sûr. Je ferai ça.
Marcus Müller 07/30/2017
C'est juste un problème de tri pour les tableaux de bits.
HyperNeutrino 07/30/2017
@ MarcusMüller Vous avez raison - je me suis rendu compte qu'après la réponse MATL: P

14 Answers


Suever 07/29/2017.

MATL , 4 octets

BSXB 

Essayez-le sur MATL Online

Explanation

% Implicitly grab input as an array 
    %   STACK: [10, 17, 19, 23]
B   % Convert each element to binary where each decimal number results in a row
    %   STACK: [0 1 0 1 0;
    %           1 0 0 0 1;
    %           1 0 0 1 1;
    %           1 0 1 1 1]
S   % Sort each column, placing all of the 1's at the bottom of each column
    %   STACK: [0 0 0 0 0;
    %           1 0 0 1 1;
    %           1 0 0 1 1;
    %           1 1 1 1 1] 
XB  % Convert each row from its binary representation to its decimal number
    %   STACK: [0, 19, 19, 31]
    % Implicitly display the result 
5 comments
HyperNeutrino 07/29/2017
o_O Comment ça marche: o
1 totallyhuman 07/29/2017
Est-ce que MATL vient de sortir le golf Jelly de 4 bytes ? o_O
Leaky Nun 07/29/2017
5 octets maintenant :-p
HyperNeutrino 07/29/2017
Je n'ai jamais pensé qu'il y aurait un système intégré pour déplacer ceux vers le bas xD +1
1 JungHwan Min 07/29/2017
@totallyhuman bien, attendez que Dennis arrive

Anders Kaseorg 07/29/2017.

Python , 68 octets

 f=lambda a:a and[x|y&a[0]for x,y in zip([0]+f(a[1:]),f(a[1:])+[-1])] 

Essayez-le en ligne!


Neil 07/29/2017.

JavaScript (ES6), 50 octets

f=a=>a.map(_=>a.map((e,i)=>a[a[i]|=a[--i],i]&=e))&&a 

Explication: Supposons que deux lignes du mur ressemblent à ceci:

0011
0101 

Le résultat doit être ceci:

0001
0111 

En d'autres termes, la première ligne devient l'AND des deux rangées et la deuxième ligne devient l'OR des deux rangées. Cela doit juste être répété suffisamment de fois pour que tous les bits tombent au fond.


Leaky Nun 07/29/2017.

Gelée , 9 octets

BUz0Ṣ€ZUḄ 

Essayez-le en ligne!


Justin Mariner 07/29/2017.

Japt , 16 octets

m¤z3 ®¬n qÃz mn2 

Essayez-le en ligne! utiliser l'indicateur -Q pour formater le résultat du tableau.

Explication

m¤z3 ®¬n qÃz mn2    Implicit: U = input array.
                        [10, 17, 19, 23]
m¤z3                Map U to binary strings and rotate the array left 90°
                         1010       0111
                        10001   ->  1011
                        10011       0001
                        10111       1000
                                     111
®¬n qà              Sort each binary string, putting 0s and spaces at the start
                        0111
                        0111
                        0001
                        0001
                         111
z mn2               Rotate right 90° and convert each back to a number
                         0000       0
                        10011   ->  19
                        10011       19
                        11111       31
                    Implicit output of resulting array 
2 comments
ETHproductions 07/30/2017
Je think vous pouvez enregistrer un octet avec mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Il semble que la rotation du tableau 2D, au lieu de faire tourner le tableau de chaînes, remplit chaque tableau interne avec null au lieu d'espaces. Cela ne semble donc pas fonctionner. Et null est trié à droite des 1 , contrairement aux espaces, qui sont triés à gauche.

DanTheMan 07/30/2017.

Mathematica, 64 octets

#~FromDigits~2&/@(Sort/@(PadLeft[#~IntegerDigits~2&/@#]))& 

 est \[Transpose]

Ceci convertit l'entrée (une liste de nombres) en une liste de chiffres, la remplit en matrice carrée, la transpose, trie les lignes de sorte que les 1 tombent en bas, les transposent en arrière, puis les convertissent en nombres .


xnor 07/30/2017.

Python 3.5 , 60 octets

 def f(a,*t):
 if t:b,*r=f(*t);t=f(a|b,*r);a&=b
 return(a,*t) 

Essayez-le en ligne!

Prend une entrée comme f(2, 6, 9, 4) . Suppose que l'entrée est non vide. Utilise beaucoup de déballage de tuple .


Suever 07/30/2017.

Octave, 29 25 octets

4 bytes saved thanks to @Stewie

@(x)bi2de(sort(de2bi(x))) 
2 comments
Stewie Griffin 07/30/2017
de2bi/bi2de enregistre 4 octets en octave. Fonctionne sur octave-online.net.
Suever 07/30/2017
@StewieGriffin Merci!

miles 07/29/2017.

J , 13 octets

/:~"1&.|:&.#: 

Essayez-le en ligne!

Explication

/:~"1&.|:&.#:  Input: array M
           #:  Convert each in M to binary with left-padding
       |:&     Transpose
/:~"1&         Sort each row
     &.|:      Inverse of transpose (which is just transpose)
         &.#:  Inverse of converting to binary 
2 comments
Zacharý 07/30/2017
Il y a encore ce remplissage binaire de gauche, +1. Et aussi, pouvez-vous expliquer pourquoi vous auriez besoin d'utiliser l'inverse de transposer, puisqu'il s'agit simplement de transposer?
miles 08/01/2017
@ Zacharý Les inverses sont utilisés pour annuler les opérations utilisées avant de trier chaque ligne. Il est vrai que l'inverse de transpose est juste transposer, mais une autre façon de le voir est comme M , où les deux premières fonctions sont juste les inverses des deux derniers.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 octets

bí0ζR€{øC 

Essayez-le en ligne!

Kinda algorithme différent de Magic.

3 comments
Magic Octopus Urn 07/31/2017
ζ , damnit. Supprimé le mien, prenez mon +1.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Pourquoi avez-vous supprimé le vôtre? Pas besoin de.
Magic Octopus Urn 07/31/2017
Ce n'est pas vraiment différent (en termes d'algorithme) et c'était 25% de mieux.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 octets

2⊥↑{⍵[⍋⍵]}¨↓2⊥⍣¯1⊢⎕ 

Essayez-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 des vecteurs en un tableau 2D
  • 2⊥ convertir à partir de binaire (puisque cela sorte de le transposer, nous arrivons au résultat correct)

James Heslip 07/30/2017.

Dyalog APL (23 caractères)

NO 
  1. Convertir les arguments d'entrée en une matrice binaire
  2. Diviser la matrice en colonnes
  3. Trier les colonnes dans l'ordre croissant
  4. Convertir les lignes triées en décimal

Exemple

{2⊥¨↓⍉↑{⍵[⍋⍵]}¨↓2⊥⍣¯1⊢⍵}10 17 19 23
      0 19 19 31 

Merci à Zacharý de m'avoir corrigé sur celui-ci.

5 comments
Zacharý 07/30/2017
Vous pouvez remplacer par (⊥⍣¯1)⍵ avec ⊥⍣¯1⊢⍵ . De plus, je ne pense pas que vous ayez besoin de la spécification d'axe sur split ( ↓[1] => ).
Zacharý 07/30/2017
Oh, et vous êtes censé le convertir en liste!
Zacharý 07/30/2017
Ceci est invalide.
James Heslip 07/30/2017
Merci, Zacharý, je travaillais là-dessus tard hier soir et je pense que j'ai mal interprété le problème. J'ai modifié ma solution maintenant.
1 Zacharý 07/30/2017
Eh bien, bon travail! ( ⊥⍣¯1 doit vraiment être intégré). Et merci d'avoir effectivement eu mon nom d'utilisateur.

ThePirateBay 07/29/2017.

JavaScript, 127 125 octets

a=>a[m='map'](_=>b[m]((n,i)=>n&&(b[i]--,d|=1<a[m](e=>d+=!!(2**c&e),d=0)&&d)).reverse() 

Essayez-le en ligne

-2 bytes thanks to Cows quack

1 comments
Cows quack 07/29/2017
(1< peut devenir 2**c&e

Dopapp 07/30/2017.

Python 2, 142 octets

... et encore de golf ... j'espère - Toute aide appréciée!

 def c(l):b=[bin(n)[2:]for n in l];print[int(n,2)for n in map(''.join,zip(*map(sorted,zip(*['0'*(len(max(b,key=len))-len(x))+x for x in b]))))] 

Un gros morceau de ceci est pour remplir les nombres avec des zéros.

Plus lisible:

 def collapse(nums):
    bins = [bin(n)[2:] for n in nums]
    bins = [('0'*(len(max(bins, key = len)) - len(x))) + x for x in bins]
    print [int(n, 2) for n in map(''.join, zip(*map(sorted, zip(*bins))))] 

Cela crée un tableau des représentations de chaîne binaires, le rembourre, le fait pivoter de 90º dans le sens des aiguilles d'une montre, trie chaque rangée, le fait pivoter de 90º, puis crée des entiers sur chaque rangée.

2 comments
Mr. Xcoder 07/30/2017
142 octets , vous avez des parenthèses redondantes.
Dopapp 07/30/2017
@ Mr.Xcoder, oh oui c'était stupide

HighResolutionMusic.com - Download Hi-Res Songs

1 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
2 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
3 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
4 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
5 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
8 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
9 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
10 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
11 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
12 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
13 Little Mix

The Cure flac

Little Mix. 2018. Writer: Pete Kelleher;Camille Purcell;Tom Barnes;Ben Kohn.
14 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
15 Calum Scott

No Matter What flac

Calum Scott. 2018. Writer: Toby Gad;Calum Scott.
16 Frida Sundemo

Apologize flac

Frida Sundemo. 2018.
17 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
18 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
19 Ashley Tisdale

Voices In My Head flac

Ashley Tisdale. 2018. Writer: John Feldmann;Ashley Tisdale.
20 Haley Reinhart

Something Strange flac

Haley Reinhart. 2018.

Related questions

Hot questions

Language

Popular Tags