Механизмы передают различное количество скоростей, в зависимости от размера зубчатой передачи.
У Джека есть машина, которая вращает зубчатую передачу. но вы не знаете скорость последней передачи.
К счастью, вы отличный игрок в код, так что вы можете помочь ему!
И что же мне делать?
Каждая шестерня представлена двумя числами: радиус внутренней шестерни и радиус внешней шестерни.
Если шестеренка A
есть [a,b]
и шестеренка B
есть [c,d]
, то соотношение между скоростью A
и скоростью B
будет c:b
.
Учитывая список передач (список из 2-х кортежей), выведите скорость последней передачи.
Можно предположить, что скорость первой передачи равна 1
.
Разработанный пример
Допустим, наш вклад [[6,12],[3,10],[5,8]]
.
Первая передача, [6,12]
будет иметь скорость 1
.
Тогда вторая передача [3,10]
будет иметь скорость 1*12/3 = 4
.
Тогда последняя передача [5,8]
будет иметь скорость 4*10/5 = 8
.
Testcases
input output
[[1,1],[2,2]] 0.5 (1/2)
[[1,2],[1,2],[1,2]] 4 (2/1*2/1)
[[6,12],[3,10],[5,8]] 8 (12/3*10/5)
правила
Применяются основные правила игры в гольф .
[6,12,3,10,5,8]
. просто упомяните об этом, если хотите его использовать.Ответы:
Haskell, 19 байтов
Учитывая плоский список , как
[a,b,c,d,e,f]
,tail.init
удаляет первые и последние элементы, а затемfoldr1(/)
создает каскад разделений ,b/(c/(d/e))))
который работает, чтобы чередующиеся*
и/
:b/c*d/e
.источник
Желе , 6 байт
Тестирование.
источник
Желе , 7 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
источник
C
1151231218380767170 байт4 байта сохранены благодаря @LeakyNun!
Мой первый гольф, наверное, не самый лучший.
Принимает массив и размер.
Ungolfed:
источник
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(не проверено)JavaScript (ES6), 44 байта
37 байтов для уплощенного массива:
В отличие от (например) Haskell,
reduceRight
это такое длинное имя, что оно дешевлеreduce
в неправильном направлении и принимает ответное в конце.источник
Pyth, 8 байт
Тестирование.
источник
J, 8 байт
Попробуйте онлайн!
использование
где
>>
STDIN и<<
STDOUT.объяснение
«Уменьшить» по
J
умолчанию справа налево, что позволило снять несколько байтов: pисточник
Mathematica, 26 байтов
Неименованная функция, которая принимает плоский список значений четной длины и возвращает точный результат (в виде дроби, если необходимо).
Это использует тот же подход, что и некоторые другие ответы сворачивания деления по перевернутому списку (после удаления первого и последнего элемента).
источник
MATL , 9 байт
Формат ввода любой из этих:
РЕДАКТИРОВАТЬ (30 июля 2016 г.): связанный код заменяется
9L
на,1L
чтобы адаптироваться к последним изменениям в языке.Попробуйте онлайн!
объяснение
источник
JavaScript, 54 байта
использование
Ungolfed
Конечно, гольф-вариант немного отличается. С помощью
.map()
он заменяет первое значение массива на скорость после второго колеса, второе значение на скорость третьего колеса, а последнее значение и второе последнее значение на скорость последнего колеса. Итак, мы просто берем последний элемент с.pop()
.источник
PHP,
807969 байтпринимает входные данные из параметра GET
a
; результат печатиинициализируется
$r
с 1, затем переходит от второго к последнему кортежу для умножения на первый элемент предыдущего и деления на второй элемент текущего кортежа.Спасибо Йорг за напоминание о
$_GET
; это сэкономило 7 байтов.более элегантная версия, 88 байт:
источник
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 байтаJavaScript,
595856 байтобъяснение
Уменьшите массив и умножьте на каждое второе значение и разделите на каждое первое значение. Так и для
[[6,12],[3,10],[5,8]]
этого12/6*10/3*8/5
. Конечно, реальное вычисление, которое мы хотели, состояло в том,12/3*10/5
что мы просто хотим игнорировать это первое/6
и последнее*8
путем умножения*6
обратно и деления/8
обратно. Это устранение делается путем установки6/8
в качестве начального значения для уменьшения.источник
*.../...
к начальному значению1
.Python 2, 52 байта
Анонимная функция, которая принимает вход сплющенного списка через аргумент и возвращает результат.
Это использует идею каскадного деления, как в ответе xnor .
Попробуйте это на Ideone
источник
Python 3, 59 байт
Анонимная функция, которая принимает ввод не сплющенного списка через аргумент и возвращает вывод.
Как это устроено
Для каждой пары целых чисел на входе создается строка вида
'int1*int2'
. Соединение всех этих пар/
дает строку вида'int1*int2/int3*int4/...'
, которая является желаемым вычислением, но включает нежелательные первое и последнее целые числа. Они удаляются путем вырезания первых двух и двух последних символов в строке, оставляя желаемый расчет. Это затем оценивается и возвращается.Попробуйте это на Ideone
источник
Паскаль, 88 байт
Рекурсивная (должна была это сделать ..) функция, которая принимает статический 2D-массив и его длину (количество строк) в качестве входных данных. Использование некоторого математического указателя на массив.
Разобраться с примером использования:
источник
На самом деле, 14 байтов
Попробуйте онлайн! (в настоящее время не работает, потому что TIO отстает от нескольких версий)
Эта программа принимает плоский список в качестве входных данных.
Объяснение:
источник
R, 64 байта
Получается, что векторизованный подход и
for
цикл эквивалентны в этом случае:или
for
цикл:`
источник