Tantangan
Diberikan input dari string semua-huruf kecil [a-z]
, output jarak total antara huruf.
Contoh
Input: golf
Distance from g to o : 8
Distance from o to l : 3
Distance from l to f : 6
Output: 17
Aturan
- Celah standar dilarang
- Ini adalah kode-golf - jawaban terpendek dalam byte yang menang.
- Alfabet dapat dilintasi dari kedua arah. Anda harus selalu menggunakan jalur terpendek. (Yaitu jarak antara
x
danc
5).
Uji kasus
Input: aa
Output: 0
Input: stack
Output: 18
Input: zaza
Output: 3
Input: valleys
Output: 35
code-golf
string
number
arithmetic
Daniel
sumber
sumber
æ%
saat membaca built-in hari yang lain, dan itu cukup banyak dibuat untuk masalah (jenis) ini:OIæ%13AS
æ
dua).Haskell,
5756 byteContoh penggunaan:
sum.q.q.(zipWith(-)=<<tail).map fromEnum $ "valleys"
->35
.Bagaimana itu bekerja:
Sunting: @Damien menyimpan satu byte. Terima kasih!
sumber
q.q
)map
definisi kurang dariq
satu byteMATL ,
14, 10 byteCobalah online!
Terima kasih @Suever karena telah menghemat 4 byte!
Penjelasan:
Versi sebelumnya:
sumber
Python 3,
6968 byteKerusakan:
sumber
for
f=lambda a,b,*s:13-abs(13-abs(ord(a)-ord(b)))+(s and f(b,*s)or 0)
Java,
126120117 byteTerima kasih kepada @KevinCruijssen karena menunjukkan bug dalam versi asli dan menyarankan untuk membuat for-loop kosong.
Penggunaan
(26 + z[i] - z[i - 1]) % 26)
terinspirasi dari komentar oleh @Neil pada jawaban lain.(26 + ...)%26
melayani tujuan yang samaMath.abs(...)
karena...? e : 26 - e
.Tidak Terkumpul :
sumber
[edit] those details into the top of your post, with this markdown:
#Language, n bytes`-
sebelume
dalam versi yang tidak dikoleksi.e=z[i]-z[i-1];
Jadi Anda juga perlu pemain untuk(byte)
atau mengubahe
keint
. Juga, Anda dapat menghapus untuk loop kurung dengan menempatkan segala sesuatu di dalam untuk loop, seperti ini:int f(String s){byte[]z=s.getBytes();int r=0,i=0,e;for(;++i<z.length;r+=(e=z[i]-z[i-1])>0?e<14?e:26-e:-e<14?-e:e+26);return r;}
(PS: The terbalik untuk loop sayangnya sama panjang:int f(String s){byte[]z=s.getBytes();int r=0,i=z.length-1,e;for(;i>0;r+=(e=z[i]-z[--i])>0?e<14?e:26-e:-e<14?-e:e+26);return r;}
.JavaScript (ES6),
848279 byteDisimpan 3 byte berkat Cyoce:
Penjelasan:
Contoh:
Panggilan:
f('golf')
Keluaran:
17
Solusi sebelumnya:
82 byte berkat Neil:
84 byte:
sumber
Math.abs(...)
Anda bisa menggunakan(26+...)%26
; ini berhasil karena Anda membalik nilai di atas 13. (Saya pikir ini adalah bagaimana jawaban MATL bekerja.)p=parseInt;
dan kemudian menggunakanp()
alih-alihparseInt()
Ruby, 73 byte
sumber
PHP, 93 Bytes
sumber
05AB1E , 12 byte
Penjelasan
Cobalah online!
sumber
Perl, 46 byte
Termasuk +3 untuk
-p
(kode berisi'
)Berikan masukan pada STDIN tanpa baris akhir final:
stringd.pl
:sumber
Racket 119 byte
Pengujian:
Keluaran:
Versi detail:
sumber
(define(f s)
dengan(lambda(s)
, 2 byte lebih pendek (fungsi anonim baik-baik saja).(λ(s)
, yang jika di utf8 adalah 6 byte saya pikirC #,
8785 byteSolusi yang ditingkatkan - menggantikan Math.Abs () dengan trik add & modulo untuk menghemat 2 byte:
Solusi awal :
Cobalah online!
Sumber lengkap, termasuk uji kasus:
sumber
Sebenarnya, 21 byte
Didasarkan sebagian pada jawaban Ruby cia_rana .
Ada bug dengan
O
(dalam hal ini, peta ord () di atas string) di mana ia tidak akan bekerja dengand
(elemen bawah dequeue) danp
(elemen pertama pop) tanpa terlebih dahulu mengubah peta ke daftar#
. Bug ini telah diperbaiki, tetapi karena perbaikannya lebih baru daripada tantangan ini, maka saya tetap menyimpannya#
.Sunting: Dan jumlah byte sudah salah sejak September. Aduh.
Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Java 7.128 byte
Tidak disatukan
sumber
Pyth, 20 byte
Program yang mengambil input dari string yang dikutip pada STDIN dan mencetak hasilnya.
Cobalah online
Bagaimana itu bekerja
sumber
dc + od, 65 byte
Penjelasan:
Karena di dc Anda tidak dapat mengakses karakter string, saya menggunakan od untuk mendapatkan nilai ASCII. Ini akan diproses dalam urutan terbalik dari tumpukan (wadah LIFO) seperti:
Menjalankan:
Keluaran:
sumber
C,
82 86 8376 byteMengasumsikan string input setidaknya satu karakter. Ini tidak perlu
#include<stdlib.h>
Sunting: Argh, titik urutan!
Cobalah di Ideone
sumber
C, 70 byte
76 bytesumber
Scala, 68 byte
Kritik dipersilahkan.
sumber
C #, 217 byte
Golf:
Tidak Terkumpul:
Keluaran:
'a' adalah 97 ketika dikonversi ke byte, jadi 97 dikurangkan dari masing-masing. Jika perbedaannya lebih besar dari 13 (yaitu, setengah dari alfabet), maka kurangi perbedaan antara masing-masing karakter (nilai byte) dari 26. Tambahan menit terakhir "hasil pengembalian" menyelamatkan saya beberapa byte!
sumber
Python 3, 126 byte
Dengan daftar di pemahaman.
sumber
abs(x-y)
dengany-x
sejak panggilansorted
dibuatx < y
.PHP, 79 byte
sumber
Java, 109 byte
sumber