На этот раз я делал какую-то реальную работу, обновлял старый код и столкнулся с выражением, эквивалентным тому, что было бы записано как πx + e x. в старой доброй математике. Я думал, что можно было бы написать его короче, чем он был написан на языке, с которым я работаю (APL), и поэтому представить эту очень простую задачу:
Напишите функцию или программу, которая (любым способом) принимает ноль или более чисел и возвращает (любым способом) результат вышеприведенного выражения для x = каждое из заданных чисел по крайней мере с 3 значащими цифрами для каждого результата.
Если ваш язык не имеет π и / или e , используйте значения 3.142 и 2.718.
Оценка - это число байтов, поэтому предваряйте ответ # LanguageName, 00 bytes
.
Стандартные петли не допускаются.
Edit: Теперь решение , которое я придумал, ○+*
, было найдено . Оригинальный код был (○x)+*x
.
Ответы:
Дьялог АПЛ, 3 персонажа
Как молчаливая фраза.
Monadic
○
умножает свой аргумент на π, monadic*
- экспоненциальная функцияexp
.○+*
это поезд такой, что(○+*)ω
равен(○ω)+(*ω)
. Поскольку это APL, фраза работает для аргументов произвольной формы, т.е. грамм. Вы можете передать вектор произвольной длины.Же раствор можно в J , как
o.+^
сo.
того○
и^
быть*
.источник
Emotinomicon, 48 байтов / 13 символов
Я делаю это не потому, что это коротко, а потому, что это весело. Попробуй это здесь. Вам придется скопировать + вставить его в текстовое поле.
Объяснение:
Вот программа в родной среде мобильного телефона:
источник
cat
?R,
2524 байтаЭто оно? Он получает входные данные от пользователя, назначает его
x
, вычисляет его экспоненциальное умножениеpi
и, наконец,cat()
печатает результат.редактирование: 1 байт сохранен благодаря Алексу А.
источник
cat(exp(x<-scan())+pi*x)
<-
как я сделал в моем предложении, а не=
потому, что в противном случае он устанавливаетx
аргумент,exp
но не назначает переменнуюx
. В новой сессии текущий код потерпит неудачу.JavaScript (ES6),
3934 байтаСохранено 5 байтов благодаря @ edc65
Принимает ввод в виде массива чисел и выводит в том же формате.
Благодаря сокращению теперь существует три эквивалентные 45-байтовые программы, все они соответствуют ES5:
Входы должны вводиться по одному за раз. Нажмите OK, не вводя ничего, чтобы выйти.
Третий подчеркивает интересную особенность JS:
with
утверждение. Хотя иногда это небезопасно для использования (таким образом отключено в строгом режиме), оно все же может быть использовано для сохранения ввода имени объекта и периода каждый раз, когда вам нужно получить к нему доступ. Например, вы можете сделать это:push
иlength
затем используются в качестве свойствx
, что приведетx
к[0,1,2,3,4]
.Это работает с любым объектом, даже без переменных, поэтому, например, вы можете сделать это:
charAt
иlength
называются свойствами строки."0x"+x-0
преобразуетx
шестнадцатеричное значение в число, так что этоalert
числа от 0 до 15.источник
M.pow(M.E,x)
являетсяM.exp(x)
по определениюMath
;) Спасибо!with
устарел.<canvas>
рендеринга и (конечно) игры в гольф.Mathematica,
1110 байтБлагодаря 1 байту, сохраненному благодаря LegionMammal978.
источник
1.Pi#+E^#&
#
иPi
. Это решается с помощьюPi#
вместо#Pi
. Кроме того,N
нужно применять только кPi#
выражению, а не ко всему выражению.Пиф,
1113Теперь принимает
x
в качестве списка, например,[1.25, 2.38, 25]
Предыдущая (11 байт):
+*Q.n0^.n1Q
источник
Серьезно, 10 байт
Шестнадцатеричный дамп:
Попробуйте онлайн
Принимает входные данные в виде списка (см. Ссылку для примера).
Объяснение:
источник
MATLAB, 15 байтов
источник
TI-BASIC, 5 байтов
TI-BASIC не использует ASCII байт, поэтому каждый из них хранится в виде одного байта в калькуляторе:
π
,Ans
,+
,e^(
, иAns
. Предполагается, что предыдущее выражение является входным (как{1,2,3}
).источник
Python 2, 38 байт (
5249 байт с математикой)Если я должен использовать математический модуль:
На входе должен быть список чисел
источник
If your language does not have π and/or e, use the values 3.142 and 2.718.
... Python естьpi
иe
вmath
модуле.math
решении, используяfrom math import*
for x in l:lambda l:pi*x+e**x
вместо понимания в обоих ответахMATL , 9 байт
В этом ответе используется текущая версия языка ( 3.1.0 ), которая является более ранней, чем задание.
Входные данные - это вектор, содержащий все числа (список, заключенный в квадратные скобки и разделенный пробелами, запятыми точек с запятой), такой как
[5.3 -7 3+2j]
. Комплексные значения допускаются. Выход имеет 15 значащих цифр.пример
объяснение
Простые операции:
источник
MATLAB: 70 байт
Тестовое задание:
Объяснение: Было несколько проблем с форматированием чисел.
Во-первых, вопрос требует 3 сиг-фиг. Matlab не имеет встроенной функции для округления по sig-figs (только по десятичным знакам), поэтому потребовался следующий обходной путь:
floor(log10(pi*x+exp(x))))
вычисляет наибольшую значащую цифру.@(x)(round(pi*x+exp(x),2-floor(log10(pi*x+exp(x))))),x))
принимает входные данныеx
и округляет до 3 значащих цифр.Еще одним требованием было обрабатывать несколько входов. Приведенный выше код может работать только с одним номером. Чтобы смягчить это, мы используем,
arrayfun
чтобы оценить функцию для каждого элемента вектора.Последняя проблема, Matlab отображает результат arrayfun со своим собственным округлением, которое приводит к выводам,
1.0e+04 * 0.0006
которые нарушают требование 3 sig-fig. Таким образом,num2str
был использован для преобразования массива вchar
формат.Matlab хорош для численного анализа, но, честно говоря, он отстой, когда дело доходит до точного форматирования чисел
UPD: ну это стыдно, что я запутался
с
В любом случае, я оставлю свой ответ в этой форме, потому что 15-байтовое решение Matlab уже предоставлено @costrom
источник
format longg
требуется перед запуском кода, вы бы уронить 3/4 длины здесьЮлия, 12 байт
Это анонимная функция, которая принимает массив и возвращает массив с плавающей точкой. Чтобы назвать его, дайте ему имя, например
f=x->...
.У Джулии есть встроенные константы
π
и,e
как вы уже догадались, π и e соответственно..^
Оператор векторизации возведение в степень.источник
Japt, 12 байт
Принимает ввод в виде разделенных пробелами чисел. Попробуйте онлайн!
Как это устроено
источник
J, 4 байта
То же, что и APL
○+*
, ноpi times
вызывается функция Jo.
, которая на один байт длиннее.источник
Haskell,
2219 байтовПопробуйте онлайн!
Редактировать: -3 байта благодаря @ H.PWiz
источник
Par , 8 байт
Принимает ввод как
(1 2 3)
объяснение
источник
Ракетка , 27 байт
когда помещено в положение функции выражения:
источник
CJam, 13 байтов
Принимает ввод как массив, разделенный пробелами (например
[1 2 3]
). Попробуйте онлайн.объяснение
источник
Reng v.3.3, 53 байта
Неконкурентоспособен, потому что это откладывает вызов, но эй, не выигрывая награды за краткость. : P Попробуй здесь!
Строка 0
Вот вид стека в строке 0:
ø
затем переходит к следующей N-й строке. когда0
ввод, это идет прямо к строке 2. В противном случае, мы переходим к строке 1.Строка 1
Это кратные E
i
раз, чтоe^i
. Мы уменьшаем счетчик (изначальноI
), умножаем STOS (нашу рабочуюe
мощность) на E, возвращаемся к счетчику и делаем это (i'
текущий счетчик):ø
затем делает одну из двух вещей. Если счетчик не равен 0, то мы переходим к «следующей» 0-й строке, то есть к началу текущей строки. Если он равен нулю, то0e
возвращает 1 и переходит к следующей строке.Линия 2
$
падает счетчик (НА ЭТАЖЕ!).+
добавляет два верхних результата,n
выводит это число и~
выходит из программы.Случай 1: входное значение равно 0. TOS равно 1 («e ^ 0»), а значение STOS равно 0 (pi * 0). Добавление их дает правильный результат.
Случай 2: вход не равен 0. Результат, как вы могли ожидать.
источник