Geschwächte binäre Wände

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

Inspiriert von Erstellen Sie eine binäre Wand

Gegeben eine Liste von positiven ganzen Zahlen, können wir sie so übereinander schreiben wie für [2, 6, 9, 4] als Beispiel:

0010
0110
1001
0100 

Wir können uns das als eine Wand vorstellen:

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

Dies ist jedoch eine sehr schwache Mauer, und sie ist zusammengebrochen! Jede 1 ( # ) fällt herunter, bis sie auf den "Boden" oder eine andere 1 ( # ) trifft. Die 0 s ( . S) sind an Punkten vorhanden, die um 1 s verschoben sind.

Dies wird das Folgende:

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

Was übersetzt sich zurück zu:

0000
0000
0110
1111 

Was als eine Liste von Zahlen ist [0, 0, 6, 15] .

Ein weiterer Testfall

[10, 17, 19, 23] 

Dies wird:

01010
10001
10011
10111 

was wird:

00000
10011
10011
11111 

übersetzen zurück zu:

[0, 19, 19, 31] 

Herausforderung

Wenn Sie eine Liste positiver Ganzzahlen angeben, wenden Sie diese Transformation auf die Liste an. Eingabe / Ausgabe als Liste positiver Ganzzahlen in jedem vernünftigen Format. Standardlücken gelten.

Dies ist ein , also gewinnt die kürzeste Antwort in Bytes!

5 Comments
1 Leaky Nun 07/29/2017
Weitere Testfälle? Weißt du, nicht quadratische Testfälle wären gut.
HyperNeutrino 07/29/2017
@LeakyNun Sicher. Ich werde das machen.
Marcus Müller 07/30/2017
Das ist nur ein Sortierproblem für Bit-Arrays.
HyperNeutrino 07/30/2017
@ MarcusMüller Du hast recht - ich habe gemerkt, dass nach der MATL Antwort: P

14 Answers


Suever 07/29/2017.

MATL , 4 Bytes

BSXB 

Probieren Sie es bei 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 Wie funktioniert das? o
1 totallyhuman 07/29/2017
Hat MATL Jelly nur um 4 bytes out-golf gespielt? o_O
Leaky Nun 07/29/2017
5 Bytes jetzt :-p
HyperNeutrino 07/29/2017
Ich hätte nie gedacht, dass es ein eingebautes sein würde, um die auf den Boden xD +1 zu verschieben
1 JungHwan Min 07/29/2017
@Totallyhuman gut, warte, bis Dennis kommt

Anders Kaseorg 07/29/2017.

Python , 68 Bytes

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

Probieren Sie es online aus!


Neil 07/29/2017.

JavaScript (ES6), 50 Bytes

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

Erklärung: Angenommen, zwei Reihen der Wand waren wie folgt:

0011
0101 

Das Ergebnis muss das sein:

0001
0111 

Mit anderen Worten, die erste Zeile wird das UND der zwei Zeilen und die zweite Zeile wird das ODER der zwei Zeilen. Dies muss nur so oft wiederholt werden, bis alle Bits auf den Boden gefallen sind.


Leaky Nun 07/29/2017.

Gelee , 9 Bytes

BUz0Ṣ€ZUḄ 

Probieren Sie es online aus!


Justin Mariner 07/29/2017.

Japt , 16 Bytes

m¤z3 ®¬n qÃz mn2 

Probieren Sie es online aus! Verwenden Sie das Flag -Q um das Array-Ergebnis zu formatieren.

Erläuterung

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
Ich think du kannst ein Byte mit mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Es scheint, als würde das 2D-Array rotieren, anstatt das Array von Strings zu rotieren, und jedes innere Array mit null statt mit Leerzeichen füllen. Das scheint also nicht zu funktionieren. Und null ist rechts von den 1 s sortiert, im Gegensatz zu Räumen, die nach links sortiert sind.

DanTheMan 07/30/2017.

Mathematica, 64 Bytes

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

 ist \[Transpose]

Dies wandelt die Eingabe (eine Liste von Zahlen) in eine Liste von Ziffernlisten um, puffert sie als quadratische Matrix, transponiert sie, sortiert die Zeilen so, dass die 1 nach unten "fällt", transponiert zurück und dann zurück in Zahlen .


xnor 07/30/2017.

Python 3.5 , 60 Bytes

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

Probieren Sie es online aus!

Nimmt Eingaben wie f(2, 6, 9, 4) . Nimmt an, dass die Eingabe nicht leer ist. Verwendet viel Tupel-Entpacken .


Suever 07/30/2017.

Oktave, 29 25 Bytes

4 bytes saved thanks to @Stewie

@(x)bi2de(sort(de2bi(x))) 
2 comments
Stewie Griffin 07/30/2017
de2bi/bi2de speichert 4 Bytes in Oktave. Funktioniert auf octave-online.net.
Suever 07/30/2017
@StewieGriffin Danke!

miles 07/29/2017.

J , 13 Bytes

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

Probieren Sie es online aus!

Erläuterung

/:~"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
Da ist wieder das binäre Links-Padding, +1. Und können Sie auch erklären, warum Sie das Inverse von Transponieren verwenden müssen, da es nur transponiert ist?
miles 08/01/2017
@ Zacharý Die Inversen werden verwendet, um die Operationen rückgängig zu machen, die vor dem Sortieren jeder Zeile verwendet wurden. Es stimmt, dass die Umkehrung der Transponierung nur transponiert ist, aber eine andere Möglichkeit, dies zu sehen, ist M , wobei die ersten beiden Funktionen nur die sind Inversen der letzten zwei.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 Bytes

bí0ζR€{øC 

Probieren Sie es online aus!

Ein bisschen anderer Algorithmus von Magic.

3 comments
Magic Octopus Urn 07/31/2017
dam, verdammt. Gelöschte Mine, nimm meine +1.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Warum hast du deine gelöscht? Kein Notwendigkeit für.
Magic Octopus Urn 07/31/2017
Es ist nicht wirklich anders (in Bezug auf den Algorithmus) und das war 25% besser.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 Bytes

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

Probieren Sie es online aus! (modifiziert, damit TryAPL es als gültig akzeptiert)

Wie?

  • ausgewertete Eingabe (Arrays sind durch Leerzeichen getrennt)
  • 2⊥⍣¯1⊢ wandelt jedes der Argumente in binäres um (umgesetzt aus dem, was in der Frage steht)
  • verwandelt ein 2D-Array in einen Vektor von Vektoren
  • {⍵[⍋⍵]}¨ sortiert jedes Element des Vektors
  • verwandelt den Vektor der Vektoren wieder in ein 2D-Array
  • 2⊥ Konvertieren von Binär (da es es irgendwie umsetzt, kommen wir zum richtigen Ergebnis)

James Heslip 07/30/2017.

Dyalog APL (23 Zeichen)

NO 
  1. Konvertieren Sie die Eingabeargumente in eine binäre Matrix
  2. Teilen Sie die Matrix in Spalten auf
  3. Sortieren Sie die Spalten in aufsteigender Reihenfolge
  4. Konvertieren Sie die sortierten Zeilen zurück in Dezimal

Beispiel

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

Danke an Zacharý, dass er mich hier korrigiert hat.

5 comments
Zacharý 07/30/2017
Sie können durch (⊥⍣¯1)⍵ durch ⊥⍣¯1⊢⍵ . Außerdem glaube ich nicht, dass Sie die Achsenspezifikation bei Split benötigen ( ↓[1] => ).
Zacharý 07/30/2017
Oh, und du sollst es zurück in eine Liste konvertieren!
Zacharý 07/30/2017
Dies ist ungültig.
James Heslip 07/30/2017
Danke, Zacharý, ich habe letzte Nacht so spät gearbeitet und ich glaube, ich habe das Problem falsch verstanden. Ich habe meine Lösung jetzt geändert.
1 Zacharý 07/30/2017
Nun, gute Arbeit! ( ⊥⍣¯1 wirklich eingebaut sein). Und danke, dass du meinen Benutzernamen richtig geschrieben hast.

ThePirateBay 07/29/2017.

JavaScript, 127 125 Bytes

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

Probieren Sie es online aus

-2 bytes thanks to Cows quack

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

Dopapp 07/30/2017.

Python 2, 142 Bytes

... und immer noch Golf spielen ... hoffentlich - Jede Hilfe wird geschätzt!

 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]))))] 

Ein großer Teil davon ist für das Auffüllen der Zahlen mit Nullen.

Lesbarer:

 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))))] 

Dies erstellt ein Array der binären Zeichenfolgendarstellungen, puffert es, dreht es um 90º im Uhrzeigersinn, sortiert jede Zeile, dreht sie um 90º zurück und erzeugt dann aus jeder Zeile Ganzzahlen.

2 comments
Mr. Xcoder 07/30/2017
142 Bytes haben Sie einige überflüssige Klammern.
Dopapp 07/30/2017
@ Mr.Xcoder, oh ja, das war dumm

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 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
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 Calum Scott

No Matter What flac

Calum Scott. 2018. Writer: Toby Gad;Calum Scott.
10 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
11 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
12 Imagine Dragons

Machine flac

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

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
14 Cher Lloyd

None Of My Business flac

Cher Lloyd. 2018. Writer: ​iamBADDLUCK;Alexsej Vlasenko;Kate Morgan;Henrik Meinke;Jonas Kalisch;Jeremy Chacon.
15 Ashley Tisdale

Voices In My Head flac

Ashley Tisdale. 2018. Writer: John Feldmann;Ashley Tisdale.
16 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
17 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
18 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
19 Little Mix

Told You So flac

Little Mix. 2018. Writer: Eyelar;MNEK;Raye.
20 Frida Sundemo

Apologize flac

Frida Sundemo. 2018.

Related questions

Hot questions

Language

Popular Tags