Соревнование
В минимально возможном количестве символов найдите значение i ^ n, если n положительное целое число больше 0. Это должно быть выведено в виде строки.
Для тех, кто не знает, я определен так, что я ^ 2 = -1. Так:
- я ^ 1 = я
- я ^ 2 = -1
- я ^ 3 = -i
- я ^ 4 = 1
Это потом повторяется ..
правила
- Если ваш язык поддерживает комплексные числа, не используйте какие-либо функции или арифметику, которые могли бы решить эту проблему.
- Неточности с плавающей запятой хороши для ответов, которые все равно будут возвращать десятичные дроби, но целочисленные значения должны давать точные результаты
Бонусные очки
-5, если вы можете определить значение, где n также отрицательно
-15, если вы можете определить значение для любого действительного числа (этот бонус включает -5 из вышеуказанного бонуса)
Удачи!
code-golf
math
arithmetic
complex-numbers
Kezz101
источник
источник
Ответы:
Рубин, оценка -2
(13 байт, бонус -15)
Особенности включают в себя: нет ошибок округления! (если вы передаете вход как Rational)
опубликовано автором, Kezz101
Отрицательные оценки заставляют мой выброс адреналина. Таким образом, правила
получают злоупотребляютсделаны использовать для достижения этой благородной цели.Создает анонимную функцию и выводит массив с 2 записями, представляющими комплексное число в полярной форме (угловая единица: градусы).
источник
CJam, 12 символов - 5 = 7
Проверьте это здесь.
Поддерживает отрицательные входы.
Результат распечатывается автоматически в конце программы.
Mathematica,
222019 символов - 15 = 4Это анонимная функция, которую вы можете использовать как
(Или назначьте это, чтобы
f
сказать, и затем сделайтеf[15]
.)Поддерживает реал и дает точные результаты для целочисленного ввода.
Обратите внимание, что
i
это не комплекс Mathematica i (который естьI
). Это просто неопределенная переменная.Кроме того, несмотря на порядок выражения, Mathematica переупорядочит вывод в
R+Ci
форму.источник
4%
. Это может быть сделано автоматически.f@15
вместоf[15]
.Python 2 - (24-5) = 19
Большая часть кредита принадлежит @ user2357112, я просто отыграл его ответ из комментариев к этому ответу немного больше.
Объяснение: Начинается с индекса
n%4
в строке'1i--'
. Затем выполняется итерация в обратном порядке шагами по две над каждой буквой в строке. Так, например,n=6
сначала начинается с индекса 2-
, затем пропускаетсяi
и принимается1
, чтобы вернуться-1
.@xnor указал решение той же длины:
Пиф - (14-5) = 9
Я могу только получить 14, независимо от того, как я пытаюсь повернуть вспять / разрезать / и т.д. : '(
По сути, это то же самое, что и приведенный выше ответ python, но в 2 этапа, потому что pyth не поддерживает полные параметры индексации python. Попробуйте онлайн.
Я собираюсь поговорить с isaacg об индексации Pyth;)
источник
lambda
нужно присваивать переменную? По крайней мере, чтобы вызвать его, вам нужно заключить его в круглые скобки, добавив два байта, чтобы он мог быть вызван(lambda...)(n)
.map
иsorted
.TI-BASIC (NSpire) - 5 (20 символов-15)
Если вы хотите получить сложное возвращаемое значение, замените
i
в конце на
(complex i).источник
его нормальнымi
. Если переменнаяi
не определена, вы получите комплексное число, простоi
вместо
. Я просто вычисляю реальные и мнимые части отдельно.i
любом случае. Комплекс я даже не тот персонаж, о котором спрашивает вопрос, и он сэкономит вам два байта, так что вы, по крайней мере, свяжетесь со мной;).Marbelous , 43 байта
Не совсем победитель, но Марбелоус - это весело. :)
Это программа, которая читает входные данные как одно целое число из первого аргумента командной строки. Обратите внимание, что ввод берется по модулю 256, но это не влияет на достоверность результата для входов больше 255, потому что 256 делится на 4.
объяснение
Marbelous - это двумерный язык программирования, который имитирует "шарики" (байтовые значения), падающие через множество устройств. Доска состоит из двухсимвольных ячеек (устройств), которые могут обрабатывать шарики. Все, что падает с нижней части доски, печатается на STDOUT.
Давайте рассмотрим используемые устройства:
}0
где первый аргумент командной строки идет. Я использовал два экземпляра этого устройства, поэтому я получаю две копии входного значения (одновременно).^n
проверяетn
бит входного мрамора (гдеn=0
младший бит) и производит1
или0
зависит от бита.=0
проверяет равенство с0
. Если входной мрамор равен, он просто падает прямо через, если это не так, он толкается вправо.\/
это мусорное ведро, поэтому он просто проглатывает входной мрамор и никогда ничего не производит.2D
является ASCII код-
,31
является ASCII код1
и69
является ASCII кодi
.&n
синхронизаторы. Синхронизаторы останавливают мрамор до тех пор, пока все синхронизаторы с одним и тем же неn
удержат мрамор, и в этот момент все они позволят провалиться хранящемуся мрамору.Таким образом, по сути, я держу три соответствующих символа в трех синхронизаторах и освобождаю их в зависимости от того, как младшие биты установлены на входе.
Для получения дополнительной информации см. Проект спецификации .
источник
JavaScript (ES6) 29-5 = 24
Поддерживает отрицательную силу.
ES5:
источник
f=n=>[1,'i',-1,'-i'][n%4]
). Но это менее сексуально и не поддерживает отрицательные силы. Это зависит от бонуса, я думаю.&
оператор? Если это так, вы можете сделать&3
для операции истинного модуля-4. Изменить: похоже, что он делает, как&2
используется в вашем ответе ...Python 28 байт - 5 = 23
Поддерживает -ве входы.
Предполагая, что лямбда-функции приемлемы (спасибо FryAmTheEggman!):
в противном случае 31 байт - 5 = 26
источник
foo=...
, или вы можете сделать,map(<your lambda>,range(10))
чтобы получить список значенийi^n
из0-9
.lambda n:'--1i'[n%4-2::2]
.'--1i'
начиная с индексаn%4-2
. Когда python получает отрицательный индекс, он начинает с того количества позиций, которое осталось от конца массива, и затем поднимается до0
. Таким образом,0
и1
никогда не ударяй по-
указателям, пока так3
и4
сделай.lambda n:n%4/2*'-'+'1i'[n%2]
Убирает пробел и короче :)(Emacs) Лисп - 34
Просто для удовольствия, в (Emacs) Lisp:
Если вы хотите использовать его, используйте
defun
или используйтеfuncall
:источник
APL (Dyalog) , 8 символов - 15 бонусов = оценка -7
Встроенная (и, следовательно, запрещенная) функция есть
0J1*⊢
, но для этого используется метод @ blutorange .Автор вызова, Kezz101, написал :
Это возвращает комплексное число в форме,
aJb
которая является нормальным способом для APL отображать комплексные числа.Попробуйте онлайн!
объяснение
¯12○
найти единичный вектор, который имеет угол в радианах.5×
полтора раза○
аргумент, умноженный на 𝜋 (константа круга)источник
Чистый bash, 29 байт - 5 = 24
Поддерживает -ве входы.
источник
Befunge-98,
41-5 = 3635-5 = 3032-5 = 27Поддерживает отрицательные целые числа. Не собираюсь выигрывать никаких наград с этим решением, но как угодно
Он просто принимает число в качестве входных данных, делает некоторую хитрость с модулем (который, к сожалению, не работает как обычный модуль для отрицательных чисел в интерпретаторе, который я использовал для его проверки), чтобы заставить работать негативы, а затем выполняет некоторые глупые условия, чтобы решить, каким должен быть каждый персонаж.
Я уверен, что это может быть гораздо лучше. А пока вот еще одно решение, которое не принимает негативы, но компенсирует потерю бонуса, будучи короче:
Befunge-98,
322623Редактировать - теперь используется тот факт, что «-» находится на расстоянии 13 (0xd) символов от «».
Редактировать 2 - Теперь, опять же, используется тот факт, что «я» 56 символов (0x38 или
'8
) от «1».источник
Java 8 Оценка: 72
На Яве самый худший язык в гольф! Golfed:
Expanded:
Примечание: я не привык к Java 8. У меня также пока нет времени выполнения. Пожалуйста, сообщите мне, если есть какие-либо синтаксические ошибки. Это тоже мой первый гольф.
Редактировать: Удалено
import
.Редактировать: Удалено объявление класса.
Еще один ответ с оценкой = 87 - 15 = 72
Expanded:
источник
java.util.function
неjava.util
(или я ошибаюсь?).java.util.*
на.*
средства импорта все под пакет. Также как вы сейчас импортируете все классы вfuction
пакете.import
импортирует только классы в этом пакете. Он не импортирует ни один из классов из пакетов в этом пакете. Например, классFunction
находится в пакете,java.util.function
но не в пакетеjava.util
.MATLAB, 33 байта - 5 = 28
Несмотря на то, что это на несколько байтов больше (37-5 = 32), мне на самом деле нравится такой подход:
источник
i^3
это-i
, скорее , чемi
, думаю , это только добавляет 1 символ. - Sidenote для других читателей: без первого правила задачи решение Matlab будет иметь длину всего 3 символа.C 77
Улучшено благодаря Руслану
С 74-5 = 69
Ну и конечно самый очевидный подход
источник
n%2
и использовать~
вместо,!
потому чтоn
сначала отрицание , а затем использование%
2 даст тот же результат, по крайней мере, дляn<(1<<32)-1
. И C не требует явно определять тип возвращаемого значения для функции, так что вы можете удалитьint
в начале. А также используйте0
вместо'\0'
. Таким образом -9 символов.OCaml 47
Не удостоенное наград решение, но это мой первый раз, когда я играю в код, так что я не совсем уверен в том, что я делаю. Я пытался использовать сопоставление с образцом, но это дало мне больше 58.
источник
Пари / ГП , 19 байт - 5 = 14
i
Здесь просто символ, а не мнимая единица (которая находитсяI
в Pari / GP).Попробуйте онлайн!
источник
Руби 32-5 = 27
Работает на негативные силы!
источник
puts %w[1 i -1 i][gets.to_i % 4]
.Perl, 26 - 5 = 21
работает как отдельная программа (аргумент в командной строке) или как тело функции.
источник
Ява:
151131-5 = 126Golfed:
Ungolfed:
Как функция: 72-5 = 67
Golfed:
Ungolfed:
Да, еще один ответ Java - и игра в гольф еще хуже, чем когда-либо. Но вы работаете с тем, что вы можете ...
РЕДАКТИРОВАТЬ : добавлена версия функции.
РЕДАКТИРОВАТЬ 2 : так, после небольшого проб и ошибок, вот версия, которая пытается сделать это по книге, не исследуя лазейку цикла. Так…
Java с вычислением значения: 146-15 = 131
Golfed:
Ungolfed:
(по крайней мере, я думаю, что могу претендовать на главный бонус, поправьте меня иначе)
источник
int n = Integer.parseInt(a[0])
Python - 31
Я только недавно начал изучать Python. Хотя я знаю, что это не хорошо, это лучшее, что я могу сделать.
источник
Haskell GHCi, 29 байт - 15 = 14
Использование:
источник
R , 29 - 5 = 24 байта
Попробуйте онлайн!
То же самое, что и большинство методов выше, принимает модуль по 4 и увеличивает его на 1, потому что массивы R индексируются 1. Работает и для отрицательных целых чисел.
Я беспокоился о смешанных выводах здесь, но Джузеппе указал, что R приводит числовые типы к строковым типам, когда они смешаны.
источник
numeric
типы к тому,character
когда они смешиваются! Книга Хэдли объясняет это довольно хорошо - просто Ctrl + F, чтобы «Принуждение», и вы увидите это, но всю книгу стоит прочитать (в основном для целей, не связанных с гольфом, но иногда вы берете трюк или два, хе-хе )PowerShell , 28 байт -5 = 23
Попробуйте онлайн!
Порт всей циклической индексации
источник
Haskell, 29 байт - 5 = 24
Работает на негативные силы.
У меня была отработана точечная версия, но оказалось, что на самом деле она длиннее.
источник
Clojure (
645431 символов)редактировать
Согласно предложению @ SeanAllred, вот версия, в которой вместо
case
функции используется буквенный вектор :Редактировать 2
Полагаясь на REPL для распечатки результирующей коллекции и кодирования функции с помощью
#()
ярлыка, мы можем уменьшить его до(Что на самом деле намного больше Clojure / Lisp-ish, так как функция теперь фактически возвращает сгенерированный результат, позволяя использовать функцию
map
, как вкакие отпечатки
Поделитесь и наслаждайтесь.
источник
Groovy: 27-5 = 22
источник
С 105, был 117
источник
:
в?:
отчетности в простом C. Кроме того , в чем смысл использования ,0==0
когда вы можете использовать одиночный символ1
? И нет необходимости в скобках раньше?
. Кроме того, последнее?:
утверждение может быть сокращено доc[j]=i&1?'i':'1';
.0==0
когда он идентичен1
? Обратите внимание, что==
имеет более высокий приоритет, чем&
, иначе ваш (предполагаемый) тест(i&0)==0
всегда будет верным.PARI / GP , 26 - 5 = 21
n->cos(t=Pi*n/2)+I*sin(t)
на один символ короче, но не обрабатывает точных ответов. Конечно,n->I^n
не разрешено, и, вероятно, также PARIpowIs
.источник
Желе , 2 - 20 = -18 байт
Попробуйте онлайн!
Он не использует
i ^ x
встроенные функции, но использует встроенные функции для,1j
и**
поэтому не уверен, разрешено ли это.источник
1j
литерал также запрещен?*
) есть.1j
литералы.05AB1E , оценка 5 (10 байт - 5 бонусов)
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник