Введение
Кларенс - клерк ввода данных, работающий в интернет-провайдере. Его задача - вручную вводить IP-адреса всех клиентов интернет-провайдера в базу данных. Он делает это с помощью клавиатуры, которая имеет следующую раскладку:
1
2
3
4
5
6
7
8
9
.
0
Расстояние между центром горизонтально или вертикально смежных клавиш составляет ровно один сантиметр. Например, расстояние между центрами 3и 9будет два сантиметра. Расстояние между центрами 3и 5будет √2см. Теорема Пифагора достаточна для вычисления расстояния между любыми двумя ключами.
Кларенс, как и следовало ожидать от того, кто работает в ISP, использует очень медленную и неэффективную систему набора текста. Он использует один палец и ищет клавишу, затем перемещает палец к клавише, затем нажимает ее и повторяет все цифры в числе. Возможно, вы знаете об этом стиле как «поисковая система орла», так как палец ищет над клавиатурой правильную клавишу, а затем нажимает на нажатие клавиши, как орел, опускающийся вниз для убийства.
Например, вот как Кларенс наберет номер 7851
:
- Он начинает пальцем 7и нажимает ключ.
- Он перемещает палец вправо на 1 см 8и нажимает клавишу.
- Он перемещает палец вверх на 1 см 5и нажимает клавишу.
- Он двигает пальцем по диагонали вверх и влево на √2см 1и нажимает клавишу.
Поэтому общее расстояние, Кларенс пошевелил пальцем , чтобы ввести 7851
IS , 1 + 1 + √2
который составляет около 3.41cm.
Ваша задача - написать программу, которая вычисляет расстояние, которое Кларенс должен двигать пальцем, чтобы ввести произвольные IP-адреса.
Описание входа
Ввод - это строка, которая будет иметь вид
().().().()
где каждый ()
является целым числом в диапазоне 0
- 999
. Это представляет IP-адрес, который должен ввести Кларенс. Пример ввода может быть:
219.45.143.143
Я также хотел бы отметить, что входные данные, такие как 0.42.42.42
или 999.999.999.999
все еще являются действительными входными данными, несмотря на тот факт, что они являются недействительными IP-адресами. Поэтому вам не нужно включать какой-либо код подтверждения IP-адреса в вашу программу.
Описание выхода
Выведите расстояние, на которое Кларенс должен сдвинуть палец, чтобы набрать указанный IP-адрес. Округлите ответы до двух знаков после запятой, где это необходимо, и используйте cm
единицу в выходных данных. Выход для входного примера: 27.38cm
(1 + √8 + √5 + 2 + 1 + √5 + 3 + 1 + √5 + √13 + 3 + 1 + √5).
Ответы:
CJam,
464443383734 байтаСпасибо @ user23013 за предложение
mh
, которое позволило сэкономить 5 байтов.Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
{3fmd~@-@@-mh}%
,mh
даже существовал.Pyth,
383534 байтаДемонстрация.
Индексирование в строку с плавающей точкой благодаря @Dennis.
Пояснения по поводу фальшивого ввода
15.0
:z
. '15 0,0'Мы отображаем этот список выглядит следующим образом :
m.jF.Dx`ciUTT1k3z
.UT
: Генерируем список[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.iUTT
Затем мы рассматриваем этот список как число из 10 базовых значений, которое нам дает123456789
.ciUTT1
: Затем мы конвертируем это число в число с плавающей запятой, деля его на 1, давая123456789.0
.`
: Преобразовать в строку.'123456789.0'
x k
: Взять индекс входного символа в этой строке.[0, 4, 9, 10]
,.D 3
:.D
это функция divmod, которая выводит свой первый вход, разделенный и по модулю на второй вход. Второй вход 3 здесь. Это дает физическое местоположение персонажа на цифровой клавиатуре.[(0, 0), (1, 1), (3, 0), (3, 1)]
,.jF
:.j
конструктор комплексных чисел.F
применяет это к кортежу.[0j, (1+1j), (3+0j), (3+1j)]
,.: 2
Теперь мы возьмем 2 подстроки в этом списке, чтобы мы могли найти попарные расстояния.[[0j, (1+1j)], [(1+1j), (3+0j)], [(3+0j), (3+1j)]]
,-M
: Принимает разницу двух комплексных чисел.[(-1-1j), (-2+1j), -1j]
,.aM
: Принимает абсолютное значение результата. Это расстояние между местами расположения клавиатуры.[1.4142135623730951, 2.23606797749979, 1.0]
s
: Суммируйте расстояния.4.650281539872885
,.R 2
: Округлить до 2 десятичных знаков.4.65
,+ "cm
: Добавить'cm'
до конца и распечатать.4.65cm
,источник
PHP - 108 байт
Ввод взят из стандартного ввода.
-.987654321
Направлено вstrpos
функции принимает значение'-0.987654321'
в контексте строки.Пример использования:
источник
C
192177159 байтовОбновленная версия, теперь завершите программу, используя аргумент командной строки. В то же время улучшено, чтобы все еще быть короче, чем предыдущая версия:
Ungolfed:
Гольф-версия использует препроцессор,
#define
чтобы сократить часть повторяющегося кода в полной версии.источник
s
перед проверкой, которая*s
не равна нулю. 3. ОП указала программу в своем посте. Я не уверен, что функция принята. 4. С GCC вам не нужно включать. 5.sqrt
корочеsqrtf
. 6.pow(u-p,2)
короче(u-p)*(u-p)
. 7. Я не уверен, но я думаю, что хранение обеих координат в одной строке и настройкиu=x[c]/3
иv=x[c]%3
должно быть короче.int
могут быть использованы без объявления. Но действительно, Clang также принимает это с предупреждением, поэтому я избавился от этого.p=u,q=v,G,r+=...
.JavaScript ( ES6 ), 132
Ввод / вывод через всплывающее окно. Запустите фрагмент для проверки (только Firefox)
источник
Python 3, 108 байт
По общему признанию не очень хорошо игра в гольф, но по крайней мере это связано с PHP.
источник
Рубин 135
139Протестируйте это онлайн: http://ideone.com/2CIQa5
источник
Питон
199 171166Для этого есть более короткий код Python (108) для SP3000:
https://codegolf.stackexchange.com/a/50854/41163
Пример использования:
Запустить онлайн: http://codepad.org/h9CWCBNO
Код комментария
источник
if
статей на одной строке, напримерif i<1:c=3,1
<!-- language: lang-python -->