Terinspirasi oleh Buat dinding biner
Diberikan daftar bilangan bulat positif, kita dapat menuliskan semuanya di atas satu sama lain seperti itu, [2, 6, 9, 4]
sebagai contoh:
0010
0110
1001
0100
Kita bisa membayangkan ini sebagai tembok:
..#.
.##.
#..#
.#..
Namun, ini adalah dinding yang sangat lemah, dan telah runtuh! Setiap 1
( #
) jatuh hingga menyentuh "tanah" atau yang lain 1
( #
). The 0
s ( .
s) yang hadir di tempat yang ditinggalkan terharu 1
s.
Ini menjadi sebagai berikut:
....
....
.##.
####
Yang diterjemahkan kembali ke:
0000
0000
0110
1111
Yang, sebagai daftar angka, adalah [0, 0, 6, 15]
.
Kasus uji lain
[10, 17, 19, 23]
Ini menjadi:
01010
10001
10011
10111
yang menjadi:
00000
10011
10011
11111
menerjemahkan kembali ke:
[0, 19, 19, 31]
Tantangan
Diberikan daftar bilangan bulat positif, terapkan transformasi ini ke daftar. Input / Output sebagai daftar bilangan bulat positif dalam format apa pun yang masuk akal. Celah standar berlaku.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang!
sumber
Jawaban:
MATL , 4 byte
Cobalah di MATL Online
Penjelasan
sumber
Python , 68 byte
Cobalah online!
sumber
JavaScript (ES6), 50 byte
Penjelasan: Misalkan dua baris dinding seperti ini:
Hasilnya harus seperti ini:
Dengan kata lain, baris pertama menjadi DAN dari dua baris dan baris kedua menjadi ATAU dari dua baris. Ini hanya perlu diulangi cukup kali agar semua bit jatuh ke bawah.
sumber
Jelly , 9 byte
Cobalah online!
sumber
Japt , 16 byte
Cobalah online! menggunakan
-Q
bendera untuk memformat hasil array.Penjelasan
sumber
mì2 z3 mn z mì2
null
bukannya spasi. Jadi sepertinya itu tidak berhasil. Dannull
disortir ke kanan1
s, tidak seperti spasi, yang disortir ke kiri.Mathematica, 64 byte
adalah
\[Transpose]
Ini mengkonversi input (daftar angka) ke daftar daftar digit, membalutnya menjadi matriks persegi, mentransposasikannya, mengurutkan baris sehingga 1's "jatuh" ke bawah, transposes kembali, kemudian mengubah kembali menjadi angka .
sumber
Python 3.5 , 60 byte
Cobalah online!
Mengambil input seperti
f(2, 6, 9, 4)
. Mengasumsikan input tidak kosong. Menggunakan banyak tuple membongkar .sumber
Oktaf,
2925 byte4 byte disimpan berkat @Stewie
sumber
de2bi/bi2de
menghemat 4 byte dalam oktaf. Bekerja di octave-online.net.J , 13 byte
Cobalah online!
Penjelasan
sumber
<convert from binary> <transpose> <sort each row> <transpose> <convert to binary> M
, di mana dua fungsi pertama hanyalah kebalikan dari dua yang terakhir.05AB1E , 9 byte
Cobalah online!
Agak berbeda algoritma dari Magic.
sumber
ζ
, sial. Hapus milik saya, ambil +1 saya.Dyalog APL,
242119 byteCobalah online! (dimodifikasi sehingga TryAPL menerimanya sebagai valid)
Bagaimana?
⎕
input yang dievaluasi (array dipisahkan oleh ruang)2⊥⍣¯1⊢
mengonversi setiap argumen menjadi biner (mengubah apa yang ada dalam pertanyaan)↓
mengubah array 2D menjadi vektor vektor{⍵[⍋⍵]}¨
mengurutkan masing-masing elemen vektor↑
mengubah vektor vektor menjadi array 2D lagi2⊥
mengkonversi dari biner (karena itu semacam transpos itu, kita sampai pada hasil yang benar)sumber
Dyalog APL (23 karakter)
Contoh
Terima kasih kepada Zacharý karena mengoreksi saya tentang hal ini.
sumber
(⊥⍣¯1)⍵
dengan⊥⍣¯1⊢⍵
. Juga, saya tidak berpikir Anda memerlukan spesifikasi sumbu pada split (↓[1]
=>↓
).⊥⍣¯1
Benar-benar harus builtin). Dan terima kasih telah benar-benar mendapatkan nama pengguna saya dengan benar.JavaScript,
127125 byteCobalah online
-2 byte berkat Sapi dukun
sumber
(1<<c)&e
dapat menjadi2**c&e
Python 2, 142 byte
... dan masih bermain golf ... semoga –– Bantuan apa pun dihargai!
Sebagian besar dari ini adalah untuk mengisi angka dengan nol.
Lebih mudah dibaca:
Ini menciptakan array dari representasi string biner, membalutnya, memutarnya 90º searah jarum jam, mengurutkan setiap baris, memutarnya kembali 90º, dan kemudian membuat bilangan bulat dari setiap baris.
sumber