pengantar
Clarence adalah petugas entri data yang bekerja di penyedia layanan internet. Tugasnya adalah secara manual memasukkan alamat IP semua pelanggan ISP ke dalam basis data. Dia melakukan ini menggunakan keypad yang memiliki tata letak berikut:
1
2
3
4
5
6
7
8
9
.
0
Jarak antara pusat tombol yang berdekatan secara horizontal atau vertikal tepat satu sentimeter. Misalnya, jarak antara pusat 3dan 9akan menjadi dua sentimeter. Jarak antara pusat 3dan 5akan cm2cm. Teorema Pythagoras cukup untuk menghitung jarak antara dua kunci.
Clarence, seperti yang mungkin Anda harapkan dari orang yang bekerja di ISP, menggunakan sistem pengetikan yang sangat lambat dan tidak efisien. Dia menggunakan satu jari dan mencari kunci, lalu menggerakkan jarinya ke kunci, lalu menekannya, dan mengulangi untuk semua digit dalam angka. Anda mungkin tahu gaya ini sebagai "sistem pencarian elang" karena jari mencari di atas keyboard untuk tombol yang benar sebelum terjun untuk menekan tombol, seperti elang yang mencoba membunuh.
Misalnya, inilah cara Clarence mengetikkan nomor 7851
:
- Dia mulai jarinya 7dan menekan tombol.
- Dia menggerakkan jarinya ke kanan 1cm ke 8dan menekan tombol.
- Dia menggerakkan jarinya ke atas 1 cm ke 5dan menekan tombol.
- Dia menggerakkan jarinya secara diagonal ke atas dan meninggalkan cm2cm ke 1dan menekan tombol.
Oleh karena itu total jarak yang Clarence pindah jarinya mengetikkan 7851
yaitu 1 + 1 + √2
yaitu sekitar 3.41cm.
Tugas Anda adalah menulis program yang menghitung jarak yang Clarence harus gerakkan jarinya untuk mengetik alamat IP yang berubah-ubah.
Deskripsi Input
Input adalah string yang akan di form
().().().()
di mana masing ()
- masing bilangan bulat dalam kisaran 0
- 999
. Ini mewakili alamat IP yang harus diketik oleh Clarence. Contoh input mungkin:
219.45.143.143
Saya juga ingin menunjukkan bahwa input seperti 0.42.42.42
atau 999.999.999.999
masih input yang valid, terlepas dari kenyataan bahwa mereka adalah alamat IP yang tidak valid. Jadi Anda tidak perlu memasukkan kode verifikasi alamat IP dalam program Anda.
Deskripsi Output
Keluarkan jarak yang harus digerakkan Clarence untuk mengetik alamat IP yang ditentukan. Bulatkan jawaban ke dua tempat desimal di mana diperlukan, dan gunakan cm
unit dalam hasil Anda. Output untuk input contoh adalah 27.38cm
(1 + √8 + √5 + 2 + 1 + √5 + 3 + 1 + √5 + √13 + 3 + 1 + √5).
Jawaban:
CJam,
464443383734 byteTerima kasih kepada @ user23013 untuk menyarankan
mh
, yang memungkinkan untuk menghemat 5 byte.Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
{3fmd~@-@@-mh}%
.mh
.Pyth,
383534 byteDemonstrasi.
Pengindeksan ke string ide mengambang berkat @ Dennis.
Penjelasan, pada input palsu
15.0
:z
. '15 ,0 'Kami memetakan daftar ini sebagai berikut:
m.jF.Dx`ciUTT1k3z
.UT
: Kami menghasilkan daftar[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.iUTT
: Selanjutnya, kami memperlakukan daftar ini sebagai angka 10 basis yang memberi kami123456789
.ciUTT1
: Selanjutnya, kami mengonversi angka ini menjadi float dengan floating point yang membaginya dengan 1, memberi123456789.0
.`
: Konversikan ke string.'123456789.0'
x k
: Ambil indeks karakter input dalam string itu.[0, 4, 9, 10]
..D 3
:.D
adalah fungsi divmod, mengeluarkan input pertama dibagi dan modulo'd oleh input kedua. Input kedua adalah 3, di sini. Ini memberikan lokasi fisik karakter pada numpad.[(0, 0), (1, 1), (3, 0), (3, 1)]
..jF
:.j
adalah pembangun bilangan kompleks.F
menerapkannya pada tuple.[0j, (1+1j), (3+0j), (3+1j)]
..: 2
: Sekarang, kami mengambil 2 entri substring dari daftar ini sehingga kami dapat menemukan jarak berpasangan.[[0j, (1+1j)], [(1+1j), (3+0j)], [(3+0j), (3+1j)]]
.-M
: Mengambil perbedaan dari dua bilangan kompleks.[(-1-1j), (-2+1j), -1j]
..aM
: Mengambil nilai absolut dari hasilnya. Ini adalah jarak antara lokasi keypad.[1.4142135623730951, 2.23606797749979, 1.0]
s
: Jumlahkan jarak.4.650281539872885
..R 2
: Membulatkan ke 2 tempat desimal.4.65
.+ "cm
: Tambahkan'cm'
ke ujung dan cetak.4.65cm
.sumber
PHP - 108 Bytes
Input diambil dari stdin. Yang
-.987654321
dikirim kestrpos
fungsi mengevaluasi'-0.987654321'
dalam konteks string.Penggunaan sampel:
sumber
C,
192177159 byteVersi yang diperbarui, sekarang menyelesaikan program menggunakan argumen baris perintah. Pada saat yang sama, peningkatan menjadi lebih pendek dari versi sebelumnya:
Tidak Disatukan:
Versi golf menggunakan preprocessor
#define
untuk mempersingkat beberapa kode yang diulang dalam versi lengkap.sumber
s
sebelum memeriksa yang*s
tidak nol. 3. OP mengatakan program di posnya. Saya tidak yakin apakah suatu fungsi diterima. 4. Dengan GCC, Anda tidak perlu menyertakannya. 5.sqrt
lebih pendek darisqrtf
. 6.pow(u-p,2)
lebih pendek dari(u-p)*(u-p)
. 7. Saya tidak yakin, tapi saya pikir menyimpan kedua koordinat dalam satu string dan pengaturanu=x[c]/3
danv=x[c]%3
harus lebih pendek.int
dapat digunakan tidak dideklarasikan. Tapi memang, dentang juga menerimanya dengan peringatan, jadi aku menyingkirkannya.p=u,q=v,G,r+=...
.JavaScript ( ES6 ), 132
I / O melalui sembulan. Jalankan cuplikan untuk menguji (khusus Firefox)
sumber
Python 3, 108 byte
Memang golfnya tidak terlalu bagus, tapi setidaknya ada hubungannya dengan PHP.
sumber
Ruby 135
139Uji secara online: http://ideone.com/2CIQa5
sumber
Python
199 171166Ada kode Python yang lebih pendek (108) untuk ini oleh SP3000:
https://codegolf.stackexchange.com/a/50854/41163
Penggunaan sampel:
Jalankan online: http://codepad.org/h9CWCBNO
Kode yang dikomentari
sumber
if
klausa pada satu baris, sepertiif i<1:c=3,1
<!-- language: lang-python -->