ミュンヒハウゼン番号ですか?


30

A ミュンヒハウゼン数ベースでbとしても知られる、完全桁対桁不変またはPDDIは、その塩基の合計の正の整数の特有のタイプであるb自身に上げ桁数自体に等しいです。架空の男爵ミュンヒハウゼンにちなんで名付けられました。関連する概念は、自己陶酔的な数字です。

たとえば、11 = 1であるため、11=1はすべてのベースで簡単にミュンヒハウゼン数です。さらに、すべての正の整数は、定義によりベース1のミュンヒハウゼン数です。

さらに興味深いことに、3 3 + 4 4 + 3 3 + 5 5 = 3435であるため、3435は10進数のミュンヒハウゼン数であり、実際は33+44+33+55=3435唯一の他のベース10ミュンヒハウゼン番号

35までのすべてのベースのMunchausen番号の部分的なリストは、OEISでシーケンスとして見つけることができます A166623

正の整数で指定されたn>0が任意の塩基でミュンヒハウゼン番号である場合、判断b2

ルール

  • デフォルトのI / Oルールが適用されます。
    • 完全なプログラムまたは機能が許容されます。
    • 入力は関数の引数としてSTDINから、出力は関数の戻り値などとしてSTDOUTにできます。
  • デフォルトの抜け穴が適用されます。
  • 出力は、2つの異なる一貫した結果のいずれかでなければなりません。だからTRUE、真実に対しては罰金であり、偽造に対してFALSEは罰金であるが、あなたはそれを逆にするか、あるいはNone真実に対して、偽造などの1ために戻ることができる。回答で選択した結果を指定してください。
  • あなたの答えは、正の整数に対して少なくとも理論的に機能する必要があります。
  • ミュンヒハウゼン番号は00=1規則を使用しているため、211+00=2基本とするミュンヒハウゼン番号です。コードはこの規則に従う必要があります。
  • 提出物がブルートフォース検索方式を使用する可能性が高い場合でも、説明を強くお勧めします。
  • ミュンヒハウゼンは明らかに奇妙な人物だったため、難解な言語を使用するとブラウニーポイントを獲得できます。

テストケース

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と仮定できますか?
ベンジャミンアーカート

7
@BenjaminUrquhartいいえ、できません。determine if it's a Munchausen number in any base b≥2.
ジュゼッペ

「いいえ」と推測するのはどうですか。数え切れないほどの数の整数と証明可能な有限数のMunchausensがあるため、Munchausen数を選択する確率は(n)/(Infinity)= 0です。//ダックと実行
カールウィトフト

@CarlWitthoft私は提案を笑ったが、もちろんそれは無効な提出になるだろう:-)
ジュゼッペ

回答:


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
この結果からベース1をフィルタリングする方法は?
シャギー

1
@Shaggy:このベースの変換では、すべての数字は、1台-1で。trueを返す唯一の数1^11です。
エミグナ

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)

1ミュンヒハウゼンなどの代替手段0

bŻ*`§ċ>1

ええと...なぜあなたの前のバージョンは有効で、これは無効だと思いますか?
アウトゴルファーのエリック

私の以前のバージョンはそれ1がミュンヒハウゼンだとは言わなかったので無効だったと思います。
ジョナサンアラン

5

J33 28 27バイト

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

オンラインでお試しください!

  • e. 入力の要素です...
  • 1#. の各行の合計...
  • i.@>: ... ] 0..inputと入力自体、左右の引数として...に渡されます
  • ^~@(#.inv)"0 右の引数(入力)を左の引数の各ベースに変換し、各結果を要素ごとに上げます ^~@
  • ::1最後にこれが必要なのは、ベース1に一意に変換できないため、エラーになるためです。この場合、1を返すだけです。これは、1 以外の番号には一致しません。

4

R72 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)xbase bに変換し、forループが残りの作業を行います(再割り当てFFALSEデフォルトで)。

ケースを処理bするx+1代わりにベースがずっと進むことを許可する必要があります。xx=1



@digEmAllありがとう!整数の代わりにブール値を使用して、さらに2バイト削りました。
ロビンライダー

私はあなたが変更+|て削除する以外に私のものから2バイトを節約するためにあなたが変更したことを理解しようとしていました!、そして私は71を書いたことに気付きましたが、私のコードは実際には70:D
digEmAll

使用する素晴らしいアイデア| ところで!
digEmAll

@digEmAllそうそう、バイト数をチェックすることすら考えていませんでした!:)
ロビンライダー




3

JavaScript(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バイト削ることができました。

プレフィックス暗黙関数。ミュンヒハウゼン数は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バイトの試みはうまくいきませんでしたが、それはチャコールのバグかもしれないので、このスペースを見てください。-数値がミュンヒハウゼン数でない限り出力します。説明:

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

JavaScript(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

スタックス、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.