最小の多様化指数


20

pandigital数が少なくとも一度0~9からすべての数字を含む整数です。1234567890、1902837465000000、および9023289761326634265はすべてpandigitalです。このチャレンジでは、123456789 = 0123456789であっても、123456789などの数字は0を含まないため、パンデジタルではありません。

多様な整数の対は、整数の対であるよう pandigitalあります。は多様化指数と呼ばれます。ababb

課題:整数与えられると、対応する最小化する多様化指数見つけます。これはであるため、バイト単位の最短プログラムが優先されます。ab

(このような指数が存在すると想定できます。つまり、10の累乗などの無効な入力がプログラムに与えられることはありません。)

ソリューションは、少なくとも指定されたテストケースを処理できる必要がありますが、理論的にはすべての有効な入力を処理する必要があります。

これは、OEISのA090493です。

テストケース

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が追加されました。
コナーオブライエン

負の指数は制限を超えていますか?
sudo rm -rfスラッシュ

1
123456789パンデジタルのようなものはありますか?これはに等しく0123456789、これは間違いなくパンデジタルです。
wastl

1
@wastlいいえ、ありません。
コナーオブライエン

回答:


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)



4

JavaScript(Node.js) 51 46  43バイト

入力をBigIntリテラルとして受け取ります。1の代わりにtrue返します。

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

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


2
私はJSが今bigintを持っていることを忘れ続けています:D
コナーオブライエン

私は、trueを返す代わりの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バイト

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))))
究極ホーク

@UltimateHawkありがとうございます!デフォルトのパラメーターを忘れていました...(ヘルパー関数もデフォルトのパラメーターbを使用していました...)
ガレン・イワノフ


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オンラインで試してください!
ミスターXcoder

@ Mr.Xcoder:ええ、そのときの暗黙的な出力がありNました。ありがとう!
エミグナ

1

、19バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

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

リストの長さに対する入力のべき乗に含まれない数字がなくなるまで、空の文字列を空のリストに繰り返しプッシュします。

ILυ

リストの長さを印刷します。


なぜ下票なのか?
ルイスメンドー

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個の10進数の逆のリストとして数値を表します-引数に対してそれを行います

a::グローバル変数に割り当てますa(kには閉包がありません。aサブ関数で使用できるようにグローバルである必要があります)

{ }{ }\ 最初の関数がfalseyを返している間、2番目の関数(別名whileループ)を適用し続け、中間結果を保持します

a*\:xの各a桁にの各桁を掛けxます(「外積」)

99 99#a*\:x,0 余分な0の列を追加し、99x99に再度整形します。これにより、i番目の行がi項目だけ右に移動し、左側に0が挿入されます(これはテストで機能します。

+/

{+/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のmoddiv

  • +/

{10>#?(+/|\0<|x)#x} -pandigitalの(ではない)チェック:

  • |xx

  • 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]どこでも使用する必要があるだけです。入力を受け取り$afor初期化子でループを設定します$b=1

我々は増分各反復$bするかどうかを確認した後$a ^ $b(ビアpow)送信toCharArra ysortとED -uniqueフラグは、次に-join文字列に一緒にEDがある-nOT e範囲にQUAL 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;};

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

説明

10個(またはそれ以上、ただし0〜9個のみ)の一意の文字列が見つかるまでa ^ bをループするブルートフォース。

BigDecimalMath.pow十分に正確ではないため(大文字と小文字が区別されない11)、Doubleデフォルトでaを文字列に変換すると科学表記法が表示されるため、この方法でpandigital番号を見つけることができません。


Java変数はデフォルトで0から始まりませんか?初期化を排除することで2バイトを節約できます。
ダレルホフマン

@DarrelHoffmanインスタンス変数は、そうです。ローカルスコープの変数はそうではありません。
ヒピノ

ああ、大丈夫。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

前のコード、FryAmTheEggmanのおかげで2バイト節約 fq;l{j^QT;


バック変換を使用して、ベース操作を行う代わりに数値を文字列に変換することができます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

アタッシェ、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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.