Pinahina ng Binary Walls

HyperNeutrino 09/11/2017. 14 answers, 1.278 views
code-golf number binary binary-matrix

May inspirasyon sa pamamagitan ng Lumikha ng isang binary wall

Dahil sa isang listahan ng mga positibong integer, maaari naming isulat ang mga ito sa itaas sa bawat isa tulad nito, para sa [2, 6, 9, 4] bilang isang halimbawa:

0010
0110
1001
0100 

Maaari naming isipin ito bilang isang pader:

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

Gayunpaman, ito ay isang napaka mahina pader, at ito ay gumuho! Ang bawat 1 ( # ) ay bumaba hanggang sa ito ay umabot sa "lupa" o isa pang 1 ( # ). Ang 0 s ( . S) ay naroroon sa mga spot na natira sa pamamagitan ng inilipat 1 s.

Ito ang nagiging sumusunod:

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

Na sinasalin pabalik sa:

0000
0000
0110
1111 

Aling, bilang isang listahan ng mga numero, ay [0, 0, 6, 15] .

Isa pang kaso sa pagsusulit

[10, 17, 19, 23] 

Ito ay magiging:

01010
10001
10011
10111 

na nagiging:

00000
10011
10011
11111 

nagre-translate pabalik sa:

[0, 19, 19, 31] 

Hamon

Dahil sa isang listahan ng mga positibong integer, ilapat ang pagbabagong ito sa listahan. Input / Output bilang mga listahan ng mga positive integers sa anumang makatwirang format. Nalalapat ang mga standard na butas.

Ito ay isang , kaya ang pinakamaikling sagot sa bytes ay nanalo!

5 Comments
1 Leaky Nun 07/29/2017
Higit pang mga pagsubok? Alam mo, ang mga di-kuwadradong testcases ay magiging mabuti.
HyperNeutrino 07/29/2017
@ LeakyNun Oo naman. Gagawin ko yan.
Marcus Müller 07/30/2017
Iyan ay isang problema sa paghihiwalay para sa mga bit array.
HyperNeutrino 07/30/2017
@ MarcusMüller Tama ka - natanto ko na pagkatapos ng sagot na MATL: P

14 Answers


Suever 07/29/2017.

MATL , 4 bytes

BSXB 

Subukan ito sa 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 Paano ito gumagana: o
1 totallyhuman 07/29/2017
Ginawa ba ang MATL out-golf Jelly sa pamamagitan ng 4 bytes ? o_O
Leaky Nun 07/29/2017
5 bytes ngayon :-p
HyperNeutrino 07/29/2017
Hindi ko naisip na magkakaroon ng isang built-in upang ilipat ang mga sa ibaba xD +1
1 JungHwan Min 07/29/2017
@totallyhuman na rin, maghintay hanggang dumating si Dennis

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

Subukan ito online!


Neil 07/29/2017.

JavaScript (ES6), 50 bytes

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

Paliwanag: Ipagpalagay na ganito ang dalawang hanay ng pader:

0011
0101 

Ang resulta ay kailangang maging ganito:

0001
0111 

Sa ibang salita, ang unang hilera ay nagiging ang AT ng dalawang hanay at ang pangalawang hanay ay nagiging OR ng dalawang mga hanay. Kailangan lang itong paulit-ulit na sapat na oras para sa lahat ng mga piraso na mahulog sa ibaba.


Leaky Nun 07/29/2017.

Halaya , 9 bytes

BUz0Ṣ€ZUḄ 

Subukan ito online!


Justin Mariner 07/29/2017.

Japt , 16 bytes

m¤z3 ®¬n qÃz mn2 

Subukan ito online! gamit ang -Q bandila upang -Q -format ang resulta ng array.

Paliwanag

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
Sa think ko maaari mong i-save ang isang byte sa mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Mukhang umiikot ang 2D array, sa halip na pag-ikot ng hanay ng mga string, mga pad bawat panloob na array na may null halip na mga puwang. Kaya hindi na ito gumagana. At null ay pinagsunod-sunod sa kanan ng 1 , hindi tulad ng mga puwang, na pinagsunod-sunod sa kaliwa.

DanTheMan 07/30/2017.

Mathematica, 64 bytes

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

 ay \[Transpose] Pagbabahin \[Transpose]

Na-convert nito ang input (isang listahan ng mga numero) sa isang listahan ng mga listahan ng mga digit, pinadadala ito upang maging isang parisukat na matris, ipinapasa ito, binabalangkas ang mga hanay upang ang "pagkahulog" sa 1 sa ibaba, ibabalik, pagkatapos ay i-convert pabalik sa mga numero .


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) 

Subukan ito online!

Dadalhin ang input tulad ng f(2, 6, 9, 4) . Ipinapalagay na ang pag-input ay walang laman. Gumagamit ng maraming tuple unpacking .


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 nagse-save ng 4 bytes sa oktaba. Gumagana sa octave-online.net.
Suever 07/30/2017
@StewieGriffin Salamat!

miles 07/29/2017.

J , 13 bytes

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

Subukan ito online!

Paliwanag

/:~"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
Mayroong binary left-padding na muli, +1. At din, maaari mo bang ipaliwanag kung bakit kailangan mong gamitin ang kabaligtaran ng transpose, yamang ito ay transpose lamang?
miles 08/01/2017
@ Zacharý Ang mga invers ay ginagamit upang i-undo ang mga pagpapatakbo na ginamit bago i-sort ang bawat hilera. Ito ay totoo na ang kabaligtaran ng transpose ay transpose lamang, ngunit ang isa pang paraan upang makita ito ay bilang M , kung saan ang unang dalawang function ay lamang ang inverses ng huling dalawang.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 bytes

bí0ζR€{øC 

Subukan ito online!

Iba't ibang algorithm mula sa Magic.

3 comments
Magic Octopus Urn 07/31/2017
ζ , damnit. Tinanggal na minahan, dalhin ang aking +1.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Bakit mo tinanggal ang iyo? Hindi na kailangan.
Magic Octopus Urn 07/31/2017
Ito ay hindi talagang magkano ang iba't ibang (sa mga tuntunin ng algorithm) at ito ay 25% mas mahusay.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 bytes

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

Subukan ito online! (binago kaya tinanggap ito ng TryAPL bilang wasto)

Paano?

  • sinusuri ang input (arrays ay separated space)
  • 2⊥⍣¯1⊢ convert sa bawat isa sa mga argumento sa binary (transposed ng kung ano ang sa tanong)
  • lumiliko ng isang 2D array sa isang vector ng mga vectors
  • {⍵[⍋⍵]}¨ sorts bawat isa sa mga elemento ng vector
  • lumiliko ang vector ng mga vectors sa isang 2D array muli
  • 2⊥ convert mula sa binary (dahil ito ay uri ng transposes ito, dumating kami sa tamang resulta)

James Heslip 07/30/2017.

Dyalog APL (23 character)

NO 
  1. I-convert ang mga argumento sa pag-input sa isang binary matrix
  2. Hatiin ang matris sa mga haligi
  3. Pagsunud-sunurin ang mga haligi sa pataas na order
  4. I-convert ang mga pinagsunod na hilera pabalik sa decimal

Halimbawa

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

Salamat sa Zacharý sa pagwawasto sa akin sa isang ito.

5 comments
Zacharý 07/30/2017
Maaari mong palitan ang (⊥⍣¯1)⍵ may ⊥⍣¯1⊢⍵ . Gayundin, sa palagay ko hindi mo kailangan ang axis specification sa split ( ↓[1] => ).
Zacharý 07/30/2017
Oh, at dapat mong i-convert ito pabalik sa isang listahan!
Zacharý 07/30/2017
Ito ay hindi wasto.
James Heslip 07/30/2017
Salamat, Zacharý, ako ay nagtatrabaho sa huli na ito kagabi at sa palagay ko nabasa ko ang problema. Binago ko na ang aking solusyon ngayon.
1 Zacharý 07/30/2017
Well, magandang trabaho! ( ⊥⍣¯1 talagang kailangang maging isang builtin). At salamat sa pagkuha ng tama sa aking username.

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

Subukan ito online

-2 bytes thanks to Cows quack

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

Dopapp 07/30/2017.

Python 2, 142 bytes

... at pa rin golfing ... sana - Anumang tulong na pinapahalagahan!

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

Ang isang malaking bahagi ng mga ito ay para sa padding ang mga numero na may zeroes.

Higit pang nababasa:

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

Lumilikha ito ng isang array ng binary string representasyon, pads ito, rotates ito 90º clockwise, uri ng bawat hilera, rotates ito pabalik 90 º, at pagkatapos ay lumilikha ng integer sa bawat hilera.

2 comments
Mr. Xcoder 07/30/2017
142 bytes , mayroon kang ilang kalabisan panaklong.
Dopapp 07/30/2017
@ Mr.Xcoder, oh yes that was fool

Related questions

Hot questions

Language

Popular Tags