Kadang-kadang ketika saya mencoret-coret, saya menggambar persegi panjang, mulai dengan diagonal dari salah satu sudut, dan kemudian menelusuri garis dengan "memantulkan" setiap kali saya menekan sisi persegi panjang. Saya melanjutkan ini sampai saya menyentuh sudut lain dari persegi panjang (dan berharap bahwa aspek rasio persegi panjang saya tidak tidak rasional;)). Ini seperti menelusuri jalan sinar laser ke dalam kotak. Anda akan menghasilkan hasil itu dengan seni ASCII.
Sebagai contoh, perhatikan kotak lebar 5
dan tinggi 3
. Kami akan selalu mulai di sudut kiri atas. The #
tanda batas kotak. Perhatikan bahwa lebar dan tinggi mengacu pada dimensi bagian dalam.
####### ####### ####### ####### ####### ####### #######
#\ # #\ # #\ \# #\ /\# #\ /\# #\/ /\# #\/\/\#
# \ # # \ /# # \ /# # \/ /# # \/ /# #/\/ /# #/\/\/#
# \ # # \/ # # \/ # # /\/ # #\/\/ # #\/\/ # #\/\/\#
####### ####### ####### ####### ####### ####### #######
Tantangan
Mengingat (positif) lebar dan tinggi kotak, Anda harus menghasilkan hasil akhir dari penelusuran laser. Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah, argumen fungsi dan output hasilnya melalui STDOUT (atau alternatif terdekat), atau melalui fungsi mengembalikan nilai atau argumen.
Anda dapat menggunakan format daftar, string, atau angka yang mudah digunakan untuk input. Output harus berupa string tunggal (kecuali jika Anda mencetaknya ke STDOUT, yang tentu saja Anda lakukan secara bertahap). Ini juga berarti Anda dapat mengambil tinggi pertama dan lebar kedua - cukup tentukan format input yang tepat dalam jawaban Anda.
Tidak boleh ada spasi spasi awalan atau jejak pada output apa pun. Anda secara opsional dapat menampilkan satu baris baru.
Anda harus menggunakan ruang, /
, \
dan #
dan mereproduksi kasus uji persis seperti yang ditunjukkan.
Uji Kasus
2 2
####
#\ #
# \#
####
3 2
#####
#\/\#
#/\/#
#####
6 3
########
#\ /#
# \ / #
# \/ #
########
7 1
#########
#\/\/\/\#
#########
1 3
###
#\#
#/#
#\#
###
7 5
#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########
22 6
########################
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
# /\ /\ /\ /\ /\ /#
#/ \/ \/ \/ \/ \/ #
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
########################
X
akan diperlukan untuk penyeberangan. Mungkin lain kali. ;)Jawaban:
Pyth,
434139 byteCobalah online: Pyth Compiler / Executor . Masukkan angka dengan urutan sebagai berikut: tinggi baris pertama, lebar baris kedua.
Terima kasih kepada isaacg, yang membantu menghemat dua byte.
Penjelasan:
Solusi saya tidak melacak laser, menggunakan pola sederhana yang mencakup gcd. Jika
m, n
dimensi kotak, biarkand = gcd(m, n)
. Ukuran polanya persis2*d x 2*d
.Misalnya pola berulang untuk
7 5
aku s
(
gcd(7, 5) = 1
, ukuran pola adalah2 x 2
)Dan pola berulang untuk
22 6
aku s
(
gcd(22, 6) = 2
, ukuran pola adalah4 x 4
)Solusi saya melakukan hal berikut untuk masing-masing garis: itu hanya menghasilkan satu garis pola, mengulanginya beberapa kali dan memotongnya di akhir sehingga masuk ke dalam kotak.
sumber
X
mendukung "menugaskan" untuk string, Anda dapat mengubahm\
ke*d
dan menghapuss
.*\
bukanm\
sebentar, tetapi membuangnya karena memiliki ukuran yang sama. Tidak memikirkan variabeld
dan yang tidak perlus
.C, 256 byte
Saya mungkin bisa mendapatkan ini di bawah 200, dan saya akan menambahkan penjelasan nanti, tetapi saya mungkin punya makalah karena dalam beberapa jam saya harus melakukan sebaliknya.
sumber
J, 85 byte
Mari
g = gcd(w,h)
. Fungsi ini mengisi elemen-elemenw/g by h/g
matriks dengang by g
ubin, memiliki/
's dan\
' di diagonal dan anti-diagonal. Array 4D yang dihasilkan diubah menjadi 2D (bagian dalam kotak) kemudian dikelilingi dengan#
's. (Angka0 1 2 3
digunakan sebagai ganti[space] / \ #
dan nomor diubah menjadi karakter di akhir.)Perhitungan berbasis posisi langsung dari koordinat dalam mungkin dapat menghasilkan solusi yang sedikit lebih pendek.
Pemakaian:
Cobalah online di sini.
sumber
Kalkulator Desmos - Non Bersaing untuk Membantu Pengetahuan Lebih Lanjut
Cobalah online!
Input:
Menengah:
Formula, disingkat:
Output:
Bagaimana itu bekerja:
Program gagal memenuhi kriteria akhir - menghasilkan seni ASCII kotak dan garis, jadi saya mengajukan sebagai tidak kompetitif untuk informasi untuk membantu orang lain menyelesaikan tantangan. Perhatikan bahwa untuk membuat Desmos bekerja ketika c = 0 atau c = b, faktor offset kecil 0,01 diperkenalkan, karena Desmos tampaknya memiliki batas Mod (A, B) dari (0, B) alih-alih [0, B )
sumber