Munchausen 번호입니까?


30

뮌 하우젠 번호는 베이스 b ,이라고도 완벽 디지트에 자리 불변 또는 PDDI는베이스 - 합계 양의 정수의 특이한 타입 b 자체로 승온 자리 숫자 자체 같다. 그들은 가상의 Baron Munchausen의 이름을 따서 명명되었습니다. 에서 자신을 묶기 위해 자신의 포니 테일을 통해 자신을 들어 올리는 . 관련 개념은 자기애 적 숫자 입니다.

예를 들어, 111=1 이기 때문에 모든 염기에서 Munchausen 수입니다 . 또한 모든 양의 정수는 정의에 따라 기본 -1 뮌 하우젠 수입니다.

더 흥미롭게도 3435 는 10-10 unchausen base입니다. 33+44+33+55=3435 실제로는 유일한 다른 10-10 Munchausen 수 입니다.

OEIS에서 최대 35 개까지 모든 염기에서 Munchausen 번호의 일부 목록을 순서대로 찾을 수 있습니다. A166623 .

양의 정수 n>0 주어지면 b b 2 이상인 Munchausen 수인지 확인하십시오.b2 .

규칙

  • 기본 I / O 규칙이 적용됩니다.
    • 전체 프로그램 또는 기능이 허용됩니다.
    • 입력은 함수 인수로 STDIN에서, 출력은 함수 리턴 값으로 STDOUT으로 될 수 있습니다.
  • 기본 허점이 적용됩니다.
  • 결과는 두 개의 고유하고 일관된 결과 중 하나 여야합니다. 따라서 TRUE진실에 FALSE대해서는 좋고 허위에 대해서는 괜찮지 만, 당신은 그것을 거꾸로 돌리거나 None진실하고 거짓에 1대해 돌아갈 수 있습니다 . 답변에 선택한 결과를 지정하십시오.
  • 당신의 대답은 적어도 이론적으로 모든 양의 정수에 대해 작동해야합니다.
  • Munchausen 숫자는 00=1 규칙을 사용 하므로 211+00=2 와 같은 기본 2 Munchausen 숫자 입니다. 코드는이 규칙을 따라야합니다.
  • 제출물이 무차별 검색 방법을 사용하더라도 설명은 강력히 권장됩니다.
  • 뮌 하우젠은 이상한 사람 이었기 때문에 난해한 언어를 사용하면 브라우니 포인트를 얻게됩니다.

테스트 사례

Truthy
1 (all bases)
2 (base 2)
5 (base 3)
28 (base 9 and base 25)
29 (base 4)
55 (base 4)
3435 (base 10)
923362 (base 9)
260 (base 128)
257 (base 64 and base 253)

Falsy
3
4
591912
3163
17

이것은 이므로 각 언어에서 가장 짧은 답변 (바이트)이 이깁니다!


계산해야 할 최대 기준이 35/36이라고 가정 할 수 있습니까?
Benjamin Urquhart

7
@BenjaminUrquhart 아니 당신은하지 않을 수 있습니다; determine if it's a Munchausen number in any base b≥2.
주세페

"아니오"라고 추측하는 것은 어떻습니까. 엄청나게 많은 수의 정수와 아마도 유한 한 수의 Munchausen이 있으므로 Munchausen 수를 선택할 확률은 (n) / (Infinity) = 0입니다. //
덕과

@CarlWitthoft 나는 제안을 비웃었지만 물론 잘못된 제출일 것입니다 :-)
Giuseppe

답변:


13

05AB1E , 7 바이트

LвDmOQZ

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

더 큰 테스트 사례는 TIO에서 시간 초과됩니다.

설명

L         # push range [1 ... input]
 в        # convert input to a digit list in each of these bases
  Dm      # raise each digit to the power of itself
    O     # sum each
     Q    # check each for equality with input
      Z   # max

3
이 결과에서 base-1을 어떻게 필터링합니까?
얽히고 설킨

1
@Shaggy :이 기본 변환으로 모든 숫자는 1 에서 1입니다. true를 반환하는 유일한 숫자 1^11 입니다.
Emigna

5

젤리 , 8 바이트

bŻ*`§ċ⁸Ị

0뮌 하우젠 등의 수확량 1.

온라인으로 사용해보십시오!
또는 처음 500 개의 양의 정수[[Munchausen], [non-Munchausen]] .

방법?

bŻ*`§ċ⁸Ị - Link: integer, n
 Ż       - zero-range -> [0,1,2,3,4,...,n]
b        - (n) to base (vectorises)
   `     - with left as both arguments:
  *      -   exponentiation (vectorises)
    §    - sums
     ċ   - count occurrences of:
      ⁸  -   n
       Ị - is insignificant (abs(x) <= 1)

1Munchausen 및 0다른 방법의 대안 :

bŻ*`§ċ>1

음 ... 왜 이전 버전이 유효하고이 버전이 유효하지 않다고 생각합니까?
Outgolfer Erik

1Munchausen 이라고 말하지 않았기 때문에 이전 버전이 잘못되었다고 생각 합니다.
Jonathan Allan

5

J , 33 28 27 바이트

e.1#.i.@>:^~@(#.inv ::1)"0]

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

  • e. 입력 요소입니다 ...
  • 1#. 각 행의 합 ...
  • i.@>: ... ] 0 .. 입력 및 입력 자체는 왼쪽 및 오른쪽 args로 전달되었습니다 ...
  • ^~@(#.inv)"0 오른쪽 arg (입력)를 왼쪽 arg의 각 밑으로 변환하고 각 결과를 요소 단위로 올립니다. ^~@ .
  • ::1마지막으로 기본 1로 고유하게 변환 할 수 없으므로 오류가 발생하기 때문에 이것이 필요합니다. 이 경우, 우리는 단순히 1을 반환하는데 , 이는 1을 제외한 어떤 숫자와도 일치하지 않습니다 . 이것은 우리가 원하는 것입니다

4

R , 72 69 바이트

digEmAll 덕분에 -1 바이트

function(x){for(b in 1+1:x)F=F|!sum((a=x%/%b^(0:log(x,b))%%b)^a)-x;F}

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

출력 TRUE뮌 하우젠 번호 및FALSE 기타 .

x%/%b^(0:log(x,b))%%b)변환 x베이스 b, 그리고 (재 할당 작업의 나머지가하는 for 루프 F입니다, FALSE기본적으로).

우리 는 사건을 처리하는 대신에 기지 b가 완전히 나아가도록해야한다 .x+1xx=1



@digEmAll 감사합니다! 정수 대신 부울을 사용하여 다른 2 바이트를 면도했습니다.
로빈 라이더

당신이 변화 외에 광산에서 2 바이트를 저장하는 변경을 이해하려고 노력했다 +|및 제거 !, 나는 내가 71 쓴 실현하지만 내 코드는 실제로 70이었다 : D
digEmAll

사용하여 좋은 아이디어 | BTW!
digEmAll

@digEmAll 예, 바이트 수를 확인조차하지 못했습니다! :)
Robin Ryder


3

펄 6 , 51 바이트

{?grep {$_==sum [Z**] .polymod($^a xx*)xx 2},^$_+2}

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

설명:

{                                                 } # Anonymous code block
 ?grep {                                  }         # Do any
                                           ,^$_+2   # Of the bases from 2 to n+1
            sum                              # Have the sum of
                      .polymod($^a xx*)      # The digits of n in that base
                [Z**]                  xx 2  # Raised to the power of themselves
        $_==                                 # Equal to the original number?


3

자바 스크립트 (ES7), 60 바이트

부울 값을 반환합니다.

n=>(F=b=>(g=n=>n&&g(n/b|0)+(n%=b)**n)(n)==n||b<n&&F(b+1))(2)

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

댓글

n =>                   // n = input
  ( F = b =>           // F = recursive function taking a base b
    ( g = n =>         //   g = recursive function taking an integer n
      n &&             //     if n is not equal to 0:
        g(n / b | 0) + //       do a recursive call with floor(n / b)
        (n %= b) ** n  //       and add (n mod b) ** (n mod b)
    )(n)               //   initial call to g with the original value of n
    == n ||            //   return true if the result is equal to n
    b < n &&           //   otherwise, if b is less than n:
      F(b + 1)         //     try with b + 1
  )(2)                 // initial call to F with b = 2

3

APL (dzaima / APL) , 23 13 바이트

⊢∊⊂+.*⍨⍤⊤⍨¨2

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

Adám, ngn 및 dzaima 덕분에 dzaima / APL을 사용하여이 답변에서 10 바이트를 줄일 수있었습니다.

접두사 암묵적 기능. Munchausen 번호는 1을 반환하고, 그렇지 않으면 0을 반환합니다.

방법

⊢∊⊂+.*⍨⍤⊤⍨¨2  Prefix tacit function, argument will be called 

             2  Generate the integer sequence [2..⍵]
          ⊤⍨¨   Convert  to each base in the vector
     +.*⍨⍤       Raise each digit of each element in the vector to itself, then sum
⊢∊⊂             Check if  is in the resulting vector.


2

, 17 바이트

Nθ¬Φθ⁼θΣE↨θ⁺²ιXλλ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 16 바이트의 시도가 작동하지 않았지만 숯의 버그 일 수 있으므로이 공간을보십시오. -숫자가 Munchausen 숫자가 아닌 경우 출력 합니다. 설명:

Nθ                  Input `n` as a number
   Φθ               Try bases `2` .. `n+1`
       Σ            Sum of
         ↨θ         `n` converted to base
           ⁺²ι      Next trial base
        E           Each digit
              Xλλ   Raised to its own power
     ⁼              Equals
      θ             `n`
  ¬                 Logical Not






1

자바 스크립트 (ES6), 88 바이트

f=n=>{for(b=2;n-b++;){for(c=0,r=n;r;r=(r-a)/b)c+=(a=(r%b))**a;if(n==c)return 1}return 0}


1

Stax , 15 바이트

╡!←!║╝âñoêû►╦ä▓

실행 및 디버깅

더 큰 테스트 사례에는 시간이 오래 걸립니다.

설명:

{^xs|E{c|*m|+x=m|a Full program, unpacked
                   Implicitly input x
{              m   Map over bases [1 .. x]
 ^                   Increment base (effectively mapping over [2 .. x+1])
  xs                 Tuck x below base
    |E               Get digits of x in base
      {   m          Map over digits:
       c|*             copy and power
           |+        Sum
             x=      sum = x?
                |a Check if any element in array is true
                   Implicit output
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.