Saya pikir ini akan menjadi tantangan yang bagus: http://adventofcode.com/2016/day/1
Deskripsi tugas
Diberikan urutan rotasi dan jarak mengikuti pola (L | R) [1-9] [0-9] *, berikan jarak manhattan antara titik awal dan titik akhir, yaitu jumlah minimum gerakan vertikal dan horizontal pada sebuah kotak.
Contohnya
Misalnya, jika kami menganggap Anda mulai menghadap ke Utara:
Mengikuti R2, L3 membuat Anda 2 blok Timur dan 3 blok Utara, atau 5 blok jauhnya. R2, R2, R2 membuat Anda 2 blok karena Selatan dari posisi awal Anda, yang berjarak 2 blok. R5, L5, R5, R3 membuat Anda tinggal 12 blok jauhnya.
Rincian teknis
Anda dapat memilih pemisah di antara gerakan (misalnya: "\ n", ",", atau ","). Anda harus memberikan jawaban sebagai bilangan bulat di basis 10.
Bukan duplikat!
Ini bukan duplikat karena berbagai alasan:
- Bergerak tidak sama. Ini rotasi , bukan arah.
- Saya ingin jarak Manhattan, bukan euclidian.
Jawaban:
Python 3,
10999104101 byteIni adalah jawaban sederhana yang menggunakan bilangan kompleks, dengan input sebagai string yang dipisahkan oleh spasi atau string yang dipisahkan dengan baris baru. Selamat datang saran bermain golf!
Sunting: -13 bytes berkat Labo. +5 byte untuk mengonversi ke int.
Tidak melakukanolf
sumber
PHP, 93 byte
kerusakan
sumber
Python 2, 86 byte
Melacak arus
x
dany
koordinat. Saat memutar, alih-alih memperbarui arah, putar nilai saat ini sehingga gerakan selalu ke arah x-positif. Bilangan kompleks terlalu mahal untuk mengekstrak koordinat dari.sumber
Python 2,
103102 byterepl.it
Input adalah string arah yang dibatasi ruang, mis
"R5 L5 R5 R3"
.Mencetak jarak Manhattan antara lokasi awal dan tujuan.
Bagaimana?
Dimulai pada asal-usul bidang kompleks,
l=0
;Dengan seperempat-hak kumulatif gilirannya counter,
c=0
;Untuk setiap instruksi,,
i
rotasi yang diuraikan adalah dengan membandingkan karakter pertama dari arah ke karakter'N'
, danc
disesuaikan.Jarak untuk melakukan perjalanan diuraikan dengan
int(i[1:])
dan instruksi diberlakukan dengan mengambil banyak langkah ukuran blok ke arah yang diberikan dengan mengambilc
kekuatan0+1j
dengan1j**c
.Jarak akhir Manhattan adalah jumlah jarak absolut dari titik asal dalam dua arah - imajiner dan nyata; tercapai dengan
abs(l.imag)+abs(l.real)
sumber
cmp
seperti jawaban saya, beri tahu saya dan saya akan menghapus.JavaScript (ES2016), 98
1002 byte disimpan thx @Neil
100 byte untuk ES6
Kurang golf
Tes (ES6)
sumber
s=>s.replace(/.(\d+)/g,(c,n)=>(d+=c<'R'||3,n*=~-(d&2),d&1?x+=n:y+=n),x=y=d=0)&&(x<0?-x:x)+(y<0?-y:y)
:, yang sekarang dua byte lebih pendek dari jawaban ES6 Anda, berkatc<'R'||3
dann*=~-(d&2)
trik .