Rumah Santa Claus
catatan: Ini adalah tantangan pertama yang saya coba set. Sudah melalui Sandbox namun jika Anda menemukan sesuatu yang salah dengan itu jangan hanya downvote tetapi tinggalkan komentar sehingga saya bisa memperbaikinya.
Latar Belakang
Ada teka-teki anak-anak tua di mana tantangannya adalah menggambar sebuah kotak dengan atap dan salib di tengah tanpa mengangkat pena Anda dari kertas atau melewati garis apa pun dua kali.
Di Jerman dikenal sebagai "das Haus des Nikolaus" atau "The House of Santa Claus". Jujur saya tidak ingat apa yang kita sebut itu. Bagi siapa pun yang tidak terbiasa dengan teka-teki, detail lengkap tersedia di sini .
Berikut adalah representasi seni rumah ASCII.
/\
/__\
|\/|
|/\|
----
Tantangan
Tulis program atau fungsi untuk menggambar House of Santa Claus dalam bahasa pilihan Anda.
Kedengarannya terlalu mudah? Nah inilah tangkapan. Ini juga harus keluaran setiap tahap gambar dan mematuhi aturan dari teka-teki. Program Anda tidak diperlukan untuk mengambil masukan apapun. Rumah jadi harus terlihat persis seperti yang ditunjukkan di atas.
Menurut situs di atas ada 44 kemungkinan solusi. Anda dapat menggunakan salah satu dari mereka. Ini adalah tantangan seni ASCII sehingga Anda tidak diharuskan menghitung solusinya tetapi hanya menggambarnya.
Keluaran
Contoh dari output yang diperlukan dari salah satu dari 44 solusi ditunjukkan di bawah ini:
----
\
\
----
__
\
\
----
\
__\
\
\
----
/\
/__\
\
\
----
/\
/__\
|\
| \
----
/\
/__\
|\/
|/\
----
/\
/__\
|\/|
|/\|
----
Aturan
- Saya telah menambahkan 1 baris baru ekstra antara setiap output yang diharapkan untuk mencoba membuat persyaratan lebih jelas. Ini opsional. Sejumlah baris kosong di antara setiap output diizinkan.
- Output Anda hanya terdiri dari karakter /, \, -, _, dan spasi seperti yang ditunjukkan di atas. spasi diperbolehkan.
- Setiap baris dalam gambar Anda harus berlanjut dari akhir baris sebelumnya dan Anda tidak boleh mengulangi garis apa pun.
- Celah standar dilarang.
- Anda tidak diharuskan untuk mengeluarkan sajak yang disebutkan dalam tautan di atas.
- Ini adalah kode golf sehingga jawaban terpendek dalam byte akan menjadi pemenang.
Hasil
Beberapa jawaban yang bagus dan terima kasih dan hormat untuk semua yang diposting Saya memang mengatakan jumlah byte terendah tetapi saya telah menandai sebagai jawaban teratas tidak hanya untuk itu tetapi juga untuk penjelasan kode yang bagus. @Dennis bagus.
Jawaban:
Jelly ,
403936 byteCobalah online!
Bagaimana itu bekerja
adalah basis bijektif-250 literal; setiap karakter sesuai dengan titik kode di halaman kode Jelly . Hasilnya adalah bilangan bulat 13192938935880491074 .
mengubah bilangan bulat yang dihasilkan menjadi basis bijective 9, menghasilkan array bilangan bulat
[9, 6, 7, 9, 6, 2, 2, 7, 1, 5, 3, 8, 1, 3, 5, 8, 4, 4, 4, 4] . Bilangan bulat sesuai dengan urutan goresan, dengan pengecualian 9 , yang menunjukkan spasi.
membungkus array yang dihasilkan menjadi array tunggal, yang akan diperlukan untuk menambahkannya ke array yang akan kita hasilkan sekarang.
bekerja sebagai berikut.
¤
menggabungkan dua tautan ke kiri menjadi rantai niladik. Yang pertama,“|_/-\/\|‘
menghasilkan poin kode dari karakter yang ditentukan, menghasilkan [124, 95, 47, 45, 92, 47, 92, 124] . Lalu,Ė
sebutkan poin kode, menghasilkan[[1, 124], [2, 95], [3, 47], [4, 45], [5, 92], [6, 47], [7, 92] , [8, 124]] . Pasangan [n, c] berarti bahwa pukulan ke- n akan menjadi karakter ASCII dengan titik kode c .
menggabungkan array yang dihasilkan. Hasilnya adalah array
[[9,6,7,9,6,2,2,7,1,5,3,8,1,3,5,8,4,4,4,4], [1,124 ], [2,95], [3,47], [4,45], [5,92], [6,47], [7,92], [8,124]] .
melakukan pengurangan kumulatif (yaitu, menunjukkan semua langkah menengah), menggunakan transliterasi (
y
) dengan argumen swapped (@
). Pada langkah pertama, misalnya, kita mengganti masing-masing 1 dalam array asli dengan 124 , yang merupakan titik kode dari karakter | .meratakan hasilnya dan mengganti semua titik kode dengan karakter ASCII yang sesuai. Dalam semua langkah, ini akan menghasilkan beberapa karakter yang tidak patut dicetak dengan titik kode 1 hingga 9 .
menggunakan karakter spasi maksimal dengan karakter spasi, menggantikan semua karakter yang tidak patut dengan spasi.
membelah string yang dihasilkan menjadi potongan-potongan panjang empat dan bergabung dengan mereka dengan linefeed sebagai pemisah.
sumber
Javascript (ES6),
119116969291 bytesumber
Batch,
356344341337 byte|
Aturan mengutip Batch bodoh ... jika Anda ingin|
dalam variabel, Anda perlu mengutipnya dengan tiga^
s, jadi lebih murah untuk menggunakan@
dan menggantikannya pada output, meskipun untuk mencapai ini saya harus mulai dengan dinding kiri. Baris satu memiliki ruang tambahan.echo(
digunakan karenar
,c
, danf
variabel bisa menjadi kosong dan kami tidak inginECHO is off.
dicetak.Sunting: Disimpan 12 byte dengan menggunakan fallthrough untuk bagian terakhir. Disimpan 3 byte dengan menggunakan
for
loop untuk mencetak setiap bagian, ini berarti bahwa saya sekarang menggunakan|
s dalam variabel saya yang membuat kode sedikit lebih mudah dibaca. Disimpan 4 byte dengan menggunakan@
karakter eksplisit, bukan@echo off
. Saya pikir mulai dengan dinding kiri masih membutuhkan byte paling sedikit.sumber
echo:
lebih standar tetapiecho(
sepertinya Anda menyalahgunakan fitur bahasa, jadi +1.echo:
gagal dalam beberapa kasus tepi yang tidak jelas, tapi saya tidak tahu ada kasus kegagalan untukecho(
.foo.bat
di direktori saat ini,echo(\..\foo.bat
gema\..\foo.bat
tetapiecho:\..\foo.bat
dijalankanfoo.bat
.echo:.\foo.bat
akan memiliki efek itu sebagai gantinya. Apakah karena kesalahan tumpukan direktori, di mana "UP" dari direktori root adalah direktori saat ini?C, 118 byte
sumber
char*p
(tanpa spasi) dan ubah'B'
dan'J'
ke kode ASCII mereka./// , 112 byte
Cobalah online!
sumber
PHP,
9895 byteterinspirasi oleh solusi Arnauld
Catatan: Baris kode pertama memiliki spasi tambahan.
sumber
PHP dengan GD,
348338 byte (tidak bersaing)tidak persis apa yang diminta, tapi ...
simpan ke file, panggil di browser
kerusakan
Untuk menggambar rumah yang lebih besar, ubah
$w=9
ke lebar yang Anda inginkan.sumber