Quyền hạn khép kín


13

Cho số nguyên n, xuất số mũ nhỏ nhất elớn hơn 1 sao cho n^echứa nchuỗi con.

Ví dụ, đối với 25, câu trả lời phải là 2, như 25 ^ 2 = 625, chứa 25chuỗi con, nhưng câu trả lời 13phải 1013 ^ 10 = 137858491849, vì vậy, 10là số mũ thấp nhất mà kết quả chứa 13dưới dạng chuỗi con.

Quy tắc

  • Quy tắc I / O tiêu chuẩn
  • Áp dụng sơ hở tiêu chuẩn
  • Mã ngắn nhất tính bằng byte thắng
  • n sẽ luôn là một số nguyên lớn hơn 0

Các trường hợp thử nghiệm

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)

Tập lệnh Python để tạo 1000 câu trả lời đầu tiên



Câu trả lời:



4

R , 69 44 byte

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

Chức năng ẩn danh. Hoạt động trên diện rộng ikhi nđược chuyển đổi thành BigZ (xem TIO). Cảm ơn đã dạy tôi vài thứ Giuseppe và digEmAll!

Hãy thử trực tuyến!


61 byte - bạn có thêm một khoảng trống trong n, ?n^ipastechuyển đổi thành charactermặc định :-)
Giuseppe

56 byte - trả về ilà đủ.
Giuseppe

2
Không cần phải dán 44 byte , grepl chuyển đổi thành ký tự theo mặc định :)
digEmAll

Vấn đề là nó "bị lỗi" khi số mũ trở nên lớn do độ chính xác của dấu phẩy động và thực tế là số lớn được chuyển thành chuỗi theo ký hiệu khoa học. Ví dụ 15 trả về 17 trong khi nó là 26. Vì vậy, về mặt lý thuyết, điều này hoạt động, nhưng trong thực tế, chúng ta nên sử dụng gói Big Integer hoặc một cái gì đó tương tự ...
digEmAll 29/11/18

1
@digEmAll cho BigInt, bạn chỉ có thể buộc đầu vào trở thành một bigInt như BigZ từ gmp và nó vẫn hoạt động, ngoại trừ có thể chuyển đổi ithành bigZ
Giuseppe

3

Python 2 , 42 41 byte

-1 byte nhờ rjan Johansen (trở lại trực tiếp y)

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

Hãy thử trực tuyến!

Giải thích / Ungolfed

Hàm đệ quy cố gắng từ 2,3Giáo dục cho đến khi chúng tôi thành công:

# 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)

Hãy thử trực tuyến!



@ RjanJohansen: Thật kỳ lạ, tôi nghĩ tôi đã thử nó, không chắc chắn chính xác những gì tôi đã bỏ lỡ. Cảm ơn rất nhiều!
ბიმო

Tôi đã phải trao đổi phép nhân để tránh một khoảng trắng, có lẽ vậy không?
Ørjan Johansen

@ RjanJohansen: Có lẽ là vậy, vâng.
ბიმო

3

JavaScript (ES6 / Node.js),  41  40 byte

Đã lưu 1 byte nhờ @Shaggy

Lấy đầu vào dưới dạng Số (hoạt động cho n<15 ) hoặc bằng chữ BigInt .

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

Hãy thử trực tuyến!


1
Kết thúc với một giải pháp rất giống với giải pháp của bạn cho 40 byte
Shaggy

@Shaggy Bạn cần sử dụng các số nguyên lớn, nếu không nó sẽ không trả lời đúng trong một số trường hợp kiểm tra. Cuối cùng, nó có cùng một n=>(g=x=>giá trị $ {x * = n}.match(n)?2n:-~g(x))(n)
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz, nói chung, chúng tôi không cần phải lo lắng về các vấn đề chính xác nhưng nó cũng sẽ hoạt động với BigInts.
Xù xì

Điều nhỏ nhặt nhưng nếu điều này sử dụng BigInt thì tiêu đề không phải là JavaScript (Node.js)? ES6 chưa có BigInt.
Shieru Asakoto

@ShieruAsakoto Bạn nói đúng. Ý định ban đầu của tôi là giải thích rằng nó hoạt động với Số hoặc BigInt. Bây giờ làm rõ.
Arnauld

3

APL (Dyalog Unicode) , 25 23 17 byte

-2 byte nhờ @Erik the Outgolfer

-6 byte nhờ @ngn

cảm ơn @ H.PWiz vì đã tạo mã không yêu cầu tùy chỉnh ⎕pp(độ chính xác in)

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

Hãy thử trực tuyến!

⊢⍟×⍣(∨/(⍕÷)⍷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

Điều này thất bại trong 17 vì nó tìm thấy 17trong 17 ^ 14 = 1.6837782655940093E17, nhưng không biết câu trả lời chính xác nào sẽ hỗ trợ
Kritixi Lithos

@Cowsquack Tôi chỉ cần tùy ý điều chỉnh ⎕PPtôi đoán
Quintec

Đợi đã, thậm chí sẽ không hoạt động
Quintec





2

05AB1E , 7 byte

∞>.Δm¹å

Hãy thử trực tuyến!

Giải trình:

∞>.Δ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 byte

Chỉnh sửa: Đã xóa ;run;ở cuối, vì nó được ngụ ý bởi phần cuối của đầu vào.

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

Dữ liệu đầu vào được nhập sau cards;câu lệnh, như vậy:

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

Tạo một tập dữ liệu achứa đầu vào nvà đầu ra e.

nhập mô tả hình ảnh ở đây


Đây có vẻ là một định nghĩa hàm hoặc tương đương (tôi giả sử là "macro") Điều này có nghĩa là yêu cầu nó được gọi bằng các đối số (nghĩa là %p(n)) là hoàn toàn tốt, tuy nhiên đầu ra phụ thuộc vào việc macros trong SAS có thể trả về giá trị hay không. Nếu họ có thể trả về, "đầu ra" phải bằng cách trả về kết quả, nếu không, nó sẽ xuất nó bằng bất kỳ phương thức đầu ra tiêu chuẩn nào được hỗ trợ
Skidsdev

@Skidsdev Cảm ơn bạn đã phản hồi! SAS hơi kỳ lạ; macro không thực sự hoạt động, chúng chỉ là ngôn ngữ thay thế văn bản tạo mã SAS 'thực' khi được biên dịch. Tôi đã xem xét cách những người khác đã thực hiện I / O cho SAS trong codegolf và chỉnh sửa câu trả lời của tôi dựa trên đó, loại bỏ các báo cáo vĩ mô.
Josh Eller



1

Java (OpenJDK 8) , 84 byte

Lấy đầu vào dưới dạng Chuỗi đại diện cho số và xuất ra một int.

Hầu hết các byte đến từ mức độ dài của BigDecimalnhu cầu cần thiết để xử lý số lượng lớn.

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

Hãy thử trực tuyến!


Làm thế nào nó hoạt động

Điều này khá đơn giản nhưng tôi sẽ bao gồm lời giải thích cho hậu thế;

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

Than , 19 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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

Lặp lại cho đến khi độ dài danh sách ít nhất là 2 và sản phẩm của nó chứa đầu vào ...

⊞υIθ

... chuyển đầu vào thành số nguyên và đẩy nó vào danh sách.

ILυ

Truyền độ dài của danh sách thành chuỗi và in ngầm.


0

Python 3 , 63 58 byte

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

Hãy thử trực tuyến!

Python2 có thể sẽ ngắn hơn, nhưng tôi thích sử dụng 3. Sắp tới một lambda rất khó, nhưng tôi đang thử một vài thứ.


Tôi không biết python, nhưng nó không ngắn hơn bằng lambda?
Luis felipe De jesus Munoz

@LuisfelipeDejesusMunoz Tôi bắt đầu cố gắng làm điều đó, nhưng IDLE phàn nàn về việc để trần whiletrong lambda. Có lẽ tôi có thể thử một số cách khác ..
Gigaflop

Có thể một số chức năng đệ quy?
Luis felipe De jesus Munoz

2
Xác định etrong danh sách đối số (ví dụ. def f(n,e=2)) Và n**enên lưu một số byte, Python 2 thực sự sẽ lưu khá nhiều byte.
ბიმო

@LuisfelipeDejesusMunoz Lambdas không giống như các chức năng. Phía bên tay phải của lambda phải là một biểu thức duy nhất và các lệnh điều khiển luồng như forhoặc whilekhông hoạt động.
DJMcMayhem

0

MathGolf , 10 byte

ôkï⌠#k╧▼ï⌠

Hãy thử trực tuyến!

Giải trình

Điều này cảm thấy vô cùng lãng phí, phải đọc đầu vào rõ ràng hai lần, phải tăng bộ đếm vòng lặp hai lần.

ô            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 byte

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

Hãy thử trực tuyến!

-1 byte: đã thay đổi vòng lặp thành while (nhờ Skidsdev )
-14 byte: lạm dụng xử lý chuỗi kỳ lạ của C # để xóa ToString() các cuộc gọi

Cần sử dụng thư viện BigInteger của C # , vì các loại C # số tiêu chuẩn (int, double, long, ulong, v.v.) không thành công đối với một số số lớn hơn (bao gồm 12, 15 và 17).

Ung dung:

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

Bạn có thể tiết kiệm 1 byte bằng cách chuyển sang vòng lặp while
Skidsdev



0

PowerShell (V3 +), 67 byte

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


0

J , 26 byte

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

Hãy thử trực tuyến!

LƯU Ý: Tôi đã thay đổi trận chung kết ]thành x:trong TIO, để làm cho các bài kiểm tra vượt qua cho các số nguyên lớn hơn.


0

Oracle SQL, 68 byte

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

Có một giả định rằng số nguồn được lưu trữ trong một bảng t(x), ví dụ

with t as (select 95 x from dual)

Kiểm tra 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.