Svekkede binære vegger

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

Inspirert av Lag en binær veggen

Gitt en liste med positive heltall, kan vi skrive dem ut over hverandre som det, for [2, 6, 9, 4] som et eksempel:

0010
0110
1001
0100 

Vi kan forestille oss dette som en vegg:

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

Dette er imidlertid en svært svak vegg, og den har kollapset! Hver 1 ( # ) faller ned til den treffer "bakken" eller en annen 1 ( # ). 0 s ( . S) er tilstede i flekker igjen ved flyttet 1 s.

Dette blir følgende:

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

Som oversetter tilbake til:

0000
0000
0110
1111 

Som, som en liste over tall, er [0, 0, 6, 15] .

Et annet test tilfelle

[10, 17, 19, 23] 

Dette blir:

01010
10001
10011
10111 

som blir:

00000
10011
10011
11111 

oversette tilbake til:

[0, 19, 19, 31] 

Utfordring

Gitt en liste med positive heltall, bruk denne transformasjonen til listen. Input / Output som lister over positive heltall i et rimelig format. Standard smutthull gjelder.

Dette er en , så det korteste svaret i byte vinner!

5 Comments
1 Leaky Nun 07/29/2017
Flere testkasser? Du vet, ikke-kvadratiske testkasser ville være gode.
HyperNeutrino 07/29/2017
@LeakyNun sikker. Jeg gjør det.
Marcus Müller 07/30/2017
Det er bare et sorteringsproblem for bitrapporter.
HyperNeutrino 07/30/2017
@ MarcusMüller Du har rett - jeg skjønte at etter MATL svaret: P

14 Answers


Suever 07/29/2017.

MATL , 4 byte

BSXB 

Prøv det på 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 Hvordan virker dette: o
1 totallyhuman 07/29/2017
Gjorde MATL bare golf-gelé med 4 bytes ? o_O
Leaky Nun 07/29/2017
5 byte nå :-p
HyperNeutrino 07/29/2017
Jeg trodde aldri at det ville være en innebygd for å flytte dem til bunnen xD +1
1 JungHwan Min 07/29/2017
@Totallyhuman vel, vent til Dennis kommer

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

Prøv det på nettet!


Neil 07/29/2017.

JavaScript (ES6), 50 byte

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

Forklaring: Anta at to rader av veggen var slik:

0011
0101 

Resultatet må være dette:

0001
0111 

Med andre ord blir den første raden AND av de to radene, og den andre raden blir OR av de to radene. Dette må bare gjentas nok ganger for alle biter å falle til bunnen.


Leaky Nun 07/29/2017.

Gelé , 9 byte

BUz0Ṣ€ZUḄ 

Prøv det på nettet!


Justin Mariner 07/29/2017.

Japt , 16 bytes

m¤z3 ®¬n qÃz mn2 

Prøv det på nettet! bruker -Q flagget til å formatere arrayresultatet.

Forklaring

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
Jeg think du kan lagre en byte med mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Det ser ut til å rotere 2D-arrayet, i stedet for å rotere mengden av strenger, puter hver indre rekkevidde med null stedet for mellomrom. Så det ser ikke ut til å fungere. Og null er sortert til høyre for 1 s, i motsetning til mellomrom, som er sortert til venstre.

DanTheMan 07/30/2017.

Mathematica, 64 bytes

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

 er \[Transpose]

Dette konverterer inngangen (en liste med tall) til en liste over sifferlister, legger den til en kvadratisk matrise, overfører den, sorterer radene slik at 1 s faller til bunnen, overfører tilbake og konverterer deretter tilbake til tall .


xnor 07/30/2017.

Python 3,5 , 60 byte

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

Prøv det på nettet!

Tar innspill som f(2, 6, 9, 4) . Forutsetter at inntastingen ikke er tom. Bruker mye tuple utpakking .


Suever 07/30/2017.

Octave, 29 25 bytes

4 bytes saved thanks to @Stewie

@(x)bi2de(sort(de2bi(x))) 
2 comments
Stewie Griffin 07/30/2017
de2bi/bi2de lagrer 4 byte i oktav. Fungerer på octave-online.net.
Suever 07/30/2017
@StewieGriffin Takk!

miles 07/29/2017.

J , 13 byte

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

Prøv det på nettet!

Forklaring

/:~"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
Det er den binære venstrepolstringen igjen, +1. Og også, kan du forklare hvorfor du trenger å bruke omvendt av transponering, siden det bare transponeres?
miles 08/01/2017
@ Zacharý Inverterene brukes til å angre operasjonene som brukes før sortering av hver rad. Det er sant at den omvendte transponeringen bare transponeres, men en annen måte å se dette på er som M , hvor de to første funksjonene bare er de inverses av de to siste.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 byte

bí0ζR€{øC 

Prøv det på nettet!

Kinda forskjellig algoritme fra Magic's.

3 comments
Magic Octopus Urn 07/31/2017
ζ , damnit. Slettet min, ta min +1.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Hvorfor har du slettet din? Ikke nødvendig.
Magic Octopus Urn 07/31/2017
Det er ikke veldig mye forskjellig (i form av algoritme) og dette var 25% bedre.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 bytes

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

Prøv det på nettet! (modifisert slik at TryAPL aksepterer det som gyldig)

Hvordan?

  • evaluert inngang (arrays er mellomrom separert)
  • 2⊥⍣¯1⊢ konverterer hver av argumentene til binær (omsettes av hva som er i spørsmålet)
  • gjør en 2D-array til en vektor av vektorer
  • {⍵[⍋⍵]}¨ sorterer hver av elementene i vektoren
  • gjør vektoren av vektorer til en 2D-array igjen
  • 2⊥ konvertere fra binær (siden det slags transponerer det, kommer vi til det riktige resultatet)

James Heslip 07/30/2017.

Dyalog APL (23 tegn)

NO 
  1. Konverter inngangsargumentene til en binær matrise
  2. Del matrisen i kolonner
  3. Sorter kolonnene i stigende rekkefølge
  4. Konverter de sorterte radene tilbake til desimal

Eksempel

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

Takk til Zacharý for å korrigere meg på denne.

5 comments
Zacharý 07/30/2017
Du kan erstatte med (⊥⍣¯1)⍵ med ⊥⍣¯1⊢⍵ . Også, jeg tror ikke du trenger aksespesifikasjonen på delt ( ↓[1] => ).
Zacharý 07/30/2017
Åh, og du skal konvertere den tilbake til en liste!
Zacharý 07/30/2017
Dette er ugyldig.
James Heslip 07/30/2017
Takk, Zacharý, jeg jobbet på dette sent i går kveld, og jeg tror jeg har misforstått problemet. Jeg har endret min løsning nå.
1 Zacharý 07/30/2017
Vel, god jobb! ( ⊥⍣¯1 må virkelig være innebygd). Og takk for at du faktisk får brukernavnet mitt riktig.

ThePirateBay 07/29/2017.

JavaScript, 127 125 byte

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

Prøv det på nettet

-2 bytes thanks to Cows quack

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

Dopapp 07/30/2017.

Python 2, 142 bytes

... og fortsatt golf ... forhåpentligvis - noen hjelp verdsatt!

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

En stor del av dette er for polstring av tallene med nuller.

Mer lesbar:

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

Dette skaper en rekke binære strengrepresentasjoner, puter den, roterer den 90º med urviseren, sorterer hver rad, roterer den tilbake 90º, og lager deretter heltall ut av hver rad.

2 comments
Mr. Xcoder 07/30/2017
142 byte , du har noen overflødig parentes.
Dopapp 07/30/2017
@ Mr.Xcoder, åh ja det var dumt

HighResolutionMusic.com - Download Hi-Res Songs

1 The Chainsmokers

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
2 (G)I-DLE

POP/STARS flac

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

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
4 Anne-Marie

Rewrite The Stars flac

Anne-Marie. 2018. Writer: Benj Pasek;Justin Paul.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
6 Nicki Minaj

No Candle No Light flac

Nicki Minaj. 2018. Writer: Denisia “Blu June” Andrews;Kathryn Ostenberg;Brittany "Chi" Coney;Brian Lee;TJ Routon;Tushar Apte;ZAYN;Nicki Minaj.
7 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
8 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
9 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
10 Halsey

Without Me flac

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

Woman Like Me flac

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

Limbo flac

Brooks. 2018.
13 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
14 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
15 Lady Gaga

I'll Never Love Again flac

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

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
17 Rita Ora

Velvet Rope flac

Rita Ora. 2018.
18 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
19 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
20 Erika Sirola

Speechless flac

Erika Sirola. 2018. Writer: Teemu Brunila;Stefan Dabruck;Jürgen Dohr;Guido Kramer;Dennis Bierbrodt;Chris Braide;Robin Schulz.

Related questions

Hot questions

Language

Popular Tags