제수를 테스트하기 위해 프로그램 절반 교체


19

4 개의 정수 시퀀스

이 과제에서는 다음 순서에 따라 양의 정수에 대한 네 가지 속성을 테스트합니다. 양의 정수 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으로 시작합니다.

4 개의 프로그램

당신의 임무는 네 가지 프로그램을 작성하는 것입니다 (모든 표준 방법으로 I / O를 수행하는 전체 프로그램, 함수 정의 또는 익명 함수를 의미 함 ). 각 프로그램은이 시퀀스 중 하나의 멤버쉽 문제를 해결해야합니다. 즉, 각 프로그램은 양의 정수 N ≥ 1 을 입력으로 취하고 N 이 시퀀스에 있으면 참 값을, 그렇지 않으면 거짓 값을 출력합니다. N 이 프로그래밍 언어의 표준 정수 유형의 범위 내에 있다고 가정 할 수 있습니다.

프로그램은 다음과 같은 방식으로 관련되어야합니다. 네 줄 ABCD이 있습니다

  1. AC 완벽한 숫자를 인식하는 프로그램입니다.
  2. AD 리팩터링 가능한 숫자를 인식하는 프로그램입니다.
  3. BC 실제 숫자를 인식하는 프로그램입니다.
  4. BD 매우 복합적인 숫자를 인식하는 프로그램입니다.

채점

점수는 문자열의 총 길이 (바이트) ABCD, 즉 4 개의 프로그램의 총 바이트 수를 2로 나눈 값입니다. 각 프로그래밍 언어에서 가장 낮은 점수가 승자입니다. 표준 규칙이 적용됩니다.

네 문자열은 예를 들어, a{, b{n, +n}=n}?, 그 다음 네 개의 프로그램은 a{+n}, a{=n}?, b{n+n}b{n=n}?, 상기 점수는 2 + 3 + 3 + 4 = 12이다.


답변:


6

+ 6 + 36 = 자바 스크립트 (ES6) + 46 55 282 274 ... 158 143 바이트

ㅏ:

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

비:

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

씨:

?!g:!q

디:

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

결과주고 truthy / 각 입력에 대한 값 falsy (4 개 익명 함수이고 AC, AD그리고 BC주고 true/ false, BD1/ 0).

테스트 스 니펫


1
당신이 (필자는 파트 A와 파트 B와 파트 C와 D의 "조건부"의 코드가) 내게는 달리 "조건부"로 4 개 부분에 걸쳐 실제 코드를 확산하고이를 혼합 한 방법과 같은 I
에릭 Outgolfer

2

젤리 , 8 + 17 + 2 1 + 2 = 29 28 바이트

ㅏ:

Æṣ⁼$Ædḍ$

비:

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

씨:

ƭ

디:

0?

실제 숫자 (BC) 0는 허위이며 다른 결과는 진실입니다.

AC와 BC는 기능으로 재사용 할 수 없으므로 전체 프로그램입니다.


BC와 BD가 제대로 작동하지 않는 것 같습니다.
Jonathan Allan

ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµ그래도 2 바이트의 비용으로 B로 작동합니다 (BC는 0과 1 만 다른 것으로 반환합니다).
Jonathan Allan

오 @JonathanAllan, 내가 혼란 것으로 보인다 ŒP와 함께 ŒṖ. 얼마나 부끄러운 일입니까! 고치면 작동합니까? (즉, 내 새로운 편집을 시도하십시오) 어쨌든 테스트하기가 쉽지 않기 때문에 아직 TIO 링크를 포함시키지 않았습니다.
Outgolfer Erik

0

하스켈 , 69 + 133 + 3 + 3 = 208 점

ㅏ:

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

비:

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]]

씨:

!!0

디:

!!1

온라인으로 사용해보십시오!

예, 꽤 저렴하지만 더 멋진 솔루션을 제공하기에는 충분하지 않습니다. :피


1
나는 Haskell에 대해 많이 모른다. 그러나 이것은 당신을 도울 수있다subsequences
Asone Tuhid

[x|x<-[1..n],mod n x<1]보다 짧습니다 filter((<1).mod n)[1..n].
Laikoni
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.