Diberikan array bilangan bulat positif di basis 10, di mana n > 0
, menampilkan representasi mereka dari dinding biner.
Bagaimana cara kerjanya?
- Ubah setiap angka menjadi representasi binernya.
- Pad representasi dengan memimpin nol sampai yang terpanjang yaitu
1, 2
->1, 10
->01, 10
. - Buat dinding di mana
1
s adalah batu bata dan0
s adalah batu bata yang hilang.
Dinding adalah blok karakter di mana setiap karakter yang dapat dicetak mewakili batu bata dan spasi ( 32
) mewakili batu bata yang hilang. Anda dapat memilih karakter apa pun untuk batu bata, itu tidak harus berbeda di dinding selama itu bukan karakter ruang putih. Karakter bata yang hilang harus berupa spasi. Untuk contoh di bawah ini saya gunakan *
untuk batu bata.
Contoh
Memasukkan:
[ 15, 7, 13, 11 ]
[ 1111, 111, 1101, 1011 ]
[ 1111, 0111, 1101, 1011 ]
Keluaran:
**** *** ** * * **
Aturan
- Masukan harus diambil dalam basis 10, jika bahasa Anda menerima basis lain Anda mungkin tidak menggunakannya.
- Memimpin dan mengikuti garis baru diperbolehkan.
- Masukan dapat diambil sebagai daftar bilangan bulat, argumen terpisah atau format apa pun yang masuk akal.
- Output mungkin dalam format apa pun yang wajar: string yang dipisahkan baris baru, array baris, array 2d, dll.
- Celah standar tidak diijinkan.
Uji Kasus
Perhatikan bahwa dalam kasus uji pertama semua lapisan memiliki batu bata kosong di ujungnya.
[ 14, 4, 6, 2 ]
***
*
**
*
[ 1, 2, 4, 8, 16 ]
*
*
*
*
*
[ 15, 11, 15, 15 ]
****
* **
****
****
[ 11, 10, 9, 8 ]
* **
* *
* *
*
Ini golf kode sehingga kode terpendek menang!
[[1, " ", 1, " "], ...]
Jawaban:
MATL , 5 byte
Cobalah online!
Penjelasan
sumber
42*
atau sesuatu ...100
atau nomor lain?J , 8 byte
Cobalah online!
Penjelasan
sumber
#:
inilah mengapa ini mengalahkan Jelly.Jelly , 9 byte
Cobalah online!
EDIT: BAGAIMANA CARA MENGALAHKAN JELLY DAT IMPOSSIBLE> _ <
sumber
Oktaf, 22 byte
Cobalah online
Penjelasan:
Menyimpan beberapa byte berkat Luis Mendo! Juga, saya tidak menyadari bahwa saya dapat memilih karakter mana yang akan dibangun, tidak hanya
*
.Atau dengan
de2bi
:Penjelasan:
Berikut ini berfungsi pada TIO, untuk 7 byte lebih:
Coba di sini
sumber
Python 3 ,
88 84 71 7472 byteLambda yang mengembalikan daftar string, mewakili setiap baris.
Cobalah online! (tautan ke versi yang dipisahkan baris baru)
Penjelasan
lambda n:
- Membuat lambda (anonim), dengan parametern
. Mengembalikan secara implisit.[...]
- Membuat pemahaman daftar.bin(x)[2:]
- Mendapat representasi biner dari angka-angka..replace(*'0 ')
- Mengganti semua kemunculan0
dengan spasi..rjust(len(bin(max(n)))-2)
- Pads representasi biner dengan panjang yang terpanjang.for x in n
- Berputar melaluin
, dengan variabelx
.Changelog
-
1- 3 byte berkat @Rod,-(...)+2
=2-(...)
, penggunaanrjust()
Menambahkan versi denganbin()
, yang tidak valid karena tidak bekerja untuk1
dan2
.Memperbaiki bug di atas menggunakanformat()
.Mengubah jenis kembali ke daftar Strings, karena diizinkan oleh OP.
Memperbaiki bug lain yang menggunakan
rjust()
dan beralih kembali kebin()
, terlihat dan diperbaiki oleh @Rod.sumber
JavaScript (ES6),
8179 byteMenyimpan 2 byte dengan menggunakan angka, bukan karakter untuk batu bata, seperti yang disarankan oleh Rick Hitchcock
Mengembalikan array 2D dengan 1 untuk batu bata.
Uji kasus
Tampilkan cuplikan kode
sumber
Haskell ,
767574 byteCobalah online!
sumber
05AB1E , 9 byte
Cobalah online!
sumber
b0ð:í.Bí»
9 byte juga.Ruby,
6359 byte-4 byte dengan bantuan dari Alexis Andersen
Cobalah online!
sumber
n.max.to_s(2).size
dengan('%b'%n.max).size
dan Anda tidak benar-benar perlu mengganti1
dengan*
R , 87
88byteBlok dinding diwakili oleh
8
, karena, juga banyak delapan.Cobalah online!
Input integer list dikonversi ke array bit yang dipangkas dari trailing 0 bit dan dibalik.
Array berkurang kemudian output menggunakan
write
dan lebar kolom yang ditentukan ketika array dipangkas.ifelse()
adalah satu-satunya opsi JIKA yang bekerja pada vektor sayangnya.sumber
1
daripada""
untuk file output dalamwrite
.Python 2 , 77 byte
Cobalah online!
sumber
APL (Dyalog) ,
30222014 byteDisimpan 6 byte berkat @ Adám
Cobalah online!
(menganggap
⎕IO←0
ini default pada banyak mesin)Ini mengambil input sebagai array dan mengembalikan matriks dengan
*
s dans.
Penjelasan
sumber
' *'[⍉2⊥⍣¯1⊢⎕]
¨
.T-SQL, 290 byte
Penggunaan
1
untuk potongan bata, mengasumsikan input berasal dari tabel@
Tidak disatukan, dengan beberapa penjelasan
sumber
Mathematica, 40 byte
Batu bata adalah 1s
Mathematica, 48 byte
Batu bata adalah #
sumber
//.
. (/.
Berarti "ganti sekali",//.
berarti "terus melakukan penggantian sampai hal itu berhenti berubah".)C # (.NET Core) ,
112 + 18 = 13086 + 41 = 127 byteCobalah online!
Jumlah byte termasuk 41 byte dari
using System.Linq;using C=System.Convert;
. Digunakan1
sebagai karakter untuk dinding. Meskipun demikian, ini terlalu lama bahkan untuk C # ...sumber
namespace System.Linq{}
untuk menyimpan beberapa byte. Apakaha.Max()
dijamin benar (saya yakin itu bukan saya yang paling pintar dengan binary: P)? Apakah akanclass Convert{}
menghemat byte?using System.Linq;using C=System.Convert;
ke dalam jumlah byte, karena keduausing
arahan tersebut diperlukan untuk mengkompilasi kode.Retina , 63 byte
Cobalah online! Penjelasan:
Konversikan ke unary, dan suffix a
<
.Konversi ke biner.
Setelah semua
<
mencapai kiri, hapus semuanya.Masukkan spasi sebelum huruf apa pun
<
yang telah mencapai kiri.Pindahkan semua
<
tersisa satu langkah. Bilas dan ulangi.sumber
PowerShell , 100 byte
Cobalah online!
Eh,
convert
biner di PowerShell sangat menyakitkan. Ditambah.length
panggilan y ke-replace
dalam0
dengan ruang, ditambah panjang.padLeft()
panggilan untuk membuat mereka semua sama.length
, semua menambahkan hingga pengajuan panjang.Saran bermain golf untuk mendapatkan di bawah 100 dipersilahkan.
sumber
PHP, 84 byte
Untungnya, operasi bit melemparkan
log
hasilnya ke int. float tidak akan bekerja di sini.Cobalah online .
sumber
Clojure, 185 byte
Versi tidak disatukan:
Fungsi anonim yang mengambil argumen sebagai daftar. Mengembalikan garis sebagai daftar.
Membaca jawaban yang lain, saya yakin bisa lebih kecil.
clojure.string/replace
Dibutuhkan sejumlah karakter cabul untuk menulis ..sumber
Japt ,
3330 byteCobalah online!
Disimpan 3 byte berkat @Justin Mariner
Penjelasan
sumber
-R
bendera (tidak ditambahkan ke jumlah byte) untuk melihat output yang bergabung dengan baris baru: di sini .Python 3 ,
9290 byteCobalah online!
Mengembalikan daftar garis. Menumpuknya menunjukkan bahwa mereka memang benar-benar sejajar.
Kerusakan
Pada dasarnya mengubah array menjadi biner, lalu mengganti semua 0 dengan spasi.
N
jumlah spasi ditambahkan ke depan setiap baris tempatN = [length of longest line] - [length of line]
.-1 bytes
Terima kasih untuk Tn. XoderCobalah online!
sumber
'0',' '
dengan*'0 '
.Japt , 11 byte
Cobalah online!
Penjelasan
sumber
z3 z
. Tidak yakin mengapay y
tidak bekerja di sana, saya akan memeriksanya nanti ...Java 7,
13010888 byteDisimpan 22 berkat @TheLethalCoder Disimpan 20 berkat @Xanderhall
Tidak Disatukan:
sumber
i
padab[i]
untuk menyimpan satu byte. Anda dapat menyimpan output dengan1
sehingga tidak perlu untuk.replace('1','*')
. Gunakan Java 8 sebagai gantinya dan kompilasi ke lambda untuk menyimpan byte. Jika Anda tidak ingin melakukan ituint[]b
menghemat satu byte.i++
Mengevaluasii
kemudian menambahkannya (sedangkan++i
sebaliknya) sehingga Anda dapat memindahkani++
keluar darifor
loop dan menggunakanb[i++]
sebagai gantinya. Oh dan sementara kami melakukannya Anda hanya memiliki satu baris di dalam loop Anda sehingga kawat gigi tidak diperlukan.for(int x:i)
Selain itu, Anda dapat menggunakanLong.toBinaryString
bukan versi Integer untuk menghemat 3 byte.Python 2, 217 byte
Setelah 2 jam coding saya memutuskan, itu numpy adalah ide yang buruk untuk ini
Penggunaan di Ubuntu
Instal numpy
Buat nama file
i
dengan input dalam format14 4 6 2
Menjalankan
sumber
8 ,
232254250 byteKode
Versi tidak dikoleksi dengan komentar
Kata-kata ini harus dipanggil secara berurutan (lihat contoh)
Penggunaan dan contoh
Atau lebih jelas
sumber
Pyth, 16 byte
Coba di sini. Pikirkan ruang tertinggal.
sumber
Excel VBA,
170161 BytesGolf
Fungsi jendela langsung VBE anonim yang mengambil input format
1 2 3 .. n
dari rentang[A1]
dan mengeluarkan dinding biner yang sesuai ke jendela Segera VBE melalui rentang[B1,C1,2:2]
Diformat:
Tidak disatukan
Sub
Rutin penuh yang mengambil input formatArray(1, 2, 3...)
dan mengeluarkan dinding biner yang sesuai ke jendela VBE Immediate via range[A1,B1,2:2]
sumber
Arang , 20 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Bekerja dengan mengonversi setiap nomor input menjadi biner secara manual tetapi mencetaknya dalam urutan kanan-ke-kiri. Saya mengambil input sebagai string yang diakhiri baris baru karena Charcoal tidak memiliki cara yang baik untuk memasukkan daftar jika tidak saya akan menulis sesuatu seperti ini yang sayangnya saat ini membutuhkan 21 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Versi ini meng-vektor-kan array input, meskipun outputnya dikodekan ke
-
s yang menyimpan byte.sumber