Вызов
Учитывая ввод строчной буквы [a-z]
, выведите общее расстояние между буквами.
пример
Input: golf
Distance from g to o : 8
Distance from o to l : 3
Distance from l to f : 6
Output: 17
правила
- Стандартные лазейки запрещены
- Это код-гольф - самый короткий ответ в байтах выигрывает.
- Алфавит может быть пройден в любом направлении. Вы всегда должны использовать кратчайший путь. (т.е. расстояние между
x
иc
составляет 5).
Контрольные примеры
Input: aa
Output: 0
Input: stack
Output: 18
Input: zaza
Output: 3
Input: valleys
Output: 35
code-golf
string
number
arithmetic
Даниил
источник
источник
æ%
, читая встроенные модули на днях, и это было в значительной степени сделано для этой (типа) проблемы:OIæ%13AS
æ
это два).Haskell,
5756 байтПример использования:
sum.q.q.(zipWith(-)=<<tail).map fromEnum $ "valleys"
->35
.Как это работает:
Изменить: @Damien сохранил один байт. Благодарность!
источник
q.q
)map
в определениеq
на один байт меньшеMATL ,
14, 10 байтПопробуйте онлайн!
Спасибо @Suever за сохранение 4 байта!
Объяснение:
Предыдущая версия:
источник
Python 3,
6968 байтСломать:
источник
for
f=lambda a,b,*s:13-abs(13-abs(ord(a)-ord(b)))+(s and f(b,*s)or 0)
Java,
126120117 байтСпасибо @KevinCruijssen за указание на ошибку в оригинальной версии и предложение сделать цикл for пустым.
Использование
(26 + z[i] - z[i - 1]) % 26)
вдохновлено комментарием @Neil к другому ответу.(26 + ...)%26
служит той же цели, что иMath.abs(...)
из-за...? e : 26 - e
.Ungolfed :
источник
[edit] those details into the top of your post, with this markdown:
Язык, n байтов`-
раньше, чемe
в вашей версии без золота.e=z[i]-z[i-1];
Таким образом , вам необходимо либо бросок , чтобы(byte)
или изменитьe
кint
. Кроме того , вы можете удалить для петли-скобки, помещая все внутри для цикла, как это: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: Перевернутая для-петли , к сожалению , такая же длина: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 байтовСохранено 3 байта благодаря Cyoce:
Объяснение:
Пример:
Вызов:
f('golf')
Выход:
17
Предыдущие решения:
82 байта благодаря Нейлу:
84 байта:
источник
Math.abs(...)
тебя можно использовать(26+...)%26
; это работает, потому что вы переворачиваете значения выше 13 в любом случае. (Я думаю, что так работает ответ MATL.)p=parseInt;
p()
parseInt()
Рубин, 73 байта
источник
PHP, 93 байта
источник
05AB1E , 12 байтов
объяснение
Попробуйте онлайн!
источник
Perl, 46 байт
Включает +3 для
-p
(код содержит'
)Дайте ввод на STDIN без заключительного перевода строки:
stringd.pl
:источник
Ракетка 119 байт
Тестирование:
Выход:
Подробная версия:
источник
(define(f s)
на(lambda(s)
2 байта короче (анонимные функции в порядке).(λ(s)
тоже должен взять , что если в utf8 6 байт, я думаюC #,
8785 байтУлучшенное решение - заменил Math.Abs () на трюк add & modulo, чтобы сохранить 2 байта:
Начальное решение:
Попробуйте онлайн!
Полный исходный код, включая контрольные примеры:
источник
На самом деле, 21 байт
Основано частично на ответе Ruby cia_rana .
Была ошибка с
O
(в данном случае map ord () над строкой), из-за которой она не работалаd
(с удалением нижнего элемента) иp
( с выталкиванием первого элемента) без предварительного преобразования карты в список с помощью#
. Эта ошибка была исправлена, но, поскольку это исправление является более новым, чем эта проблема, я продолжил#
.Редактировать: И количество байтов было неправильным с сентября. Упс.
Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
Java 7,128 байт
Ungolfed
источник
Pyth, 20 байтов
Программа, которая принимает ввод строки в кавычках в STDIN и печатает результат.
Попробуйте онлайн
Как это работает
источник
dc + od, 65 байт
Объяснение:
Поскольку в dc вы не можете получить доступ к символам строки, я использовал od для получения значений ASCII. Они будут обработаны в обратном порядке из стека (LIFO-контейнер) следующим образом:
Бег:
Выход:
источник
C
82 86 8376 байтовПредполагается, что длина входной строки не менее одного символа. Это не требует
#include<stdlib.h>
Изменить: Argh, последовательность точек!
Попробуйте это на Ideone
источник
C 70 байт
76 байтисточник
Скала, 68 байт
Критика приветствуется.
источник
C #, 217 байт
Golfed:
Ungolfed:
Выход:
«a» равно 97 при преобразовании в байты, поэтому 97 вычитается из каждого. Если разница больше 13 (т. Е. Половина алфавита), то вычтите различия между каждым символом (байтовым значением) из 26. Последнее добавление «return return» сэкономило мне несколько байтов!
источник
Python 3, 126 байт
Со списком в понимании.
источник
abs(x-y)
,y-x
так как вызовsorted
сделатьx < y
.PHP, 79 байт
источник
Java, 109 байт
источник