В этой задаче мы пытаемся решить две важные проблемы одновременно. Они есть:
- Учитывая целые числа a и b , скажите, является ли a b -1 простым числом.
- Даны целые числа a и b , вернуть nCr (a, b).
В частности, вы должны написать две программы, одна из которых выполняет первую задачу, а другая - другую. Поскольку мы хотим решить обе проблемы одновременно, рекомендуется использовать один и тот же кусок кода в обеих программах.
счет
Оценка ответа - расстояние Левенштейна между двумя программами. Чем ниже балл, тем лучше. В случае ничьей побеждает ответ с кратчайшим комбинированным кодом двух программ. Вы можете использовать этот скрипт для расчета баллов вашего решения.
правила
- Вы должны написать две программы на одном языке, которые решают задачи, описанные выше. Вы можете использовать любые методы ввода / вывода, которые вы хотите. Для задачи 1 вы можете вернуть истинное / ложное значение или выбрать два значения, которые означают true и false, и вернуть их соответственно. Например. Вы можете выбрать, что
"prime"
означает истину, а"not prime"
значит ложь. - Используемые вами алгоритмы должны работать для всех возможных входов, но это нормально, если код не подходит для больших чисел из-за ограничений используемого типа чисел. Вы можете предположить, что ввод действителен.
Никакое подмножество программы не должно решить проблему, т.е. код не должен работать, если какие-либо символы удалены. Например, следующий код недействителен, поскольку можно удалить неиспользуемый блок else, не нарушая программу:
if (1) { /* change to 0 to get the second program*/ ... } else { ... }
Стандартные лазейки не допускаются.
Контрольные примеры
а б -1 простое число?
a b
1 1 false
2 3 true
5 2 false
2 5 true
4 3 false
2 7 true
Ncr
a b nCr(a,b)
1 1 1
5 2 10
4 3 4
10 7 120
12 5 792
Ответы:
MATLAB, расстояние 10
простоты:
Ncr:
источник
PHP, расстояние 29
a^b-1
выводит 0 для истины и любое целочисленное значение> 0 для ложныхnCr(a,b)
PHP, расстояние 36
a^b-1
печатает 1 для истинного ничего для ложногоnCr(a,b)
источник
Рубин, расстояние 1, комбинированная длина 194
Первичная проверка:
Попробуйте онлайн!
Ncr:
Попробуйте онлайн!
Как и предсказывалось в комментариях, некоторые рывки всегда должны идти вразрез с духом проблемы. Хотя было весело найти способ обойти это! Вот как это работает: у нас есть два отдельных решения проблем. Мы запускаем оба, помещаем их в массив, а затем либо выбираем 0-й элемент или 1-й для расстояния редактирования 1. Обычно это будет недопустимым, поскольку вы можете просто удалить все, кроме требуемого вычисления, и оно все равно будет работать , Однако каждый фрагмент кода написан так, чтобы полагаться на загрузку одной и той же стандартной библиотеки
'mathn'
:prime?
mathn
изменение того, как работает деление - перед загрузкой оно3/4
оценивается0
, а затем оно вычисляется до дроби(3/4)
. Поскольку промежуточный результат(a+1-i)/i
не всегда является целым числом, общий результат неверен без библиотеки.Теперь нам нужно сделать так, чтобы загрузка библиотеки зависела от остальной части кода, которая не была изменена. Мы делаем это, генерируя имя mathn, используя длину символа остальной части основного кода: объединенное вычисление имеет длину 55, которая удвоена до 110 - это значение ASCII для n. Таким образом, объединение этого в строку «математика» дает желаемую библиотеку.
В качестве бонуса, введение библиотечных зависимостей также заставляет код выполняться в разумные сроки. В частности, наивный подход к nCr не даст частичных промежуточных результатов.
источник
05AB1E , расстояние 3
Ncr
Попробуйте онлайн!
IsPrime (а ^ Ь-1)
Попробуйте онлайн!
источник
С накоплением , расстояние 13
Попробуйте онлайн! Первое вычисляет nCr, второе простое значение, используя теорему Вильсона.
(f g h) fork!
извлекаетN
аргументы из стека (вызывает ихa0 ... aN
) и применяетa0 ... aN f a0 ... aN h g
.Для первой программы:
И для второго:
источник
Питон 2 , расстояние 15 , длина 172
Задание 1
Задача 2
Попробуйте онлайн!
источник
Mathematica, расстояние 10
Задание 1:
PrimeQ[#2^#-1]&
Задача 2:
Binomial[#2,#]&
Обе функции принимают входные данные в порядке
b,a
.источник
Javascript ES7, расстояние 14
Спасибо @Conor O'Brien за сокращение расстояния на 7
простоты:
Возвращает 1, если простое число возвращает 0, если не простое число.
Невероятно неэффективная первичная проверка, проверяет число по модулю каждое число меньше его и больше 1 ...
Ncr:
Умножает 1 на каждое число от y + 1 до x и делит на каждое число от 1 до xy (x! / Y!) / (Xy)!
источник
f=x=>y=>{t=x+1;s=1;for(i=1;i<t;i++){if(y<i)s*=i/(i-y)}return s}
дает расстояние редактирования 14. Попробуйте онлайн!Октава, расстояние
171615Ncr
Попробуйте онлайн!
isprime(a^b-1)
Попробуйте онлайн!
Я не очень хорошо говорю в Octave, поэтому я не знаю, есть ли встроенная функция для вычисления nCr.
источник
MATL , расстояние 4, длина 6
Скажите, если
a^b-1
прост:Попробуйте онлайн!
Вычислить
nCr(a,b)
:Попробуйте онлайн!
Как это работает
Скажите, если
a^b-1
прост:Вычислить
nCr(a,b)
:источник
Pyth, расстояние 4, общая длина 8
Первичность
a^b-1
Попробуйте онлайн!
нКр (а, б)
Попробуйте онлайн!
Оба принимают входные данные как кортежи / списки целых чисел (например
(1,2)
).источник
PHP, расстояние 14
Написание программы с двумя функциями и вызов только одной из них приведет к расстоянию 1, но это будет слишком неубедительно.
Prime Test, 100 байт:
nCr, 98 байт:
источник
Желе , расстояние 4, длина 5
Задание 1
Задача 2
Попробуйте онлайн!
Как это работает
Задание 1
Задача 2
источник
JavaScript, оценка: 1, длина:
144142126117функция (а, б) {s = "а = Math.pow (а, б) -s.length + 79; для (Ь = 2, A% B ++;); б> a1for (т = s.length-79 ; b;) t = t * a - / b - "; return eval (s.split (1) [1])}Обе подпрограммы используют длину другой для вычисления своей собственной константы, поэтому ни один символ не может быть удаленисточник