Найменший диверсифікуючий показник


20

Pandigital номер являє собою ціле число , яке містить всі цифри від 0 до 9 , по крайней мере один раз. 1234567890, 1902837465000000 та 9023289761326634265 - всі вони є родинніми. Для цілей цього виклику такі числа, як 123456789, не є родовими, оскільки вони не містять 0, хоча 123456789 = 0123456789.

Різноманітна пара цілих чисел являє собою пару цілих чисел таким чином, що є Pandigital. називається диверсифікуючим показником .(a,b)abb

Завдання: Давши ціле число , знайдіть найменший відповідний диверсифікуючий показник . Це , тому виграє найкоротша програма в байтах.aб

(Ви можете припустити, що існує такий показник, тобто вашій програмі не буде надано недійсний вхід, наприклад потужність 10.)

Ваше рішення повинно вміти обробляти мінімум наведених тестових випадків, але теоретично воно повинно обробляти всі дійсні дані.

Це A090493 на OEIS.

Тестові кейси

2 -> 68
3 -> 39
4 -> 34
5 -> 19
6 -> 20
7 -> 18
8 -> 28
9 -> 24
11 -> 23
12 -> 22
13 -> 22
14 -> 21
15 -> 12
16 -> 17
17 -> 14
18 -> 21
19 -> 17
20 -> 51
21 -> 17
22 -> 18
23 -> 14
24 -> 19
25 -> 11
26 -> 18
27 -> 13
28 -> 11
29 -> 12
30 -> 39
31 -> 11
32 -> 14
33 -> 16
34 -> 14
35 -> 19
36 -> 10
1234567890 -> 1

3
Хочу вказати на окремий випадок 1234567890 -> 1.
Бубон

@Bubbler Додано.
Conor O'Brien

чи є негативні показники поза межами?
sudo rm -rf slash

1
Чи 123456789вважається щось на зразок пандігітального? Він дорівнює 0123456789, що, безумовно, пандігітальний.
wastl

1
@wastl ні, це не так.
Conor O'Brien

Відповіді:


9

Брахілог (v2), 9 байт

;.≜^dl10∧

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

Це подання функції. Посилання TIO містить обгортку, яка робить функцію повноцінною програмою.

Пояснення

;.≜^dl10∧
 .≜        Brute-force all integers, outputting the closest to 0
;  ^         for which {the input} to the power of the number
    d        has a list of unique digits
     l10     of length 10
        ∧  (turn off an unwanted implicit constraint)



4

JavaScript (Node.js) ,  51 46  43 байт

Вводить дані як буквар BigInt. Повертає справжнє замість 1 .

f=(n,k=n)=>new Set(n+'').size>9||1+f(n*k,k)

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


2
Я забуваю, що у JS зараз є bigint: D
Conor O'Brien

Я трохи сумнівний щодо повернення істини замість 1. Це, здається, не відповідає нічого описаному на codegolf.meta.stackexchange.com/questions/9263/…
Sparr

3
@Sparr Ось поточний консенсус.
Арнольд

Спасибі. Я поклав нову відповідь на своє посилання, посилаючись на це.
Спарр



3

J , 25 байт

>:@]^:(10>#@~.@":@^)^:_&1

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

Одиничне монадичне дієслово. Вхід повинен бути цілим числом розширеної точності (наприклад 2x).

Як це працює

>:@]^:(10>#@~.@":@^)^:_&1    Monadic verb. Input: base a
    ^:              ^:_      Good old do-while loop.
                       &1    Given 1 as the starting point for b,
>:@]                         increment it each step
      (            )         and continue while the condition is true:
               ":@^          Digits of a^b
            ~.@              Unique digits
          #@                 Count of unique digits
       10>                   is less than 10

(]+10>#@=@":@^)^:_*
FrownyFrog


2

Ракетка , 110 96 байт

-14 байт завдяки UltimateHawk!

(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))

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


1
Це можна скоротити до 96 байтів, повторюючи функцію замість цього(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))
Ultimate Hawk

@UltimateHawk Дякую! Я забув про параметри за замовчуванням ... (хоча функція помічника також використовувала параметр за замовчуванням b ...)
Гален Іванов,

2

Python 3 , 52 47 байт

завдяки @BMO

f=lambda n,i=1:len({*str(n**i)})>9or 1+f(n,i+1)

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


Просто заголовки вгору, але ви можете просто видалити старий код і поставити "<s> 52 </s> 47" у рядок заголовка. Журнал редагування збереже старі версії, якщо комусь цікаво
Веска

2

05AB1E (спадщина) , 10 9 байт

Збережено 1 байт завдяки панові Xcoder

XµINmÙgTQ

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

Пояснення

Xµ           # find the first positive integer N that
  INm        # when the input is raised to N
     Ù       # and duplicate digits are removed
      g      # has a length
       TQ    # equal to 10

1
Спадщина економить 1 байт: 1µINmÙgTQ- Спробуйте в Інтернеті!
Містер Xcoder

@ Mr.Xcoder: О так, тоді ми мали неявний результат N. Спасибі!
Емінья

1

Вугілля деревне , 19 байт

WΦχ¬№IXIθLυIκ⊞υωILυ

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

WΦχ¬№IXIθLυIκ⊞υω

Неодноразово натискайте порожній рядок до порожнього списку, поки не з’являться цифри, які не містять потужність вводу до довжини списку.

ILυ

Роздрукуйте довжину списку.


Чому потік?
Луїс Мендо

1

К (нг / к) , 76 байт

{#{10>#?(+/|\0<|x)#x}{{+/2 99#,/|0 10\x,0}/+/99 99#,/a*\:x,0}\a::|(99#10)\x}

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

{ } функція з аргументом x

|(99#10)\x ми представляємо числа як перевернуті списки з 99 десяткових цифр - зробіть це в аргументі

a::призначити глобальну змінну a(k не має закриття. нам потрібно aбути глобальним, щоб ми могли використовувати її у підфункціях)

{ }{ }\ в той час як перша функція повертає фальси, продовжуйте застосовувати другу функцію (також під час циклу), зберігаючи проміжні результати

a*\:xкожен з a"цифр", помножений на кожний з x"цифр" ("зовнішній продукт")

99 99#a*\:x,0 додайте додатковий стовпчик 0 і переформатуйте знову на 99x99, це змістить i-й рядок на елементи i праворуч, вставляючи 0s зліва (це працює для тестів; для великих входів 99x99 може призвести до переповнення)

+/ сума

{+/2 99#,/|0 10\x,0}/ розповсюджувати нести:

  • { }/ продовжуйте застосовувати до конвергенції

  • 0 10\x divmod на 10 (пара списків)

  • |0 10\x moddiv на 10

  • 2 99#,/|0 10\x,0 moddiv на 10, при цьому частина "div" змістила 1 цифру праворуч

  • +/ сума

{10>#?(+/|\0<|x)#x} - чек на (не) пандігітальний:

  • |x реверс x

  • 0< які цифри не нульові

  • |\ часткові максимуми

  • +/ сума - це підраховує кількість провідних 0 в x

  • 10> їх менше 10?

# довжина послідовності повноважень - це результат


1

PowerShell , 107 байт

param([bigint]$a)for([bigint]$b=1;-join("$([bigint]::pow($a,$b))"|% t*y|sort -u)-ne-join(0..9);$b=$b+1){}$b

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

Досить прямо, просто ганьба, яку нам потрібно використовувати [bigint]скрізь. Беремо введення $a, потім встановлюємо forцикл з ініціалізатором $b=1.

Кожна ітерація ми прибавка $bпісля перевірки , є чи $a ^ $b( з допомогою pow) , посланий toCharArra y, sortед з -uNique прапором, а потім -joinоб'єднано в рядок є -nВЗ eякост в діапазоні 0..9також-join вид в рядок.

Це рот. Наприклад, це порівнюватиме 7 ^ 5 = 16807 --> "01678"з "0123456789", визначати, що вони не рівні, і продовжувати цикл.

Як тільки ми вийшли з циклу, ми визначили, що $bвідповідає нашому входу, і тому залишимо це на конвеєрі. Вихід неявний.


1

Java, 108 байт

a->{int b=0;while(new java.math.BigDecimal(a).pow(++b).toString().chars().distinct().count()<10);return b;};

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

Пояснення

Сила грубої, петляючи ^ b, поки не знайде рядок з 10 (або більше), але це неможливо, оскільки буде лише 0 - 9 унікальних символів.

BigDecimalпотрібен як тому Math.pow, що недостатньо точний (не вдається випадку 11), а також тому, що перетворення a Doubleв String за замовчуванням показує наукове позначення, яке порушує цей спосіб знаходження нижнього числа.


Не змінюються Java vars за замовчуванням? Не вдалося зберегти 2 байти, усунувши ініціалізацію.
Даррель Гофман

@DarrelHoffman Змінні інстанції так, так. Локально змінених змінних немає.
Hypino

Ах, гаразд. Пройшов якийсь час, як я працював на Java, забув цю техніку.
Даррель Гофман

Ви можете зберегти 6 байтів, змінивши new java.math.BigDecimal(a).pow(++b).toString()на (new java.math.BigDecimal(a).pow(++b)+"")(а кінцеву крапку з двокрапкою не потрібно вважати функціями лямбда). Спробуйте в Інтернеті
Кевін Кройсейсен

1

Pyth, 10 8 байт

fq;l{`^Q

Спробуйте його онлайн тут .

fq;l{`^QT   Implicit: Q=eval(input())
            Trailing T inferred
f           Return (and print) the first positive integer where the following is true:
      ^QT     Raise input to the current number-th power
     `        Convert to string
    {         Deduplicate
   l          Take the length
 q            Is the above equal to...
  ;           10

Збережено 2 байти завдяки попередньому коду FryAmTheEggman fq;l{j^QT;


Ви можете використовувати backtick, щоб перетворити число в рядок, замість того, щоб робити базове перетворення, що дозволить вам залишити роботу Tв режимі живлення.
FryAmTheEggman

0

Желе , 12 11 байт

1*@ṾØDfƑʋ1#

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

Як це працює

1*@ṾØDfƑʋ1#  Main link. Argument: n

1            Set the return value to 1.
         1#  Call the link to the left for k = 1, 2, ... and with right argument n,
             until it returns a truthy value.
        ʋ      Combine the four links to the left into a dyadic chain.
 *@              Compute n**k.
   Ṿ             Convert it to its string representation.
    ØD           Yield "0123456789".
      fƑ         Filter and return 1 is the result is equal to the left argument.



0

Attache , 27 байт

${Generate{#Unique[x^_]>9}}

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

Пояснення

${Generate{#Unique[x^_]>9}}
${                        }    lambda, input: x
  Generate{              }     first natural number _ satisfying...
                   x^_             the input to that number
            Unique[   ]          unique digits of ^
           #                   length of ^
                       >9      is greater than 9
                               i.e.: has 10 distinct digits

Альтернативи

28 байт: ${Generate{Unique@S[x^_]@9}}

29 байт: ${Generate{Unique[S[x^_]]@9}}

30 байт: ${Generate{#Unique[S[x^_]]>9}}

31 байт: Generate@${{#Unique[S[x^_]]>9}}

32 байти: ${Generate[{#Unique[S[x^_]]>9}]}

33 байти: ${If[#Unique[x^y]>9,y,x&$!-~y]}&0

34 байти: ${If[#Unique[x^y]>9,y,$[x,y+1]]}&0

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