Tantangan ini terjadi di grid.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
Yang ini 10 x 10, tetapi bisa berupa bentuk persegi panjang.
Ada empat arah di kisi ini. Atas, bawah, kiri dan kanan.
Tugasnya adalah menggambar jalur yang dimulai dengan huruf besar arah awal. Dalam contoh ini, akan naik langsung dari U.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
Path akan naik ke atas dan terdiri dari karakter full-stop (.), Hingga menyentuh dinding, ketika akan diakhiri dengan tanda bintang (*).
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
Selain path dimulai, ada juga pengubah arah, diwakili oleh awal arah huruf kecil.
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
Juga, huruf besar X kita hambatan yang akan mengakhiri jalan.
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
Aturan
- Input adalah string yang terdiri dari bingkai, (terdiri dari |, - dan + karakter) yang berisi karakter yang menunjukkan lintasan mulai, pengubah arah, dan rintangan.
- Kode Anda harus menambahkan karakter berhenti penuh untuk mengikuti jalur yang dijelaskan oleh permulaan dan pengubah arah, dan tanda bintang ketika / jika jalan tersebut bertemu dengan tembok atau rintangan.
- Mungkin ada beberapa jalur yang dimulai.
- Kode masih akan berhenti tanpa kesalahan jika path menggambarkan loop.
- Jika jalur memenuhi jalur awal, itu akan bertindak sebagai pengubah arah.
- Tolong kode golf, kode byte rendah dan tidak ada celah standar.
- Saya selalu lebih suka tautan ke juru bahasa online.
Uji Kasus
1: Sederhana
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
2: Belok kanan
+----------+
| |
| |
| |
| r |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
3: Persimpangan
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . r..d |
| . . . |
| u....l |
| . |
| . |
| U |
+----------+
4: 4 Persimpangan jalan
+----------+
| D |
| |
| |
|R |
| |
| L|
| |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| . . |
|R........*|
| . . |
|*........L|
| . . |
| . . |
| U * |
+----------+
5: Loop Pertama
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r..d |
| . . |
| u..l |
| . |
| . |
| U |
+----------+
6: Pemula sebagai pengubah
+----------+
| |
| |
| |
| L |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
|*..L |
| . |
| . |
| . |
| . |
| U |
+----------+
7: Loop Lurus
+----------+
| |
| |
| |
| |
| r l |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r..l |
| . |
| . |
| . |
| U |
+----------+
8: Knot Ketat
+----------+
| |
| |
| |
| d l |
| r u |
| r u |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| d..l |
| .r.u |
| r.u |
| . |
| . |
| U |
+----------+
9: Sebuah Hambatan
+----------+
| |
| |
| |
| |
| r X |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
10: S Shape
+----------+
|r d |
| |
| XXXXXXXX|
| d l |
|ul |
|XXXXXXX |
| |
|R u |
| |
+----------+
+----------+
|r.....d |
|. * |
|. XXXXXXXX|
|.d......l |
|ul . |
|XXXXXXX . |
| . |
|R.......u |
| |
+----------+
11: Simpul 4-Arah
+----------+
| D |
| |
| r |
|R d |
| |
| u L|
| l |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| r.....*|
|R....d. |
| .... |
| .u....L|
|*.....l |
| . . |
| U * |
+----------+
12: Persimpangan Sibuk
+----------+
|rrrrr rrrd|
| rlrl |
|ul rrd |
|ruX X |
|udl ll |
|ull |
|rlr |
|rdr d |
|Uruull |
+----------+
+----------+
|rrrrr.rrrd|
|.rlrl .|
|ul rrd .|
|ruX.X. .|
|udl.ll .|
|ull. .|
|rlr. .|
|rdr..d .|
|Uruull *|
+----------+
13: Mulai Ke Tepi
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
14: Melintasi Jalan Mati
+----------+
| |
| |
| |
| R |
| |
| |
| |
| |
| U|
+----------+
+----------+
| *|
| .|
| .|
| R..*|
| .|
| .|
| .|
| .|
| U|
+----------+
Jawaban:
JavaScript (ES6),
191 183181 byteTerima kasih kepada @tsh karena telah membantu memperbaiki bug
Mengambil input sebagai matriks karakter. Keluaran dengan memodifikasi input.
Cobalah online!
Berkomentar
sumber
[...""+a].map
bisa membuat array dengan setidaknya panjang 2x. Saya tidak yakin apakah itu membantu.(a+0)[n]
tidak menyimpan byte, meskipunn
sekarang perlu diinisialisasi.Python 2 ,
283279293288279 byteCobalah online!
Mengambil daftar daftar.
Output dengan memodifikasi array input.
sumber
Perl 5,
203188166 byteTIO
Bagaimana itu bekerja
$s=$_
untuk menyimpan input ke dalam$s
mengembalikan pengubah huruf kecil.$_|=$s
karena bitwise atau dengan spasitidak akan berubah
.
dan*
, huruf kecilurld
akan dikembalikan dengan bitwise atau operasi./\n/;$n='.'x"@-"
untuk mendapatkan "lebar" dan$n
untuk mencocokkan karakter "lebar" kali$l='\K[ a-z](?=';$t='([-|X])?'
untuk mengurangi panjang regex;$l
untuk mencocokkan huruf kecilurld
atau spasi di jalan,$t
untuk mencocokkan terminator.Setelah penggantian:
(?| R[.*]*\K[ a-z](?=([-|X])?) | ([-|X])?\K[ a-z](?=[.*]*L) | D$n(?:[.*]$n)*\K[ a-z](?=$n([-|X])?) | ([-|X])?$n\K[ a-z](?=$n([.*]$n)*U) )
/e
ke eval,/s
sehingga.
(di dalam$n
) cocok dengan karakter baris baru$&eq$"?$1?'*':'.':uc$&
jika cocok ruang, jika termiator cocok*
jika.
sebaliknya huruf besar.sumber
$s
di footer.$s
digunakan untuk menyimpan input dan untuk mengembalikan huruf kecil karena dialihkan ke huruf besar saat menggambar jalanBersih , 409 byte
Cobalah online!
sumber
Python 2 , 250 byte
Cobalah online!
Mengambil daftar daftar string 1-char, sebagaimana diizinkan secara eksplisit oleh OP.
Mengubah daftar di tempat.
Untuk I / O yang lebih mudah, gunakan ini .
sumber