Untuk bilangan bulat n
yang memuaskan n > 0
, tulis nilainya sebagai jalur turun kanan berdasarkan representasi binernya.
Aturan
- Set bit pertama (paling signifikan) selalu di sudut kiri atas.
- Ketika bit berikutnya diatur (a
1
), gambar sebuah karakter ("diisi") pada baris berikutnya di kolom yang sama dengan karakter sebelumnya digambar. Cobalah untuk menggunakan spasi ("kosong") untuk mengisi, tetapi karakter apa pun akan melakukan selama itu selalu sama. - Ketika bit berikutnya tidak disetel (a
0
), gambarlah sebuah karakter ("terisi") pada baris yang sama segera di sebelah kanan karakter sebelumnya yang digambar. - Kode Anda harus mendukung angka dengan setidaknya 20 bit signifikan.
- Tulis program lengkap, fungsi, lambda, dll. Tetapi tidak ada cuplikan.
- Tidak ada spasi spasi (atau karakter "kosong") / baris yang diizinkan
- Sejumlah spasi tambahan (atau karakter "kosong") / baris diizinkan
- Segala jenis input 1D diterima: angka, string, array booleans, dll. Jaga agar urutan bit tidak tersentuh.
- Segala jenis output 2D visual diterima: pada stdout, sebuah string (dengan dua nilai berbeda yang mewakili "diisi" dan "kosong"), Anda bahkan dapat menampilkan matriks jika Anda mau. Daftar angka tampaknya sulit untuk didamaikan dengan aturan "no heading heading", tetapi saya terbuka untuknya jika Anda menemukan cara untuk menggunakannya. Catatan: jika Anda memilih untuk mencetak atau mengembalikan string, karakter yang digunakan harus karakter ASCII dalam rentang codepoint [32-126].
- Celah standar dilarang.
- Ini adalah codegolf sehingga kode terpendek menang.
Contohnya
Input: 1
*
Input: 2
**
Input: 3
*
*
Input: 4
***
Input: 5
**
*
Input: 6
*
**
Input: 7
*
*
*
Input: 25
*
***
*
Input: 699050
**
**
**
**
**
**
**
**
**
**
Input: 1047552
*
*
*
*
*
*
*
*
*
***********
Input: 525311
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
, ya.9
ini1001
saya ingin masukan saya untuk menjadi0011
. Apakah itu oke?1
pertama adalah bagian dari tantangan, dan (kembali) menggerakkan bit itu akan meremehkan tantangan, jadi saya takut saya harus mengatakan Anda tidak, @TonHospel. Anda dapat menghapusnya dari input Anda di program.Jawaban:
Jelly , 8 byte
Sebuah link monadik menerima nomor sebagai daftar satu dan nol (misalnya
13
adalah[1,1,0,1]
) kembali daftar daftar dari satu dan nol di mana daftar pertama adalah baris pertama.Cobalah online! atau lihat test-suite yang diformat
Bagaimana?
sumber
MATL , 14 byte
Menghasilkan keluaran grafis sebagai jalur mulai dari koordinat (0,0). Cobalah di MATL Online! Atau lihat beberapa contoh offline di bawah ini:
Masukan
7
:Keluaran:
Masukan
699050
:Keluaran:
Jika Anda suka, Anda dapat melihat jalur sebagai koordinat kompleks untuk 9 byte :
Cobalah online!
Penjelasan
sumber
MATL , 10 byte
Input array digit biner. Menghasilkan matriks.
Cobalah online!
Penjelasan
sumber
Python 2 ,
1009981787366 byteCobalah online!
Versi rekursif:
Python 2 ,
716967 byteCobalah online!
sumber
Arang ,
2220191110 byteSejauh ini hanya jawaban kedua Arang saya.
Mengambil input sebagai binary-String (yaitu
699050
sebagai10101010101010101010
).-9 byte terima kasih kepada @Neil menyarankan untuk mengulang ke belakang.
Cobalah online.
Penjelasan:
Baca STDIN sebagai string dalam urutan terbalik:
Lingkari angka binernya sebagai string
ι
:Jika
ι
dilemparkan kembali ke angka 1, cetak ke*
atas, atau cetak ke*
arah kiri.sumber
{}
s.Base
hanya biaya 1 byte karena Anda tidak perluCast
sama sekali:F⮌↨N²¿ι↑*←*
.-v
, karena Charcoal dirancang sebagai bahasa golf, dan saya menambahkan mode verbose hanya untuk membuatnya lebih mudah untuk mengetik dan memahami. (Saya dapat menambahkan satu jika Anda mau).-a
kependekan--ast
, saya menambahkannya (format diambil dari PyTek btw) untuk membantu saya memahami kode ringkas dengan sesedikit mungkin upaya: P (dan itu sangat membantu ketika Anda secara tidak sengaja mengacaukan urutan argumen). Juga, tidak-l
adalah terpisah pilihan. (juga hanya melakukan-h
untuk bantuan pada / deskripsi argumen baris perintah)C # (.NET Core) ,
155123120113101 byteDisimpan 32 byte karena input dapat diterima sebagai array bit.
Disimpan 7 byte berkat @auhmaan.
Disimpan 10 byte berkat @KevinCruijssen.
Cobalah online!
sumber
+new string(' ',c)+"*"
ke+"*".PadLeft(c)
(menyimpan 7 byte)?0
alih-alih*
:if(n[i++]<1){m+="*";c++;}
keif(n[i++]<1)m+=c++%1;
dan"*".PadLeft(c);
ke"0".PadLeft(c);
m+=
sekarang dapat menjadi ternary-if:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
dan penggunaan operator ternary sangat cerdas! Saya juga memperbaiki kasing untuk699060
, dengan hanya mengaturc
satu permulaan, saya agak merindukan itu saat memeriksa kasing.05AB1E ,
181714 byteCobalah online!
Penjelasan
Penjelasan kanvas 05AB1E
sumber
γ€gć¸s>«1IÔ·ÌΛ
harus menyimpan 4 byte.Python 2 , 59 byte
Cobalah online!
Didasarkan pada solusi TFeld .
sumber
Haskell , 65 byte
Cobalah online!
Mengambil input sebagai daftar boolean.
Curry PAKCS, 70 byte
Port of the Haskell menjawab, tetapi karena
<-
tidak berfungsi di Curry kita perlu membuat fungsi helperu
. Kita juga perlu menambahkan spasi di antaraf
dan.
agar Curry mem-parsingnya sebagai komposisi alih-alih sebuah titik.Ini juga berfungsi di MCC Curry, tetapi tidak berfungsi di Sloth Curry (yang merupakan satu-satunya yang didukung oleh TIO).
sumber
Haskell ,
74706762 byteCobalah online! Mengambil daftar nol dan yang sebagai input dan mengembalikan string yang dipisahkan baris baru.
Terinspirasi oleh jawaban xnor .
sumber
Emojicode , 251 byte
Cobalah online!
Ini jelas bukan solusi golf, tetapi tidak ada orang hidup yang akan menganggap Emoji-kode bahasa golf. Namun, dalam proses menundukkan diri saya pada kengerian yang merupakan sintaksis kode emoji dalam upaya untuk mengajarkan kepada diri sendiri kebodohan bahasa ini, saya terkejut dengan betapa kuat dan efisiennya hal itu 😀
Penjelasan:
sumber
JavaScript (ES6), 48 byte
Format I / O yang sama dan logika yang sama dengan versi rekursif di bawah ini.
Cobalah online!
Atau 42 byte jika format ini dapat diterima.
Versi rekursif, 56 byte
Mengambil input sebagai array bilangan bulat (0 atau 1). Penggunaan
0
untuk diisi dan ruang kosong.Cobalah online!
Berkomentar
sumber
Utilitas Bash + GNU, 38
Di sini
^K
dan^H
merupakan karakter kontrol tab vertikal dan backspace literal. Ini tidak ditampilkan dengan baik di browser, jadi skrip ini dapat dibuat ulang sebagai berikut:Berlari di terminal. Masukan melalui STDIN.
Jawaban ini dapat memperluas spesifikasi terlalu jauh - sebenarnya tidak ada karakter utama di setiap baris output - semua penentuan posisi dilakukan dengan karakter kontrol. Jika ini terlalu banyak peregangan, maka output dapat disalurkan ke
|col -x|tac
untuk 11 byte tambahan.sumber
Batch, 113 byte
Mengambil daftar bit sebagai argumen baris perintah. Penggunaan
+
bukan*
karena*
memiliki makna khusus di dalam%s:...=...%
ekspansi.sumber
Java 10,
100106 byteMengambil array booleans dan mengembalikan sebuah String (
0
s kosong,1
s diisi). Cobalah online di sini .Terima kasih kepada Olivier Grégoire karena membantu saya golf sedikit lebih banyak dan mengingatkan saya pada kenyataan bahwa format output saya tidak sesuai dengan spesifikasi.
Versi tidak disatukan:
sumber
{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Java (JDK 10) , 83 byte
Cobalah online!
int[]
int[][]
sumber
Haskell , 126 byte
Masukan sebagai daftar nol dan satu. Mengubah angka menjadi diimbangi oleh
x↦[1-x,x]
dan menghitung jumlah parsial. Hasil akhir dilakukan dengan dua pemahaman daftar bersarang.Cobalah online!
sumber
R , 59 byte
Cobalah online!
Mengambil input sebagai array bit.
Mengembalikan matriks boolean
TRUE
danFALSE
mewakili a*
dan a, masing-masing.
Juga memiliki beberapa hal di footer untuk mencetak matriks yang sesuai dengan spesifikasi di atas, untuk kemudahan pengujian.
sumber
APL + WIN, 65 atau 46 byte
Meminta input bilangan bulat
atau untuk vektor numerik dari representasi biner dari integer
dengan asumsi saya telah membaca komentar untuk jawaban tertentu dengan benar dan input terakhir diperbolehkan.
sumber
Pyth, 23 byte
Coba di sini
Penjelasan
sumber
Perl 5
-p
,5436 byteCobalah online!
Potong turun setelah saya menyadari bahwa input bisa berupa string sedikit.
sumber
SmileBASIC,
645957 byteBit tertinggi (bit tanda) dicentang, dan jika 1, posisi X meningkat. Jika bit tanda kurang dari posisi X (yaitu, bit tanda adalah 0 dan X bukan 0) posisi Y meningkat.
Gerakan pertama akan selalu horizontal, jadi gerakan Y diblokir sampai setelah gerakan X pertama. Ini memastikan bahwa posisi Y tidak meningkat selama 0 bit awal.
Kemudian N digeser ke kiri, dan ini berulang sampai N mencapai 0.
sumber
Ruby , 63 byte
Cobalah online!
sumber
Japt ,
1917 byteMengambil input sebagai array bit, misalnya
[1,0,1]
,"
bukannya output*
.Bercukur dua byte karena Oliver .
Cobalah online!
sumber
SpT
denganTî
-î
mirip denganp
, kecuali defaultnya adalah" "
. Juga, ada jalan pintas untukq
:¬
î
, tentu sangat berguna. Saya sering memeriksa peluang untuk menggunakan pintasan, tetapi saya masih selalu melewatkan beberapa di antaranya, terima kasih banyak atas bantuan Anda.Python 2, 113 Bytes
Tidak yakin apakah yang ini diperhitungkan (output array dari masing-masing baris), tetapi jika demikian maka saya akan mengubah jumlah byte saya menjadi 103:
sumber
TI-Basic (TI-84 Plus CE), 85 byte
Meminta daftar boolean, mengembalikan matriks 0 dan 1.
Pergi melalui daftar, menambah X jika 'bit' berikutnya adalah 0, mengubah Y sebaliknya, lalu menambahkan 1 ke matriks di lokasi itu, dan mengembalikan matriks di akhir.
TI-Basic adalah lanugage tokenized .
Prompt
,L
* 6, (baris) * 12,1
* 5,→
* 7,X
* 5,Y
* 5,sum(
,L
* 5,{
,Ans
* 2,,
* 5,-
,+
* 3,dim(
* 3,(
* 4,For(
,I
* 3,2
,not(
,End
= 73 bytesDelvar
,[A]
* 5 = 12 byteTI-Basic (TI-84 Plus CE), 56 byte
Proses yang sama seperti di atas, tetapi menggunakan output grafis (dibatasi oleh ukuran layar: 10 baris, 26 kolom, jadi maks 10 1s dan 25 0s) saat berjalan, alih-alih menambahkan ke matriks.
sumber
Pyth, 30 byte
Cobalah online!
Penggunaan
Terjemahan Python 3:"
bukan*
.sumber
x86 .COM, 32 byte
sumber
APL (Dyalog Classic) , 18 byte
Cobalah online!
sumber