Це номер Мюнхаузена?


30

Мюнхгаузно Кількість в базовому b , також відомий як цифра-цифровий інваріант Повного або PDDI є типом властиво позитивного цілого числа , де сума його base- b цифр підвищував до себе одно самого числа. Вони названі за вигаданим бароном Мюнхаузеном , який, мабуть, піднявся через свій хвостик, щоб врятувати себе від утоплення. Пов'язане поняття - нарцисистські числа .

Наприклад, 1 є тривіально числом Мюнхаузена в кожній базі, оскільки 11=1 . Крім того, кожне додатне ціле число є базовим числом Мюнхгаузена за визначенням.

Що ще цікавіше, 3435 - це базове число 10 Мюнхгаузена, оскільки 33+44+33+55=3435 , а насправді це єдине інше число 10 Мюнхгаузена .

Частковий перелік номерів Мюнхаузена в кожній базі до 35 можна знайти в OEIS як послідовність A166623 .

Давши додатне ціле число n>0 , визначте, чи є це число Мюнхаузена в будь-якій базі b2 .

Правила

  • Застосовуються правила вводу / виводу за замовчуванням, тому:
    • Повна програма або функції прийнятні.
    • Введення може бути від STDIN, як аргумент функції, а вихід може бути STDOUT, як повернене значення функції тощо.
  • Застосовуються лазівки за замовчуванням.
  • Результат повинен бути одним з двох чітких, послідовних результатів. Так TRUEце добре для truthy та FALSEдобре для falesy, але ви можете повернути це або повернути Noneдля truthy та 1для фальшивого чи будь-чого іншого. Будь ласка, вкажіть вибрані результати у своїй відповіді.
  • Ваша відповідь має працювати принаймні теоретично для будь-якого додатного цілого числа.
  • Числа Мюнхаузена використовують умову 00=1 , тому 2 є базовим числом 2 Мюнхаузена як 11+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.
Джузеппе

Як щодо того, щоб просто здогадатися "ні". Існує незліченна кількість цілих чисел і, можливо, кінцеве число Мюнхейзенів, тому ймовірність вибору числа Мюнхаузена становить (n) / (Нескінченність) = 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. Єдине число, яке поверне справжнє значення 1^1- 1 .
Емінья

5

Желе , 8 байт

bŻ*`§ċ⁸Ị

Врожайність 0для Мюнхаузена та 1ін.

Спробуйте в Інтернеті!
Або побачити, як перші п'ятсот натуральних чисел розбилися як[[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

J , 33 28 27 байт

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

Спробуйте в Інтернеті!

  • e. є вхідним елементом ...
  • 1#. сума кожного ряду ...
  • i.@>: ... ] 0..вхід і сам вхід, передані як аргументи зліва і справа до ...
  • ^~@(#.inv)"0перетворіть правий аргумент (вхід) у кожну базу в лівий аргумент і піднесіть кожен результат елементарно до себе ^~@.
  • ::1нарешті, це потрібно, тому що ви не можете однозначно перетворити на базу 1, тому це помилки. в цьому випадку ми просто повертаємо 1, який не відповідає жодному номеру, окрім 1, що ми хочемо

4

R , 72 69 байт

-1 байт завдяки digEmAll

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+1замість того, xщоб займатися справою x=1.



@digEmAll Дякую! Я поголив ще 2 байти, використовуючи булі, а не цілі числа.
Робін Райдер

Я намагався зрозуміти , що ви змінили , щоб зберегти 2 байти з шахти , крім зміни +з |і видалення !, а потім я зрозумів , що я написав 71 , але мій код був на насправді 70: D
digEmAll

Відмінна ідея з використанням | До речі!
digEmAll

@digEmAll О так, я навіть не думав перевіряти кількість байтів! :)
Робін Райдер

3

Japt , 13 байт

õ@ìXÄ x_pZ
øN

Збережено один байт завдяки @Shaggy

Спробуй це


@Shaggy Виправлено ціною байта
Втілення Незнання

Ви можете повернути цей байт, замінивши ÃÃøUна <newline>øN.
Кудлатий

@Shaggy Хороший трюк N, я ніколи не використовував його раніше!
Втілення Невідомості

3

Perl 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

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, нам вдалося відголити 10 байтів від цієї відповіді за допомогою dzaima / APL.

Префікс негласна функція. Числа Мюнхгаузена повертають 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

Стакс , 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.