Golf gốc xᵗʰ của x


24

Khi buồn chán ở trường trung học (khi tôi còn một nửa tuổi hiện tại ...), tôi thấy rằng f ( x ) = x ( x -1 ) có một số tính chất thú vị, bao gồm ví dụ f tối đa cho 0 ≤ xf ( e ) và năng lượng liên kết trên mỗi nucleon của một đồng vị có thể xấp xỉ bằng 6 × f ( x 21) ...

Dù sao, viết hàm ngắn hoặc chương trình cho phép tính x thứ gốc của x cho bất kỳ số trong phạm vi của ngôn ngữ của bạn.

Ví dụ trường hợp

Đối với tất cả các ngôn ngữ

     -1   >       -1
   ¯0.2   >    -3125
   ¯0.5   >        4
    0.5   >     0.25
      1   >        1
      2   >    1.414
      e   >    1.444 
      3   >    1.442
    100   >    1.047
  10000   >    1.001

Đối với các ngôn ngữ xử lý số phức

   -2   >        -0.7071i
    i   >            4.81         
   2i   >    2.063-0.745i
 1+2i   >   1.820-0.1834i
 2+2i   >   1.575-0.1003i

Đối với các ngôn ngữ xử lý vô cực

-1/∞   >   0    (or ∞ or ̃∞)
   0   >   0    (or 1 or ∞)
 1/∞   >   0
   ∞   >   1
  -∞   >   1

Đối với các ngôn ngữ xử lý cả số nguyên và số phức

 -∞-2i   >   1      (or ̃∞)

̃∞biểu thị vô hướng .


1
Đây là một âm mưu Wolfram Alpha cho tích cực thực sự x. Nếu bạn bỏ qua các xgiới hạn trong truy vấn, Wolfram Alpha sẽ bao gồm các giá trị âm trong xđó giá trị hàm phụ thuộc vào lựa chọn "nhánh" cho logarit phức (hoặc cho hàm phức tương tự).
Jeppe Stig Nielsen

Còn đối với các ngôn ngữ không xử lý sức mạnh của số thập phân thì sao?
Leaky Nun

1
@KennyLau Hãy thoải mái đăng bài với một ghi chú cho biết như vậy, đặc biệt là nếu thuật toán sẽ hoạt động, có ngôn ngữ hỗ trợ nó.
Adám

Câu trả lời:


38

TI-BASIC, 3 byte

Ans×√Ans

TI-BASIC sử dụng mã thông báo, vì vậy Ans×√cả hai byte.

Giải trình

Anslà cách dễ nhất để cung cấp đầu vào; nó là kết quả của biểu thức cuối cùng ×√là một hàm cho gốc x'th của x, vì vậy, ví dụ 5×√32là 2.


8
Theo như tôi biết anssẽ tính các đầu vào mã hóa cứng vào các biến và dường như không phải là một phương thức nhập được chấp nhận cho golf-code . Trong trường hợp đó, vui lòng tạo một chương trình đầy đủ hoặc một chức năng.
flawr

4
@flawr Tôi có thể thấy những gì bạn nói nhưng có vẻ như nó luôn được thực hiện như thế này. Có lẽ nó đảm bảo một bài meta?
NinjaBearMonkey 24/2/2016

3
Anslà STDIN / STDOUT cho TI-Basic.
Timtech

5
stdinstdoutlà các luồng văn bản, thường cho đầu vào và đầu ra văn bản tương tác. Anskhông tương tác, không giống như một số chức năng khác trong TI-BASIC, tương tác.
Oledit

7
@flawr Lý do Ansthường được chấp nhận là vì giá trị của nó được đặt bởi bất kỳ biểu thức nào (biểu thức được phân tách bằng :). Do đó, một cái gì đó giống như 1337:prgmXTHROOTđầu vào 1337, trông rất giống đầu vào thông qua CLA trong một ngôn ngữ bình thường.
lirtosiast

23

Thạch, 2 byte

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

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

*İ    Main link. Input: n

 İ    Inverse; yield 1÷n.
*     Power (fork); compute n ** (1÷n).

Jelly không có một ngăn xếp. Một con đê theo sau một đơn nguyên trong một chuỗi đơn nguyên hành xử giống như dĩa của APL.
Dennis

3
Không, J's ^%là một cái móc (không tồn tại trong Dyalog APL), không phải là một cái nĩa. Mã Jelly và APL rất khó so sánh vì Jelly nằm từ trái sang phải. Tương đương gần nhất sẽ là ÷*⊢(cũng là một ngã ba), tính toán (1/x)**xvì hướng khác nhau. Vì các nguyên tử của Jelly không bị quá tải (chúng là đơn sắc hoặc nhuộm, nhưng không bao giờ cả hai), nên có thể có các nhánh đơn 1,2,1 và 2,1.
Dennis

Cảm ơn bạn đã làm rõ. Đương nhiên, tôi khá bị thu hút bởi Jelly (mà tôi vẫn nghĩ nên đặt tên hoặc một cái gì đó tương tự.)
Adám 23/2/2016

17

Javascript (ES2016), 11 byte

x=>x**(1/x)

Tôi hiếm khi sử dụng ES7 trên ES6.


2
x=>x**x**-1cũng hoạt động, một lần nữa cho 11 byte.
Neil

7
Tất cả đều ca ngợi toán tử lũy thừa mới!
mbomb007

15

Python 3, 17 byte

lambda x:x**(1/x)

Tự giải thích


7
Tôi khá thích lambda x:x**x**-1, nhưng nó không ngắn hơn.
xem

1
@Seeq Biểu thức của bạn có cùng độ dài, nhưng nó có lợi thế khi làm việc trong cả Python 2 và 3.
mathmandan 23/2/2016

1
Ngắn nhất của Python 2 là lambda x:x**x**-1, vì vậy nó giống nhau trong 2 và 3.
mbomb007 23/2/2016

Tôi không thể tìm thấy câu trả lời này từ lâu và thực sự khó chịu khi tôi làm vậy.

12

Haskell, 12 11 byte

Cảm ơn @LambdaFerry đã làm một số phép thuật:

(**)<*>(1/) 

Phiên bản cũ của tôi:

\x->x**(1/x)

4
(**)<*>(1/)là 11 byte.
Tiên nữ Lambda

@LambdaFerry Cảm ơn! Bạn có phiền giải thích không? Có vẻ như bạn đang thực hiện một số phép thuật với các chức năng được áp dụng một phần nhưng vì tôi khá mới với Haskell nên tôi không thực sự hiểu cách thức hoạt động của nó =)
flawr 24/2/2016

Điều này sử dụng thực tế là hàm 1 đối số có thể được coi là hàm functor ứng dụng ("đơn vị đọc"). Các <*>nhà khai thác phải mất một applicative đó tạo ra một chức năng, và một applicative đó tạo ra một giá trị, và áp dụng các chức năng với giá trị. Vì vậy, trong trường hợp này, một cách uốn cong để áp dụng hàm 2 đối số cho hàm 1 đối số.
Toán học,

2
Chức năng <*>mất 3 đối số, hai chức năng fgvà một cuộc tranh cãi x. Nó được định nghĩa là (<*>) f g x = f x (g x), tức là nó áp dụng fcho xg x. Ở đây, nó được áp dụng một phần cho fgbỏ đi x, ở đâu f = (**)g = (1/)(một hàm được áp dụng một phần khác (một phần) tính toán giá trị đối ứng của đối số của nó). Vì vậy, ( (**)<*>(1/) ) xđược (**) x ((1/) x)hoặc viết bằng ghi vào: x ** ((1/) x)và với phần giải quyết: x ** (1/x). - Lưu ý: <*>được sử dụng trong ngữ cảnh chức năng ở đây và hoạt động khác nhau trong các bối cảnh khác.
nimi

@nimi Vậy nó tương đương với Stổ hợp tức là S (**) (1 /)?
Neil

10

J, 2 byte

^%

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

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

^%  Monadic verb. Argument: y

 %  Inverse; yield 1÷y.
^   Power (hook); compute y ** (1÷y).

Tôi sẽ viết câu trả lời này. Tôi quá chậm chạp trong việc này.
bijan

1
@Bijan Hơn một năm quá chậm, dường như. : P
Dennis

Tôi hiểu rồi, tôi mới chỉ chơi golf được một tuần thôi.
Bijan

9

Bình thường, 3 byte

@QQ

Thử thách tầm thường, giải pháp tầm thường ...

(không lọc, 1 byte)

@

Điều này sử dụng tính năng nhập liệu ngầm có trong một phiên bản của Pyth để hoãn thử thách này.


Liệu giải pháp này có trước các tính năng của đầu vào ngầm?
Leaky Nun

@KennyLau Vâng, bởi một thời gian dài. Nhưng dù sao tôi cũng đã chỉnh sửa giải pháp một byte.
Doorknob


8

Java 8, 18 byte

n->Math.pow(n,1/n)

Java không ở vị trí cuối cùng?!?!

Kiểm tra với những điều sau đây:

import java.lang.Math;

public class Main {
  public static void main (String[] args) {
    Test test = n->Math.pow(n,1/n);
    System.out.println(test.xthRoot(6.0));
  }
}

interface Test {
  double xthRoot(double x);
}

Đó là sự thật rằng đó là một chức năng
Máy

6

Java, 41 byte

float f(float n){return Math.pow(n,1/n);}

Không chính xác cạnh tranh vì Java, nhưng tại sao không?


1
Chào mừng đến với PPCG! Tôi nghĩ rằng bạn có thể thiếu một loại trả về trên chức năng này.
một spaghetto

Rất tiếc, đã cẩu thả. Một câu trả lời Java 8 đã đánh bại câu trả lời này tất nhiên ...
Darrel Hoffman


6

Toán học, 8 7 4 7 byte

#^#^-1&

Nhiều câu trả lời chỉ có sẵn , và thậm chí còn ngắn hơn! Không. Theo định nghĩa, câu trả lời tiếp theo sẽ là 13 byte. (Fibonacci!) Mô hình vẫn bị phá vỡ. :


1
# ^ # ^ - 1 & tiết kiệm 1 byte.
njpipe Organ 23/2/2016

BÂY GIỜ nó được đánh golf.
Adám 23/2/2016

1
BÂY GIỜ nó được đánh golf.
Máy

1
Khi M tiết lộ được phát hành, chúng tôi sẽ cai trị bảng này.
Michael Stern

1
Chắc chắn Surdlà không hợp lệ vì nó đòi hỏi hai đối số?
LLlAMnYP


5

R, 19 17 byte

function(x)x^x^-1

-2 byte nhờ @Flounder


Tại sao không x^(1/x)? Chỉnh sửa: x^x^-1dường như làm việc quá.
Flounderer

Đó là một đoạn trích và dường như mọi người không thích đoạn trích.
Máy

@CatsAreFluffy đó là định nghĩa của hàm.
mnel

5

Ruby, 15 byte

a=->n{n**n**-1}

Ung dung:

->là toán tử lambda stabby nơi a=->ntương đương vớia = lambda {|n|}


5

NARS APL, 2 byte

√⍨

NARS hỗ trợ chức năng, cung cấp cho gốc -th của. Áp dụng đi lại (⍨) cho một hàm, khi được sử dụng một cách đơn điệu, áp dụng đối số của nó cho cả hai mặt của hàm đã cho. Do đó √⍨ xx √ x.

Các APL khác, 3 byte

⊢*÷

Đây là một chuyến tàu chức năng, tức là (F G H) x(F x) G H x. Monadic là bản sắc, dyadic *là sức mạnh, và monadic ÷là nghịch đảo. Do đó, ⊢*÷được x lớn lên tới 1 / x .


5

Python 2 - 56 byte

Câu trả lời thực tế đầu tiên, nếu tôi đúng. Sử dụng phương pháp của Newton.

n=x=input();exec"x-=(x**n-n)/(1.*n*x**-~n);"*999;print x

Chức năng ổn.
Máy

5

CJam, 6 byte

rd_W##

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

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

rd     e# Read a double D from STDIN and push it on the stack.
  _    e# Push a copy of D.
   W   e# Push -1.
    #  e# Compute D ** -1.
     # e# Compute D ** (D ** -1).


4

Giá treo , 5 byte.

ideAe

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

i # Get command line input.
d # Duplicate the top of the stack.
e # Raise the top of the stack to the power of the  second to the top element of the stack.
A # Push -1 to the stack (pre initialized variable).
e # Raise the top of the stack to the power of the second to the top element of the stack.
  # Implicitly print the stack.


4

C ++, 48 byte

#include<math.h>
[](auto x){return pow(x,1./x);}

Dòng thứ hai định nghĩa một hàm lambda ẩn danh. Nó có thể được sử dụng bằng cách gán nó cho một con trỏ hàm và gọi nó, hoặc chỉ gọi nó trực tiếp.

Dùng thử trực tuyến


Không ^hoạt động trong C ++ như trong C?
luân xa

2
@ minerguy31: ^là bitor xor trong C (và C ++).
bến tàu

4

Dải ngân hà 1.6.5 , 5 byte

'1'/h

Giải trình

'      ` Push input
 1     ` Push the integer literal
  '    ` Push input
   /   ` Divide the STOS by the TOS
    h  ` Push the STOS to the power of the TOS

x ** (1 / x)


Sử dụng

$ ./mw <path-to-code> -i <input-integer>

4

O , 6 byte

j.1\/^

Không có liên kết trực tuyến vì IDE trực tuyến không hoạt động (cụ thể, lũy thừa bị hỏng)

Giải trình:

j.1\/^
j.      push two copies of input
  1\/   push 1/input (always float division)
     ^  push pow(input, 1/input)

oh hey bạn đã làm nó yay
giai đoạn


4

Pyke (cam kết 29), 6 byte

D1_R^^

Giải trình:

D      - duplicate top
 1_    - load -1
   R   - rotate
    ^  - ^**^
     ^ - ^**^

Có thể liên kết haz xin vui lòng?
mèo

Ồ, tôi nghĩ rằng bạn có nghĩa là không có triển khai có sẵn. Có, thông dịch viên không cần phải được lưu trữ , chỉ cần một liên kết đến repo / nguồn (hoặc tài liệu) sẽ đủ
mèo

4

C # - 18 43 41 byte

float a(float x){return Math.Pow(x,1/x);}

-2 tạm biệt nhờ @VoteToC Đóng

Dùng thử

Chú thích:

Nỗ lực thực sự đầu tiên trong việc chơi golf - tôi biết tôi có thể làm điều này tốt hơn.


Chào mừng đến với đám đông! Chính vì những người mới mà tôi thực hiện những thử thách tầm thường như thế này.
Adám

Đã sửa. Cảm ơn đã thông báo cho tôi về điều này
EnragedTanker

@crayzeedude Không có vấn đề gì cả. Tốt công việc và một lần nữa, chào mừng bạn đến với PPCG!
Alex A.

C # có floatkhông?
Addison Crump

Quả thực là như vậy.
EnragedTanker

4

C, 23 byte

#define p(a)pow(a,1./a)

Điều này xác định một hàm macro pmà ước tính đến agốc của a.

Cảm ơn Dennis đã nhắc nhở tôi rằng gcckhông cần math.hphải đưa vào.

Cảm ơn @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ đã nhắc nhở tôi rằng không gian sau lần đầu tiên ) là không cần thiết.

Dùng thử trực tuyến


Với GCC, bạn không cần bao gồm math.h.
Dennis

-1 byte:#define p(a)pow(a,1./a)
Erik the Outgolfer

4

dc , 125 byte

15k?ddsk1-A 5^*sw1sn0[A 5^ln+_1^+ln1+dsnlw!<y]syr1<y1lk/*sz[si1[li*li1-dsi0<p]spli0<p]so0dsw[lzlw^lwlox/+lw1+dswA 2^!<b]dsbxp

Không giống như câu trả lời dc khác, câu trả lời này hoạt động với tất cả giá trị thực xlớn hơn hoặc bằng 1 ( 1 ≤ x). Chính xác đến 4-5 nơi sau số thập phân.

Tôi đã bao gồm một liên kết TIO ở đây, nhưng vì một số lý do, điều này gây ra lỗi phân đoạn với phiên bản ở đó ( dc 1.3) trong khi nó không có phiên bản địa phương của tôi ( dc 1.3.95).

Giải trình

dckhông hỗ trợ tăng số lên số mũ không nguyên để tính toán x^(1/x), điều này lợi dụng thực tế là:

Lợi thế

Vì vậy, để tính toán ln(x), điều này cũng tận dụng thực tế là:

Lợi thế2

có tích phân xác định từ 1 to (b = x)được tính gần đúng bằng số theo gia số của 10^-5việc sử dụng công thức tính tổng sau:

Công thức tính tổng.

Tổng kết quả sau đó được nhân với 1/xđể có được ln(x)/x. e^(ln(x)/x)cuối cùng được tính bằng cách sử dụng e^xDòng Maclaurin theo 100 thuật ngữ như sau:

e ^ x Dòng Maclaurin.

Điều này dẫn đến kết quả đầu ra tương đối chính xác của chúng tôi x^(1/x).


1
+1 Đây phải là một trong những câu trả lời dc tốt nhất hiện có. Tôi đang đánh dấu trang này!
Kritixi Lithos

@KritixiLithos Cảm ơn bạn! Tôi đánh giá cao các từ loại. :)
R. Kap

3

PHP 5.6, 32 30 29 byte

function($x){echo$x**(1/$x);}

hoặc là

function($x){echo$x**$x**-1;}

30-> 29, cảm ơn bạn Dennis!

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.