Гольф хх корень х


24

Скучая в старшей школе (когда мне было половину моего нынешнего возраста ...), я обнаружил, что f ( x ) = x ( x -1 ) обладает некоторыми интересными свойствами, в том числе, например, что максимум f для 0 ≤ x равен f ( e ) и что энергия связи на нуклон изотопа может быть приближена к 6 × f ( x ÷ 21) ...

В любом случае, напишите самую короткую функцию или программу, которая вычисляет x- й корень 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 Alpha для позитивного реального x. Если вы опустите xограничения в запросе, Wolfram Alpha будет включать отрицательные значения, xгде значение функции зависит от выбора «ветви» для сложного логарифма (или для аналогичной сложной функции).
Джеппе Стиг Нильсен

А как насчет языков, которые не обрабатывают мощность десятичных дробей?
Утренняя монахиня

1
@KennyLau Не стесняйтесь писать с заметкой, которая говорит, что, особенно если алгоритм будет работать, если бы язык поддерживал его.
Адам

Ответы:


38

TI-BASIC, 3 байта

Ans×√Ans

TI-BASIC использует токены, поэтому Ansи ×√являются однобайтовыми.

объяснение

Ansэто самый простой способ дать вклад; это результат последнего выражения. ×√является функцией для x-го корня из x, поэтому, например 5×√32, 2.


8
Насколько я знаю, это ansбудет считаться жестким вводом данных в переменные и, по-видимому, не является приемлемым методом ввода для code-golf . В этом случае, пожалуйста, сделайте полную программу или функцию.
flawr

4
@flawr Я понимаю, что ты говоришь, но, кажется, так всегда и делали. Может быть, это требует мета-пост?
NinjaBearMonkey

3
AnsSTDIN / 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).

У желе нет стека. Диада, сопровождаемая монадой в монадической цепочке, ведет себя как вилы APL.
Деннис

3
Нет, J ^%это хук (которого нет в Dyalog APL), а не вилка. Код Jelly и APL трудно сравнивать, поскольку Jelly слева направо. Ближайшим эквивалентом будет ÷*⊢(также форк), который вычисляется (1/x)**xиз-за разного направления. Поскольку атомы желе не перегружены (они монадические или диадические, но никогда не оба), могут быть монадные 1,2,1- и 2,1-вилки.
Деннис

Благодарю за разъяснение. Естественно, я довольно заинтригован Желе (которое я все еще думаю, что должно быть названо ȷ или что-то подобное.)
Адам

17

Javascript (ES2016), 11 байт

x=>x**(1/x)

Я редко использую ES7 поверх ES6.


2
x=>x**x**-1тоже работает, опять же на 11 байт.
Нил

7
Приветствую нового оператора возведения в степень!
mbomb007

15

Python 3, 17 байт

lambda x:x**(1/x)

Self-пояснительная


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 байтов

Спасибо @LambdaFairy за магию:

(**)<*>(1/) 

Моя старая версия:

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

4
(**)<*>(1/)составляет 11 байтов.
Лямбда Фея

@LambdaFairy Спасибо! Вы не против объяснить? Похоже, что вы делаете магию с частично примененными функциями, но, поскольку я совсем новичок в Haskell, я не очень понимаю, как это работает =)
flawr

При этом используется тот факт, что функцию с 1 аргументом можно считать аппликативным функтором («монадой читателя»). <*>Оператор принимает аппликативном , который производит функцию, и аппликативный , который производит значение, и применяет функцию к значению. Таким образом, в этом случае разумный способ применить функцию с 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 То есть это эквивалент Sкомбинатора, то есть S (**) (1 /)?
Нил

10

J, 2 байта

^%

Попробуйте онлайн! ,

Как это работает

^%  Monadic verb. Argument: y

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

Я собирался написать этот ответ. Я слишком медленный в этом.
Биджан

1
@Bijan Кажется, что в течение года слишком медленно. : P
Деннис

Я вижу, я играю в гольф только неделю.
Биджан

9

Pyth, 3 байта

@QQ

Тривиальная задача, тривиальное решение ...

(неконкурентный, 1 байт)

@

При этом используется неявная функция ввода, присутствующая в версии Pyth, которая датирует эту проблему.


Предшествует ли этому решению особенность неявного ввода?
Утренняя монахиня

@KennyLau Да, давно. Но я все равно отредактировал однобайтовое решение.
Дверная ручка


8

Java 8, 18 байт

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

Ява не на последнем месте?!?!

Тест со следующим:

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! Я думаю, что вы можете пропустить возвращаемый тип этой функции.
спагетто

Ой, небрежно. Ответ на Java 8 уже превзошел этот ответ ...
Даррел Хоффман


6

Mathematica, 8 7 4 7 байт

#^#^-1&

Больше встроенных ответов, а теперь и короче! Нет. По определению следующий ответ должен быть 13 байтов. (Фибоначчи!) Модель все еще сломана. :(


1
# ^ # ^ - 1 & сохраняет 1 байт.
njpipeorgan

СЕЙЧАС это гольф.
Адам

1
СЕЙЧАС это игра в гольф.
CalculatorFeline

1
Когда Mthmtca будет выпущен, мы будем править этой доской.
Майкл Стерн

1
Конечно, это просто неверно, так Surdкак требует двух аргументов?
LLlAMnYP


5

R, 19 17 байт

function(x)x^x^-1

-2 байта благодаря @Flounderer


Почему нет x^(1/x)? Изменить: x^x^-1кажется, работает тоже.
Камбала

Это фрагмент, и, очевидно, люди не любят фрагменты.
CalculatorFeline

@CatsAreFluffy это определение функции.
mnel

5

Рубин, 15 байт

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

Ungolfed:

->является стабильным лямбда-оператором, где a=->nэквивалентноa = lambda {|n|}


5

NARS APL, 2 байта

√⍨

NARS поддерживает функцию, которая дает root-й корень из ⍵. Применение commute (⍨) дает функцию, которая, при монадическом использовании, применяет свой аргумент к обеим сторонам данной функции. Поэтому √⍨ xx √ x.

Другие APLs, 3 байта

⊢*÷

Это функциональный поезд, т. (F G H) xЕ. ↔ (F x) G H x. Монадическое - это тождество, двоичное *- это сила, а монадическое ÷- это обратное. Поэтому, ⊢*÷как х повышали до 1 / х .


5

Python 2 - 56 байт

Первый актуальный ответ, если я прав. Использует метод Ньютона.

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

Функции в порядке.
CalculatorFeline



4

Пилоны , 5 байтов.

ideAe

Как это работает.

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 байт

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

Вторая строка определяет анонимную лямбда-функцию. Его можно использовать, присваивая его указателю функции и вызывая его, или просто вызывая его напрямую.

Попробуйте онлайн


Не ^работает в C ++, как в C?
Такра

2
@ minerguy31: ^побитовый xor в C (и C ++).
марин

4

Млечный Путь 1.6.5 , 5 байт

'1'/h

объяснение

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

х ** (1 / х)


использование

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

4

О , 6 байт

j.1\/^

Нет онлайн-ссылки, потому что онлайн-IDE не работает (в частности, возведение в степень не работает)

Объяснение:

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

о, эй, ты сделал это yay
фаза


4

Пайк (коммит 29), 6 байт

D1_R^^

Объяснение:

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

Может ли ссылка хас PLS?
кот

О, я думал, что вы имели в виду, что реализация недоступна. Да, переводчик не должен быть размещен , достаточно ссылки на репозиторий / источник (или документы)
cat

4

C # - 18 43 41 байт

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

-2 до свидания благодаря @VoteToClose

Попробуйте это

Заметка:

Первая настоящая попытка игры в гольф - я знаю, что мог бы сделать это лучше.


Добро пожаловать в толпу! Именно из-за новичков я ставлю такие простые задачи, как эта.
Адам

Исправлена. Спасибо, что сообщили мне об этом
EnragedTanker

@crayzeedude Нет проблем вообще. Хорошая работа и еще раз, добро пожаловать в PPCG!
Алекс А.

Есть ли у C # float?
Эддисон Крамп

Это действительно так.
EnragedTanker

4

C, 23 байта

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

Это определяет макро-функцию, pкоторая оценивает aкорень th a.

Спасибо Деннису за напоминание, что gccего не нужно math.hвключать.

Спасибо @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ за напоминание о том, что место после первого ) не нужен.

Попробуйте онлайн


С GCC вам не нужно включать math.h.
Деннис

-1 байт:#define p(a)pow(a,1./a)
Эрик Outgolfer

4

постоянный ток , 125 байт

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

В отличие от другого ответа DC, это работает для всех вещественных xбольше или равно 1 ( 1 ≤ x). Точно до 4-5 мест после десятичной дроби.

Я бы включил ссылку TIO здесь, но по какой-то причине это вызывает ошибку сегментации с версией там ( dc 1.3), тогда как это не с моей локальной версией ( dc 1.3.95).

объяснение

Поскольку dcне поддерживается повышение чисел до нецелых показателей для вычисления x^(1/x), в этом используется тот факт, что:

преимущество

Таким образом, для расчета ln(x)это также использует тот факт, что:

Advantage2

чей определенный интеграл от 1 to (b = x)численно аппроксимируется с 10^-5помощью следующей формулы суммирования:

Формула суммирования,

Полученная сумма затем умножается на, 1/xчтобы получить ln(x)/x. e^(ln(x)/x)Затем, наконец, рассчитывается с использованием серии e^xМаклаурин для 100 терминов следующим образом:

E ^ X Маклаурин серии,

Это приводит к нашей относительно точной продукции x^(1/x).


1
+1 Это должен быть один из лучших ответов по постоянному току. Я отмечаю это!
Критиси Литос

@KritixiLithos Спасибо! Я ценю добрые слова. :)
Р. Кап

3

PHP 5.6, 32 30 29 байт

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

или

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

30-> 29, спасибо Деннис!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.