Diberikan bilangan bulat positif n >= 1
, output n
baris pertama dari struktur berikut:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
Baris n
ke-1 yang diindeks adalah representasi biner dari n
, dicerminkan tanpa menyalin karakter terakhir, dengan #
di tempat 1 dan <space>
di tempat 0. Semua baris dipusatkan.
Anda harus menampilkan sebagai ASCII-art tetapi Anda dapat menggunakan karakter non-spasi putih di tempat yang saya gunakan #
dalam contoh. Trailing whitespace diizinkan, dan baris baru trailing diizinkan. Keluaran harus terlihat seperti contoh, dan tidak ada spasi putih tambahan atau baris baru terkemuka.
Anda dapat melihat 1023 baris pertama dari katedral fraktal di sini .
Untuk menghasilkan kasus uji yang lebih besar, berikut ini adalah implementasi referensi yang tidak diklik dalam Python
Jawaban:
MATL , 10 byte
Cobalah online!
Penjelasan
sumber
35*c
adalah 4 karakter35
memperbaiki? Tampaknya agak spesifik. Di sisi lain, beberapa tantangan memungkinkan char apa pun, jadi itu mungkin ide yang bagus. Apakah menurut Anda#
yang paling umum?Zc
, dengan karakter35
, yaitu#
). Terima kasih, @ ConorO'Brien!05AB1E , 9 byte
Kode:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan:
sumber
Jelly , 12 byte
Cobalah online!
sumber
Python 2 , 92 byte
Cobalah online!
Dalam Python 3,
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')
lebih pendek, tetapiint(input())
dan parens di sekitarprint
argumen dorong hingga 95 byte.sumber
2**len(bin(n))/4
)JavaScript (ES6), 106 byte
Digunakan
1
sebagai karakter non-spasi putih.Demo
Tampilkan cuplikan kode
Versi alternatif (ukuran yang sama)
Tanpa
Math.clz32()
:sumber
Math.clz32
- saya bahkan tidak tahu itu ada!Sekam ,
212018 byteTerima kasih @Zgarb untuk bermain golf 2 byte!
Cobalah online!
Tidak Terikat / Penjelasan
Untuk menghindari padding yang panjang, ini menentukan lebar fraktal yang diberikan sebagai
2*len(bin(N))-1
dan menghasilkan semua urutan panjang itu dengan simbol#,_
('_' menunjukkan spasi).Karena kekuatan Cartesian dihasilkan secara berurutan dan angka-angka binernya juga, ini tidak masalah. Yang perlu kita lakukan untuk mendapatkan fraktal pada saat ini, adalah menyaring semua palindrom dan hanya itu:
sumber
Ṙ;
bisa adilR
, danȯ
tidak perlu. Ide jawaban yang bagus!Mathematica, 94 byte
sumber
Mathematica, 98 byte
Cobalah di kotak pasir Wolfram ! Masing-masing
⌊
dan⌋
tiga byte.Ini pendekatan yang berbeda dari jawaban lain sejauh ini, menggunakan pola fraktal. Langkah kuncinya adalah
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&
, yang melakukan hal-hal fraktal, paling baik dijelaskan dalam bentuk gambar:Kode mengulangi langkah ini cukup kali untuk mendapatkan setidaknya n baris, kemudian memotong baris tambahan dan menampilkannya dengan baik.
sumber
Gaia , 11 byte
Cobalah online!
Penjelasan
sumber
Python 2 ,
120118107 byteterima kasih @luismendo, @officialaimm, @ halvard-hummel
Cobalah online!
sumber
replace(*'0 ')
untuk 2 byteC # (.NET Core) ,
192178 byte168 + 23terima kasih TheLethalCoder untuk bantuannya.
Cobalah online!
cukup yakin ini bisa dikurangi banyak, kemungkinan besar di padding dan pembalikan string.
sumber
x=>
ke dalam byte byte dan perhatikan Anda tidak perlu menyertakan semi-kolon trailing.Enumerable.Range(1,x).Select(z
lebih pendek sebagainew int[x].Select((_,z)
(saya pikir itu benar). Karena Anda menggunakan Linq, Anda harus memasukkanusing System.Linq;
ke dalam jumlah byte Anda. Anda juga menggunakanMath
sehingga Anda harus memasukkanusing System;
atau memenuhi syarat sepenuhnya. Perhatikan bahwa ini lebih pendek sebagainamespace System.Linq{}
,' '
dalamPadLeft
panggilan karena spasi adalah default.namespace System.Linq{}
Arang , 28 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Buat daftar
n
bilangan asli pertama .Ulangi sampai semua elemen nol.
Cetak digit biner terakhir dari setiap elemen daftar sebagai a
atau
#
.Pindah ke kolom sebelumnya.
Bagilah semua elemen daftar menjadi dua.
Setelah setengah bagian kiri ditarik, refleksikanlah.
sumber
MapAssignRight(IntDivide, 2, q);
yang menghemat 3 byte.J, 29 byte
Cobalah online!
penjelasan
i.
bilangan bulat hingga n, input(#.^:_1)
dikonversi ke basis 2(],}.@|.)
baris demi baris ("1
melakukan bagian itu), ambil nomor biner (]
adalah identitas fn), dan cat itu (,
) dengan kebalikannya (|.
), di mana kebalikannya dipenggal (}.
).' #'{~
mengubah1
s dan0
s menjadi hash dan spasi.sumber
#.inv
bukan#.^:_1
.n = 1
, Anda tidak mencetak apa pun. Bagaimanapun, Anda dapat memangkas beberapa byte dengan beberapa perubahan seperti itu' #'{~(,|.@}:)"1@#:@:>:@i.
(jika Anda dibiarkan mati oleh satu Anda dapat menghapus 4 byte lebih). Pada dasarnya, gunakan pengait karena kinerjanya seperti garpu saat tine kiri]
dan gunakan#:
bawaan yang AFAIK hampir sama#.inv
. EDIT: Saya kira jawaban saya cukup mirip untuk menjamin menjadi komentar, beri tahu saya jika menurut Anda jawaban itu sendiri.#:
dan itu tidak berhasil, tetapi saya harus ingat salah karena Anda benar itu berhasil.2 #:
yang hanya akan mendapatkan digit paling kanan.#:
Fungsi monadik seperti#.inv
(atau#.&:_1
). Ini berbeda dengan diad#:
, yang hanya memberikan digit sebanyak ada atom dalam argumen kirinya.Proton , 95 byte
Cobalah online!
Ada terlalu banyak bug untuk tidak memiliki terlalu banyak tanda kurung ... Saya harus memperbaiki pengurai ...
sumber
SOGL V0.12 , 11 byte
Coba Di Sini!
sumber
PHP,
98 97 9594 + 1 byteJalankan sebagai pipa dengan
-nR
atau coba online . Digunakan1
sebagai non-spasi putih.sumber
$argn=1
dan$argn=3
tidak benar, dan$argn
berbasis 0 (ditentukan berbasis 1)K (ngn / k) , 19 byte
Cobalah online!
sumber
Python 2 , 93 byte
Cobalah online!
sumber
Python 2 , 89 byte
Cobalah online!
sumber
C (gcc) ,
146108105 byteCobalah online!
Ini adalah fungsi yang
f(n)
disebut dengan jumlah barisn
, menggunakan tanda seru (!
) sebagai karakter non-spasi.Penjelasan :
sumber
--n&&o+p(n);o;
alih-alih--n?o,p(n),o:o;
danfor(;c++<n;puts(""))p(b);
bukannyawhile(c++<n)p(b),puts("");
JavaScript (Node.js) ,
156149 byte-7 byte oleh @ ConorO'Brien
Cobalah online!
Fungsi rekursif. Sayangnya JS tidak mendukung pembalikan string, jadi 19 byte digunakan untuk mengubahnya menjadi array dan kembali.
sumber
[...b]
sebagai gantib.split("")
; Anda juga bisa menggunakan.join``.substr(1)
bukan.join("").substr(1)
; akhirnya, saya pikir Anda dapat menggunakans+1
sebagai gantinyas+"1"
Perl 5 , 77 + 1 (-n) = 78 byte
Cobalah online!
Menggunakan '1' alih-alih '#' karena menghemat beberapa byte.
sumber
Stax , 8 byte
Jalankan dan debug itu
Jawaban terpendek sejauh ini. Menggunakan karakter kode 1 CP437 sebagai pengganti
#
.Setara ASCII:
sumber