Tugas Anda adalah membuat program atau fungsi yang mengambil, sebagai input, bilangan alami ( n
) antara 1 dan 25 (inklusif) dan mencetak representasi isometrik dari slide dan tangga dengan n
jumlah anak tangga.
Spesifikasi tangga dan slide
Tangga selalu berorientasi di sebelah kiri dan slide di sebelah kanan. Kami melihatnya dari sisi tangga, jadi bagian dari slide dikaburkan di tiga tingkat teratas. Anak tangga diwakili oleh empat garis ( ----
) dan sisi tangga dan meluncur dengan garis miring ( /
dan \
). Berikut ini adalah diagram untuk mewakili pola ruang yang dibutuhkan untuk slide dengan lima anak tangga.
Slide Blank space count
/----/\ 1234/----/\
/----/ \ 123/----/12\
/----/ \ 12/----/1234\
/----/ \ \ 1/----/1\1234\
/----/ \ \ /----/123\1234\
Contohnya
>>1
/----/\
>>3
/----/\
/----/ \
/----/ \
>>4
/----/\
/----/ \
/----/ \
/----/ \ \
>>10
/----/\
/----/ \
/----/ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
Ini adalah kode-golf, jadi jawabannya dengan jumlah byte terendah menang.
Catatan: membuntuti spasi putih dapat diterima dalam output, asalkan tidak melebihi panjang garis.
Jawaban:
Retina ,
817252 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Penjelasan
Program ini terdiri dari empat tahap, yang semuanya adalah penggantian regex (dengan beberapa fitur khusus Retina). Saya akan menggunakan input
5
sebagai contoh untuk penjelasan.Tahap 1
Ini mengubah input
n
menjadin
spasi diikuti oleh/\ \
yang akan menjadi bagian atas tangga / slide:Untuk saat ini, kami hanya akan menunjukkan slide secara penuh dan mewakili tangga hanya dengan tangan kirinya
/
.Tahap 2
Sayangnya,
n
spasi lebih dari yang kita butuhkan, jadi kita menghapus karakter pertama lagi. Kami sekarang punya:Tahap 3
Saatnya memperluas struktur yang lengkap. Mengetahui di mana puncaknya, sudah cukup untuk membangun semuanya, karena kita bisa memperpanjangnya satu baris pada satu waktu, memindahkan tangga dan seluncuran dengan dua spasi.
The
+
memberitahu Retina mengulangi tahap ini dalam satu lingkaran sampai output berhenti berubah (dalam hal ini, karena regex berhenti pencocokan). Adapun regex itu sendiri, kami cukup mencocokkan/
pada baris terakhir dan semuanya setelahnya dan kami juga mencocokkan satu spasi di depannya, yang berarti ini tidak bisa lagi cocok setelah/
mencapai kolom pertama.Inilah yang kami gantikan dengan ini:
Jadi pada setiap iterasi, ini menambahkan satu baris ke string, sampai kita berakhir dengan ini:
Tahap 4
Yang tersisa hanyalah menaiki tangga dengan benar. Itu sangat sederhana, kami hanya mencocokkan
/
dan 5 karakter berikutnya dan memasukkan representasi tangga yang benar, dengan demikian menimpa slide atau spasi yang sudah ada di sana:sumber
V ,
38, 37, 36, 34, 33, 32, 31, 3029 byteCobalah online!
Saya mungkin mengejar ketinggalan dengan Osabie. Satu byte lebih pendek dari Osabie.Satu byte lebih pendek!\o/
Terikat dengan 2sable!Dalam berita lain, ini jelas merupakan tandukan dicoret terpanjang yang pernah saya buat.
Penjelasan:
Ini akan berjalan sampai terjadi kesalahan, yang berkat perintah "pindah ke kiri" ('h'), akan menjadi waktu 'arg1'.
Sekarang kita hanya perlu menambahkan kaki bagian dalam
Versi tidak bersaing (28 byte)
sumber
Pyth,
3935 bytePenjelasan:
Tes di sini
sumber
2sable ,
40363230 byteHmmm, V akan datang sangat dekat ...
Menggunakan pengkodean CP-1252 . Coba versi yang kompatibel dengan 05AB1E! .
sumber
:P
PowerShell v2 +,
999082 byteMengambil input
$n
, memulai perulangan dari1
ke$n
dengan|%{...}
. Setiap iterasi, kami membangun string. Kami mulai dengan jumlah ruang yang sesuai" "*($n-$_)
dan tangga yang sesuai"/----/"
.Untuk itu, kami menambahkan string lain yang telah diiris
[...]
dan-join
disatukan kembali. String kedua adalah slide, dan kami menganggap bahwa seluruh slide selalu terlihat. Ini jumlah ruang sebelum slide dimulai" "*($_+$i++)
, diikuti oleh slide itu sendiri"\ \"
. Ini diiris oleh rentang yang dihitung sebagai bagian dari "spasi plus slide" yang sebagian disembunyikan oleh tangga.Contohnya
sumber
:D
\golfing
Folder Anda harus sangat terorganisir._.
Python 2 -
797675 byteTerima kasih kepada Hubert Grzeskowiak karena "mendiskualifikasi" saya karena membuat program cetak saya benar-benar menyelamatkan 3 byte! Terima kasih juga kepada Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ karena telah menghemat 1 byte lagi!
sumber
def f(x):
denganx=input()
, dan hapus lekukan pada baris kedua. Ini menghemat 1 byte.Vim, 71 penekanan tombol
Ini adalah cara yang bodoh untuk melakukannya, tetapi ini sedikit menyenangkan. Input diberikan sebagai file teks dengan satu baris berisi integer. Ini sepertinya cukup golf, tetapi akan berlaku untuk saat ini ( edit: gaya karakter kontrol yang diganti berdasarkan permintaan ):
<c-v>
,<esc>
dan<cr>
semua penekanan tombol individu; ctrl + v, escape, dan carriage return (enter) masing-masing. Untuk versi yang sederhana untuk dicerna dengan literal yang benar, berikut adalah file yangladder.keys
dijalankanxxd
:Untuk mencobanya (dengan asumsi nix dengan alat yang sesuai) ambil yang di atas, jalankan melalui
xxd -r
dan dimasukkan ke dalam fileladder.keys
. Buat fileladder.txt
dengan integer di dalamnya. Lalu lakukan:sumber
^V
seperti di<c-v>
sini.bash, 61
di mana
^M
kereta kembali secara literalsumber
/
dan `\` di baris ke-4, dan 1 ruang lebih sedikit di antara tepi slide.JavaScript (ES6), 79 byte
Bekerja dengan mengambil serangkaian
n
ruang, kemudian melakukan beberapa penggantian eksotis untuk mendapatkan slide dengan dukungan, lalu mengganti dukungan dengan tangga.sumber
Ruby, 61 byte
Tidak disatukan
Saya bisa menyimpan dua byte dengan menggunakan
'%*s\ \^M%*s----/'
(di mana^M
literal carriage return) untuk string format, tetapi kemudian Ruby mencetak peringatan "warning: encountered \r in middle of line, treated as a mere space
". ¯ \ _ (ツ) _ / ¯Solusi sebelumnya (64 byte)
sumber
Batch, 194 byte
Ternyata cukup mudah: lekukan slide, hapus 7 karakter pertama, lekukan tangga, hapus ruang terkemuka. Bit terakhir ini memang melibatkan sedikit tipu daya!
sumber
Java, 116 byte
Sayangnya, Anda tidak dapat [dengan mudah] menduplikasi string di Java, jadi saya akhirnya menyalahgunakan fungsi format.
sumber
Scala, 95 byte
sumber
Haskell, 81 byte
sumber
do i<-[1..n];a(n-i)++"/----/"++drop 7(a(2*i)++"\\ \\\n")
menghemat dua byte.eacal , noncompeting, 386 bytes
Saya telah secara resmi membuat bahasa yang paling lisan mungkin.Saya membuat komentar di lelucon dan sarkasme. Tolong tenanglah. Petunjuk tentang cara menjalankan repo github yang tertaut di header.Tidak disatukan
sumber