Половинки програми поміняйте, щоб перевірити дільники


19

Чотири цілі послідовності

У цьому виклику ви перевірите чотири різні властивості натурального числа, задані наступними послідовностями. Позитивне ціле число N є

  1. досконалий ( OEIS A000396 ), якщо сума власних дільників N одно N . Послідовність починається з 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 ...
  2. refactorable ( OEIS A033950 ), якщо число дільників N є дільником N . Послідовність починається з 1, 2, 8, 9, 12, 18, 24, 36, 40, 56, 60, 72, 80, 84, 88, 96, 104, 108, 128 ...
  3. практичний ( OEIS A005153 ), якщо кожне ціле число 1 ≤ K ≤ N є сумою деяких різних дільників N . Послідовність починається з 1, 2, 4, 6, 8, 12, 16, 18, 20, 24, 28, 30, 32, 36, 40, 42, 48, 54, 56 ...
  4. високо композит ( OEIS A002128 ), якщо кожне число 1 ≤ K <N має строго менше , ніж дільників N . Послідовність починається з 1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040 ...

Чотири програми

Ваше завдання - написати чотири програми (маючи на увазі повні програми, визначення функцій або анонімні функції, які виконують введення-виведення будь-яким із стандартних методів ). Кожна програма повинна вирішити проблему членства однієї з цих послідовностей. Іншими словами, кожна програма прийме позитивне ціле число N ≥ 1 , і виведе триєдне значення, якщо N є в послідовності, і хибне значення, якщо ні. Ви можете припустити, що N знаходиться в межах стандартного цілого типу вашої мови програмування.

Програми повинні бути пов'язані таким чином. Чотири рядки ABCDтакі

  1. AC це програма, яка розпізнає ідеальні числа.
  2. AD це програма, яка розпізнає номери, що змінюються.
  3. BC це програма, яка розпізнає практичні числа.
  4. BD це програма, яка розпізнає високоскладені числа.

Оцінка балів

Ваш бал - це загальна довжина (у байтах) рядків ABCD, або іншими словами, загальна кількість байтів чотирьох програм, розділених на дві. Найнижчий бал у кожній мові програмування - переможець. Діють стандартні правила .

Наприклад, якщо чотири рядки a{, b{n, +n}і =n}?, потім чотири програми a{+n}, a{=n}?, b{n+n}і b{n=n}?, і рахунок 2 + 3 + 3 + 4 = 12.


Відповіді:


6

JavaScript (ES6), 46 + 55 + 6 + 36 = 282 274 ... 158 143 байт

A:

n=>(r=0,D=x=>x&&D(x-1,n%x||(r++?q-=x:q=n)))(n)

B:

n=>(q=(g=D=x=>x&&!(n%x||(g|=m>2*(m=x),0))+D(x-1))(m=n))

C:

?!g:!q

D:

?(P=k=>--k?D(n=k)<q&P(k):1)(n):n%r<1

Результат 4 анонімних функції , які дають truthy / falsy значення для відповідних входів ( AC, ADі BCдають true/ false, BDдають 1/ 0).

Фрагмент тесту


1
Мені подобається, як ти поширив фактичний код на всі 4 частини і змішав його з "умовними" на відміну від мене (у мене є код на частини A і B і "conditionals" на частини C і D.)
Ерік Атголфер

2

Желе , 8 + 17 + 2 1 + 2 = 29 28 байт

A:

Æṣ⁼$Ædḍ$

B:

ÆDŒPS€QṢwRµṖÆdṀ<Ʋ

C:

ƭ

D:

0?

Для практичних чисел (BC) 0- хибність, а будь-який інший результат - правда.

AC і BC є повноцінними програмами, оскільки їх не можна використовувати повторно як функції.


BC і BD, здається, не працюють належним чином.
Джонатан Аллан

ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµпрацює як B для вартості двох байтів (і робить BC поверненням 0 і 1 лише як інші).
Джонатан Аллан

@JonathanAllan О, ні, здається, я переплутався ŒPз ŒṖ. Який сором! Чи працює, якщо ви виправите це? (тобто спробуйте мою нову редакцію) Це не так легко перевірити все одно, тому я ще не включив посилання TIO.
Ерік Атголфер

0

Haskell , 69 + 133 + 3 + 3 = оцінка 208

A:

d n=filter((<1).mod n)[1..n]
f n=[sum(d n)-n==n,length(d n)`elem`d n]

B:

import Data.List
d n=filter((<1).mod n)[1..n]
f n=[all(\n->any(==n)$sum$subsequences$d n)[1..n],all((<length(d n)).length.d)[1..n-1]]

C:

!!0

D:

!!1

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

Так, це досить дешево, але я недостатньо розумний для більш крутого рішення. : P


1
Я не знаю багато про Хаскелл, але це могло б вам допомогтиsubsequences
Асона Тухід

[x|x<-[1..n],mod n x<1]коротше, ніж filter((<1).mod n)[1..n].
Лайконі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.