Kredit masuk ke tempat kredit jatuh tempo
Diberi dua digit, x, dan y, hitung lompatan horizontal atau vertikal terpendek untuk mendapatkan dari x ke y pada numpad standar, misalnya
789
456
123
00
Anda dapat dengan aman berasumsi bahwa semua input akan 0-9, dan Anda tidak harus menangani input yang tidak valid. Input mungkin nomor yang sama dua kali, yang memiliki jarak 0.
IO dapat dalam format apa pun yang masuk akal , dan celah standar dilarang. Jawaban terpendek dalam byte menang!
Sampel IO:
1, 4: 1
1, 8: 3
3, 7: 4
8, 2: 2
6, 1: 3
0, 9: 4
4, 4: 0
0, 4: 2
Jawaban:
Jelly , 11 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Python,
140114 byteSaya pengatur waktu pertama, jadi tolong bantu. Ini kode saya.
sumber
divmod
dapat membantu Anda, 5) alih-alihif cond:return A\nelse:return B
, lakukanreturn cond and A or B
.divmod
membantu? Saya tidak berpikir saya pernah menyimpan byte dengan itup,q=divmod(x,3);r,s=divmod(y,3)
, Dhruv dapat menyimpan bytek(y//3-x//3)+k(y%3-x%3
dengan mengubah kek(r-p)+k(s-q)
. Selain itu, saya pikir Anda dapat menghapusint
dan hanya memiliki(max(x,y)%3==2)
p,q=x//3,x%3
selalu lebih baik daripadap,q=divmod(x,3)
, bahkan dalam Python 3Jelly, 13 byte
Cobalah online!
Port jawaban Pyth saya .
Suite uji.
sumber
JavaScript (ES6), 59
Sayangnya, tidak ada
divmod
dalam javascript. Bahkan, tidak ada bilangan bulatdiv
, dan tidak adamod
:%
tidak tepatmod
. Tetapi untuk sekali, perilaku aneh%
dengan angka negatif berguna.Uji
sumber
0
berada di sebelah kiri dan1
bukan di bawahnya, dan kemudian(a*b%3<0)
adalah penyesuaian licik untuk yang kedua0
. Bagus!Pyth,
222119 byteFGITW.
Suite uji.
Tabel konversi:
sumber
Julia, 56 byte
Cobalah online!
sumber
Python 2, 61 byte
Uji di Ideone .
Bagaimana itu bekerja
Jarak vertikal
Integer divisi selalu putaran bawah ke bilangan bulat terdekat dengan Python, menghasilkan hasil sebagai berikut untuk 10 dividen mungkin dibagi dengan -3 .
Dengan demikian, kita dapat menghitung jarak vertikal antara x dan y sebagai
abs(x/-3-y/-3)
.Jarak horizontal
Untuk kolom, kita dapat menghindari memperlakukan 0 sebagai kasus khusus dengan menggantinya dengan 1,5 , sehingga menempatkannya "antara" kolom pertama dan kedua.
Modulus (
%
) selalu memiliki tanda pembagi dalam Python, menghasilkan hasil berikut untuk 10 kemungkinan dividen modulo -3 .Jadi, dengan membulatkan (
//1
) hasilabs((x or 1.5)%-3-(y or 1.5)%-3)
, kita dapat menghitung perbedaan horizontal antara x dan y .sumber
Jawa
149160 karakterWajib: Karena ... Anda tahu ... Jawa! Bersenang-senang dengan Java di bawah
150161 karakter:Tidak digabung ke dalam kelas:
Bagaimana itu bekerja
Pertama-tama ia menangkap case standar di mana kita tidak harus pindah ke mana pun.
Sekarang kita dapat mengasumsikan bahwa kedua bilangan bulat berbeda, sehingga hanya yang lebih kecil yang dapat 0. Jika demikian, kami menghitung jarak dari kunci 1 dan 2 ke kunci lainnya. Kami akan menggunakan yang dengan jarak yang lebih pendek dan menambahkan satu langkah untuk mendapatkan dari 1 atau 2 ke 0.
Jika kita tidak ingin pergi ke / dari nol kita hanya perlu bergerak di kisi 3x3. Kita dapat menentukan kolom dan baris kunci dengan menggunakan mod atau div masing-masing. Kemudian kita menghitung jarak kolom dan baris dan menambahkannya. Ini adalah jarak yang perlu kita dapatkan dari satu kunci ke kunci lainnya.
Saya harap penjelasannya bisa dimengerti, silakan main golf :)
Pembaruan
Harus mengubahnya menjadi fungsi aktual karena menggunakan rekursi yang tidak mungkin dengan lambdas:, (
sumber