Задача адаптирована из книги Фортрана 77 Дональда М. Монро
Вступление
Цифровые печатные машины широко используются для создания различных форм рисунков, графиков и других графических результатов. Большинство таких машин могут перемещать свои ручки только в определенных направлениях, обычно в виде отдельных шагов в направлении X и Y или в обоих направлениях. Типичная машина будет двигаться в одном из восьми направлений, показанных на рис. 1:
Рис. 1
Вызов
Напишите программу без тригонометрических функций, которая принимает число от 0 до 7 (включительно) в качестве входных данных и выводит соответствующие координаты конечных точек на рис. 1.
Выводить следует в виде массива или списка с двумя элементами (т.е. (1, 0)
или [0,-1]
)
Таблица ввода / вывода
0 (1, 0)
1 (1, 1)
2 (0, 1)
3 (-1, 1)
4 (-1, 0)
5 (-1, -1)
6 (0, -1)
7 (1, -1)
выигрыш
Самый короткий код в байтах выигрывает
rotate(x)
функция тригонометрической функцией? (он просто вращает «холст»x
радианами)cos, sin, tan, sec
и т. Д.Ответы:
Желе , 8 байт
Использование сложной арифметики представляется разрешенным.
Попробуйте онлайн!
Как это работает
источник
Python 2, 29 байт
Возвращает координаты в виде комплексного числа.
источник
Mathematica, 24 байта
Чистая функция, использующая
Sign
и знающая, куда идут определенные параболы.источник
C
10386747370 байтСпасибо @orlp за сохранение
1215 байтов!Попробуйте онлайн!
источник
"\16\17\13\7\6\5\9\15"[n] == "pw[1*#?i"[n]/7
"biM1*#?["
, потому что в"\16\17\13\7\6\5\9\15"
значениях есть восьмеричные числа, поэтому 16 == 14 в десятичной системе счисления, 17 == 15 и так далее.!!(n&4) == n/4&1
n&2?n&1:-(n&1) == n%2*~-(n&2)
JavaScript (ES6),
4136 байтИспользуются две простые таблицы поиска, которые кодируют 8 записей в базе 4 после добавления одной к каждой «цифре». Альтернативная версия, использующая более простые таблицы поиска:
Старая версия (на 4 байта короче благодаря @Neil):
Наивный подход, использующий некоторые простые вычисления, чтобы найти координаты X и Y отдельно ...
источник
r&&(r<4)-(r>4)
илиr%4&&1-(r&4)/2
сохранить байты на старую версию.r=>[r>2&r<6?-1:r<2|r>6,r>4?-1:r%4&&1]
n=>[(s='22100012')[n]-1,s[n+6&7]-1]
.TI-Basic, 23 байта
Предполагается, что ваш калькулятор в режиме радиана; если это должно быть в программе, то это 25 байтов.
источник
Желе ,
1312 байтЯ все еще довольно уверен, что есть короче, но я еще ничего не нашел, так что думал, что выложу это
Попробуйте онлайн! или посмотрите набор тестов
Как?
Альтернативный метод , также 12 байт :
источник
C 66 байтов
тестовый код
полученные результаты
источник
C, 56 байтов
Простой бинарный поиск выполняется дважды. Первый поиск выполняется по n, сдвинутому на 2.
Онлайн выход на Ideone.
C, 53 байта
Вывод без запятой мог быть сжат еще больше с помощью рекурсивного вызова.
Онлайн выход на Ideone.
источник