Чи містять два числа унікальні факториали?


11

Розбийте два числа на їхні фабрики; якщо вони поділяються, поверніть значення фальси. В іншому випадку поверніть значення "truthy". (натхненний цим останнім запитанням )

Іншими словами, кожне вхідне число запишіть як суму фактичних даних (з натуральних цілих чисел) найбільш жадібним можливим способом; повернути триєдине значення, якщо в обох уявленнях не з’являється жодна факторія, а інше значення фальси.

Приклад

Дано 20 та 49:

20 = 3! + 3! + 3! + 2!
49 = 4! + 4! + 1!

В обох уявленнях не з’являється жодна факторіальна база, тому поверніть значення "truthy".

Дано 32 та 132:

132 = 5! + 3! + 3!
 32 = 4! + 3! + 2!

3! з'являється в обох поданнях, тому поверніть значення фальси.

I / O

Введення та виведення можна за допомогою будь-яких стандартних засобів .

Вхід завжди буде двома негативними цілими числами; не має верхньої межі цих цілих чисел, окрім того, що вимагає ваша мова.

Вихід повинен мати значення " truthy" або "falsey" . Ці значення необов'язково повинні бути узгодженими для різних вхідних даних, якщо кожен результат є правильним / фальсийним.

Випробування

Якщо один вхід 0, відповідь завжди буде правдою. Інші справжні тести:

{6, 3}, {4, 61}, {73, 2}, {12, 1}, {240, 2}, {5, 264}, {2, 91}, {673, 18},
 {3, 12}, {72, 10}, {121, 26}, {127, 746}

Якщо обидва входи є непарними цілими числами або якщо обидва входи є однаковим додатним цілим числом, то вихід завжди буде помилковим. Інші тести фальси:

{8, 5}, {7, 5}, {27, 47}, {53, 11}, {13, 123}, {75, 77}, {163, 160}, {148, 53},
 {225, 178}, {285, 169}, {39, 51}, {207, 334}, {153, 21}, {390, 128}, {506, 584},
 {626, 370}, {819, 354}

Це , тому виграє найменше байтів!


"написати кожне вхідне число як суму фактичних даних (з натуральних цілих чисел) найкориснішим можливим способом" чи не ви маєте на увазі найменш лежачий можливий спосіб ?
користувач41805

4
@KritixiLithos немає. Він має на увазі клас алгоритмів, відомий як жадібні алгоритми, які працюють шляхом максимізації певної метрики після кожного кроку. Як і в, завжди беруть стільки, скільки можуть.
Джон Дворак

Відповіді:


9

Желе , 7 байт

Æ!ṠḄ&/¬

Спробуйте в Інтернеті!

Як це працює

Æ!ṠḄ&/¬  Main link. Argument: (x, y) (pair of integers)

Æ!       Convert x and y to factorial base.
  Ṡ      Apply the sign function to each digit.
   Ḅ     Unbinary; convert each resulting Boolean array from base 2 to integer.
    &/   Reduce the resulting pair of integers by bitwise AND.
      ¬  Take the logical NOT of the result.

Æ!здається шалено корисним у певних сценаріях.
Чарівний восьминога Урна

Чи можна щось отримати, намагаючись безпосередньо помножити списки факторних підстав, не приймаючи ознак?
Грег Мартін

@GregMartin Я так не думаю. Масиви цифр повинні бути прокладені або обрізані на однакову довжину, що, ймовірно, коштуватиме більше байтів, ніж економить.
Денніс



2

JavaScript (ES6), 71 байт

(a,b,g=(n,e=1,f=1)=>n>=f&&g(n,++e,f*e)+((n/f|0)%e&&1<<e))=>!(g(a)&g(b))

Цілі числа JavaScript обмежені 53 бітами точності, що приблизно вистачає на 18 !; це означає, що я можу використовувати маску з 18 біт, щоб відстежити, які фактичні матеріали потрібні.



0

Математика, 73 байти

F[x_]:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[F@#,F@#2]&

форма введення

[x1, x2]


Я отримую кілька помилок, перевіряючи це ...
Скотт Мілнер

Просто введіть наприкінці [x1, x2]
J42161217

Ага. Я вводив список замість двох окремих чисел. Можна додатково пограти в гольф ±x_:=First@IntegerPartitions[x,99,Range[99]!];!IntersectingQ[±#,±#2]&[4,61](69 байт). У кодуванні ISO 8859-1 значення ±є одним байтом.
Скотт Мілнер

0

C, 122 119 байт

G(q,i){return gamma(q+1)>i?gamma(q):G(q+1,i);}
Q(a,b,u,v){while(a&&b){a-=u=G(1,a);b-=v=G(1,b);if(a==b)exit();}exit(0);}

Qє основною функцією. До нього слід звернути рівно два позитивних цілих значення. Це вихід з кодом виходу з 0для truthy і 1для falsy.

Хоча це, здається, не працює на TIO, воно працює в моїй системі за умови надання Homebrewgcc 7.1.0 .

Я не займався гольфуванням вже Cдосить давно, тому поради з гольфу дуже вдячні!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.