Golf akar xᵗʰ dari x


24

Sementara bosan di sekolah menengah (ketika saya setengah umur saya saat ini ...), saya menemukan bahwa f ( x ) = x ( x -1 ) memiliki beberapa sifat yang menarik, termasuk misalnya bahwa f maksimum untuk 0 ≤ x adalah f ( e ), dan bahwa energi ikat per nukleon suatu isotop dapat diperkirakan sekitar 6 × f ( x ÷ 21) ...

Pokoknya, menulis fungsi terpendek atau program yang menghitung x th akar x untuk setiap nomor dalam domain bahasa Anda.

Contoh kasus

Untuk semua bahasa

     -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

Untuk bahasa yang menangani bilangan kompleks

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

Untuk bahasa yang menangani infinitas

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

Untuk bahasa yang menangani angka tak terbatas dan bilangan kompleks

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

̃∞menunjukkan infinity terarah .


1
Berikut adalah plot Wolfram Alpha untuk real positif x. Jika Anda menghilangkan xbatas dalam kueri, Wolfram Alpha akan menyertakan nilai negatif di xmana nilai fungsi bergantung pada pilihan "cabang" untuk logaritma kompleks (atau untuk fungsi kompleks serupa).
Jeppe Stig Nielsen

Bagaimana dengan bahasa yang tidak menangani kekuatan desimal?
Leaky Nun

1
@ KennyLau Jangan ragu untuk memposting dengan catatan yang mengatakannya, terutama jika algoritma akan bekerja, memiliki bahasa yang mendukungnya.
Adám

Jawaban:


38

TI-BASIC, 3 byte

Ans×√Ans

TI-BASIC menggunakan token, jadi Ansdan ×√keduanya satu byte.

Penjelasan

Ansadalah cara termudah untuk memberi masukan; ini adalah hasil dari ekspresi terakhir. ×√adalah fungsi untuk root x'th dari x, jadi misalnya 5×√32adalah 2.


8
Sejauh yang saya tahu ansakan menghitung input hardcoding ke dalam variabel dan tampaknya tidak menjadi metode input yang diterima untuk kode-golf . Dalam hal ini, silakan buat program atau fungsi lengkap.
flawr

4
@ flawr Saya bisa melihat apa yang Anda katakan tetapi sepertinya selalu dilakukan seperti ini. Mungkin itu menjamin pos meta?
NinjaBearMonkey

3
Ansadalah STDIN / STDOUT untuk TI-Basic.
Timtech

5
stdindan stdoutmerupakan stream teks, biasanya untuk input dan output teks interaktif. Anstidak interaktif, tidak seperti beberapa fungsi lain di TI-BASIC, yang interaktif.
Olathe

7
@ flawr Alasan Ansbiasanya diterima adalah karena nilainya ditentukan oleh ekspresi apa pun (ekspresi dipisahkan oleh :). Oleh karena itu sesuatu seperti 1337:prgmXTHROOTakan memasukkan 1337, yang sangat mirip input melalui CLA dalam bahasa normal.
lirtosiast

23

Jelly, 2 byte

Cobalah online!

Bagaimana itu bekerja

*İ    Main link. Input: n

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

Jelly tidak memiliki setumpuk. Angka dua diikuti oleh monad dalam rantai monadik berperilaku seperti garpu APL.
Dennis

3
Tidak, J's ^%adalah pengait (yang tidak ada di Dyalog APL), bukan garpu. Kode Jelly dan APL sulit untuk dibandingkan karena Jelly dibiarkan dari kiri ke kanan. Setara terdekat adalah ÷*⊢(juga garpu), yang dihitung (1/x)**xkarena arah yang berbeda. Karena atom Jelly tidak kelebihan muatan (mereka adalah monadik atau diad, tetapi tidak pernah keduanya), mungkin ada forad 1,2,1- dan 2,1-fork.
Dennis

Terimakasih atas klarifikasinya. Secara alami, saya cukup tertarik dengan Jelly (yang menurut saya masih harus dinamai ȷ atau yang serupa.)
Adám

17

Javascript (ES2016), 11 byte

x=>x**(1/x)

Saya jarang menggunakan ES7 lebih dari ES6.


2
x=>x**x**-1juga berfungsi, lagi untuk 11 byte.
Neil

7
Semua memuji operator eksponensial baru!
mbomb007

15

Python 3, 17 byte

lambda x:x**(1/x)

Cukup jelas


7
Saya cukup suka lambda x:x**x**-1, tapi tidak lebih pendek.
seequ

1
@Seeq Ekspresimu memiliki panjang yang sama, tetapi memiliki keuntungan untuk bekerja di Python 2 dan 3.
mathmandan

1
Terpendek Python 2 adalah lambda x:x**x**-1, jadi sama dalam 2 dan 3.
mbomb007

Saya tidak dapat menemukan jawaban ini untuk waktu yang lama dan benar-benar terganggu ketika saya melakukannya.

12

Haskell, 12 11 byte

Terima kasih @LambdaFairy untuk melakukan sihir:

(**)<*>(1/) 

Versi lama saya:

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

4
(**)<*>(1/)adalah 11 byte.
Lambda Fairy

@LambdaFairy Terima kasih! Apakah Anda keberatan menjelaskan? Sepertinya Anda melakukan sihir dengan fungsi yang diterapkan sebagian tetapi karena saya cukup baru di Haskell, saya tidak begitu mengerti bagaimana ini bekerja =)
flawr

Ini menggunakan fakta bahwa fungsi 1-argumen dapat dianggap sebagai fungsi aplikatif ("pembaca monad"). The <*>Operator mengambil aplikatif yang menghasilkan fungsi, dan aplikatif yang menghasilkan nilai, dan berlaku fungsi untuk nilai. Jadi dalam hal ini, cara yang membengkokkan pikiran untuk menerapkan fungsi 2-argumen ke fungsi 1-argumen.
MathematicalOrchid

2
Fungsi ini <*>mengambil 3 argumen, dua fungsi fdan gdan argumen x. Ini didefinisikan sebagai (<*>) f g x = f x (g x), yaitu berlaku funtuk xdan g x. Di sini sebagian diterapkan ke fdan gkeluar x, di mana f = (**)dan g = (1/)(fungsi sebagian diterapkan lainnya (bagian) yang menghitung nilai timbal balik dari argumen itu). Jadi ( (**)<*>(1/) ) xini (**) x ((1/) x)atau ditulis dalam infiks: x ** ((1/) x)dan dengan bagian diselesaikan: x ** (1/x). - Catatan: <*>digunakan dalam konteks fungsi di sini dan berperilaku berbeda dalam konteks lain.
nimi

@nimi Jadi itu setara dengan Skombinator yaitu S (**) (1 /)?
Neil

10

J, 2 byte

^%

Cobalah online! .

Bagaimana itu bekerja

^%  Monadic verb. Argument: y

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

Saya akan menulis jawaban ini. Saya terlalu lambat dalam hal ini.
Bijan

1
@Bijan Lebih dari setahun terlalu lambat, sepertinya. : P
Dennis

Begitu ya, saya baru bermain golf selama seminggu sekarang.
Bijan

9

Pyth, 3 byte

@QQ

Tantangan sepele, solusi sepele ...

(tidak bersaing, 1 byte)

@

Ini menggunakan fitur input implisit yang ada dalam versi Pyth yang memposting tantangan ini.


Apakah solusi ini mendahului fitur input implisit?
Leaky Nun

@ KennyLau Ya, sudah lama. Tapi saya sudah mengedit solusi satu byte dengan cara apa pun.
Gagang Pintu


8

Java 8, 18 byte

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

Java tidak ada di tempat terakhir?!?!

Tes dengan yang berikut ini:

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

Itu fakta bahwa itu adalah fungsi
CalculatorFeline

6

Java, 41 byte

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

Tidak persis kompetitif karena Java, tetapi mengapa tidak?


1
Selamat datang di PPCG! Saya pikir Anda mungkin kehilangan tipe pengembalian pada fungsi ini.
spaghetto

Ups, ceroboh. Jawaban Java 8 sudah mengalahkan yang satu ini tentu saja ...
Darrel Hoffman

6

MATL , 5 byte

t-1^^

Cobalah online!

t       % implicit input x, duplicate
 -1     % push -1
   ^    % power (raise x to -1): gives 1/x
    ^   % power (raise x to 1/x). Implicit display


5

Perl 5, 10 byte

9 byte plus 1 untuk -p

$_**=1/$_

5

R, 19 17 byte

function(x)x^x^-1

-2 byte terima kasih kepada @Flounderer


Mengapa tidak x^(1/x)? Sunting: x^x^-1tampaknya berfungsi juga.
Flounderer

Itu cuplikan, dan tampaknya orang tidak suka cuplikan.
CalculatorFeline

@CatsAreFluffy itu adalah definisi fungsi.
mnel

5

Ruby, 15 Bytes

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

Tidak Disatukan:

->adalah operator lambda stabil di mana a=->nsetara dengana = lambda {|n|}


5

NARS APL, 2 byte

√⍨

NARS mendukung fungsi ini, yang memberikan akar ke-of dari ⍵. Menerapkan commute (⍨) memberikan fungsi yang, jika digunakan secara monadik, menerapkan argumennya pada kedua sisi fungsi yang diberikan. Karena itu √⍨ xx √ x.

APL lainnya, 3 byte

⊢*÷

Ini adalah kereta fungsi, yaitu (F G H) x(F x) G H x. Monadik adalah identitas, diadik *adalah kekuatan, dan monadik ÷adalah terbalik. Oleh karena itu, ⊢*÷adalah x diangkat ke 1 / x .


5

Python 2 - 56 byte

Jawaban aktual pertama, jika saya benar. Menggunakan metode Newton.

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

Fungsinya oke.
CalculatorFeline

5

CJam, 6 byte

rd_W##

Cobalah online!

Bagaimana itu bekerja

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

Tiang , 5 byte.

ideAe

Bagaimana itu bekerja.

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

Baris kedua mendefinisikan fungsi lambda anonim. Ini dapat digunakan dengan menugaskannya ke fungsi pointer dan memanggilnya, atau hanya memanggilnya secara langsung.

Cobalah online


Tidak ^bekerja di C ++ seperti halnya di C?
takra

2
@ minerguy31: ^bitwise xor dalam C (dan C ++).
marinus

4

Bima Sakti 1.6.5 , 5 byte

'1'/h

Penjelasan

'      ` 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)


Pemakaian

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

4

O , 6 byte

j.1\/^

Tidak ada tautan online karena IDE online tidak berfungsi (khususnya, eksponensial rusak)

Penjelasan:

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

oh hei kamu melakukannya yay
fase


4

Pyke (komit 29), 6 byte

D1_R^^

Penjelasan:

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

Bisakah hubungkan tautan?
kucing

Oh, saya pikir maksud Anda tidak ada implementasi yang tersedia. Ya, penerjemah tidak harus di- host , cukup tautan ke repo / sumber (atau dokumen) sudah cukup
cat

4

C # - 18 43 41 byte

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

-2 bye terima kasih kepada @VoteToClose

Cobalah

catatan:

Upaya nyata pertama bermain golf - Saya tahu saya bisa melakukan ini lebih baik.


Selamat datang di kerumunan! Justru karena pendatang baru saya membuat tantangan sepele seperti ini.
Adám

Tetap. Terima kasih telah memberi tahu saya tentang ini
EnragedTanker

@crayzeedude Tidak masalah sama sekali. Kerja bagus dan lagi, selamat datang di PPCG!
Alex A.

Apakah C # punya float?
Addison Crump

Memang benar.
EnragedTanker

4

C, 23 byte

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

Ini mendefinisikan fungsi makro pyang mengevaluasi ke aroot th a.

Terima kasih untuk Dennis yang mengingatkan saya bahwa gcctidak perlu math.hdisertakan.

Terima kasih kepada @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ untuk mengingatkan saya bahwa ruang setelah yang pertama )tidak diperlukan.

Cobalah online


Dengan GCC, Anda tidak perlu memasukkan 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

Tidak seperti jawaban dc lainnya, ini bekerja untuk semua nyata xlebih besar dari atau sama dengan 1 ( 1 ≤ x). Akurat ke 4-5 tempat setelah desimal.

Saya akan menyertakan tautan TIO di sini, tetapi untuk beberapa alasan ini melempar kesalahan segmentasi dengan versi di sana ( dc 1.3) sedangkan tidak dengan versi lokal saya ( dc 1.3.95).

Penjelasan

Karena dctidak mendukung peningkatan angka pada eksponen non-integer untuk dihitung x^(1/x), ini mengambil keuntungan dari kenyataan bahwa:

Keuntungan

Jadi, untuk menghitung ln(x), ini juga memanfaatkan fakta bahwa:

Keuntungan2

yang integral integralnya 1 to (b = x)secara numerik diperkirakan dalam penambahan 10^-5menggunakan rumus penjumlahan berikut:

Rumus penjumlahan.

Jumlah yang dihasilkan kemudian dikalikan dengan 1/xuntuk mendapatkan ln(x)/x. e^(ln(x)/x)akhirnya dihitung menggunakan e^xSeri Maclaurin hingga 100 istilah sebagai berikut:

e ^ x Seri Maclaurin.

Ini menghasilkan output kami yang relatif akurat x^(1/x).


1
+1 Ini harus menjadi salah satu jawaban dc terbaik di luar sana. Saya menandai ini!
Kritixi Lithos

@KritixiLithos Terima kasih! Saya menghargai kata-kata yang baik. :)
R. Kap

3

PHP 5.6, 32 30 29 byte

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

atau

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

30-> 29, terima kasih Dennis!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.