Refleksi ASCII dalam sebuah kotak
Anda mungkin semua tahu Hukum Refleksi , dalam tantangan ini Anda akan memvisualisasikan lintasan bola di dalam kotak.
Terkait: ASCII Ball in Box Animation dan ASCII Doodling: Laser in a Box
Tugas
Anda diberi tiga pasangan bilangan bulat W,H, x,ydan dx,dy- yang pertama mewakili ukuran kotak, yang kedua posisi awal dan pasangan ketiga adalah arah di mana bola mulai bergerak.
Tugasnya adalah untuk memvisualisasikan pergerakan bola sampai berhenti bergulir, ini terjadi begitu bola berada pada posisi yang sebelumnya atau menyentuh sudut.
Karakter *harus memvisualisasikan lintasan bola dan +menandai posisi akhirnya, sisa kotak harus terdiri dari (spasi).
Contohnya
Untuk menjabarkannya sedikit lebih jelas, dalam contoh-contoh ini _akan mewakili spasi putih. Juga tahap perantara hanya ada di sini untuk klarifikasi, Anda hanya perlu menampilkan tahap terakhir, contoh-contoh ini 1-indexed.
Diberikan W = 3, H = 5, x = 3, y = 2dan dx = -1, dy = 1:
___ ___ ___ ___
__* __* __* __*
___ -> _*_ -> _*_ -> _+_
___ *__ *__ *_*
___ ___ _*_ _*_
- Bola dimulai pada titik
(3,2)dan - bergerak ke arah
(-1,1), menabrak dinding di(1,4)dan - tercermin, arah baru
(1,1). Itu menabrak dinding lagi(2,5) - di mana ia akan tercermin. Arah baru adalah
(1,-1)dan langsung mengenai dinding(3,4), - lagi itu akan tercermin ke arah
(-1,-1). Sekarang akan melakukan perjalanan melalui poin(2,3),(1,2), tercermin dll. Tetapi karena sudah mengunjungi posisi(2,3)itu berhenti di sana.
Contoh ini menunjukkan, apa yang terjadi jika bola menyentuh sudut. Untuk ini W = 7, H = 3, x = 1, y = 3dan dx = 1, dy = -1:
_______ __*____ __*____ __*___+
_______ -> _*_____ -> _*_*___ -> _*_*_*_
*______ *______ *___*__ *___*__
- Posisi awal adalah
(1,3), - bola sekarang bergerak ke arah
(1,-1)sampai menyentuh dinding(3,1) - di mana ia tercermin ke arah baru
(1,1). - Pada saat
(5,3)itu akan tercermin dan melakukan perjalanan ke arah yang baru(1,-1). Tiba-tiba berhenti(7,1)karena itu sudut.
Diberikan W = 10, H = 6, x = 6, y = 6dan dx = 1, dy = 1:
__________ __________ ________*_ ________*_ ________*_ __*_____*_ __*_____*_
__________ _________* _________* _______*_* _______*_* _*_____*_* _*_*___*_*
__________ -> ________*_ -> ________*_ -> ______*_*_ -> *_____*_*_ -> *_____*_*_ -> *___*_*_*_
__________ _______*__ _______*__ _____*_*__ _*___*_*__ _*___*_*__ _*___+_*__
__________ ______*___ ______*___ ____*_*___ __*_*_*___ __*_*_*___ __*_*_*___
_____*____ _____*____ _____*____ ___*_*____ ___*_*____ ___*_*____ ___*_*____
Spesifikasi input
Input terdiri dari tiga pasangan integer W,H, x,ydan dx,dy, Anda dapat mengambil input dalam format apa pun yang paling masuk akal untuk bahasa pemrograman Anda dan urutannya tidak masalah. Namun input yang diterima tidak boleh meng-encode informasi lebih banyak dari pasangan ini (lihat jawaban ini sebagai contoh).
W,H >= 1x,ybaik1-indeks (1 <= x <= Wdan1 <= y <= H) atau0-indeks (0 <= x < Wdan0 <= y < H), harap tentukan pengindeksan apa yang Anda pilihdx,dyselalu-1atau1
Input yang tidak valid dapat diabaikan.
Spesifikasi keluaran
- Tidak ada spasi putih terkemuka dibolehkan
- Ruang putih trailing dapat dihilangkan
- Ruang putih trailing tidak diperbolehkan jika tidak cocok dengan kotak
- Mengejar baris baru ( setelah semua jalur terkait keluaran) diizinkan
Mari kita ambil contoh pertama:
(good by 2)
__*
_+ (good by 2)
*_*_ (bad by 3)
(bad by 4)
_*_
(good by 4)
Uji kasus
Dengan asumsi input memiliki format (W,H,x,y,dx,dy)dan 1-indeks telah dipilih, berikut adalah beberapa kasus uji (sekali lagi _ada di sini untuk mewakili spasi putih!):
Input: 1,1,1,1,1,1
Keluaran:
+
Input: 3,3,3,3,1,1
Keluaran:
___
___
__+
Input: 3,3,3,3, -1, -1
Keluaran:
+__
_*_
__*
Input: 7,3,1,3,1, -1
Keluaran:
__*___+
_*_*_*_
*___*__
Input: 10,6,6,6,1,1
Keluaran:
__*_____*_
_*_*___*_*
*___*_*_*_
_*___+_*__
__*_*_*___
___*_*____
Input: 21,7,6,4, -1, -1
Keluaran:
__*_______*_______*__
_*_*_____*_*_____*_*_
*___*___*___*___*___*
_*___*_*_____*_*___*_
__*___*_______+___*__
___*_*_________*_*___
____*___________*____
Ini adalah kode-golf , sehingga program / fungsi terpendek menang, tetapi segala upaya dihargai.
1menghilangkan batasan -indeks jika Anda suka (?) Tentang pertanyaan pertama itu, tidak yakin apa yang Anda maksud tetapi kedengarannya ok. Saya kira segala sesuatu yang merupakan bijection ( {-1,1}x{-1,1} ≡ "Your space") akan baik.