自给自足的权力


13

给定integer n,输出e大于1 的最小指数,n^e其中包含n作为子字符串。

例如,对于25,答案应为2,作为25 ^ 2 = 625,包含25为子字符串,但是对的答案13应为10,作为13 ^ 10 = 137858491849,因此10结果的最低指数为包含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)

Python脚本生成前1000个答案



Answers:



4

R69 44字节

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

匿名函数。转换为BigZ in可大批量运行(请参见TIO)。感谢您教我一些Giuseppe和digEmAll!

在线尝试!


61字节 -您在其中有一个额外的空间n, ?n^i并默认paste转换为character:-)
Giuseppe

56个字节 -返回i应该足够。
朱塞佩

2
无需粘贴44个字节,默认情况下grepl会转换为字符:)
digEmAll

问题在于,由于浮点数的准确性以及将大数以科学计数法转换为字符串的事实而导致指数变大时,这是“错误的”。例如15返回17而应该返回26。因此,从理论上讲,这是
可行的

1
@digEmAll为BigInt有你可以只力输入要像BigZ从GMP一个BIGINT,它应该仍然工作,可能除了转换i到bigZ以及
朱塞佩

3

Python 2中42 41个字节

-1感谢字节与Orjan约翰森(返回ydirectely)

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:很奇怪,我以为我尝试过了,不确定我错过了什么。非常感谢!
ბიმო

我不得不交换乘法以避免空格,也许是吗?
与Orjan约翰森

@ØrjanJohansen:可能就是这样。
ბიმო

3

JavaScript(ES6 / Node.js), 41个  40字节

@Shaggy节省了1个字节

n<15

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)
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz,通常我们不需要担心精度问题,但它也可以与BigInts一起使用。
毛茸茸的

小事,但如果使用BigInt,标题应该不是JavaScript(Node.js)吗?ES6还没有BigInt。
Shieru Asakoto

@ShieruAsakoto你是对的。我最初的目的是解释它可以与Number或BigInt一起使用。现在澄清。
Arnauld

3

APL(Dyalog Unicode)25 23 17字节

-2个字节,感谢@Erik the Outgolfer

-6个字节,感谢@ngn

感谢@ 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

这对于17失败,因为它找到1717 ^ 14 = 1.6837782655940093E17,但对应该支持的精度答案表示
怀疑

@Cowsquack我只需要任意调整⎕PP我猜
Quintec

哦,等等,那根本行不通
Quintec '18




2

Brachylog,8个字节

;.^s?∧ℕ₂

在线尝试!

说明

;.^         Input ^ Output…
   s?       …contains the Input as a substring…
     ∧      …and…
      ℕ₂    …the Output is in [2,+∞)

2

05AB1E,7个字节

∞>.Δm¹å

在线尝试!

说明:

∞>.Δm¹å  //full program
∞        //push infinite list, stack = [1,2,3...]
 >       //increment, stack is now [2,3,4...]
  .Δ     //find the first item N that satisfies the following
     ¹   //input
      å  //is in
    m    //(implicit) input **  N

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

在此处输入图片说明


这看起来像是一个函数定义或等效函数(我假设实际上是一个“宏”),这意味着要求使用参数(即%p(n))调用它是完全可以的,但是输出取决于macroSAS中的s 是否可以返回值。如果可以返回,则“输出”应通过返回结果,否则应通过支持的任何标准输出方法将其输出
Skidsdev

@Skidsdev感谢您的反馈!SAS有点奇怪;宏并不是真正的函数,它们只是一种文本替换语言,在编译时会生成“真实的” SAS代码。我了解了其他人如何在codegolf中完成SAS的I / O,并以此为基础编辑了我的答案,摆脱了宏语句。
Josh Eller '18


1

干净,99字节

import StdEnv,Text,Data.Integer
$n=hd[p\\p<-[fromInt 2..]|indexOf(""<+n)(""<+prod(repeatn p n))>=0]

在线尝试!

如果不需要为庞大的数字工作,那么

干净,64字节

import StdEnv,Text
$n=hd[p\\p<-[2..]|indexOf(""<+n)(""<+n^p)>=0]

在线尝试!


1

Java(OpenJDK 8),84字节

将输入作为代表数字的String并输出一个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 3中63 58个字节

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

在线尝试!

Python2可能会更短一些,但是我喜欢使用3。很难通过lambda来启动,但是我正在尝试一些方法。


我不了解python,但是使用lambda会更短吗?
路易斯·费利佩·德·耶稣·穆诺兹

@LuisfelipeDejesusMunoz我开始尝试这样做,但是IDLE抱怨自己while的lambda 裸了。也许我可以尝试其他方法
。– Gigaflop

也许一些递归功能?
路易斯·费利佩·德·耶稣·穆诺兹

2
定义e参数列表(即def f(n,e=2))并n**e应保存一些字节,Python 2确实可以保存一些字节。
ბიმო

@LuisfelipeDejesusMunoz Lambdas不喜欢函数。Lambda的右侧必须是单个表达式,并且流控制命令类似forwhile不起作用。
詹姆斯

0

MathGolf,10个字节

ôkï⌠#k╧▼ï⌠

在线尝试!

说明

这感觉非常浪费,必须显式地读取输入两次,必须将循环计数器增加两次。

ô            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;
}

您可以通过切换到while循环
Skidsdev,



0

PowerShell(V3 +),67字节

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


0

J,26个字节

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

在线尝试!

注:我已经改变了最后],以x:在TIO,使测试通过较大的整数。


0

Oracle SQL,68个字节

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

假设源编号存储在表中t(x),例如

with t as (select 95 x from dual)

在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.