Добро пожаловать на мой первый конкурс по коду! :) Давайте прыгать прямо в это.
Вызов:
Учитывая два вектора с плавающей точкой, O (начало) и T (цель), вы должны создать программу для вывода значений L и R в STDOUT.
- О - это один угол площади
- Т - один угол квадрата, который расположен напротив О
- L - это 2D точка (угол), обозначающая другую точку незавершенного квадрата
- R - это 2D точка (угол), противоположная L
правила
- Значения для O и T должны быть прочитаны из STDIN (см. Пример ввода).
- Опять же, значения L и R должны быть напечатаны в STDOUT.
Скоринг и бонусы
- Подсчитайте байты вашей программы.
- Если ваша программа рисует линии , которые соединяют между O с L до T в R , вычесть 15 байт из подсчета байтов.
Примеры
Первая строка охватывает входные данные (первые квадратные скобки для O и следующие квадратные скобки для T ), а другая строка представляет ожидаемый результат.
- [0, 0] [3, 3] Ожидаемое: [0, 3] [3, 0]
- [0, 0] [-2, -2] Ожидаемое: [-2, 0] [0, -2]
- [1, -1] [4, 2] Ожидаемое: [1, 2] [4, -1]
- [0, -1] [0, 1] Ожидаемое: [-1, 0] [1, 0]
ВНИМАНИЕ : входы и выходы могут быть числами с плавающей точкой!
Важная информация!
- Значения O и T могут быть приняты в любом формате, если они поступают из STDIN (например, Inside [] или () ...), используйте любой формат, который вы хотите.
- L и R могут быть напечатаны в любом порядке.
- Помните: когда (O-> L-> T-> R-> O) соединены, каждая сторона должна иметь одинаковую длину!
выигрыш
- Это код-гольф, поэтому побеждает ответ на меньшее количество байтов!
- Ответ победителя будет принят в воскресенье 15.11.2015 с 20:00 до 22:00 (по финскому времени) (Если я не ошибаюсь, эта дата пишется как 15.11.2015 в США, не запутайтесь).
Удачного игры в гольф!
Ответы:
Серьезно , 11 байтов
Порт моего TI-BASIC ответа. Рассчитывает
mean(X)+i*(X-mean(X))
.Объяснение:
Ввод в виде списка из двух комплексных чисел:
[1-1j,4+2j]
и выход в том же формате:[(4-1j), (1+2j)]
.источник
æ
для среднего значения по списку и заставилî
(умножить на i) векторизацию, разрешив неконкурентное 9-байтовое решение. Серьезно начинает становиться серьезно хорошим языком.Σ
2 байта?Σ
кодовая точка 0xF4.Серьезно , 25 байтов
,i││-++½)+-+½)++-½)±+++½)
Принимает ввод в виде списка:
[x1,y1,x2,y2]
Та же стратегия, что и в моем ответе на Python, но серьезно.
Объяснение:
Попробуйте онлайн
источник
TI-BASIC, 16 байтов
Для калькулятора серии TI-83 + или 84+.
Если я не понял неправильно, OP сказал, что они хорошо воспринимают ввод и вывод как комплексные числа.
i
Здесь мнимая единица, а не переменная статистика.TI-BASIC имеет
mean(
функцию, но, к сожалению, он не работает со сложными списками, бросаяERR:DATA TYPE
.Ввод в форме
{1-i,4+2i}
для[[1,-1],[4,2]]
. Выход в форме{4-i 1+2i}
для[[1,2][4,-1]]
.источник
Matlab,
5145464542 байтаТеперь ввод ожидается в виде одного столбца:
[x0;y0;x1;y1]
(вывод в том же формате) Я просто изменил его, чтобы он был полной программой.Или в качестве альтернативы
Старое решение:
Вход ожидает вектор столбцов, например
f([0;0],[3;3])
Он также возвращает два вектора столбцов (в виде матрицы 2x2).
источник
Japt,
2928 байтJapt - это сокращенная версия Ja vaScri pt . переводчик
Обратите внимание, что для работы со стрелками требуется браузер, совместимый с ES6, например, более новые версии Firefox. Ввод идет как массив из 4 элементов, например
[1,-1,4,2]
.Как это устроено
Как это было в гольф
Сначала я попытался просто скопировать подход @ Mego's Python. Это оставило меня с этим 48-байтовым монстром:
(Примечание: ввод в настоящее время не должен быть заключен в массив.)
Поскольку каждый из этих элементов нужно разделить на 2, короче весь массив сопоставить с
mY=>Y/2
:Что теперь? Ну, теперь массив просто добавляет три из входных данных и вычитает четвертый, следуя шаблону
1,2,3,0
. Таким образом, мы можем упаковать входные данные в массив, затем сложить их вместе, разделить на 2 и вычесть необходимый элемент:Здорово, сохранил байт! Но возможно ли уменьшить массив в начале? Давайте попробуем упаковать его в строку, а затем разделить обратно на массив с помощью
a
:Посмотрите на это, еще один байт сохранен. Но есть ли еще лучший способ? Ну, мы можем использовать тот факт, что
[1,2,3,0] ≡ [1,2,3,4] mod 4
:Еще два байта! Теперь мы куда-то едем. Но это
Ug0 +Ug1 +Ug2 +Ug3
занимает много места. Что если мы уменьшим массив с добавлением?Вау, это действительно помогло! Теперь мы до 29 байтов. И благодаря @ ן nɟuɐɯɹɐ ן oɯ, я даже смог сыграть в гольф еще один байт от сокращения. Но если бы мы могли использовать встроенную функцию для суммирования массива, это было бы намного короче:
19 байт! Удивительный! К сожалению, у Japt нет таких встроенных модулей. Я добавлю это, когда у меня будет шанс. Приветствуются предложения, как для программы, так и для языка!
Что касается v1.4.4, я добавил в Japt гораздо больше возможностей, чем планировал изначально. Начиная с первоначального плана для более короткой версии:
Сначала нам нужно изменить несколько вещей: функции определены с
{
помощью функции sumx
. Эта версия работает как есть:Теперь
@
это сокращениеXYZ{
, позволяющее нам сохранять байт, переключаясь сZ
наX
. Кроме того,£
это ярлык дляm@
сохранения другого байта:Недавно я реализовал функцию, в которой
U
в начале программы обычно можно не указывать. Однако из-за ошибки реализации это также работает с функциями:Наконец,
g
функция теперь переносится, если индекс находится за концом строки, что позволяет нам удалить%4
всего 13 байт :И я думал, что 19 было удивительно ;-) Проверьте это онлайн!
источник
eval(U.join`+`)
.eval
эквивалент, это на самом деле экономит байт!Javascript (Node.js / ES6), 154 байта
Получение stdin - более длинная часть кода. Входные данные должны быть разделены запятыми:
источник
ngn APL, 21 байт
Он принимает входные данные в виде пары комплексных чисел (например,
1J¯1 4J2
) и печатает выходные данные таким же образом (например,4J¯1 1J2
). Попробуйте онлайн в демоверсии ngn / apl .источник
1 ¯1
для ввода0J¯1 0J1
, который является правильным ответом. Что вы получаете?Pyth, 12 байт
Он принимает входные данные в виде пары комплексных чисел (например,
1-1j, 4+2j
) и печатает выходные данные в виде массива (например,[(4-1j), (1+2j)]
). Попробуйте онлайн.источник
𝔼𝕊𝕄𝕚𝕟, 29 символов / 43 байта
Try it here (Firefox only).
источник
CJam, 30 байтов
Попробуйте онлайн
Это принимает входные данные в виде списка списков, например, для последнего примера:
Объяснение:
источник
Пролог, 118 байт
Чуть более читабельно:
Для запуска программы:
Пример ввода, когда известны известные углы [1, -1] [4, 2]:
[1, -1,4,2]
Пример вывода, где X и Y будут содержать неизвестные углы:
X = [1.0, 2.0],
Y = [4,0, -1,0]
Попробуйте онлайн здесь
Изменить: Изменены читать ввод из STDIN
источник
Python 3, 102 байта
Ввод принимается в виде
x1 y1 x2 y2
, в одной строке.Попробуйте онлайн
источник
Python 2, 56 байт
Ввод может быть
x1,y1,x2,y2
или(x1,y1,x2,y2)
источник