自己完結型の力


13

integer を指定すると、部分文字列として含まれる1より大きいn最小指数を出力en^eますn

たとえば、の25場合、回答は2、as 25 ^ 2 = 62525サブストリングとして含まれる13はずですが、の回答は10、as 13 ^ 10 = 13785849184910結果が13サブストリングとして含まれる最小指数である必要があります。

ルール

  • 標準I / Oルール
  • 標準的な抜け穴が適用されます
  • バイト単位の最短コードが勝つ
  • n 常により大きい整数になります 0

テストケース

1 => 2   (1 ^ 2 = 1)
2 => 5   (2 ^ 5 = 32)
3 => 5   (3 ^ 5 = 243)
4 => 3   (4 ^ 3 = 64)
5 => 2   (5 ^ 2 = 25)
6 => 2   (6 ^ 2 = 36)
7 => 5   (7 ^ 5 = 16807)
8 => 5   (8 ^ 5 = 32768)
9 => 3   (9 ^ 3 = 729)
10 => 2  (10 ^ 2 = 100)
11 => 11 (11 ^ 11 = 285311670611)
12 => 14 (12 ^ 14 = 1283918464548864)
13 => 10 (13 ^ 10 = 137858491849)
14 => 8  (14 ^ 8 = 1475789056)
15 => 26 (15 ^ 26 = 3787675244106352329254150390625)
16 => 6  (16 ^ 6 = 16777216)
17 => 17 (17 ^ 17 = 827240261886336764177)
18 => 5  (18 ^ 5 = 1889568)
19 => 11 (19 ^ 11 = 116490258898219)
20 => 5  (20 ^ 5 = 3200000)
25 => 2  (25 ^ 2 = 625)
30 => 5  (30 ^ 5 = 24300000)
35 => 10 (35 ^ 10 = 2758547353515625)
40 => 3  (40 ^ 3 = 64000)
45 => 5  (45 ^ 5 = 184528125)
50 => 2  (50 ^ 2 = 2500)
55 => 11 (55 ^ 11 = 13931233916552734375)
60 => 2  (60 ^ 2 = 3600)
65 => 17 (65 ^ 17 = 6599743590836592050933837890625)
70 => 5  (70 ^ 5 = 1680700000)
75 => 3  (75 ^ 3 = 421875)
80 => 5  (80 ^ 5 = 3276800000)
85 => 22 (85 ^ 22 = 2800376120856162211833149645328521728515625)
90 => 3  (90 ^ 3 = 729000)
95 => 13 (95 ^ 13 = 51334208327950511474609375)
100 => 2 (100 ^ 2 = 10000)

最初の1000個の回答を生成するPythonスクリプト



回答:



4

R69 44バイト

function(n,i=2){while(!grepl(n,n^i))i=i+1;i}

無名関数。BigZに変換されると大規模iに機能nします(TIOを参照)。ジュゼッペとdigEmAllを教えてくれてありがとう!

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


61バイト -余分なスペースがn, ?n^iあり、デフォルトでpaste変換さcharacterれます:
ジュゼッペ

56バイト -返すiだけで十分です。
ジュゼッペ

2
44バイトの貼り付けは不要です。greplはデフォルトで文字に変換されます:)
digEmAll

問題は、浮動小数点の精度と、科学表記法で大きな数値が文字列に変換されるという事実のために、指数が大きくなると「障害」になることです。たとえば、15は17を返しますが、26であるべきです。したがって、理論的にはこれは機能しますが、実際にはBig Integerパッケージまたはそのようなものを使用する必要があります
...-digEmAll

1
@digEmAllのBigIntのために、あなただけのGMPからBigZようBIGINTする入力を強制することができ、それはまだ仕事は、変換するための可能性除く外なければならないiだけでなくbigZに
ジュゼッペ

3

Python 242の 41バイト

ØrjanJohansenのおかげで-1バイト(戻るy直接)

f=lambda x,y=2:y*(`x`in`x**y`)or f(x,y+1)

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

説明/ゴルフなし

しようとして再帰関数2,3我々は成功するまで:

# Start recursion with y=2
def f(x,y=2):
    # If we succeed, we arrived at the desired y
    if `x` in `x**y`:
        return y
    # Else we try with next y
    else:
        return f(x, y+1)

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



@ØrjanJohansen:奇妙なことに、私はそれを試したと思ったが、私が見逃したものは正確にはわからなかった。どうもありがとう!
ბიმო

スペースを避けるために乗算を交換する必要がありましたが、多分それでしたか?
Ørjanヨハンセン

@ØrjanJohansen:おそらくそれでしたね。
ბიმო

3

JavaScript(ES6 / Node.js)、 41  40バイト

@Shaggyのおかげで1バイト節約

入力を数値n<15)またはBigIntリテラルとして受け取ります。

n=>(g=x=>`${x*=n}`.match(n)?2:-~g(x))(n)

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


1
最終的に40バイトの
Shaggy

@Shaggy大きな整数を使用する必要があります。そうしないと、一部のテストケースで正しい答えが返されません。最後に、同じバイトカウントn=>(g=x=>$ {x * = n}があります.match(n)?2n:-~g(x))(n)
ルイスフェリペデジェススムニョス

1
@LuisfelipeDejesusMunoz、通常、精度の問題を心配する必要はありませんが、BigIntsでも機能します。
シャギー

些細なことですが、これがBigIntを使用する場合、タイトルはJavaScript(Node.js)であってはなりませんか?ES6にはBigIntがまだありません。
浅琴しえる

@ShieruAsakotoそうですね。私の最初の意図は、NumberまたはBigIntで機能することを説明することでした。明確になりました。
アーナウルド

3

APL(Dyalog Unicode)25 23 17バイト

@Erik the Outgolferのおかげで-2バイト

@ngnのおかげで-6バイト

@ H.PWizに感謝します。コードをカスタマイズする必要はありません⎕pp(印刷精度)

⊢⍟×⍣(∨/(⍕÷)⍷0⍕⊣)⍨

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

⊢⍟×⍣(∨/(⍕÷)⍷0⍕⊣)⍨
  ×⍣(          )⍨ generates a geometric progression by repeatedly multiplying the argument
                   by its original value
     ∨/(⍕÷)⍷0⍕⊣   the progression stops when this function, applied between the new and the
                   last old member, returns true
         ÷        the original argument (ratio between two consecutive members)
                 formatted as a string
                 occurrences within...
            0    ...the formatted (with 0 digits after the decimal point)...
                 ...new member
     ∨/           are there any?
⊢⍟                use logarithm to determine what power of  we reached

1717 ^ 14 = 1.6837782655940093E17 で検出されるため、これは17で失敗しますが、正確な回答がサポートする必要があるものは
idk

@Cowsquack私はちょうど任意に調整する必要があり⎕PP、私は推測する
Quintec

ああでも動作しませんことを待つ
Quintec






2

SAS、71 66バイト

編集:;run;入力の終わりによって暗示されているため、最後に削除されました。

data a;input n;e=1;do until(find(cat(n**e),cat(n)));e+1;end;cards;

入力データはcards;、次のようにステートメントの後に入力されます。

data a;input n;e=1;do until(find(cat(n**e),cat(n)));e+1;end;cards;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

a入力nと出力を含むデータセットを生成しますe

enter image description here


これは、関数定義、または同等のように見えます(実際には「マクロ」と見なされます)。これは、引数(つまり%p(n))を使用して呼び出す必要があることを意味しmacroます。それらが返せる場合、「出力」は結果を返すことである必要があります。そうでない場合は、サポートされている標準出力方法で出力する必要があります
Skidsdev

@Skidsdevフィードバックをありがとう!SASは少し奇妙です。マクロは実際には関数ではなく、コンパイル時に「実際の」SASコードを生成する単なるテキスト置換言語です。他の人がコードゴルフでSASのI / Oをどのように行ったかを見て、それに基づいて回答を編集し、マクロステートメントを削除しました。
ジョシュ



1

Java(OpenJDK 8)、84バイト

入力を数値を表す文字列として受け取り、intを出力します。

ほとんどのバイトBigDecimalは、大きな数を処理するために必要な冗長性に由来します。

n->{int i=1;while(!(new java.math.BigDecimal(n).pow(++i)+"").contains(n));return i;}

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


使い方

これはかなり単純ですが、後世の説明を含めます。

n->{                                    // Lamdba taking a String and returning an int
    int i=1;                            // Initialises the count
    while(!                             // Loops and increments until
        (new java.math.BigDecimal(n)    // Creates a new BigDecimal from the input n
            .pow(++i)+"")               // Raises it to the power of the current count
            .contains(n)                // If that contains the input, end the loop
    );
    return i;                           // Return the count
}




0

、19バイト

W∨‹Lυ²¬№IΠυθ⊞υIθILυ

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

W∨‹Lυ²¬№IΠυθ⊞

リストの長さが少なくとも2になり、その製品に入力が含まれるまで繰り返します...

⊞υIθ

...入力を整数にキャストし、リストにプッシュします。

ILυ

リストの長さを文字列にキャストし、暗黙的に印刷します。


0

Pythonの363の 58バイト

def f(n,e=2):
	while str(n)not in str(n**e):e+=1
	return e

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

Python2はおそらくもっと短いだろうが、私は3を使用するのが好きだ。ラムダを使ってやってくるのは難しいが、私はいくつかのことを試している。


私はPythonを知らないが、ラムダを使用して短くなりませんか?
ルイスフェリペデジェススムニョス

@LuisfelipeDejesusMunoz私はそれをやろうとして始めましたが、IDLE whileはラムダに裸があることに不満を言いました。たぶん私は他のいくつかの方法を試すことができます
..-Gigaflop

おそらくいくつかの再帰関数?
ルイスフェリペデジェススムニョス

2
earguments-list(つまりdef f(n,e=2))で定義し、n**eいくつかのバイトを節約する必要がありますが、Python 2は実際にかなりのバイトを節約します。
ბიმო

@LuisfelipeDejesusMunoz Lambdasは関数のようなものではありません。ラムダの右側は単一の式である必要があり、フロー制御コマンドのようなforまたは機能whileしません。
ジェームズ

0

MathGolf、10バイト

ôkï⌠#k╧▼ï⌠

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

説明

これは、入力を2回明示的に読み取る必要があり、ループカウンターを2回インクリメントする必要があるため、非常に無駄です。

ô            start block of length 6
 k           read integer from input
  ï          index of current loop, or length of last loop
   ⌠         increment twice
    #        pop a, b : push(a**b)
     k       read integer from input
      ╧      pop a, b, a.contains(b)
       ▼     do while false with pop
        ï    index of current loop, or length of last loop
         ⌠   increment twice


0

C#(.NET Core)104 89バイト

a=>{int i=2;while(!(System.Numerics.BigInteger.Pow(a,i)+"").Contains(a+""))i++;return i;}

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

-1バイト:forループをwhileに変更(Skidsdevに感謝)
-14バイト: 呼び出しを削除するためにC#の奇妙な文字列処理を悪用ToString()

C#のBigIntegerライブラリを使用する必要があります。標準の数値C#型(int、double、long、ulongなど)は、一部の大きな数値(12、15、および17を含む)で失敗します。

ゴルフをしていない:

a => {
    int i = 2;                                          // initialize i

    while( !(System.Numerics.BigInteger.Pow(a,i) + "")  // n = a^i, convert to string
                                .Contains(a + ""))      // if n doesn't contain a
        i++;                                                // increment i

    return i;
}




0

PowerShell(V3 +)、67バイト

function f{param($n)$i=1;do{}until([math]::pow($n,++$i)-match$n)$i}


0

J, 26 bytes

2>:@]^:(0=[+/@E.&":^)^:_~]

Try it online!

NOTE: I've changed the final ] to x: in the TIO, to make the tests pass for larger integers.


0

Oracle SQL, 68 bytes

select max(level)+1 from dual,t connect by instr(power(x,level),x)=0

There is an assumption that source number is stored in a table t(x), e.g.

with t as (select 95 x from dual)

Test in SQL*Plus

SQL> with t as (select 95 x from dual)
  2  select max(level)+1 from dual,t connect by instr(power(x,level),x)=0
  3  /

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