나는 너에게 충분하지 않니?


29

배경:

현재 퍼펙트 넘버 챌린지숫자 의 요소를 포함하는 복잡한 형식으로 출력하도록 요구하기 때문에 다소 결함이 있고 복잡합니다. 이것은 도전에 대한 순전 한 재 포스트입니다.

도전

표준 입력 형식을 통해 양의 정수가 주어지면 완벽 여부를 구별하십시오.

완전 숫자는 모든 적절한 제수의 합과 동일한 숫자입니다 (양수의 제수 자체보다 작음). 예를 들어, 의 제수는 이므로 합은 이므로 는 제수 ( )의 합이 이므로 완전한 수는 아닙니다. , 아닙니다 .61,2,36121,2,3,4,61612

테스트 사례 :

Imperfect:
1,12,13,18,20,1000,33550335

Perfect:
6,28,496,8128,33550336,8589869056

규칙

  • 메모리 나 시간 제약이있는 경우 프로그램에서 더 큰 테스트 사례를 완료하지 않아도되지만 더 많은 메모리 / 시간이 제공되면 이론적으로는 가능합니다.
  • 허용 된 출력 형식을 통해 출력이 두 개의 고유하고 일관된 값이 될 수 있습니다 . Perfect / Imperfect를 나타내는 것이 확실하지 않은 경우 답변에 명시하십시오.

잠깐, 진실은 완전하지 않은 가치에 대한 것이고, 거짓은 가치에 대한 것입니까?
Esolanging 과일

2
@ Tvde1 적절한 제수는 숫자보다 작아야합니다. 그렇지 않으면 1모든 숫자가 1스스로 나눌 수 있기 때문에 완벽 하지 않은 숫자는 없습니다. 적절한 제수의 합 10
Jo King

3
@Grimy 증명할 수있는 경우에만 . 행운을 빕니다! (바이트가 어떻게 절약되는지 궁금합니다.)
Jo King

1
아니, 너무 나빠 ECMA 정규식 답변의 크기를 약 3 배 줄였습니다.
Grimmy

3
"출력은 두 개의 구별되고 일관된 값이 될 수 있습니다"-여기서 "truthy vs falsey"를 사용할 수 없습니까 (예 : 0과 0이 아닌 파이썬을 사용하는 파이썬, 내용과 빈 목록이있는 목록 및 이들의 조합)?
조나단 앨런

답변:



9

Neim , 3 바이트

𝐕𝐬𝔼

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

(15 분 전에 Neim을 배우기 시작한 이후로 모든 테스트 사례를 한 번에 실행하는 방법을 실제로 알지 못하지만 개별적으로 확인했습니다.)

불완전한 경우 0, 완벽 인 경우 1을 인쇄합니다.

𝐕      Pop an int from the stack and push its proper divisors,
       implicitly reading the int from a line of input as the otherwise absent top of the stack.
 𝐬     Pop a list from the stack and push the sum of the values it contains.
  𝔼    Pop two ints from the stack and push 1 if they are equal, 0 if they are not;
       implicitly reading the same line of input that was already read as the second int, I guess?
       Implicitly print the contents of the stack, or something like that.

2
" 그런데? "; " 또는 이와 유사한 것 ". 자신이 작성한 것을 확실하지 않으면 하하. ;) 그러나 그렇습니다, 그것이 실제로 작동하는 방식입니다. 나는 Neim을 모르지만, 암시 적으로 입력을 사용하고 암시 적으로 최종적으로 암시 적으로 출력하는 것은 05AB1E와 유사합니다.
Kevin Cruijssen

어떻게 𝔼1 바이트? Neim은 이러한 비표준 문자를 128 개만 사용합니까?
kajacx

3
@kajacx Neim에는 자체 코드 페이지가 있습니다. 따라서 코드 페이지에있는 256 개의 문자는 각각 1 바이트를 사용하여 인코딩 할 수 있습니다.
Mr. Xcoder

8

R , 33 29 바이트

!2*(n=scan())-(x=1:n)%*%!n%%x

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

TRUE완벽한 숫자와 FALSE불완전한 숫자를 반환 합니다.


연속으로 2! s는 무엇을 얻습니까?
CT 홀

@CTHall 사양을 잘못 읽었습니다. 그들은 원래 0(완벽)에 FALSE0이 아닌 값으로 매핑 TRUE되었지만 매핑을 취소하기 위해 그중 하나를 제거했습니다. 그것은에서 캐스팅에 유용한 골프 트릭 numericlogical자주와 함께, which또는 [.
주세페



6

파이썬 3 , 46 바이트

lambda x:sum(i for i in range(1,x)if x%i<1)==x

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

무차별 대입 (Brute force)은 요소를 합산하고 평등을 검사합니다.


2
이해 조건을 반복 변수의 마스크로 사용하면 바이트가 절약됩니다.
Jonathan Frech

불완전한 숫자로 진실을 되돌릴 수 있기 때문에 lambda x:sum(i for i in range(1,x)if x%i<1)^x효과가 있습니다.
nedla2004

5

파이썬 , 45 바이트

lambda n:sum(d*(n%d<1)for d in range(1,n))==n

True완벽을 위해; False다른 사람들을 위해 ( ==->로 전환하십시오 !=)

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

"truthy vs falsey"를 사용하여 출력 할 수있는 경우 41  42  바이트 (ovs 덕분에 ovs) :

f=lambda n,i=1:i/n or-~f(n,i+1)-(n%i<1)*i

(팔지 ( 0)) 완벽 함; 그렇지 않으면 참 (0이 아닌 정수)


두 번째 출력 형식이 유효하면 42 바이트 단위 로 수행 할 수 있습니다 .
ovs

@ovs 아, 잘 했어.
Jonathan Allan

@ovs .. 그리고 다른 하나는 그로부터 저장되었습니다-감사합니다!
Jonathan Allan

5

옥타브 , 25 바이트

@(n)~mod(n,t=1:n)*t'==2*n

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

설명

@(n)~mod(n,t=1:n)*t'==2*n

@(n)                        % Define anonymous function with input n
             1:n            % Row vector [1,2,...,n]
           t=               % Store in variable t
     mod(n,     )           % n modulo [1,2,...,n], element-wise. Gives 0 for divisors
    ~                       % Logical negate. Gives 1 for divisors
                  t'        % t transposed. Gives column vector [1;2;...;n]
                 *          % Matrix multiply
                      2*n   % Input times 2
                    ==      % Equal? This is the output value

4

자바 스크립트, 38 바이트

n=>eval("for(i=s=n;i--;)n%i||!(s-=i)")

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

TIO에서 마지막 테스트 케이스 시간 종료.


@Arnauld f=재귀 함수에서 변환 후 를 제거하는 것을 잊었습니다 .
tsh

호기심 때문에 재귀 버전으로 가지 않겠습니까? (34 바이트입니다.)
Arnauld

@Arnauld는 재귀 버전이 스택 오버플로로 인해 더 큰 테스트 사례에 실패했을뿐입니다. 어쩌면 일부 환경에서는 기본적으로 엄격 모드가 작동해야합니다.
tsh

2
충분하지만 프로그램은 더 큰 테스트 사례를 완료 할 필요가 없습니다 (어쨌든 기본 규칙이라고 생각합니다).
Arnauld

4

C # (Visual C # 대화식 컴파일러) , 46 바이트

n=>Enumerable.Range(1,n).Sum(x=>n%x<1?x:0)^n*2

완벽하면 0을, 그렇지 않으면 양수를 반환합니다. 서로 다른 두 가지 진실되고 허위 값 대신 다른 유형의 정수 출력이 허용되는지 여부와 그에 대한 메타에 대한 토론을 찾을 수 없었습니다. 이것이 유효하지 않으면 제거하겠습니다.

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

C # (Visual C # 대화식 컴파일러) , 49 47 바이트

n=>Enumerable.Range(1,n).Sum(x=>n%x<1?x:0)==n*2

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



3

TI-BASIC (TI-84), 30 23 바이트

:2Ans=sum(seq(Ans/Xnot(remainder(Ans,X)),X,1,Ans,1

끔찍하게 비효율적이지만 작동합니다.
바이트 수를 줄이면 프로그램 속도가 크게 향상됩니다.
입력이입니다 Ans. 프로그램이 완료되면
출력이 시작 Ans되고 자동으로 인쇄됩니다.

설명 :
(TI-BASIC에는 설명 이 없으므로 설명을 가정하십시오 ;)

:2Ans=sum(seq(Ans/Xnot(remainder(Ans,X)),X,1,Ans    ;Full program

 2Ans                                               ;double the input
          seq(                                      ;generate a list
                                         X,          ;using the variable X,
                                           1,        ;starting at 1,
                                             Ans     ;and ending at the input
                                                     ;with an implied increment of 1
              Ans/X                                 ;from the input divided by X
                   not(                ),           ;multiplied by the negated result of
                       remainder(Ans,X)              ;the input modulo X
                                                     ;(result: 0 or 1)
      sum(                                          ;sum up the elements in the list
     =                                              ;equal?

예:

6
            6
prgmCDGF2
            1
7
            7
prgmCDGF2
            0

참고 : 프로그램의 바이트 수는 [MEM] > [2] > [7] (36 바이트) 의 값을 사용하여 평가 한 다음 프로그램 이름의 길이 CDGF2, (5 바이트) 및 추가 8 바이트 를 뺍니다. 프로그램 저장

36-5-8 = 23 바이트


3

자바 (JDK) , 54 바이트

n->{int s=0,d=0;for(;++d<n;)s+=n%d<1?d:0;return s==n;}

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

숫자 일치로 엄격한 숫자를 사용하더라도 다음은 동일한 값을 반환하지만 40 바이트입니다.

n->n==6|n==28|n==496|n==8128|n==33550336

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


규칙은 말한다Your program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
Jo King

@JoKing Java int를 전혀 사용할 수없고 오히려 BigInteger? Java는을 가지고 BigIntegers있지만 int서명 된 것보다 31 비트가 넘지 않기 때문에 여기에 표시된 것보다 다른 값을 가질 수 없습니다.
Olivier Grégoire

아니요, 그러나 int유형이 제한되지 않은 경우 프로그램이 계속 작동해야하는 경우
Jo King

1
@JoKing Ok, 두 가지 솔루션을 다시 계산하여 계산을 먼저했습니다.
Olivier Grégoire

3

x86 어셈블리, 45 43 바이트.

6A 00 31 C9 31 D2 41 39  C1 7D 0B 50 F7 F9 58 85
D2 75 F1 51 EB EE 31 D2  59 01 CA 85 C9 75 F9 39
D0 75 05 31 C0 40 EB 02  31 C0 C3

설명 (Intel Syntax) :

PUSH $0          ; Terminator for later
XOR ECX, ECX        ; Clear ECX
.factor:
    XOR EDX, EDX    ; Clear EDX
    INC ECX
    CMP ECX, EAX    ; divisor >= input number?
    JGE .factordone ; if so, exit loop.
    PUSH EAX        ; backup EAX
    IDIV ECX        ; divide EDX:EAX by ECX, store result in EAX and remainder in EDX
    POP EAX         ; restore EAX
    TEST EDX, EDX   ; remainder == 0?
    JNZ .factor     ; if not, jump back to loop start
    PUSH ECX        ; push factor
    JMP .factor     ; jump back to loop start
.factordone:
XOR EDX, EDX        ; clear EDX
.sum:
    POP ECX         ; pop divisor
    ADD EDX, ECX    ; sum into EDX
    TEST ECX, ECX   ; divisor == 0?
    JNZ .sum        ; if not, loop.
CMP EAX, EDX        ; input number == sum?
JNE .noteq          ; if not, skip to .noteq
    XOR EAX, EAX    ; clear EAX
    INC EAX         ; increment EAX (sets to 1)
JMP .return         ; skip to .return
.noteq:
    XOR EAX, EAX    ; clear EAX
.return:
RETN

에 입력해야합니다 EAX.
기능은 완벽하고 불완전 하게 설정 EAX됩니다 .10

편집 : 대체하여 2로 바이트 카운트 감소 MOV EAX, $1XOR EAX, EAXINC EAX


1
매크로 어셈블리를 사용하므로 확실하지는 않지만 "; divisor> input number"는 "; divisor> = input number"입니다.
RosLuP

조립은 쉬운 조작을 통해 명령 길이를 줄로 바꿀 수 있으며, 들여 쓰기를 사용하고 10 20 asm 명령마다 주석을 달 수 있습니다 ....
RosLuP

@RosLuP 코드의 주석을 고쳤습니다 (감사합니다).하지만 두 번째 주석의 의미를 모르겠습니다.
Fayti1703

3

미로 , 80 바이트

?::`}:("(!@
perfect:
{:{:;%"}
+puts; "
}zero: "
}else{(:
"negI"  _~
""""""{{{"!@

라틴 문자 perfect puts zero else neg I는 실제로 주석 일뿐입니다 *.
즉, 입력이 완벽하면 a 0가 인쇄 -1됩니다.

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


* 그래서 이것 또는 이것도 작동합니다 ...

?::`}:("(!@               ?::`}:("(!@
       :                  BEWARE :
{:{:;%"}                  {:{:;%"}
+    ; "                  +LAIR; "
}    : "                  } OF : "
}    {(:                  }MINO{(:
"    "  _~                "TAUR"  _~
""""""{{{"!@              """"""{{{"!@

방법?

입력으로 양의 정수를 가져 와서 n어큐뮬레이터 변수를 -n보조 스택에 배치 한 다음 , 어큐뮬레이터로 나누는 것을 추가 n-1하여를 포함하여 각 정수에 대한 1분할 성 테스트를 수행합니다 n. 누적 변수가 0이 아닌 경우 이것이 완료되면 a -1가 출력되고 그렇지 않으면 a 0가 출력 됩니다.

?::`}:(단지 실행의 시작 부분에 한 번 실행됩니다

?::`}:(                                                      Main,Aux
?       - take an integer from STDIN and place it onto Main  [[n],[]]
 :      - duplicate top of Main                            [[n,n],[]]
  :     - duplicate top of Main                          [[n,n,n],[]]
   `    - negate top of Main                            [[n,n,-n],[]]
    }   - place top of Main onto Aux                       [[n,n],[-n]]
     :  - duplicate top of Main                          [[n,n,n],[-n]]
      ( - decrement top of Main                        [[n,n,n-1],[-n]]

다음 명령어 "는 no-op이지만 이웃 명령어가 3 개 있으므로 Main의 맨 위에있는 값에 따라 분기하고 0은 앞으로 가고 0은 아닌 반면 우리를 올바르게 만듭니다.

1메인의 상단이 0이므로 입력 이 진행된 경우 :

(!@                                                          Main,Aux
(   - decrement top of Main                             [[1,1,-1],[-1]]
 !  - print top of Main, a -1
  @ - exit the labyrinth

그러나 1Main의 상단이 0이 아니기 때문에 입력이 우리가 우회전 보다 큰 경우 :

:}                                                           Main,Aux
:  - duplicate top of Main                         [[n,n,n-1,n-1],[-n]]
 } - place top of Main onto Aux                        [[n,n,n-1],[-n,n-1]]

이 시점에서 우리는 3 이웃 지점을 가지고 있지만 우리 n-1는 0이 아닌 것을 알고 있으므로 우회전합니다 ...

"%                                                           Main,Aux
"  - no-op                                             [[n,n,n-1],[-n,n-1]]
 % - place modulo result onto Main                   [[n,n%(n-1)],[-n,n-1]]
   - ...i.e we've got our first divisibility indicator n%(n-1), an
   -    accumulator, a=-n, and our potential divisor p=n-1:
   -                                                 [[n,n%(n-1)],[a,p]]

우리는 현재에 또 다른 3 개 이웃 지점에 %있습니다.

결과가 %0이 아닌 경우 우리는 잠재적 제수를 줄이고 왼쪽으로 p=p-1누산기를 남겨 둡니다 a.

;:{(:""}"                                                    Main,Aux
;          - drop top of Main                                [[n],[a,p]]
 :         - duplicate top of Main                         [[n,n],[a,p]]
  {        - place top of Aux onto Main                  [[n,n,p],[a]]
           - three-neighbour branch but n-1 is non-zero so we turn left
   (       - decrement top of Main                     [[n,n,p-1],[a]]
    :      - duplicate top of Main                 [[n,n,p-1,p-1],[a]]
     ""    - no-ops                                [[n,n,p-1,p-1],[a]]
       }   - place top of Main onto Aux                [[n,n,p-1],[a,p-1]]
        "  - no-op                                     [[n,n,p-1],[a,p-1]]
         % - place modulo result onto Main           [[n,n%(p-1)],[a,p-1]]
           - ...and we branch again according to the divisibility
           -    of n by our new potential divisor, p-1

...의 결과 %가 0 (첫 번째 패스의 경우에만) 인 경우 n=2우리는 모두 제수를 누산기에 추가 a=a+p하고 잠재적 제수를 줄입니다 p=p-1.

;:{:{+}}""""""""{(:""}                                       Main,Aux
;                      - drop top of Main                    [[n],[a,p]]
 :                     - duplicate top of Main             [[n,n],[a,p]]
  {                    - place top of Aux onto Main      [[n,n,p],[a]]
   :                   - duplicate top of Main         [[n,n,p,p],[a]]
    {                  - place top of Aux onto Main  [[n,n,p,p,a],[]]
     +                 - perform addition            [[n,n,p,a+p],[]]
      }                - place top of Main onto Aux      [[n,n,p],[a+p]]
       }               - place top of Main onto Aux        [[n,n],[a+p,p]]
        """""""        - no-ops                            [[n,n],[a+p,p]]
                       - a branch, but n is non-zero so we turn left
               "       - no-op                             [[n,n],[a+p,p]]
                {      - place top of Aux onto Main      [[n,n,p],[a+p]]
                       - we branch, but p is non-zero so we turn right
                 (     - decrement top of Main         [[n,n,p-1],[a+p]]
                  :    - duplicate top of Main     [[n,n,p-1,p-1],[a+p]]
                   ""  - no-ops                    [[n,n,p-1,p-1],[a+p]]
                     } - place top of Main onto Aux    [[n,n,p-1],[a+p,p-1]]

이 시점에서 p-1여전히 0이 아닌 경우 왼쪽으로 돌립니다.

"%                                                           Main,Aux
"  - no-op                                             [[n,n,p-1],[a+p,p-1]]
 % - modulo                                          [[n,n%(p-1)],[a+p,p-1]]
   - ...and we branch again according to the divisibility
   -    of n by our new potential divisor, p-1

...하지만 p-10 :을 누르면 미로의 두 번째 줄로 곧장갑니다 (이전에 모든 지시 사항을 보았으므로 설명을 생략하고 효과를 나타냅니다).

:":}"":({):""}"%;:{:{+}}"""""""{{{                           Main,Aux
:                                  -                   [[n,n,0,0],[a,0]]
 "                                 -                   [[n,n,0,0],[a,0]]
                                   - top of Main is zero so we go straight
                                   -  ...but we hit the wall and so turn around
  :                                -                 [[n,n,0,0,0],[a,0]]
   }                               -                   [[n,n,0,0],[a,0,0]]
                                   - top of Main is zero so we go straight
    ""                             -                   [[n,n,0,0],[a,0,0]]
      :                            -                 [[n,n,0,0,0],[a,0,0]]
       (                           -                [[n,n,0,0,-1],[a,0,0]]
        {                          -              [[n,n,0,0,-1,0],[a,0]]
                                   - top of Main is zero so we go straight
                                   -  ...but we hit the wall and so turn around
         (                         -             [[n,n,0,0,-1,-1],[a,0]]
          :                        -          [[n,n,0,0,-1,-1,-1],[a,0]]
           ""                      -          [[n,n,0,0,-1,-1,-1],[a,0]]
             }                     -             [[n,n,0,0,-1,-1],[a,0,-1]]
                                   - top of Main is non-zero so we turn left
              "                    -             [[n,n,0,0,-1,-1],[a,0,-1]]
               %                   - (-1)%(-1)=0     [[n,n,0,0,0],[a,0,-1]]
                ;                  -                   [[n,n,0,0],[a,0,-1]]
                 :                 -                 [[n,n,0,0,0],[a,0,-1]]
                  {                -              [[n,n,0,0,0,-1],[a,0]]
                   :               -           [[n,n,0,0,0,-1,-1],[a,0]]
                    {              -         [[n,n,0,0,0,-1,-1,0],[a]]
                     +             -           [[n,n,0,0,0,-1,-1],[a]]
                      }            -              [[n,n,0,0,0,-1],[a,-1]]
                       }           -                 [[n,n,0,0,0],[a,-1,-1]]
                        """""""    -                 [[n,n,0,0,0],[a,-1,-1]]
                                   - top of Main is zero so we go straight
                               {   -              [[n,n,0,0,0,-1],[a,-1]]
                                {  -           [[n,n,0,0,0,-1,-1],[a]]
                                 { -         [[n,n,0,0,0,-1,-1,a],[]]

이제 여기 {에는 세 가지 이웃 지침 이 있습니다.

... a완전한 것이 0 이라면 n, 우리는 직진합니다.

"!@                                                          Main,Aux
"   -                                        [[n,n,0,0,0,-1,-1,a],[]]
    - top of Main is a, which is zero, so we go straight
 !  - print top of Main, which is a, which is a 0
  @ - exit the labyrinth

... a제로가 아닌 경우 , 비 완벽한 경우 n, 좌회전합니다 :

_~"!@                                                        Main,Aux
_     - place a zero onto Main             [[n,n,0,0,0,-1,-1,a,0],[]]
 ~    - bitwise NOT top of Main (=-1-x)   [[n,n,0,0,0,-1,-1,a,-1],[]]
  "   -                                   [[n,n,0,0,0,-1,-1,a,-1],[]]
      - top of Main is NEGATIVE so we turn left
   !  - print top of Main, which is -1
    @ - exit the labyrinth


2

자바 스크립트, 62

n=>n==[...Array(n).keys()].filter(a=>n%a<1).reduce((a,b)=>a+b)

설명 (단순하지만)

n=> //return function that takes n
  n== //and returns if n is equal to
    [...Array(n).keys()] //an array [0..(n-1)]...
      .filter(a=>n%a<1) //where all of the elements that are not divisors of n are taken out...
      .reduce((a,b)=>a+b) //summed up

개선을위한 Jo King 에게 감사합니다 !




2

C (gcc) , 41 바이트

f(n,i,s){for(i=s=n;--i;s-=n%i?0:i);n=!s;}

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

1: 0
12: 0
13: 0
18: 0
20: 0
1000: 0
33550335: 0
6: 1
28: 1
496: 1
8128: 1
33550336: 1
-65536: 0 <---- Unable to represent final test case with four bytes, fails

마지막 사례의 실패가 문제인지 알려주세요.



2
"허용되는 모든 출력 형식을 통해 출력이 두 개의 고유하고 일관된 값이 될 수 있습니다." 두 개의 고유 한 값을 반환하지 않습니다.
Olivier Grégoire

2
@ OlivierGrégoire 다행히도 그 느낌표를 느낌표로 바꾸면 쉽게 고칠 수 있습니다!

1
@Neil 더 나은 방법은 5 바이트를 절약 하는 n=!s;대신 고정시킬 수 있습니다 return!s;.

@ OlivierGrégoire 아, 그 점을 잊어 버렸습니다. 또한 개선 된 코드로를 업데이트했습니다. 나는 비슷한 것을 시도했지만 내가 한 바보 s=s는 최적화 된 것보다 많았습니다.
마르코스


2

4 번째 (2 번째) , 45 바이트

: f 0 over 1 ?do over i mod 0= i * - loop = ;

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

설명

1에서 n-1까지의 모든 숫자를 반복하여 n을 완벽하게 나누는 모든 값을 합산합니다. 합계가 n과 같으면 true를 리턴합니다.

코드 설명

: f                \ start word definition
  0 over 1         \ create a value to hold the sum and setup the bounds of the loop
  ?do              \ start a counted loop from 1 to n. (?do skips if start = end)
    over           \ copy n to the top of the stack
    i mod 0=       \ check if i divides n perfectly
    i * -          \ if so, use the fact that -1 = true in forth to add i to the sum
  loop             \ end the counted loop
  =                \ check if the sum and n are equal
;                  \ end the word definition

2

Pyth , 9 13 바이트

qsf!%QTSt

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

골프 도움말에 대해 해설자에게 감사합니다

입력의 모든 요인을 찾아 합산하여 원래 입력과 비교합니다.


당신을 위해 몇 가지 골프를 친다는 - q0로 대체 할 수 !SQ범위를 생산하고 [1-Q], 그래서 범위를 [1-Q)사용하여 생성 할 수 있습니다 StQ. 는 AS Q의 프로그램의 끝에 지금 그들은 모두 생략 할 수 있습니다. fettled하게 버전, 9 바이트 -qsf!%QTSt

1

배치, 81 바이트

@set s=-%1
@for /l %%i in (1,1,%1)do @set/as+=%%i*!(%1%%%%i)
@if %s%==%1 echo 1

취하고 n커맨드 라인 파라미터로서 출력하는 1것이 완벽한 번호 인 경우. 무차별 강제 방법 은 루프에 자신을 -n포함 할 수 있도록 합계를 시작합니다 n.


1

, 13 바이트

Nθ⁼θΣΦθ∧ι¬﹪θι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. -완벽한 숫자를위한 출력 . 무차별 대입. 설명:

Nθ              Numeric input
     Φθ         Filter on implicit range
        ι       Current value (is non-zero)
       ∧        Logical And
           θ    Input value
          ﹪     Modulo
            ι   Current value
         ¬      Is zero
    Σ           Sum of matching values
  ⁼             Equals
   θ            Input value


1

Pyth, 8 바이트

qs{*MPyP

여기에서 온라인으로 사용해보십시오 .

qs{*MPyPQQ   Implicit: Q=eval(input())
             Trailing QQ inferred
       PQ    Prime factors of Q
      y      Powerset
     P       Remove last element - this will always be the full prime factorisation
   *M        Take product of each
  {          Deduplicate
 s           Sum
q        Q   Is the above equal to Q? Implicit print

1

레티 나 0.8.2 , 44 바이트

.+
$*
M!&`(.+)$(?<=^\1+)
+`^1(1*¶+)1
$1
^¶+$

온라인으로 사용해보십시오! 무차별 대입을 사용하므로 링크에는 더 빠른 테스트 사례 만 포함됩니다. 설명:

.+
$*

단항으로 변환합니다.

M!&`(.+)$(?<=^\1+)

입력의 모든 요소를 ​​일치시킵니다. 이것은 겹치는 모드를 사용합니다. Retina 0.8.2에서는 모든 일치 항목이 다른 위치에서 시작해야하므로 일치하는 항목은 원래 입력부터 시작하여 내림차순으로 실제로 반환됩니다.

+`^1(1*¶+)1
$1

입력 값에서 적절한 인수를 빼십시오.

^¶+$

결과가 0인지 테스트합니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.