Oh tidak, saya tersesat dalam perjalanan untuk menemukan harta karun besar Marakov! Dan yang saya miliki hanyalah instruksi tidak berguna ini yang terlihat seperti S10R10D30
... Saya tidak tahu apa artinya! Bisakah kamu membantuku?
Tantangan
Diberikan arahan yang terdiri dari N E S W U D L R 1 2 3 4 5 6 7 8 9 0
, output seberapa jauh saya akan berasal dari tempat saya mulai ketika saya mengikuti arahan itu (yaitu Euclidean Distance).
N E S W
lihat saya berbelok ke Utara, Timur, Selatan, dan Barat;
U D L R
lihat saya memutar Atas, Bawah, Kiri, dan Kanan (Jadi NR
sama dengan E
, dan begitu juga SL
; SLL
sama dengan N
). Naik berarti terus maju; Turun berarti berbalik.
Setelah setiap arah huruf akan menjadi angka, yang sejauh mana saya akan pergi ke arah itu. N10E20
berarti pergi ke Utara 10 unit, lalu berbelok ke Timur, dan pergi ke Timur 20 unit.
Detail Input
- Input akan selalu dimulai dengan salah satu
NESW
(jadi input kosong tidak perlu dipertanggungjawabkan). - Dua instruksi surat berturut-turut diizinkan.
NE
harus ditafsirkan, "Belok Utara, lalu segera belok Timur". Itu sama dengan adilE
.SLL
adalah "Belok Selatan, lalu segera belok Kiri dua kali". Itu sama denganN
. - Semua angka akan berupa bilangan bulat (perhatikan bagaimana
.
tidak ada dalam rangkaian karakter) - Input hanya akan terdiri dari
NESWUDLR1234567890
(Jika perlu sesuatu yang lain, seperti '\ 0' dalam C; atau jika fungsi input bahasa Anda memiliki baris tambahan, atau sesuatu, itu bagus.)
Keluaran
- Norma.
- Jika menggunakan fungsi, harus menampilkan data numerik atau string.
- Harus akurat hingga 3 tempat desimal.
Uji Kasus
N10
:10
N10E10
:14.1421
N10S10
:0
NSEWUDLR10
:10
N100RR20E300D40L12
:268.7452
ERR10LL20UN30D100
:70.71067
Program Python yang tidak imajinatif yang saya gunakan untuk membuat ini.
Kemenangan
Ini codegolf, byte terendah setelah seminggu menang!
NESWUDLR1234567890
?Jawaban:
(Pergi) Ruby , 111 byte
Cobalah online!
Mengambil input pada STDIN, mengeluarkannya pada STDOUT.
Pada dasarnya, pendekatan ini menggunakan bilangan kompleks untuk menyimpan posisi saat ini, serta tumpukan (
c
), yang mengandung offset untuk setiap arah. Jika arah dalamURDL
, tumpukan diputar oleh indeks arah dalam string itu; jika arah dalamNESW
, itu diputar oleh indeks arah dalam string itu, ditambah indeks1
dalam tumpukan. Ini mengubah rotasi relatif ke posisi saat ini menjadi rotasi relatif ke posisi 1. Dalam keadaan apa pun, bagian atas tumpukan dikalikan dengan jumlah langkah dalam arah dan ditambahkan ke posisi saat ini.sumber
Python 3 , 137 byte
Cobalah online!
-9 byte terima kasih kepada Jonathan Allan
sumber
else:v+=d*n;n=0;h='NUERSDW'.find(i);d=d**(h%2)*1j**(~-h/2)
- catatan yangL
dapat dipotong dari ujung string yang ditemukan di sini karena-1%2
sama dengan7%2
dan1j**(-1)
sama dengan1j**3
.for i in input()+'U':x="NUERSDW0123456789".find(i);c=x<7;v+=d*n*c;n=[n*10+x-7,0][c];d=[d,d**(x%2)*1j**(~-x/2)][c]
JavaScript (ES6),
148142140138137134 byteTampilkan cuplikan kode
-2 byte: Gunakan
.search()
alih-alih.indexOf()
( @Shaggy )-1 byte: Atur ulang program untuk menghapus tanda kurung terlampir ( @Shaggy )
-3 byte: Gunakan
.replace()
sebagai ganti.match().map()
( @ThePirateBay )sumber
search
bukanindexOf
?a
kemap
, mengganti,
sebelumnyaMath
dengan&&
dan menghapus tanda kurung terlampir.Perl 5 , 149 + 1 (-p) = 150 byte
Cobalah online!
Dijelaskan:
sumber