Heikentyneet binääriset seinät

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

Innoittamana Luo binääri-seinä

Kun otetaan huomioon positiivisten kokonaislukujen luettelo, voimme kirjoittaa ne kaikki päällekkäin [2, 6, 9, 4] esimerkkinä [2, 6, 9, 4]

0010
0110
1001
0100 

Voimme kuvitella tämän seinäksi:

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

Tämä on kuitenkin erittäin heikko seinä, ja se on romahtanut! Jokainen 1 ( # ) putoaa alas, kunnes se osuu "maahan" tai toiseen 1 ( # ). 0 s (s) on läsnä pisteissä, jotka on siirretty 1 sekunnin ajan.

Tämä on seuraava:

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

Mikä kääntää takaisin:

0000
0000
0110
1111 

Joka numeroiden luettelona on [0, 0, 6, 15] .

Toinen testitapaus

[10, 17, 19, 23] 

Tämä muuttuu:

01010
10001
10011
10111 

josta tulee:

00000
10011
10011
11111 

kääntää takaisin:

[0, 19, 19, 31] 

Haaste

Kun otetaan huomioon positiivisten kokonaislukujen luettelo, sovelletaan tätä muutosta luetteloon. Tulo / tulostus luetteloina positiivisista kokonaislukuista mihin tahansa kohtuulliseen muotoon. Standardi porsaanreikiä sovelletaan.

Tämä on , joten lyhin vastaus tavuissa voittaa!

5 Comments
1 Leaky Nun 07/29/2017
Lisää testcases? Tiedätkö, ei-neliömäiset testcases olisi hyvä.
HyperNeutrino 07/29/2017
@LeakyNun Toki. Minä teen sen.
Marcus Müller 07/30/2017
Se on vain lajitteluongelma bittijoukkoja varten.
HyperNeutrino 07/30/2017
@ MarcusMüller Olet oikeassa - tajusin, että MATLin vastauksen jälkeen: P

14 Answers


Suever 07/29/2017.

MATL , 4 tavua

BSXB 

Kokeile sitä MATL Onlineilla

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 Miten tämä toimii: o
1 totallyhuman 07/29/2017
Tekikö MATL vain out-golf Jelly 4 bytes ? o_O
Leaky Nun 07/29/2017
5 tavua nyt :-p
HyperNeutrino 07/29/2017
En koskaan uskonut, että se olisi sisäänrakennettu, jotta ne siirtyisivät pohjaan xD +1
1 JungHwan Min 07/29/2017
@ totallyhuman hyvin, odota kunnes Dennis tulee

Anders Kaseorg 07/29/2017.

Python , 68 tavua

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

Kokeile verkossa!


Neil 07/29/2017.

JavaScript (ES6), 50 tavua

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

Selitys: Oletetaan, että kaksi seinän riviä olivat näin:

0011
0101 

Tuloksen on oltava seuraava:

0001
0111 

Toisin sanoen ensimmäinen rivi tulee kahden rivin AND: ksi ja toinen rivi tulee kahden rivin OR: ksi. Tämä on vain tarpeeksi toistettava, jotta kaikki bittiä putoisivat alas.


Leaky Nun 07/29/2017.

Jelly , 9 tavua

BUz0Ṣ€ZUḄ 

Kokeile verkossa!


Justin Mariner 07/29/2017.

Japt , 16 tavua

m¤z3 ®¬n qÃz mn2 

Kokeile verkossa! käytä -Q lippua array-tuloksen muodostamiseksi.

Selitys

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
Uskon, think voit tallentaa tavun mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Näyttää siltä, ​​että 2D-taulukko kiertää sen sijaan, että pyöritettäisiin merkkijonojen joukkoa, jokaisen sisäisen matriisin välityksellä null sijaan tilat. Joten se ei näytä toimivan. Ja null lajitellaan 1 s: n oikealle puolelle, toisin kuin tilat, jotka lajitellaan vasemmalle.

DanTheMan 07/30/2017.

Mathematica, 64 tavua

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

 on \[Transpose]

Tämä muuntaa syötteen (numeroluettelon) luetteloon numeroista, sovittaa sen neliömäiseksi matriisiksi, siirtää sen, lajittelee rivit niin että 1: n "putoaa" alas, siirtää takaisin ja muuntaa sitten numerot .


xnor 07/30/2017.

Python 3,5 , 60 tavua

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

Kokeile verkossa!

Tulo syötetään kuten f(2, 6, 9, 4) . Oletetaan, että panos ei ole tyhjä. Käyttää paljon tuplepakkauksia .


Suever 07/30/2017.

Octave, 29 25 tavua

4 bytes saved thanks to @Stewie

@(x)bi2de(sort(de2bi(x))) 
2 comments
Stewie Griffin 07/30/2017
de2bi/bi2de säästää 4 tavua oktaavissa. Tekee oktave-online.net -sivustolla.
Suever 07/30/2017
@StewieGriffin Kiitos!

miles 07/29/2017.

J , 13 tavua

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

Kokeile verkossa!

Selitys

/:~"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
Se binääri on jäljellä, +1. Ja myös, voitteko selittää, miksi sinun pitäisi käyttää transpositio käänteistä, koska se vain transponsii?
miles 08/01/2017
@ Zacharý Käänteisiä käytetään kumoamaan käytetyt toiminnot ennen kunkin rivin lajittelua. On totta, että käänteinen käänteisto on vain transponoida, mutta toinen tapa nähdä tämä on niin kuin M , jossa kaksi ensimmäistä toimintoa ovat vain kahden viimeisen käänteen.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 tavua

bí0ζR€{øC 

Kokeile verkossa!

Erilaista algoritmia Magicista.

3 comments
Magic Octopus Urn 07/31/2017
ζ , valehtele. Poisti minun, ota +1.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Miksi poistit sinun? Ei tarvitse.
Magic Octopus Urn 07/31/2017
Se ei ole kovinkaan erilainen (algoritmin kannalta), ja tämä oli 25% parempi.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 tavua

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

Kokeile verkossa! (muokattu niin TryAPL hyväksyy sen kelvollisena)

Millä tavalla?

  • arvioitu tulo (taulukot ovat välilyöntejä)
  • 2⊥⍣¯1⊢ muuntaa jokaisen argumentin binääriseksi (transponoidaan kysymyksen sisältö)
  • kääntää 2D-taulukon vektorien vektoriksi
  • {⍵[⍋⍵]}¨ lajittelee kukin vektorin elementeistä
  • kääntää vektorien vektorin uudelleen 2D-ryhmään
  • 2⊥ muuntaa binaarista (koska se lajittelee sen, se saapuu oikeaan tulokseen)

James Heslip 07/30/2017.

Dyalog APL (23 merkkiä)

NO 
  1. Muunna tulo-argumentit binäärimatriisiin
  2. Jaa matriisi sarakkeisiin
  3. Lajittele sarakkeet nousevaan järjestykseen
  4. Muunna lajitellut rivit takaisin desimaaliin

esimerkki

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

Zacharýn ansiosta olen korjannut minua tässä.

5 comments
Zacharý 07/30/2017
Voit korvata (⊥⍣¯1)⍵ kanssa ⊥⍣¯1⊢⍵ . En myöskään usko, että akselispesifikaatio halutaan jakaa ( ↓[1] => ).
Zacharý 07/30/2017
Oi, ja sinun pitäisi muuntaa se takaisin luetteloon!
Zacharý 07/30/2017
Tämä ei kelpaa.
James Heslip 07/30/2017
Kiitos, Zacharý, työskentelin tänä myöhään viime yönä ja luulen, että olen lukenut ongelman väärin. Olen muuttanut ratkaisuni nyt.
1 Zacharý 07/30/2017
No, hyvä työ! ( ⊥⍣¯1 todella on oltava sisäänrakennettu). Ja kiitos, että sait käyttäjätunnukseni oikein.

ThePirateBay 07/29/2017.

JavaScript, 127 125 tavua

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

Kokeile sitä verkossa

-2 bytes thanks to Cows quack

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

Dopapp 07/30/2017.

Python 2, 142 tavua

... ja silti golfia ... toivottavasti - Kaikki apu arvostetaan!

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

Suuri osa tästä on täyttää numerot nollilla.

Lue lisää:

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

Tämä luo joukon binaarisia merkkijonoesityksiä, tukee sitä, pyörii sitä 90º myötäpäivään, lajittelee jokaisen rivin, pyörii sen takaisin 90º ja luo sitten kokonaislukuja kustakin rivistä.

2 comments
Mr. Xcoder 07/30/2017
142 tavua , sinulla on tarpeetonta sulkumerkkiä.
Dopapp 07/30/2017
@ Mr.Xcoder, oh kyllä ​​se oli typerä

Related questions

Hot questions

Language

Popular Tags