가장 작은 다양 화 지수


20

pandigital 번호는 한번, 적어도 0부터 9까지의 모든 숫자를 포함하는 정수이다. 1234567890, 1902837465000000 및 9023289761326634265는 모두 팬 디지털입니다. 이 문제를 해결하기 위해 123456789 = 0123456789 인 경우에도 123456789와 같은 숫자는 0을 포함하지 않기 때문에 팬 디지털이 아닙니다.

다양한 정수 쌍의 정수 쌍 (a,b) 되도록 B는 pandigital이다. b다양 화 지수 라고합니다 .abb

도전 과제 : 정수 주어지면 , 가장 작은 해당하는 다양한 지수 찾으십시오 . 이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.ab

(지수와 같은 지수가 있다고 가정 할 수 있습니다. 즉, 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 슬래시

1
123456789팬 디지털 과 같은 것이 있습니까? 그것은 동일 0123456789확실히 pandigital이다.
wastl

1
@ wastl 아니오, 그렇지 않습니다.
Conor O'Brien

답변:


9

Brachylog (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)


5

펄 6 , 32 바이트

{first ($_** *).comb.Set>9,1..*}

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

꽤 자명하다.

설명

{                              }  # Anonymous code block
first                     ,1..*   # First positive number that
      ($_** *)    # When the input is raised to that power
              .comb.Set    # The set of digits
                       >9  # Is longer than 9

4

자바 스크립트 (Node.js) ,  51 46  43 바이트

입력을 BigInt 리터럴로 사용합니다. 1 대신 true 반환 합니다 .

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

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


2
D : 나는 JS가 BIGINT는 이제이 잊고 계속
코너 오브라이언

난 아무것도 일치하지 않는 것 그 대신 1의 진실은에 설명 반환에 관한 약간 모호한입니다 codegolf.meta.stackexchange.com/questions/9263/...
Sparr

3
@Sparr 다음 은 현재 컨센서스입니다.
Arnauld

감사. 나는 그것을 언급하는 링크에 새로운 답변을 넣었다.
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 바이트

UltimateHawk 덕분에 -14 바이트!

(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를 사용했지만 ...)
Galen Ivanov


2

05AB1E (레거시) , 10 9 바이트

Mr. Xcoder 덕분에 1 바이트 절약

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온라인으로 사용해보십시오!
Mr. Xcoder

@ Mr.Xcoder : 예, 우리는 그 당시 암시적인 결과를 얻었습니다 N. 감사!
Emigna

1

, 19 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

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

목록 길이에 대한 입력의 거듭 제곱에 포함되지 않는 숫자가 없을 때까지 빈 문자열을 빈 목록으로 반복해서 누릅니다.

ILυ

목록의 길이를 인쇄하십시오.


왜 공감해야합니까?
Luis Mendo

1

K (ngn / k) , 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하위 함수에서 사용할 수 있도록 전역이어야합니다)

{ }{ }\ 첫 번째 함수가 false를 반환하는 동안 중간 결과를 유지하면서 두 번째 함수 (일명 while 루프)를 계속 적용

a*\:xa자릿수에 각 자릿수를 곱한 값 x( "외부 제품")

99 99#a*\:x,0 여분의 0을 추가하고 99x99로 다시 모양을 변경하면 i 번째 행을 i 항목만큼 오른쪽으로 이동하고 왼쪽에 0을 삽입합니다 (이는 입력에 더 큰 입력의 경우 99x99가 오버플로로 이어질 수 있음)

+/ 합집합

{+/2 99#,/|0 10\x,0}/ 전파 :

  • { }/ 수렴 할 때까지 계속 신청하십시오

  • 0 10\x 10으로 divmod (목록 쌍)

  • |0 10\x 10으로 moddiv

  • 2 99#,/|0 10\x,0 "div"부분이 오른쪽으로 1 자리 이동 한 상태에서 10으로 수정

  • +/ 합집합

{10>#?(+/|\0<|x)#x} -pandigital 확인 (아니요) :

  • |xx

  • 0< 0이 아닌 숫자

  • |\ 부분 최대

  • +/ sum-이것은 선행 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을받은 다음, forinitializer 로 루프를 설정 $b=1합니다.

각 반복 우리 증가 $b여부를 확인한 후 $a ^ $b(비아 pow) 전송 toCharArra를 y, sort에드 -u후, nique 플래그 -join인 문자열에 함께 에드 -nOT eQUAL 범위로 0..9또한-join 문자열로 에드.

한 입입니다. 예를 들어, 7 ^ 5 = 16807 --> "01678"와 비교 하여 "0123456789"같지 않은지 확인하고 루프를 계속합니다.

루프에서 벗어나면 $b입력에 적합한 것을 결정 하고 파이프 라인에 남겨 둡니다. 출력은 암시 적입니다.


1

자바, 108 바이트

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

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

설명

무차별 대입, a ^ b를 10 개 (또는 그 이상이지만 0에서 9까지만있을 수는 없음)의 고유 한 문자가있는 문자열을 찾을 때까지 반복합니다.

BigDecimalMath.pow충분히 정확하지 않기 때문에 (대소 문자가 실패 함 11) Double기본적으로 a를 문자열 로 변환하면 과학적 표기법이 표시되므로 pandigital 숫자를 찾는이 방법을 깨뜨리기 때문에 필수입니다.


Java 변수는 기본적으로 0에서 시작하지 않습니까? 초기화를 제거하여 2 바이트를 절약 할 수 있습니다.
대럴 호프만

@DarrelHoffman 인스턴스 변수는 가능합니다. 로컬 범위 변수는 그렇지 않습니다.
Hypino

아, 알겠습니다 Java에서 일한지 얼마되지 않아 그 기술을 잊었습니다.
Darrel Hoffman

로 변경 new java.math.BigDecimal(a).pow(++b).toString()하여 6 바이트를 절약 할 수 있습니다 (new java.math.BigDecimal(a).pow(++b)+"")(따라서 세미콜론은 람다 함수로 계산할 필요가 없습니다). 온라인 시도
Kevin Cruijssen

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

이전 코드 인 FryAmTheEggman 덕분에 2 바이트 절약 fq;l{j^QT;


기본 T연산 을 수행하는 대신 backtick를 사용하여 숫자를 문자열로 변환 하여 전원 작업을 생략 할 수 있습니다 .
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 bytes

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

Try it online!

Explanation

${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

Alternatives

28 bytes: ${Generate{Unique@S[x^_]@9}}

29 bytes: ${Generate{Unique[S[x^_]]@9}}

30 bytes: ${Generate{#Unique[S[x^_]]>9}}

31 bytes: Generate@${{#Unique[S[x^_]]>9}}

32 bytes: ${Generate[{#Unique[S[x^_]]>9}]}

33 bytes: ${If[#Unique[x^y]>9,y,x&$!-~y]}&0

34 bytes: ${If[#Unique[x^y]>9,y,$[x,y+1]]}&0

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