เล่นกอล์ฟรากxᵗʰของ x


24

ในขณะที่เบื่อในไฮสคูล (ตอนที่ฉันอายุน้อยกว่าครึ่งอายุของฉัน ... ) ฉันพบว่าf ( x ) = x ( x -1 )มีคุณสมบัติที่น่าสนใจรวมถึงเช่นว่าfสูงสุดสำหรับ 0 ≤ xคือf ( e ) และพลังงานความผูกพันต่อนิวเคลียสของไอโซโทปสามารถประมาณได้เป็น6 × f ( x ÷ 21) ...

อย่างไรก็ตามเขียนฟังก์ชั่นที่สั้นหรือโปรแกรมที่คำนวณ x THรากของ x ตัวเลขใด ๆ ในโดเมนภาษาของคุณ

ตัวอย่างกรณี

สำหรับทุกภาษา

     -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

สำหรับภาษาที่จัดการกับตัวเลขที่ซับซ้อน

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

สำหรับภาษาที่จัดการกับอนันต์

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

สำหรับภาษาที่จัดการทั้งอินฟินิตี้และตัวเลขที่ซับซ้อน

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

̃∞หมายถึงอินฟินิตี้กำกับ


1
นี่คือพล็อต Wolfram Alphaxจริงในเชิงบวก หากคุณไม่ใช้xขีด จำกัด ในแบบสอบถาม Wolfram Alpha จะรวมค่าลบที่ค่าxฟังก์ชันขึ้นอยู่กับตัวเลือก "branch" สำหรับลอการิทึมแบบซับซ้อน (หรือฟังก์ชันซับซ้อนที่คล้ายกัน)
Jeppe Stig Nielsen

เกี่ยวกับภาษาที่ไม่รองรับพลังของทศนิยม?
Leun Nun

1
@KennyLau รู้สึกฟรีที่จะโพสต์ด้วยข้อความที่บอกว่าโดยเฉพาะอย่างยิ่งหากอัลกอริทึมจะทำงานได้มีภาษาที่รองรับ
อดัม

คำตอบ:


38

TI-BASIC 3 ไบต์

Ans×√Ans

TI-BASIC ใช้โทเค็นดังนั้นAnsและ×√ทั้งคู่เป็นหนึ่งไบต์

คำอธิบาย

Ansเป็นวิธีที่ง่ายที่สุดในการป้อนข้อมูล มันเป็นผลลัพธ์ของการแสดงออกครั้งสุดท้าย ×√เป็นฟังก์ชันสำหรับ x'th root ของ x ดังนั้นตัวอย่างเช่น5×√322


8
เท่าที่ผมทราบansจะนับเป็น hardcoding ปัจจัยการผลิตลงในตัวแปรและดูเหมือนจะไม่เป็นวิธีการป้อนข้อมูลได้รับการยอมรับสำหรับรหัสกอล์ฟ ในกรณีนี้โปรดสร้างโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ
ข้อบกพร่อง

4
@ flawr ฉันเห็นสิ่งที่คุณพูด แต่ดูเหมือนว่ามันจะทำแบบนี้มาตลอด บางทีมันอาจจะรับประกันการโพสต์เมตา
NinjaBearMonkey

3
Ansคือ STDIN / STDOUT สำหรับ TI-Basic
Timtech

5
stdinและstdoutเป็นสตรีมข้อความซึ่งปกติแล้วจะเป็นอินพุตและเอาต์พุตข้อความโต้ตอบ Ansไม่ได้มีการโต้ตอบซึ่งแตกต่างจากฟังก์ชั่นอื่น ๆ ใน TI-BASIC ซึ่งเป็นแบบโต้ตอบ
โอเลเท

7
@flawr เหตุผลที่Ansยอมรับได้มักจะเป็นเพราะค่าของมันถูกตั้งค่าโดยการแสดงออกใด ๆ (การแสดงออกจะถูกคั่นด้วย:) ดังนั้นสิ่งที่ต้องการ1337:prgmXTHROOTจะป้อน 1337 ซึ่งมีลักษณะเหมือนการป้อนข้อมูลผ่าน CLA ในภาษาปกติ
lirtosiast

23

เยลลี่ 2 ไบต์

ลองออนไลน์!

มันทำงานอย่างไร

*İ    Main link. Input: n

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

เยลลี่ไม่มีสแต็ค นักเลงที่ตามมาด้วยพระในห่วงโซ่ monadic ทำหน้าที่เหมือนส้อมของ APL
เดนนิส

3
ไม่ J's ^%เป็นตะขอ (ซึ่งไม่มีอยู่ใน Dyalog APL) ไม่ใช่ส้อม รหัส Jelly และ APL นั้นยากที่จะเปรียบเทียบเนื่องจาก Jelly เป็นซ้ายไปขวา ความใกล้เคียงที่สุดที่ใกล้เคียงที่สุดคือ÷*⊢(เช่นทางแยก) ซึ่งคำนวณ(1/x)**xเนื่องจากทิศทางที่ต่าง เนื่องจากอะตอมของเยลลี่นั้นไม่ได้มีมากเกินไป (มันเป็นแบบ monadic หรือ dyadic แต่ไม่เคยมีทั้งคู่) จึงสามารถมี monadic 1,2,1- และ 2,1-forks
เดนนิส

ขอขอบคุณสำหรับการชี้แจง. โดยธรรมชาติแล้วฉันค่อนข้างทึ่งกับเจลลี่ (ซึ่งฉันคิดว่าควรจะมีชื่อว่าȷหรือชื่ออื่น ๆ ที่คล้ายกัน)
59

17

Javascript (ES2016), 11 ไบต์

x=>x**(1/x)

ฉันไม่ค่อยได้ใช้ ES7 กับ ES6


2
x=>x**x**-1ยังใช้งานได้อีก 11 ไบต์
Neil

7
ทุกคนยกย่องผู้ประกอบการยกกำลังใหม่!
mbomb007

15

Python 3, 17 ไบต์

lambda x:x**(1/x)

อธิบายตนเอง


7
ฉันชอบมากlambda x:x**x**-1แต่ก็ไม่สั้น
seequ

1
@Seeq การแสดงออกของคุณมีความยาวเท่ากัน แต่ก็มีข้อดีในการทำงานทั้ง Python 2 และ 3
mathmandan

1
Python 2 สั้นที่สุดคือlambda x:x**x**-1ดังนั้นจึงเหมือนกันใน 2 และ 3
mbomb007

ฉันไม่สามารถหาคำตอบนี้มานานแล้วและรำคาญเมื่อฉันทำ

12

Haskell, 12 11 ไบต์

ขอบคุณ @ แลมบ์ดาแฟรี่ที่ทำเวทมนตร์:

(**)<*>(1/) 

รุ่นเก่าของฉัน:

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

4
(**)<*>(1/)คือ 11 ไบต์
Lambda Fairy

@ LambdaFairy ขอบคุณ! คุณสนใจอธิบายไหม ดูเหมือนว่าคุณกำลังทำมายากลบางคนที่มีฟังก์ชั่นที่ใช้บางส่วน แต่เป็นผมค่อนข้างใหม่ในการ Haskell ฉันไม่เข้าใจจริงๆว่างานนี้ =)
flawr

สิ่งนี้ใช้ความจริงที่ว่าฟังก์ชั่น 1 ข้อโต้แย้งถือได้ว่าเป็นฟังก์ชั่นการใช้งาน ("ผู้อ่าน monad") <*>ผู้ประกอบการจะใช้เวลาปรับใช้ที่ผลิตฟังก์ชั่นและการปรับใช้ที่ผลิตมูลค่าและใช้ฟังก์ชั่นเพื่อความคุ้มค่า ดังนั้นในกรณีนี้วิธีการดัดจิตใจเพื่อใช้ฟังก์ชั่น 2 ข้อโต้แย้งกับฟังก์ชั่น 1 ข้อโต้แย้ง
คณิตศาสตร์

2
ฟังก์ชั่น<*>ใช้เวลา 3 ข้อโต้แย้งสองฟังก์ชั่นfและและการโต้แย้งg xมันถูกกำหนดให้เป็น(<*>) f g x = f x (g x)เช่นมันใช้fไปและx g xที่นี่มีการใช้งานบางส่วนกับfและgออกไปxโดยที่f = (**)และg = (1/)(อีกฟังก์ชันที่ใช้บางส่วน (ส่วน) ที่คำนวณค่าส่วนกลับของอาร์กิวเมนต์ ดังนั้น( (**)<*>(1/) ) xเป็น(**) x ((1/) x)หรือเขียนในมัด: และมาตราการแก้ไข:x ** ((1/) x) x ** (1/x)- หมายเหตุ: <*>ใช้ในบริบทของฟังก์ชันที่นี่และมีพฤติกรรมแตกต่างกันในบริบทอื่น ๆ
nimi

@nimi ดังนั้นมันจึงเท่ากับScombinator เช่น S (**) (1 /)?
Neil

10

J, 2 ไบต์

^%

ลองออนไลน์! .

มันทำงานอย่างไร

^%  Monadic verb. Argument: y

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

ฉันจะเขียนคำตอบนี้ ฉันช้าเกินไปที่นี้
Bijan

1
@Bijan นานกว่าหนึ่งปีช้าเกินไปดูเหมือนว่า : P
Dennis

ฉันเข้าใจแล้วฉันเพิ่งเล่นกอล์ฟเป็นเวลาหนึ่งสัปดาห์แล้ว
Bijan

9

Pyth, 3 ไบต์

@QQ

ความท้าทายเล็กน้อย, วิธีแก้ปัญหาเรื่องไม่สำคัญ ...

(ไม่ใช่การแข่งขัน 1 ไบต์)

@

สิ่งนี้ใช้คุณสมบัติการป้อนข้อมูลโดยนัยที่มีอยู่ในเวอร์ชันของ Pyth ที่โพสต์ความท้าทายนี้


โซลูชันนี้มีคุณสมบัติป้อนข้อมูลโดยนัยหรือไม่?
Leun Nun

@ KennyLau ใช่นานแล้ว แต่ฉันได้แก้ไขวิธีแก้ปัญหาแบบหนึ่งไบต์แล้ว
Doorknob


8

Java 8, 18 ไบต์

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

Java ไม่ได้อยู่ในตำแหน่งสุดท้าย!!?!

ทดสอบกับสิ่งต่อไปนี้:

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

มันเป็นความจริงที่ว่ามันเป็นฟังก์ชั่น
CalculatorFeline

6

Java, 41 ไบต์

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

ไม่ได้แข่งขันกันอย่างแน่นอนเพราะ Java แต่ทำไมไม่


1
ยินดีต้อนรับสู่ PPCG! ฉันคิดว่าคุณอาจจะไม่ได้รับผลตอบแทนจากฟังก์ชั่นนี้
สปาเก็ตตี้

อุ๊ปซ์มีเลอะเทอะ จาวา 8 คำตอบอยู่แล้วชนะคนนี้แน่นอน ...
Darrel ฮอฟแมน


6

Mathematica, 8 7 4 7 ไบต์

#^#^-1&

คำตอบที่สร้างขึ้นเฉพาะเพิ่มเติมและตอนนี้ก็ยิ่งสั้นลง! Nope ตามคำนิยามคำตอบถัดไปควรเป็น 13 ไบต์ (ฟีโบน่าชี)ลวดลายยังขาดอยู่ :(


1
# ^ # ^ - 1 & บันทึก 1 ไบต์
njpipeorgan

ตอนนี้มันเป็นกอล์ฟ
Adám

1
ตอนนี้มันเป็นกอล์ฟ
CalculatorFeline

1
เมื่อ Mthmtca ได้รับการปล่อยตัวเราจะปกครองบอร์ดนี้
Michael Stern

1
แน่นอนว่าSurdมันไม่ถูกต้องเพราะมันต้องมีสองข้อโต้แย้ง?
LLlAMnYP




5

NARS APL, 2 bytes

√⍨

NARS supports the function, which gives the ⍺-th root of ⍵. Applying commute (⍨) gives a function that, when used monadically, applies its argument to both sides of the given function. Therefore √⍨ xx √ x.

Other APLs, 3 bytes

⊢*÷

This is a function train, i.e. (F G H) x(F x) G H x. Monadic is identity, dyadic * is power, and monadic ÷ is inverse. Therefore, ⊢*÷ is x raised to 1/x.





4

Pylons, 5 bytes.

ideAe

How it works.

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 bytes

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

The second line defines an anonymous lambda function. It can be used by assigning it to a function pointer and calling it, or just calling it directly.

Try it online


Does ^ not work in C++ as it does in C?
takra

2
@minerguy31: ^ is bitwise xor in C (and C++).
marinus


4

O, 6 bytes

j.1\/^

No online link because the online IDE doesn't work (specifically, exponentiation is broken)

Explanation:

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

oh hey you did it yay
phase


4

Pyke (commit 29), 6 bytes

D1_R^^

Explanation:

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

Can haz link pls?
cat

Oh, I thought you meant there's no implementation available. Yes, the interpreter doesn't have to be hosted, just a link to the repo / source (or docs) will suffice
cat

4

C# - 18 43 41 bytes

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

-2 byes thanks to @VoteToClose

Try it out

Note:

First actual attempt at golfing - I know I could do this better.


Welcome to the crowd! It is exactly because of newcomers that I make trivial challenges like this.
Adám

Fixed. Thanks for informing me about this
EnragedTanker

@crayzeedude No problem at all. Nice job and again, welcome to PPCG!
Alex A.

Does C# have float?
Addison Crump

Indeed it does.
EnragedTanker

4

C, 23 bytes

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

This defines a macro function p which evaluates to the ath root of a.

Thanks to Dennis for reminding me that gcc doesn't require math.h to be included.

Thanks to @EʀɪᴋᴛʜᴇGᴏʟғᴇʀ for reminding me that the space after the first ) is not needed.

Try it online


With GCC, you don't need to include math.h.
Dennis

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

4

dc, 125 bytes

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

Unlike the other dc answer, this works for all real x greater than or equal to 1 (1 ≤ x). Accurate to 4-5 places after the decimal.

I would have included a TIO link here, but for some reason this throws a segmentation fault with the version there (dc 1.3) whereas it does not with my local version (dc 1.3.95).

Explanation

As dc does not support raising numbers to non-integer exponents to calculate x^(1/x), this takes advantage of the fact that:

Advantage

So, to calculate ln(x), this also takes advantage of the fact that:

Advantage2

whose definite integral from 1 to (b = x) is numerically-approximated in increments of 10^-5 using the following summation formula:

Summation Formula.

The resulting sum is then multiplied by 1/x to get ln(x)/x. e^(ln(x)/x) is then finally calculated using the e^x Maclaurin Series to 100 terms as follows:

e^x Maclaurin Series.

This results in our relatively accurate output of x^(1/x).


1
+1 This has got to be one of the best dc answers out there. I'm bookmarking this!
Kritixi Lithos

@KritixiLithos Thank you! I appreciate the kind words. :)
R. Kap

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.