Banyak dari kita yang akrab dengan permainan Tron. Anda mengontrol "siklus cahaya" yang ditempatkan pada kisi. Sepeda ringan selalu bergerak maju (meskipun Anda mengontrol arah) dan meninggalkan jejak permanen di belakangnya. Jika Anda mengalami jejak, Anda menabrak!
Tujuannya di sini adalah untuk menentukan apakah jalur yang diberikan adalah loop yang valid, yaitu, ia kembali ke titik awal tanpa "menabrak". Untuk melakukan ini, kita asumsikan kita mulai dari titik (0,0)
. Input diberikan dalam bentuk N2E1S2W1
, dengan serangkaian arah mata angin ( N
is north
, E
is east
, and sebagainya), masing-masing diikuti oleh jarak untuk menempuh arah itu. Dalam contoh ini, Anda akan bepergian
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
Jalan dianggap sah jika berakhir (0,0)
tanpa mengunjungi koordinat lain lebih dari sekali (mengunjungi (0,0)
tepat dua kali. Sekali di awal, dan sekali di akhir). Perlu diingat daripada dalam contoh di atas, untuk mendapatkan dari (0,0)
ke (0,2)
, kita tentu kunjungi (0,1)
juga.
Contoh lain:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
Keluaran Anda bisa dalam bentuk apa pun asalkan memberikan hasil yang sama untuk nilai apa pun yang benar atau salah.
Input dapat diambil sebagai string atau sebagai daftar karakter, baik dalam bentuk S1N2E3
... atau SNNEEE
... Juga tidak ada batasan pada ukuran kisi, tetapi anggap input tidak akan meluap apa pun. Selama kode tersebut pada dasarnya baik, itu tidak penting untuk menangani kasus seperti N99999999999999
.
CATATAN: Anda mungkin mengevaluasi kasus N1S1
, E1W1
, S1N1
, dan W1E1
namun Anda ingin. Itu adalah jalur yang secara teknis valid, tetapi bertentangan dengan semangat "Tron" tantangan.
Mencetak gol
Ini kode-golf , jadi jawaban terpendek menang!
sumber
N1S1
harus benar untuk konsisten dengan definisi Anda karena mencapai(0, 0)
dua kali dan(0, 1)
sekali, yang berlaku di bawah definisi Anda.N
sebagai1j
,E
sebagai1
,S
sebagai-1j
, danW
sebagai-1
?N99999999999999
Jawaban:
Pyth ,
4439 byteSuite uji .
sumber
JavaScript,
247200 byten
adalah fungsi dari string inputs
yang mengembalikan1
true dan0
for falseIni versi yang tidak dikoleksi untuk referensi / penjelasan:
sumber
contains
bukan fungsi dalam dialek javascript apa pun. Bisakah Anda menentukan dialeknya?Python 3 ,
236161150 byteCobalah online!
-75 byte terima kasih kepada Leaky Nun
-11 byte terima kasih kepada Leaky Nun Atau, jika kita diizinkan untuk mengambil input sebagai daftar bilangan kompleks yang diterjemahkan dengan run length:
Python 2 ,
8573 byteCobalah online!
-12 byte terima kasih kepada Tn. Xcoder / -9 byte terima kasih kepada Leaky Nun (digabung menjadi satu edit)
Ini terasa terlalu lama bagiku lol
sumber
Jelly ,
1412 byteIni adalah pertama kalinya saya bermain golf di Jelly. Saran diterima.
Input adalah sebagai array dari
[direction, distance]
berpasangan, di mana arahnya diberikan sebagai bilangan kompleks.Penjelasan:
sumber
Retina , 86 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Ubah angka menjadi unary.
Run-length mendekode huruf.
N111
perlu diubah menjadiNNN
, jadi satu dikurangi dari setiap nomor unary dan kemudian masing-masing 1 menduplikasi surat sebelumnya.Hasilkan semua awalan (yaitu titik di jalan) sebagai baris terpisah. Ruang diawali untuk menghindari masalah dengan garis kosong.
Urutkan semua huruf di setiap baris ke dalam urutan dan kemudian hapus pasangan yang cocok. Kami berakhir dengan kode unik untuk setiap titik di grid.
Periksa salah satu dari dua hal: a) titik terakhir tidak berakhir pada spasi (mis. Loop tidak menutup), atau dua titik duplikat di jalur. Jika jalur valid, semua pemeriksaan gagal dan hasilnya nol.
Balikkan hasilnya.
sumber
Perl, 140
Bekerja dengan input string. Mungkin saya bisa mempersingkat dengan array, tapi saya ragu. Senang untuk bantuan golf lebih lanjut :)
sumber