Поменять местами половинки программы для проверки делителей

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.

Zgarb
источник

Ответы:

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).

Тестовый фрагмент

ETHproductions
источник
1
Мне нравится, как вы распределили действительный код на все 4 части и смешали его с «условными обозначениями», в отличие от меня (у меня есть код для частей A и B и «условными
обозначениями
2

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

A:

Æṣ⁼$Ædḍ$

B:

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

C:

ƭ

D:

0?

Для практических чисел (до н.э.) 0это ложь, а любой другой результат правдив.

AC и BC - полные программы, так как они не могут быть повторно использованы в качестве функций.

Эрик Outgolfer
источник
BC и BD не работают должным образом.
Джонатан Аллан
ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµработает как B, хотя стоит два байта (и делает BC возвращать 0 и 1 только как остальные).
Джонатан Аллан
@JonathanAllan О нет, кажется, я запутался ŒPс ŒṖ. Какой позор! Это работает, если вы это исправите? (то есть попробуйте мое новое редактирование) Это не так, что в любом случае это очень легко проверить, поэтому я еще не включил ссылку TIO.
Эрик Outgolfer
0

Хаскелл , 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

Попробуйте онлайн!

Да, это довольно дешево, но я не достаточно умен для более крутого решения. :П

totallyhuman
источник
1
Я не знаю много о Haskell, но это может помочь вамsubsequences
Asone Tuhid
[x|x<-[1..n],mod n x<1]короче чем filter((<1).mod n)[1..n].
Лайкони