Tujuan dari tantangan ini adalah untuk menghasilkan versi ASCII dari sampul album hebat ini oleh band rock Pink Floyd.
Persimpangan bata terbuat dari karakter _
dan |
. Batu bata memiliki lebar 7 dan tinggi 2 karakter, tidak termasuk persimpangan. Jadi unit dasar, termasuk persimpangan, adalah:
_________
| |
| |
_________
Setiap baris bata diimbangi oleh setengah lebar bata (4 karakter) sehubungan dengan baris sebelumnya:
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
Dinding parameter sebagai berikut. Semua parameter diukur dalam karakter termasuk persimpangan:
- Offset horizontal baris pertama
F
,. Ini adalah jarak antara margin kiri dan persimpangan vertikal pertama dari baris paling atas. (Ingat juga offset relatif setengah bata di antara baris). Mungkin nilai-nilainya yang0
,1
, ...,7
. - Total lebar ,
W
. Ini termasuk persimpangan. Nilainya adalah bilangan bulat positif. - Jumlah tinggi ,
H
. Ini termasuk persimpangan. Nilainya adalah bilangan bulat positif.
Bagian atas dinding selalu bertepatan dengan bagian atas baris. Bagian bawah mungkin kasar (jika tinggi total bukan kelipatan 3
). Sebagai contoh, inilah output untuk 6
, 44
, 11
:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
dan penjelasan visual parameter:
F=6
......
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
H=11 . | | | | | |
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
............................................
W=44
Aturan tambahan
Anda dapat menyediakan program atau fungsi.
Format input fleksibel seperti biasa. Output dapat melalui STDOUT atau argumen yang dikembalikan oleh suatu fungsi. Dalam hal ini mungkin string dengan baris baru atau array string.
Ruang tambahan atau baris baru diizinkan.
Kode terpendek dalam byte menang.
Uji kasus
Input dalam urutan yang diberikan di atas, yaitu: offset horizontal baris pertama, total lebar, tinggi total.
6, 44, 11:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
2, 20, 10:
____________________
| | |
| | |
____________________
| |
| |
____________________
| | |
| | |
____________________
1, 1, 1:
_
1, 2, 3:
__
|
|
3, 80, 21:
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
Jawaban:
Pyth,
4327 byteSaya perlu golf sangat ... nilainya terlalu memalukan.
Cobalah online.
Masukkan format
Format output
Penjelasan
sumber
C,
86858382 byte3 byte disimpan berkat Lynn.
1 byte disimpan berkat charlie.
sumber
for(i=0;++i<w*h;)
atau jikai
dibuat lokal (param trick):for(;++i<w*h;)
i;
dengani=1;
dan simpan satu byte lagi di for loop.for(i=1;i<w*h;++i)
->for(i=0;++i<w*h;)
menghemat 1C, 92 byte
Diminta sebagai
b(F, W, H)
.sumber
Perl, 63 byte
Menghitung shebang sebagai 2, input diambil dari stdin, dipisahkan dengan spasi putih.
Contoh Penggunaan
sumber
Haskell, 83 byte
Ini mendefinisikan fungsi infiks terner
!
yang mengembalikan daftar string. Contoh penggunaan:Bagaimana itu bekerja:
sumber
JavaScript (ES6),
9695 bytePenjelasan: Membuat string dari 7 spasi yang berulang ditambah
|
pola atau hanya yang diulang_
, tetapi setidaknya cukup lama untuk dapat mengekstraksiw
karakter yang diperlukan untuk setiap baris. Tiga baris pertama mulai dari posisif^7
dan kemudian tiga baris berikutnya mulai dari posisif^3
, jadi saya mencapainya denganmengubah bit 2menggunakan bit yang berlawanan 2 pada dua baris terakhir dari setiap blok 6 untuk penghematan 1 byte.f
pada setiap baris ketigasumber
MATL,
423633 byteFormat masukan adalah:
nCols
,offset
,nRows
Cobalah secara Online
Pendekatan di sini adalah kita mengatur "templat" yang kemudian kita indeks dengan menggunakan indeks baris (
[1 2 ... nRows]
) dan indeks kolom digeser oleh input pertama ([1 2 ... nCols] - shift
). Berkat pengindeksan modular MATL, ini akan secara otomatis menghasilkan output ubin. Sebagai catatan tambahan, untuk menghemat ruang, secara teknis saya bekerja dengan versi template yang telah diubah dan kemudian hanya mengambil transpose (!
) di akhir.Templatnya adalah ini:
sumber
Python 2,
9388 byteLevel indentasi ke-2 adalah TabMenyimpan beberapa byte berkat Leaky Nun dan beberapa modifikasi sendiri, juga sekarang memperbaiki offset:kode sebelumnya:
Panjang yang sama dengan lambda yang tidak disebutkan namanya:
sumber
F,W,H=input()
print
h/3%2*4
atauh%6/3*4
alih-alih4*(h%6>3)
print
pernyataan di baris yang sama denganfor
pernyataan"| "
lebih pendek daripada("|"+7*" ")
jika saya hitung dengan benarQBasic,
121109 byte(Diuji pada QB64)
Terima kasih kepada @DLosc karena telah memadukan
IF
pernyataan saya dengan matematika yang setara. Itu bernilai 12 byte.Metode umum:
Loop melalui setiap sel satu per satu dan menentukan apakah itu harus menjadi
_
,atau
|
tergantung pada lokasi.MOD
pernyataan dan logika boolean digunakan untuk menentukan batas-batas batu bata dan berapa banyak untuk mengejutkan batu bata.Kode:
Catatan Penggunaan:
QBasic mengharapkan input menjadi angka yang dipisahkan oleh koma.
sumber
IF
/THEN
menambahkan lebih banyak tanda kurung tetapi menghemat 12 byte:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
Java,
149,147,146, 143 byteGolf:
Tidak Disatukan:
sumber
> 0
mana yang bisa menyelamatkan dua karakter. Dan tentu saja Anda dapat menggabungkan deklarasi keint y=0,x
.int
sebelumx
dan menggunakanint y=0,x
di-for pertama sebagai gantinya untuk menyimpan 2 byte. Juga, saat ini Anda dapat berubahy%3==0
menjadiy%3<1
. (Hal ini tidak mungkin untuk...%8==0
ke...&8<1
meskipun, sejak operasi Anda bisa kembali angka negatif.)int...o
sebagai parameter dan ubahw
menjadio[1]
,h
menjadio[2]
dano
menjadio[0]
-3 byte.Rubi,
7266 byteTerima kasih @ Nilai Tinta untuk 6 byte!
Perkalian dan irisan string sederhana.
Berfungsi di Ruby 2.3.0 (Ideone versi 2.1 melemparkan kesalahan sintaksis).
sumber
i%6/4*4
sebagai ganti(i%6>3?4:0)
dan gunakan?_
sebagai ganti'_'
,?|
alih-alih'|'
.?
trik char tunggal, dan bagian "matematika" benar-benar mengesankan!((' '*7+?|)*w)[f^7^i%6&4,w]
menghemat dua byte.Julia:
150128116108107 byteuntuk dijalankan dengan argumen:
julia -e 'o=2;h=18;w=40;include("codegolf.jl")'
Jika Anda merasa panggilan dari bash curang dan Anda menginginkan fungsi di dalam interpreter, maka versi fungsinya adalah 117 byte :)
demo
(Terima kasih, @ glen-o untuk tip penghematan byte ekstra!)
sumber
h
danw
menggunakan batu bata, bukan dalam karakterrepmat([32],6,8)
), lalu mengganti nama repmat untuk mencukur karakter lain (g=repmat;b=g([32],6,8)
dan yang lebih barub=g(b,h,w)[1:h,o+1:o+w+1]
). Lalu gantireinterpret
denganmap
. Menurut hitungan saya, Anda akan menghemat 9 byte di antara perubahan ini.JavaScript,
172168165157147142137 bytesumber
s.repeat(w)
bukanArray(w).fill(s).join``
?Dyalog APL, 29 byte
↑⎕⍴⎕⍴¨a,4⌽¨a←'_',2⍴⊂⌽⎕⌽¯8↑'|'
tes:
6 44 11
,2 20 10
,1 1 1
,1 2 3
,3 80 21
⎕
input dievaluasi; sebagai ekspresi mengeksekusi dari kanan ke kiri, ia meminta untukF
,W
danH
agar¯8↑'|'
aku s' |'
⎕⌽
diputar, ia memotong karakter F dari depan dan menempatkannya di akhir stringyang lainnya
⌽
berarti terbalik'_',2⍴⊂
membuat 3-tupel dari '_' diikuti oleh dua salinan terpisah dari string sejauh inia,4⌽¨a←
tambahkan 4-rotasi dari semuanya sejauh ini, kita berakhir dengan 6-tuple⎕⍴¨
membentuk kembali setiap elemen dengan lebar⎕⍴
membentuk kembali ke ketinggian↑
mencampur vektor vektor menjadi sebuah matrikssumber
Sebenarnya ,
444340 byteIni sebenarnya pelabuhan algoritma dalam jawaban JS Neil . Saran golf diterima. Cobalah online!
Tidak melakukan pelanggaran:
sumber
PowerShell ,
10188 byteCobalah online!
sumber
Oktaf
8076 byteuntuk lari dari terminal:
octave --eval "o=2;h=18;w=44; codegolf"
(Atau, jika Anda berpikir panggilan terminal curang: p maka implementasi fungsi anonim membutuhkan 86 byte :)
Hubungi
f(2,18,44)
juru bahasa oktaf.sumber
Bash + Sed,
411395381370 byte:Nah, inilah jawaban pertama saya di Bash, atau bahasa skrip shell apa pun. Ini juga merupakan jawaban terpanjang di sini. Mengambil dalam urutan argumen baris perintah yang dipisahkan spasi dalam format
Offset Width Height
. Ini mungkin jauh lebih pendek daripada saat ini, jadi setiap tips dan / atau trik untuk bermain golf ini lebih dihargai.sumber
Delphi / Object Pascal,
305,302, 292 byteProgram konsol penuh yang membaca 3 parameter.
ungolfed
Sedihnya, Delphi tidak memiliki operator ternary dan ini adalah bahasa yang sangat verbose.
Kasus cobaan
Sunting: Bisa mencukur 3 byte dengan menggunakan byte sebagai tipe untuk semua variabel.
Sunting 2: Dan aplikasi konsol tidak perlu deklarasi program, -10
sumber