Diberikan satu set kontur 2d tertutup yang tidak tumpang tindih (dipisahkan oleh setidaknya satu ruang bahkan pada diagonal) dengan panah yang berorientasi secara konsisten dalam arah searah jarum jam atau berlawanan arah jarum jam (masing-masing kontur memiliki arahnya sendiri) dan angka positif n
, pindahkan panah n
langkah-langkah di sepanjang kontur dalam arah masing-masing. Panah diwakili oleh > v < ^
masing-masing untuk arah kanan, bawah, kiri dan atas. Di sana karakter lainnya adalah -
(horizontal), |
(vertikal) dan +
(sudut). Saat panah berada di sudut, ia tetap mengikuti arahnya saat ini dan mengubahnya hanya setelah belokan diambil.
Akan selalu ada segmen lurus (atau spasi) antara dua sudut (seperti +-+
untuk horizontal dan serupa untuk vertikal) - dengan kata lain U
belokan tajam dilarang. Segmen antara sudut vertikal atau horizontal dan tikungan di sudut selalu 90 derajat.
Memasukkan:
- bilangan bulat positif -
n
- jumlah langkah - representasi ASCII dari kontur - dapat berupa string multiline, daftar string, daftar karakter, dan sebagainya.
Keluaran:
Kontur yang sama dengan semua panah menggeser n
langkah dalam arah keseluruhan setiap kontur.
Kasus uji:
1.
Memasukkan:
n
= 1
+----->->
| |
| v---+
| |
+---<-------+
Keluaran:
+------>+
| v
| +>--+
| |
+--<--------+
2.
Memasukkan:
n
= 2
+-----+ +---+
| | | |
+-->--+ | v
| |
+--->---+ |
| |
+------<<---+
Keluaran:
+-----+ +---+
| | | |
+---->+ | |
| |
+----->-+ v
| |
+----<<-----+
3.
Memasukkan:
n
= 3
+---+ +---+ +-------+
| | | v | |
^ | | | +-<-+ |
| | ^ | | v
| +---+ +-->----+ |
| |
| +-------+ +---+ |
| | | v | |
+---+ +---+ +---+
Keluaran:
+>--+ ^---+ +-------+
| | | | ^ |
| | | | +---+ |
| | | | | |
| +---+ v----->-+ |
| |
| +-------+ +---+ v
| | | | | |
+---+ +-<-+ +---+
4.
Memasukkan:
n
= 1
+--+
| |
| +---+
| |
+----+ |
| |
+-+
Keluaran:
+--+
| |
| +---+
| |
+----+ |
| |
+-+
5.
Memasukkan
n
= 4
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
Keluaran:
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
6.
Memasukkan:
n
= 1
^->
^ v
<<v
Keluaran:
^>+
^ v
<<v
Tulis fungsi atau program yang menyelesaikan tugas di atas. Kode terpendek dalam byte di setiap bahasa menang. Jangan berkecil hati dengan bahasa golf. Penjelasan algoritma dan kode sangat dihargai.
There will always be a straight segment (or a space) between any two corners (like +-+ for the horizontal and similar for the vertical) - in other words the sharp U turns are forbidden.
Jawaban:
JavaScript (ES6),
210 ... 182180 byte(m)(n)
Cobalah online!
Bagaimana?
Anda dapat mengikuti tautan ini untuk melihat versi sumber yang diformat.
Pembungkus
Perbarui metode
Kami tidak dapat memindahkan setiap panah satu per satu dengan aman karena kami akan menanggung risiko menimpa panah yang tidak diperbarui dengan yang diperbarui. Sebagai gantinya, kami terlebih dahulu menghapus semua panah dan menghitung posisi baru mereka. Kami menerapkan posisi baru di kedua kalinya.
Posisi baru diterapkan hanya dengan melakukan
eval(n)
.Petunjuk arah
$
Sudut
+
-
|
$
"$"
"$"
"$"
Versi animasi
Tampilkan cuplikan kode
sumber
K (ngn / k) ,
183 161157 byteCobalah online!
{
}/
ketika dipanggil dengan arg kiri int, ini akan menerapkan fungsi dalam{
}
n kali ke arg kananA:"^>v<"
panahD,:-D:(-1 0;!2)
Ya, ∆x untuk 4 arah mata angins:(#x;#*x)
bentuk input: tinggi, lebarc:~^x
countours - boolean matrix menunjukkan di mana non-spasi beradar:" -+|"c*+/'3'0,c,0
buat ulang matriks karakter dengan countour tetapi tanpa panah, dengan menghitung self + atas + bawah untuk setiap selc
dan mengganti 1->-
, 2->+
, 3->|
t:A?,/x
jenis panah: 0 1 2 3 untuk^>v<
, semua sel lain direpresentasikan sebagai0N
(nol)p:+s\&~^t
koordinat panah$[#p
;;:r]
jika tidak ada panah, kembalir
q:+p+/:D@4!(t^0N)+/:0 1 3
semua 3 posisi baru yang mungkin untuk setiap panah - jika terus maju, jika belok kiri, dan jika belok kananq:q@'*'&'~^x ./:/:q
untuk setiap panah pilih opsi pertama yang mendarat di countour@[,/r;s/+q;:;A@D?q-p]
ratakanr
dan letakkan panah di posisi baru dan dengan arah barus#
membentuk kembali ke bentuk aslinyasumber
Arang , 105 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Termasuk 22 byte yang digunakan untuk menghindari memerlukan format input yang rumit. Penjelasan:
Masukkan kontur dan jumlah langkah dengan nyaman.
Karakter arah digunakan beberapa kali sehingga string di-cache di sini. Indeks karakter arah dalam string ini dikenal sebagai arahnya.
Cetak kontur asli tanpa menggerakkan kursor.
Ulangi karakter dalam kontur.
Jika karakter saat ini adalah karakter arah ...
... lalu simpan arah dan posisi dalam daftar ...
... dan ganti karakter dengan karakter garis yang sesuai.
Kalau tidak, output karakter dan beralih ke karakter berikutnya.
Ulangi posisi yang disimpan.
Lompat ke posisi yang disimpan.
Ekstrak arah yang disimpan.
Ulangi jumlah langkah yang sesuai.
Temukan arah langkah selanjutnya, yang merupakan arah mana pun yang tidak terbalik atau kosong.
Ambil langkah ke arah itu. (Indeks arah arang untuk
Move
perintah adalah dua kali nilai arah saya.)Cetak karakter arah yang sesuai.
sumber
APL (Dyalog Unicode) , 111 byte SBCS
Cobalah online!
mirip dengan jawaban k saya
sumber