Tantangan
Buat fungsi atau program yang, ketika diberi bilangan bulat size
, melakukan hal berikut:
Jika size
sama dengan 1, output
H H
HHH
H H
Jika size
lebih besar dari 1, output
X X
XXX
X X
di mana X
output dari program / fungsi untuksize - 1
(Jika Anda suka, Anda mungkin memiliki kasus dasar sesuai 0
, selama Anda menentukan jawaban Anda)
Salah satu format output berikut dapat diterima, mana yang lebih nyaman bagi Anda:
String struktur yang diperlukan dengan dua karakter berbeda yang terkait dengan
H
danspace
Array dua dimensi dengan struktur yang diperlukan, dengan dua nilai berbeda yang sesuai dengan
H
danspace
Array / daftar string, dengan satu baris output di setiap string, dengan dua nilai berbeda yang terkait dengan
H
danspace
Ruang terkemuka diizinkan, selama ada jumlah ruang utama konstan di setiap baris. Dua karakter keluaran yang berbeda dapat bergantung pada apa pun yang Anda pilih, asalkan berbeda.
Tentukan format output apa yang dikembalikan oleh kode Anda.
Uji Kasus
1
H H
HHH
H H
2
H H H H
HHH HHH
H H H H
H HH HH H
HHHHHHHHH
H HH HH H
H H H H
HHH HHH
H H H H
3
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
H HH HH H H HH HH H
HHHHHHHHH HHHHHHHHH
H HH HH H H HH HH H
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
H H H HH H H HH H H H
HHH HHHHHH HHHHHH HHH
H H H HH H H HH H H H
H HH HH HH HH HH HH HH HH H
HHHHHHHHHHHHHHHHHHHHHHHHHHH
H HH HH HH HH HH HH HH HH H
H H H HH H H HH H H H
HHH HHHHHH HHHHHH HHH
H H H HH H H HH H H H
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
H HH HH H H HH HH H
HHHHHHHHH HHHHHHHHH
H HH HH H H HH HH H
H H H H H H H H
HHH HHH HHH HHH
H H H H H H H H
Ini adalah kode-golf , sehingga jumlah byte terendah untuk setiap bahasa menang!
sumber
Jawaban:
Bahasa Wolfram (Mathematica) , 46 byte
Mengembalikan array 2d dari
0
s dan1
s.Cobalah online!
sumber
Nest
(berulang kali) fungsinya beberapa kali. Seperti kiriman lainnya (Jelly?) IniArrayFlatten
adalah ... baik, built-in, tetapi berperilaku agak sepertiFlatten[#,{{1,3},{2,4}}]
dalam kasus ini. (tidak menguji)Kanvas ,
1412 byteCoba di sini!
Penjelasan:Di mana
I
input,X
adalah pola yang dihasilkan oleh loop sebelumnya ("H" untuk loop pertama), dan<space>
merupakan ruang kosong pada baris pertama dan ketiga dari pola, ditambahkan secara implisit oleh+
.-2 byte terima kasih kepada dzaima !
sumber
MATL ,
1211 byteInput yang diberikan
n
, ini menghasilkan matriks yang berisi0
dann
.Cobalah online!
Untuk mengonversikan ini menjadi matriks karakter
H
dan spasi tambahkang72*c
di header. Coba juga online!Atau tambahkan
]1YC
untuk melihat matriks yang ditampilkan secara grafis. Cobalah di MATL Online!Penjelasan
sumber
Stax ,
1615 byteJalankan dan debug itu
Ini adalah representasi ascii dari program dengan komentar. Program ini membangun sisi H, dan kemudian transposes sekali di akhir.
Program bonus 14 byte - menggunakan inputnya sebagai karakter keluaran. Secara teoritis, ini tidak akan menghasilkan bentuk yang tepat pada 10, karena memiliki 2 digit, tetapi mencoba menjalankan yang membuat browser saya mogok.
sumber
Ruby , 72 byte
Output adalah daftar string, satu string per baris.
Cobalah online!
sumber
Haskell , 50 byte
Cobalah online!
Membuat kisi 0 dan 1. Satu karakter lebih panjang untuk spasi dan H.
Haskell , 51 byte
Cobalah online!
sumber
Jelly ,
171615 byteIni adalah program lengkap yang mencetak array 2D 1 dan 0 .
Cobalah online! atau lihat output dengan H 's dan spasi.
sumber
APL (Dyalog Classic) , 14 byte
Cobalah online!
⎕
input yang dievaluasi n,⍳⎕⍴3
semua n-tupel dengan elemen dari 0 1 22|
mod 2×/¨∘.≥⍨
membentuk matriks dengan membandingkan setiap pasangan tupel a dan b - jika semua elemen a adalah ≥ elemen yang sesuai dari b, itu adalah 1, jika tidak 0sumber
SOGL V0.12 , 13 byte
Coba Di Sini!
sumber
R , 64 byte
Cobalah online!
Dikurangi oleh produk Kronecker, sebagai port yang tidak tahu malu jawaban Luis Mendo .
Footer mencetak hasilnya baik, tapi ini adalah fungsi anonim yang mengembalikan
matrix
dari1
untukH
dan0
untuk ruang.sumber
Java (OpenJDK 9) , 135 byte
Cobalah online!
Mengembalikan
int[][]
dengan0
untukH
dan1
untukspace
. Ini sebenarnya "memahat" dindingH
bukannya "menumpuk"H
.Penjelasan
sumber
V , 22 byte
Cobalah online!
Hexdump:
Ini pada dasarnya adalah pendekatan yang sama persis seperti karpet Sierpinski dan The Fractal Plus on Anarchy Golf.
sumber
Python 2 , 70 byte
Cobalah online!
Fungsi menampilkan daftar string.
Python 2 , 84 byte
Cobalah online!
Menggunakan template yang sama dengan pola fraktal 3 * 3 lainnya:
sumber
J ,
2522 byteCobalah online!
sumber
Haskell,
73676455 byteIni hanya berfungsi dengan versi terbaru
Prelude
, karena diekspor<>
dariData.Semigroup
. Untuk menjalankannya di TIO, tambahkan impor seperti yang dilakukan di sini: Coba online!Edit: -9 byte terima kasih kepada @ Potato44.
sumber
(#)
keg#f=g<>f<>g
jika Anda menggunakan GHC 8.4. Ini karenaSemigroup
sekarang di awal.Perl 5 ,
4644434140 byte1 penghitungan berdasarkan. Penggunaan
0
dan1
untukH
dan ruang, memiliki terkemuka1
(ruang)Didasarkan pada ide klasik oleh mtve.
Cobalah online!
sumber
\321
perlu, karakter apa pun tampaknya berfungsi.//
dan$'
juga bisa mengganti//g
dan$`
, tapi saya tidak yakin itu mengarah ke perbaikan.\321
sedikit komplemen.
(digunakan untuk menghasilkan pola fraktal lain). Tapi saya menjatuhkan bit-komplemen jadi tentu saja saya tidak membutuhkan itu lagi. Saya menggunakan//g
dan $ `jadi saya bisa dengan mudah menguji kode dari commandline (//
dan$'
tidak mengarah ke gain yang saya lihat, byte yang diperoleh terbuang dengan spasi atau!
lagi)Vim -
665654 byteA @ c H esc " r d ^ q c { ctrl-v } " a y g v r space g v d " a P P " a P V G " b y P g v ctrl-v $ d " a P . . G " b p q @ r
Input diambil sebagai angka dalam buffer.
sumber
:set nowrap
untuk melihat hasilnya, untuk 4 dan lebih banyak.APL (Dyalog Unicode) ,
3834 byte SBCSOutput adalah array 2 dimensi dengan
1
mewakili H dan0
mewakili ruang.Cobalah online!
sumber
f←
dan menghitung karakter sebagai masing-masing 1 byte: codegolf.meta.stackexchange.com/questions/9428/... Ini juga dianggap sah untuk mengambil input dari⎕
, yaitu ganti⍣⍵
dengan⍣⎕
dan lepaskan kawat gigi dfn luar.1 1⍴1
dapat ditulis sebagai⍪1
dan kemudian parens di sekitar operator menjadi tidak perlu. Jika Anda terbiasa dengan kereta - mereka bisa banyak membantu di sini.⍨
adalah teman Anda:(⍵,(0×⍵),⍵)
=>(⍵,⍵,⍨0×⍵)
Arang ,
3029 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Cetak aslinya
H
.Ulangi
size
kekuatan pertama 3.Pindahkan kursor kembali ke asal.
Trim
membutuhkan ini, karena pencetakan asliH
dan pantulan di bawah ini menggerakkan kursor.Salin iterasi sebelumnya ke bawah, buat domino.
Salin hasilnya ke bawah dan ke kanan, buat tetromino.
Potong kanvas ke bawah menjadi
L
triomino bentuk.Refleksikan kanvas secara horizontal dan vertikal dengan tumpang tindih, menyelesaikan iterasi.
Arang lebih baik pada beberapa fraktal daripada yang lain. Ini ide yang serupa, tetapi hampir setengah ukurannya:
Cobalah online! Tautan adalah untuk mengucapkan versi kode.
sumber
Python 2 , 143 byte
Cobalah online!
-30 byte berkat rekursif
kode wrapper adalah untuk pemformatan yang bagus. itu berfungsi dengan baik jika Anda menghapusnya
sumber
PHP 7,
125109 bytependekatan yang berbeda: Alih-alih bersarang dan meratakan hasilnya secara rekursif, ini hanya memotong baris dan kolom dan menggunakan loop ke-3 untuk mengetahui apakah akan mencetak
H
atau_
.Sunting: Disimpan banyak dengan menggabungkan loop baris / kolom ke satu, meskipun butuh sedikit untuk mendapatkan penurunan untuk loop dalam yang benar. Membutuhkan PHP 7 untuk operator listrik.
Cobalah secara online !
mencetak hasilnya. Jalankan sebagai pipa dengan
-nR
.fungsi yang memenuhi syarat,
147130 bytemengembalikan satu string. Jalankan dengan konfigurasi default (tidak
php.ini
).sumber
%3==1
dapat diganti dengan%3&1
.Jelly , 25 byte
Cobalah online!
Meskipun ini lebih lama dari pengiriman Jelly yang ada , ia mencoba untuk menghasilkan setiap karakter secara mandiri hanya dari koordinat.
Khususnya, jika koordinatnya adalah
masing.
(x,y)
(1-indexing), tautan pertama akan kembali0
dan1
sesuai dengan masingH
-Juga, 5 byte
ị⁾ HY
digunakan untuk memformat, jadi program ini (20 byte) juga valid (tetapi hasilnya tidak terlihat bagus):sumber
T-SQL ,
267261 bytesumber
PHP 7, 153 byte
Jalankan dengan konfigurasi default (tidak
php.ini
) atau coba online .sumber
Perl, 64 byte
Membutuhkan
-p
, input diambil dari stdin. Output adalah HH
s.Cobalah online!
sumber
-p
lagi (saya pikir itu terlalu toleran untuk perl, tapi begitulah sekarang)PHP (5.6+), 94 byte
Digunakan dengan
-F
opsi baris perintah. Mengasumsikan default juru bahasa (-n
). Tidak akan berfungsi pada versi sebelum 5.6, karena operator daya.Penggunaan sampel
Cobalah online!
sumber
$s.$s.$s
bukan$s.=$s.$s
. Dan Anda tidak perlu<?
dengan-R
bukan-F
.-R
, bisakah Anda menunjukkan kepada saya penggunaan lengkap?-nF
:echo <input> | php -nR '<code>'
.-r
hampir sama:php -nr '<code>' <arguments>
.preg_filter
adalah untuk mengulangi setiap baris sambil mempertahankan baris baru, kira-kira setara denganjoin("\n",array_map(function(){...},split("\n",$s.$s.$s)))
, tetapi jauh lebih sedikit verbose. Saya awalnyastr_pad
tetapi berubah menjadisprintf
karena itu satu byte lebih pendek:'"\0".str_pad($$i++/$i&1?"\0":"",$i)."\0"'
CJam -
103978776 byteProgram ini melakukan rekursi "handcoded" yang sangat verbose. Tidak ada perkalian matriks cerdas. Sepanjang rekursi, di atas tumpukan ada array yang mengumpulkan output yang diperoleh dari panggilan induk. Tepat setelah setiap set panggilan rekursif, output dari panggilan rekursif perlu di-zip bersama-sama, untuk memastikan output benar ketika tumpukan dicetak secara linier di akhir program. Tumpukan argumen yang diteruskan rekursi disimpan dalam variabel
A
.Coba online
sumber
K (ngn / k) , 18 byte
Cobalah online!
sumber
Japt , 23 byte
Cobalah online!
Dibongkar & Cara kerjanya
Menggunakan pola transpos
jauh lebih mudah untuk ditangani daripada
H
pola aslinya , setidaknya di Japt di manaI
dapat dilakukan dengan pengulangan string dan padding-tengah.sumber
C ++ 11 - 138 byte
Namun, tidak yakin apakah jawaban ini memiliki sintaks yang valid.
Tidak digabungkan dengan kode kerja
sumber