Kisah yang tidak perlu dan berbelit-belit
Saya berjalan di manhattan, blok demi blok dan kaki saya sudah lelah dan ingin kembali ke rumah.
Lalu lintasnya sangat buruk, tapi untungnya saya sangat kaya dan saya memiliki helikopter di hotel. Tapi saya ingin mereka tahu berapa banyak bahan bakar untuk mengemas penerbangan dan untuk itu mereka perlu tahu jarak langsung saya dari hotel. Saya ingat blok mana yang saya jalani dan bisa memberi tahu mereka rute apa yang saya ambil. Namun jarak ini harus tepat, jika terlalu pendek, kita tidak akan bisa kembali, terlalu lama dan saya sudah membeli bahan bakar yang tidak bisa saya gunakan.
Dapatkah Anda menulis saya sebuah program untuk mengubahnya menjadi jarak yang harus mereka tempuh dalam penerbangan mereka untuk menjemput saya?
Spesifikasi:
Tulis saya fungsi yang:
- Menerima daftar atau rangkaian blok yang berjalan relatif ke kisi sembarang:
- U p, D sendiri, L eft dan R ight.
- Dapat berupa huruf besar atau kecil - mis. jika lebih pendek untuk digunakan
u
daripadaU
maju. - Arah yang tidak valid memiliki perilaku yang tidak ditentukan - mis. arah X dapat menyebabkan kegagalan.
- Mengembalikan float / desimal / ganda yang dua kali jarak garis lurus dari titik asal.
Untuk ilustrasi dan klarifikasi:
Perjalanan saya bisa saja direkam dengan mudah "luluu..."
atau ['l','u','l'...]
tetapi harus dicatat sebagai Atas, Bawah, Kiri, Kanan.
Jawaban:
J, 17 karakter
Menggunakan fakta, bahwa kekuatan
j
mewakili arah yang tepat.'urdl'i.
ambil string dan hitung indeks (0 untuk 'u', 1 untuk 'r', ...)0j1^
berubah menjadi arah di bidang kompleks menggunakan kekuatan yang sesuaij
.+/
merangkum langkah-langkah tunggal2*|
dua kali modulusContoh:
sumber
Python 2.7
5658565148Dengan Dime Nomor Satu yang dicuri dari Scrooge McDuck , saya membuat kekayaan saya dan sekarang memiliki lebih banyak kekayaan daripada Gober.
Python 2.7 -
615350 (tidak sensitif huruf besar / kecil)Pelaksanaan
sumber
IndexError: list index out of range
. Bentuk apa yang harus dimiliki input?%5
tidak%8
. Oke, sekarang lebih masuk akal :)APL (29)
misalnya
Penjelasan:
+/'URDL'∘.=⍵
: lihat seberapa sering karakterURDL
muncul dalam argumen-⌿2 2⍴
: kurangiU
nilai dariD
nilai, danR
nilai dariL
nilai2 0j2×
: kalikan nilai vertikal dengan2
dan nilai horizontal dengan2i
+/
: jumlah|
: besarnyasumber
Ruby 1.9+ (67)
Contoh
sumber
perl6: 44 karakter
get.comb
mendapat satu baris input dan dibagi menjadi karakter<U R L D>
adalah daftar kata, karakter dalam hal ini(1,2,3) Z (4,5,6)
==(1,2), (2,5), (3,6)
, jadi ritsleting 2 daftar menjadi satu sama lain, membuat daftar parsel yang%()
berubah menjadi hash<<**>>
tidak berpasangan**
, memperpanjang daftar yang lebih pendek agar lebih panjang. Daftar pendek hanya terjadii
[+]
menjumlahkan semua elemen daftar,abs
mengambil modulus untuk bilangan kompleksYa, saya menghapus semua ruang yang memungkinkan.
sumber
Python 2.7 - 65
Bagus dan pendek, ini menggunakan bilangan kompleks untuk melewati pesawat:
Alat peraga untuk DSM dan Abhijit dalam pertanyaan lain yang menunjukkan kepada saya penggunaan
1j
untuk menghitung ini.sumber
1j
ditulis sebagaij
,-1j
seperti-j
? Juga, apakah ini menangani input atas dan bawah, atau hanya atas?j
dan unit imajinerj
2
alih-alih mengalikan hasil akhir.Mathematica
9249Calle layak mendapatkan kredit penuh untuk merampingkan kode.
Contoh
sumber
f@l_ := 2 N@Norm[Tr[l /. {"r" -> 1, "l" -> -1, "u" -> I, "d" -> -I}]]
cukuplah.2 Norm[(2. + 2. I) + "U" + "X"]
sebagai output untuk kode Anda.@
s, Anda mendapatkan dua karakter lebih sedikit.PHP, 67
Contoh:
sumber
Julia, 45
Mencuri
i
trik kekuatan. Juga semua karakter kecuali d memiliki nilai yang berfungsi sebagai kekuatan yang dapat diterimai
.sumber
J, 29 karakter
Hanya bekerja dengan arah huruf kecil dan karakter lain selain
r
,u
,l
, dand
akan menyebabkan untuk memberikan jawaban yang salah.Pemakaian:
Penjelasan:
'ruld'i.'uuuudrrrl'
Bentuki.
angka dua dari menemukan indeks item dari argumen kanan dalam argumen kiri. Pada kasus ini:/:~
urutkan daftar ini menjadi urutan menaik:#/.~
menghitung jumlah kemunculan setiap angka:_2[\
potong menjadi 2 baris:-/
kurangi bagian bawah dari atas+&.*:
meminjam trik dari jawaban J lain yang kulihat pagi ini , dan menguadratkan item-item itu, lalu menjumlahkannya, lalu melakukan root kuadrat. Lihat di bawah&.
dokumentasi:+:
gandakan hasilnya:sumber
R,
867456 karakterOk itu sebenarnya jauh lebih pendek dengan angka imajiner memang:
Pemakaian:
Solusi lama pada 74 karakter dengan xy coords:
Pemakaian:
Mengambil input sebagai stdin, harus lebih kecil dan dipisahkan dengan ruang. Gunakan koordinat xy mulai dari (0,0).
sumber
k (
5049)Contoh
sumber
Java, 185,
203,204,217,226Saya berasumsi bahwa setiap "U" adalah "1 ke atas", jadi dua unit ke atas adalah "UU"
Sunting: sakelar yang diganti untuk seandainya
Pindah untuk iterator
Tidak lagi menggunakan input sebagai string, melainkan array arah
sumber
T-SQL, 158
@S adalah string input dari tipe varchar (max)
sumber
ES6,
7769Definisi:
Pemakaian:
(Terinspirasi sebagian oleh jawaban Boann.)
sumber
for
pernyataan dengan beberapa ekspresi (badan fungsi panah yang berisi pernyataan memerlukan tanda kurung dan kembali eksplisit, tubuh yang hanya ekspresi tidak) ..JavaScript - 142 karakter - tanpa eval ()
di mana a adalah string seperti 'uudrrl'
gunakan seperti ini -
Tes di konsol browser.
sumber
C # - 90 karakter
Segar dari LINQPad.
Di mana input adalah string yang valid.
sumber
Befunge-93 (65)
Ini memiliki 65 karakter non-spasi (217 dengan spasi, meskipun itu dapat dikurangi dengan tata letak yang lebih kompak (untuk 69/176 karakter)). Dibutuhkan beberapa kebebasan dengan format output, tetapi tidak dapat disangkal akurat. Tampaknya tidak sepadan dengan upaya untuk mengimplementasikan / mencuri implementasi akar kuadrat.
echo 'UUDLLUU' | ./befungee.py ../man
output 2√13 (sebenarnya implementasi tampaknya memiliki masalah dengan ASCII yang diperluas meskipun).sumber
Matlab, 51 karakter
Pengajuan Matlab saya, hanya berfungsi dengan huruf captial. Ini menyenangkan! Bagian tersulit adalah mengubah string menjadi array angka kompleks untuk dijumlahkan.
Fungsi:
Pemakaian:
sumber
Javascript, 136
sumber
JavaScript, 89
Contoh:
sumber
C, 120
d("LULUURRRRURD")
->8.485281
sumber
JavaScript (tanpa ES6, tanpa eval) - 131
Uji:
sumber