Наименьшее общее кратное (LCM) набора чисел A
- это наименьшее целое число, b
такое что b/a
является целым числом для всех целых чисел a
в A
. Это определение можно распространить на рациональные числа!
задача
Найдите наименьшее положительное рациональное b
такое, которое b/a
является целым числом для всех рациональных чисел a
во входных данных.
правила
- Стандартные лазейки запрещены.
- Вы можете взять числители и знаменатели отдельно во входных данных, но не можете использовать двойные, плавающие и т. Д.
- Вход не может быть полностью уменьшен.
- Вы можете принимать целочисленные входные данные как рациональные числа со знаменателем
1
. - Представления, которые будут передавать рациональные числа во встроенную LCM / GCD, разрешены, но не конкурируют.
Тестовые случаи
In: 3
Out: 3
In: 1/17
Out: 1/17
In: 1/2, 3/4
Out: 3/2
In: 1/3, 2/8
Out: 1
In: 1/4, 3
Out: 3
In: 2/5, 3
Out: 6
In: 1/2, 3/4, 5/6, 7/8
Out: 105/2
Это код-гольф , поэтому заявки, использующие наименьшее количество байтов, выигрывают!
code-golf
number
arithmetic
rational-numbers
Юнг Хван Мин
источник
источник
LCM[numerators]/GCD[denominators]
могут не работать, если вход содержит рациональное число без сокращения. например1/3, 2/8
.Ответы:
Желе , 19 байт
Попробуйте онлайн!
источник
g/:@$€
->:g/$€
:g/$€ZµḢæl/,Ḣg/$
J, 3 байта, не конкурирует.
При наличии списка рациональных входных данных, это перебирает LCM через него.
источник
sed, 374 (373 + 1) байта
-E
Флаг sed считается одним байтом. Примечание: я еще не пробовал играть в гольф, и, вероятно, не буду в течение достаточно долгого времени.Ввод принимается в унарном виде, а вывод - в унарном. Пробелы должны окружать каждую фракцию. Пример:
echo " 1/111 111/11111 111111/111 "
.Попробуйте онлайн!
источник
Python 2 , 65 байт (не конкурирует)
Попробуйте онлайн!
источник
JavaScript (ES6), 85 байт
Не смотри встроенные! Без сомнения, кто-то победит это, используя рекурсивный подход или что-то в этом роде.
источник
Пари / GP , 3 байта, неконкурирующие
Попробуйте онлайн!
источник
Perl 6 ,
4642 байтаПроверь это
Проверь это
Ввод представляет собой список рациональных чисел.
Expanded:
источник
Сетчатка , 117 байт
Попробуйте онлайн! Принимает входные данные как разделенные пробелами серии неправильных дробей (без целых или смешанных чисел). Объяснение:
Преобразует десятичную в одинарную.
Это уменьшает каждую фракцию до самых низких сроков. Группа захвата 1 представляет GCD числителя и знаменателя, поэтому мы подсчитываем количество захватов до и после
/
.\b(1+)+/(\1)+\b
кажется, по какой-то причине неправильно подсчитывает количество захватов, поэтому я использую дополнительную группу захвата и добавляю 1 к результату.Это делает несколько вещей. Группа захвата 2 представляет GCD числителей первых двух фракций, в то время как группа захвата 3 представляет GCD знаменателей.
$#4
поэтому второй числитель делится на их GCD. (Опять же, я не мог определить количество снимков первого числителя, но мне нужно только разделить один числитель по их GCD, так что это не будет стоить мне так много.)Теперь, когда второй числитель разделен на их GCD, мы просто используем это выражение из унарного арифметического учебника, чтобы умножить их вместе, что приводит к LCM. Затем мы повторим упражнение для оставшихся дробей.
Преобразует унарный обратно в десятичный.
источник
Common Lisp, 154 байта
Используемый алгоритм (указан для целых чисел, но работает и для рациональных).
Сначала составьте ассоциативный список входных данных с самим собой, чтобы отследить начальные значения элементов, чтобы рабочая последовательность определялась «машинами» списка.
Тестовые случаи:
Примечание: решение без использования построения
lcm
иgcd
, которые принимают целые числа.источник
(/ (lcm 1 3 5 7) (gcd 2 4 6 8))
.(lcm 1 3 5 7)
, так как целые числа являются подтипом рациональных чисел, но я думаю, что правило должно исключать использованиеlcm
или,gcd
которое допускает рациональные входные данные.lcm
иgcd
.Mathematica, 3 байта, не конкурирует
Встроенная
LCM
функция Mathematica способна обрабатывать рациональные числовые значения.источник
PHP , 194 байта
-4 байта с PHP> = 7.1
[$n,$d]=$_GET
вместоlist($n,$d)=$_GET
Попробуйте онлайн!
источник
Common Lisp,
8778 байтИспользуя
lcm
иgcd
, которые имеют целочисленные входы:Больше игры в гольф:
источник