Tembok Perduaan yang lemah

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

Diilhamkan dengan Buat dinding binari

Memandangkan senarai bilangan bulat positif, kita dapat menuliskannya di atas satu sama lain seperti, untuk [2, 6, 9, 4] sebagai contoh:

0010
0110
1001
0100 

Kita boleh bayangkan ini sebagai dinding:

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

Walau bagaimanapun, ini adalah dinding yang sangat lemah, dan ia telah runtuh! Setiap 1 ( # ) jatuh ke bawah sehingga ia mencapai "tanah" atau yang lain 1 ( # ). 0 s (s . ) Berada di tempat yang ditinggalkan oleh pindah 1 s.

Ini menjadi perkara berikut:

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

Yang diterjemahkan kembali ke:

0000
0000
0110
1111 

Yang, sebagai senarai nombor, adalah [0, 0, 6, 15] .

Satu lagi kes ujian

[10, 17, 19, 23] 

Ini menjadi:

01010
10001
10011
10111 

yang menjadi:

00000
10011
10011
11111 

menterjemah semula kepada:

[0, 19, 19, 31] 

Cabaran

Memandangkan senarai bilangan bulat positif, gunakan transformasi ini ke senarai. Input / Output sebagai senarai integer positif dalam sebarang format yang munasabah. Kelemahan standard dikenakan.

Ini adalah , jadi jawapan terpendek dalam bait menang!

5 Comments
1 Leaky Nun 07/29/2017
Lebih banyak kes ujian? Awak tahu, ujian bukan persegi boleh menjadi baik.
HyperNeutrino 07/29/2017
@LeakyNun Pasti. Saya akan melakukannya.
Marcus Müller 07/30/2017
Itulah masalah sorting untuk array kecil.
HyperNeutrino 07/30/2017
@ MarcusMüller Anda betul - saya menyedari bahawa selepas jawapan MATL: P

14 Answers


Suever 07/29/2017.

MATL , 4 bait

BSXB 

Cuba di 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 Bagaimana cara kerja ini: o
1 totallyhuman 07/29/2017
Adakah MATL hanya keluar dari padang golf dengan 4 bytes ? o_O
Leaky Nun 07/29/2017
5 bait sekarang :-p
HyperNeutrino 07/29/2017
Saya tidak pernah fikir akan menjadi terbina dalam untuk memindahkan orang-orang ke bawah xD +1
1 JungHwan Min 07/29/2017
@totallyhuman baik, tunggu sampai Dennis datang

Anders Kaseorg 07/29/2017.

Python , 68 bait

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

Cuba dalam talian!


Neil 07/29/2017.

JavaScript (ES6), 50 bait

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

Penjelasan: Katakan dua baris dinding seperti ini:

0011
0101 

Hasilnya perlu ini:

0001
0111 

Dalam erti kata lain, baris pertama menjadi AND DAN dua baris dan baris kedua menjadi ATAU dari dua baris. Ini hanya perlu berulang kali untuk semua bit jatuh ke bahagian bawah.


Leaky Nun 07/29/2017.

Jelly , 9 bait

BUz0Ṣ€ZUḄ 

Cuba dalam talian!


Justin Mariner 07/29/2017.

Japt , 16 bait

m¤z3 ®¬n qÃz mn2 

Cuba dalam talian! menggunakan bendera -Q untuk memformat hasil seragam.

Penjelasan

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
Saya think anda boleh menyimpan bait dengan mì2 z3 mn z mì2
Justin Mariner 07/30/2017
@ETHproductions Ia seolah-olah berputar pelbagai 2D, bukannya memutar pelbagai rentetan, pad setiap array dalaman dengan null bukan ruang. Jadi itu nampaknya tidak berfungsi. Dan null diisih ke kanan 1 s, tidak seperti ruang, yang disusun ke kiri.

DanTheMan 07/30/2017.

Mathematica, 64 bait

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

 adalah \[Transpose]

Ini menukarkan input (senarai nombor) ke senarai senarai digit, padanya menjadi matriks persegi, transposes itu, menyusun baris supaya "jatuh" 1 ke bawah, transpos kembali, kemudian menukar kembali ke nombor .


xnor 07/30/2017.

Python 3.5 , 60 bait

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

Cuba dalam talian!

Membawa input seperti f(2, 6, 9, 4) . Menganggap input tidak kosong. Menggunakan banyak 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 menjimatkan 4 bait dalam oktaf. Bekerja di octave-online.net.
Suever 07/30/2017
@StewieGriffin Terima kasih!

miles 07/29/2017.

J , 13 bait

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

Cuba dalam talian!

Penjelasan

/:~"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
Terdapat padding kiri binari lagi, +1. Dan juga, bolehkah anda menjelaskan mengapa anda perlu menggunakan terbalik transpose, kerana ia hanya transpose?
miles 08/01/2017
@ Zacharý Penceroboh digunakan untuk membatalkan operasi yang digunakan sebelum menyusun setiap baris. Memang benar bahawa terbalik dari transpose hanya ditukar, tetapi satu lagi cara untuk melihatnya adalah seperti M , dimana dua fungsi pertama hanya penyongsangan dua yang terakhir.

Erik the Outgolfer 07/30/2017.

05AB1E , 9 bait

bí0ζR€{øC 

Cuba dalam talian!

Algoritma berbeza dari Magic.

3 comments
Magic Octopus Urn 07/31/2017
ζ , damnit. Saya telah memotong, ambil +1 saya.
Erik the Outgolfer 07/31/2017
@MagicOctopusUrn Kenapa kamu memusnahkan kamu? Tidak perlu.
Magic Octopus Urn 07/31/2017
Ia tidak terlalu jauh (dari segi algoritma) dan ini lebih baik 25%.

Zacharý 07/30/2017.

Dyalog APL, 24 21 19 bytes

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

Cuba dalam talian! (diubah suai jadi TryAPL menerimanya sebagai sah)

Bagaimana?

  • input yang dievaluasi (array adalah ruang yang dipisahkan)
  • 2⊥⍣¯1⊢ menukarkan setiap argumen kepada binari (dipindahkan dari apa yang ada dalam soalan)
  • bertukar menjadi 2D array menjadi vektor vektor
  • {⍵[⍋⍵]}¨ menyusun setiap elemen vektor
  • menghidupkan vektor vektor ke dalam array 2D sekali lagi
  • 2⊥ tukar daripada binari (kerana ia menyebarkannya, kita tiba pada hasil yang betul)

James Heslip 07/30/2017.

Dyalog APL (23 aksara)

NO 
  1. Tukar argumen masukan ke dalam matriks binari
  2. Pecahkan matriks ke dalam lajur
  3. Isikan lajur ke urutan menaik
  4. Tukar baris yang disusun kembali ke perpuluhan

Contoh

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

Terima kasih kepada Zacharý untuk membetulkan saya mengenai perkara ini.

5 comments
Zacharý 07/30/2017
Anda boleh menggantikan dengan (⊥⍣¯1)⍵ dengan ⊥⍣¯1⊢⍵ . Juga, saya tidak fikir anda memerlukan spesifikasi paksi pada pecahan ( ↓[1] => ).
Zacharý 07/30/2017
Oh, dan anda sepatutnya menukarnya semula ke senarai!
Zacharý 07/30/2017
Ini tidak sah.
James Heslip 07/30/2017
Terima kasih, Zacharý, saya bekerja pada malam tadi dan saya fikir saya salah membaca masalah. Saya telah mengubahsuai penyelesaian saya sekarang.
1 Zacharý 07/30/2017
Nah, kerja yang baik! ( ⊥⍣¯1 benar-benar perlu dibina). Dan terima kasih kerana benar-benar mendapatkan nama pengguna saya betul.

ThePirateBay 07/29/2017.

JavaScript, 127 125 bait

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

Cuba dalam talian

-2 bytes thanks to Cows quack

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

Dopapp 07/30/2017.

Python 2, 142 bait

... dan masih bermain golf ... semoga - Sebarang bantuan dihargai!

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

Sebahagian besar ini adalah untuk padding nombor dengan nol.

Lebih mudah dibaca:

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

Ini menimbulkan pelbagai perwakilan rentetan binari, memasangkannya, berputar 90º mengikut arah jam, menyusun setiap baris, berputar kembali 90º, dan kemudian membuat bilangan bulat dari setiap baris.

2 comments
Mr. Xcoder 07/30/2017
142 bait , anda mempunyai beberapa kurungan yang berlebihan.
Dopapp 07/30/2017
@ Mr.Xcoder, oh ya itu bodoh

HighResolutionMusic.com - Download Hi-Res Songs

1 (G)I-DLE

POP/STARS flac

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

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
3 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
4 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.
5 Clean Bandit

Baby flac

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

Bad Liar flac

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

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
8 BTS

Waste It On Me flac

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

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
10 Fitz And The Tantrums

HandClap flac

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

Chances flac

Backstreet Boys. 2018.
12 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
13 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
14 Anne-Marie

Rewrite The Stars flac

Anne-Marie. 2018. Writer: Benj Pasek;Justin Paul.
15 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
16 Imagine Dragons

Machine flac

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

The Cure flac

Little Mix. 2018.
18 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
19 Rita Ora

Velvet Rope flac

Rita Ora. 2018.
20 Lady Gaga

I'll Never Love Again flac

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

Related questions

Hot questions

Language

Popular Tags