Ненужная и запутанная история
Я гуляю по Манхэттену, блок за блоком, и мои ноги устали и хочу вернуться домой.
Движение довольно плохое, но, к счастью, я очень богат, и у меня есть вертолет в режиме ожидания в отеле. Но мне нужно, чтобы они знали, сколько топлива нужно собрать для полета, и для этого им нужно знать мое прямое расстояние от отеля. Я помню, по каким кварталам я ходил, и могу сказать им, по какому маршруту я пошел Это расстояние должно быть точным, хотя, если они слишком короткие, мы не вернемся слишком долго, и я купил топливо, которое не смогу использовать.
Можете ли вы написать мне программу, чтобы преобразовать это в расстояние, которое им придется путешествовать во время полета, чтобы забрать меня?
Спецификация:
Напишите мне функцию, которая:
- Принимает список или строку блоков, пройденных относительно произвольной сетки:
- У р, Д собственное, л EFT и R РАВ.
- Может быть в верхнем или нижнем регистре - например. если его короче использовать
u
вместо того, чтобыU
идти вперед. - Недопустимое направление имеет неопределенное поведение - например, направление X может вызвать сбой.
- Возвращает число с плавающей запятой / десятичное число / двойное число, которое в два раза больше расстояния по прямой линии от точки происхождения.
Для иллюстрации и пояснения:
Моя поездка могла быть записана так же легко, как "luluu..."
и, ['l','u','l'...]
но она должна быть записана как Вверх, Вниз, Влево, Вправо.
Ответы:
J, 17 символов
Использует тот факт, что полномочия
j
представляют правильные направления.'urdl'i.
взять строку и вычислить индексы (0 для «u», 1 для «r», ...)0j1^
превращается в направлении в комплексной плоскости с использованием соответствующей степениj
.+/
подводит итоги отдельных шагов2*|
два раза модульПример:
источник
Python 2,7
5658565148С украденной копейкой номер один от Скруджа Макдака я разбогател, и теперь у меня больше богатства, чем у Скруджа.
Python 2.7 -
615350 (без учета регистра)Реализация
источник
IndexError: list index out of range
. Какую форму должен иметь ввод?%5
не было%8
. Хорошо, теперь это имеет смысл :)APL (29)
например
Объяснение:
+/'URDL'∘.=⍵
: посмотрите, как часто символыURDL
встречаются в аргументе-⌿2 2⍴
: вычестьU
значение изD
значения, аR
значение изL
значения2 0j2×
: умножить вертикальное значение на2
и горизонтальное значение на2i
+/
: сумма|
: величинаисточник
Рубин 1.9+ (67)
пример
источник
perl6: 44 символа
get.comb
получает одну строку ввода и разбивается на символы<U R L D>
это список слов, символы в этом случае(1,2,3) Z (4,5,6)
==(1,2), (2,5), (3,6)
, поэтому он объединяет 2 списка друг в друга, создавая список посылок, который%()
превращается в хеш<<**>>
делает попарно**
, расширяя более короткий список, чтобы соответствовать длиннее. Короче список бывает толькоi
[+]
суммирует все элементы списка,abs
принимает модуль для комплексных чиселДа, я удалил все возможные пробелы.
источник
Python 2.7 - 65
Хороший и короткий, он использует комплексные числа, чтобы пройти через плоскость:
Реквизиты для DSM и Abhijit в других вопросах, которые показали мне использование
1j
для вычисления этого.источник
1j
записать какj
,-1j
как-j
? Кроме того, это обрабатывает верхний и нижний ввод, или только верхний?j
и мнимой единицейj
2
вместо умножения конечного результата.Mathematica
9249Калле заслуживает полного уважения за упорядочение кода.
пример
источник
f@l_ := 2 N@Norm[Tr[l /. {"r" -> 1, "l" -> -1, "u" -> I, "d" -> -I}]]
будет достаточно.2 Norm[(2. + 2. I) + "U" + "X"]
в качестве вывода для вашего кода.@
s, вы получите еще на два символа меньше.PHP, 67
Пример:
источник
Юлия, 45
Украл
i
уловку. Также все символы, кроме d, имеют значения, которые работают как допустимые полномочияi
.источник
J, 29 символов
Работает только с более низкими направлениями дел и любыми другими символами , чем
r
,u
,l
, иd
заставит его дать неправильный ответ.Использование:
Объяснение:
'ruld'i.'uuuudrrrl'
Диадическая формаi.
находит индекс элементов из правого аргумента в левом аргументе. В этом случае:/:~
сортирует этот список в порядке возрастания:#/.~
подсчитывает количество вхождений каждого числа:_2[\
нарезать его на 2 ряда:-/
вычитает дно сверху+&.*:
заимствует трюк из другого J-ответа, который я видел сегодня утром , и возводит в квадрат элементы, затем суммирует их, затем выполняет квадратный корень. Смотрите в&.
документации:+:
удваивает результат:источник
R,
867456 символовХорошо, это на самом деле намного короче с мнимыми числами:
Использование:
Старое решение на 74 символов с координатами xy:
Использование:
Принимает ввод как stdin, должен быть в нижнем регистре и через пробел. Используйте координаты xy, начиная с (0,0).
источник
к (
5049)пример
источник
Ява, 185,
203,204,217,226Я предполагал, что каждое «U» было «1 вверх», поэтому на две единицы вверх будет «UU»
Редактировать: замена переключателя для ifs
Перемещено для итератора
Больше не воспринимает ввод как строку, а как массив направлений
источник
T-SQL, 158
@S - это строка ввода типа varchar (max)
источник
ES6,
7769Определение:
Использование:
(Отчасти вдохновлено ответом Боанна.)
источник
for
выражение некоторым выражение (тело функции стрелки, содержащее операторы, требует скобок и явного возврата, тела, которые являются просто выражениями, не нужны) ..JavaScript - 142 символа - нет eval ()
где a строка типа 'uudrrl'
использовать как это -
Тест в консоли браузера.
источник
C # - 90 символов
Только что из LINQPad.
Где input - допустимая строка.
источник
Befunge-93 (65)
В нем 65 символов без пробелов (217 с пробелами, хотя это можно уменьшить с помощью более компактного макета (для 69/176 символов)). Это требует некоторой либеральности с форматом вывода, но, несомненно, является точным. Кажется, не стоит усилий по реализации / краже реализации с квадратным корнем.
echo 'UUDLLUU' | ./befungee.py ../man
выводит 2√13 (хотя на самом деле реализация имеет проблемы с расширенным ASCII).источник
Matlab, 51 символов
Моя подача Matlab, работает только с заглавными буквами. Это было весело! Сложнее всего было преобразовать строку в массив комплексных чисел для суммирования.
Функция:
Использование:
источник
Javascript, 136
источник
JavaScript, 89
Пример:
источник
С, 120
d("LULUURRRRURD")
->8.485281
источник
JavaScript (нет ES6, нет Eval) - 131
Тест:
источник