Ваша задача - создать программу или функцию, которая выводит GCD своих входных данных на одном языке и LCM своих входных данных на другом. Встроенные функции для GCD или LCM (я смотрю на вас, Mathematica) разрешены, но не поощряются. Будет 2 входа, которые всегда будут положительными целыми числами, никогда не превышающими 1000.
Тестовые случаи
Каждая строка представляет собой один тестовый пример в формате x y => GCD(x,y) LCM(x,y)
:
1 1 => 1 1
1 2 => 1 2
4 1 => 1 4
3 4 => 1 12
7 5 => 1 35
18 15 => 3 90
23 23 => 23 23
999 1000 => 1 999000
1000 999 => 1 999000
1000 1000 => 1000 1000
Смотрите этот pastebin для всех возможных входов с 0 < x, y < 31
. Обратите внимание, что разные версии одних и тех же языков считаются разными языками.
if
на основании версии языка, если она хранится в переменной, разрешено?Ответы:
Желе / На самом деле , 2 байта
Это hexdump (xxd) представленной программы. Он не может быть протестирован онлайн, потому что TIO не поддерживает кодировку CP437. @Mego был достаточно любезен, чтобы убедиться, что это работает на Cygwin, который реализует CP437, как и было на самом деле.
Желе: GCD
Jelly использует кодовую страницу Jelly , поэтому видит следующие символы.
Попробуйте онлайн!
Как это работает
œ
является неполным токеном и поэтому игнорируется.g
это встроенный в GCD.На самом деле: LCM
На самом деле использует CP 437 , поэтому он видит следующие символы.
Попробуйте онлайн!
Как это работает
▲
является входом LCM. Посколькуg
(GCD) требует двух целочисленных входов, он не выполняется.источник
C / C ++,
797873 байтаСпасибо @ETHproductions за сохранение байта!
C рассчитывает GCD: попробуйте онлайн!
C ++ вычисляет LCM: попробуйте онлайн!
В C
auto e=.5
объявляется целочисленная переменная с классом автоматического хранения (который используется по умолчанию), который затем инициализируется равным 0, тогда как в C ++ 11 он объявляет double, который инициализируется равным 0,5. Таким образом, значение переменной будет истинным в C ++ и ложным в C.Функция вычисляет GCD с помощью алгоритма Евклида и LCM путем деления произведения a и b на GCD.
Отказ от оператора return работает как минимум на GCC. Приведенное ниже 78-байтовое решение должно работать с любым компилятором:
источник
for(;a;b=c)c=a,a=b%a;
for
вместоwhile
;)На самом деле / Желе , 3 байта
Это hexdump (xxd) представленной программы.
Попробуйте онлайн! 1
На самом деле: GCD
На самом деле использует CP 437 , поэтому он видит следующие символы.
Попробуйте онлайн!
Как это работает
Желе: LCM
Jelly использует кодовую страницу Jelly , поэтому видит следующие символы.
Попробуйте онлайн!
Как это работает
Примечание . Формула gcd (a, b) lcm (a, b) = ab справедлива, поскольку a и b положительны.
1 TIO фактически использует UTF-8 для Actual. Поскольку символы ASCII и символы CP437 0x11 и 0x1c не назначены, программа, тем не менее, работает.
источник
Алиса и Желе , 9 байт
Алиса вычисляет LCM:
Попробуйте онлайн!
То, что похоже на пространство, на самом деле
0x7F
являетсяDEL
управляющим персонажем.Желе вычисляет GCD. Поскольку Jelly использует свою собственную кодовую страницу, которая совместима только с печатным ASCII, символ перевода строки и DEL превращаются в
½
и перевод строки соответственно:Попробуйте онлайн!
Пояснения
Желе тривиально: первая строка определяет бессмысленную вспомогательную ссылку, вторая строка - это сама программа, и она просто содержит встроенный GCD.
Алиса немного сложнее, но она также использует встроенный:
источник
What looks like a space
на самом деле не похоже на пространство.Октава / MATLAB,
6661 байтСохранено 5 байтов благодаря Foon.
(x*y)^any()
был конечно короче чем1+(x*y-1)*any()
.Ну, по крайней мере, он не использует встроенный для
lcm
.Объяснение:
Это использует встроенную функцию
gcd
для вычисления Величайшего общего делителя.В Октаве это возносится к власти
1-2*any(version==82)
.any(version==82)
находится0
в октаву, так что это простоgcd(x,y)^1
. Это умножается на(x*y)^any(version==82)
, или(x*y)^0 = 1
.Для MATLAB,
gcd
возводится в силу1-2*any(version==82)
.any(version==82)
находится1
в MATLAB, так что этоgcd(x,y)^-1
. Это умножено на(x*y)^any(version==82)
, или(x*y)^1 = x*y
. Это дает наименьшее общее кратное, посколькуlcm(x,y) == x*y/gcd(x,y)
для положительных чисел.источник
Желе и MATL ,
65 байтЭто полная программа на любом из двух языков. Он вычисляет GCD в Jelly ( Попробуйте онлайн! ) И LCM в MATL ( Попробуйте онлайн! ). Программа MATL завершает работу с ошибкой (разрешенной по умолчанию) после получения правильного вывода.
Используются только символы ASCII, поэтому они соответствуют одинаковым кодированным байтам на двух языках.
Объяснение ГКД в желе
Объяснение LCM в MATL
источник
Юлия 0,4 / Юлия 0,5 18 байтов
Оценивается
gcd
в Julia 0,4 ( Попробуйте онлайн! ) Иlcm
в Julia 0,5 ( Попробуйте онлайн! ).Как это работает
У Юлии 0,4
log.(1)
это сокращение дляgetfield(log,1)
, которое возвращает ячейку памятиlog
встроенной функции, например, указательPtr{Void} @0x00007f2846cb6660
. Таким образом, результат не равен нулю, сравнение ложно, и выражение оценивается какgcd
.В Julia 0.5 был введен новый синтаксис векторизации функций.
log.(1)
теперь является сокращением дляbroadcast(log,1)
, которое, поскольку1
не является итеративным, просто оцениваетlog(1)
. Таким образом, результат равен нулю, сравнение истинно, а выражение оценивается какlcm
.источник
Октава / MATLAB,
444241 байтЭто определяет анонимную функцию для GCD (
@gcd
) в Octave и для LCM (@lcm
) в MATLAB.Пример в Octave (или попробуйте онлайн! ):
Пример в MATLAB:
источник
JS (ES6), CGL (язык игры в гольф CGL) , 31 байт (не конкурирующий)
Функция LCM CGL была добавлена после этого испытания.
То, что выглядит как пробел, на самом деле является неразрывным пробелом, комментарий для CGL. JS вычисляет GCD:
И CGL вычисляет LCM:
Попробуйте это:
источник