Записи для этого испытания будут отображать анимированную вращающуюся фигуру Лиссажу . Появление трехмерного вращения происходит, когда параметр x последовательно сдвинут по фазе в каждом кадре.
Входные данные:
Параметры a
и b
(согласно статье в википедии ) будут указаны в командной строке или прочитаны из стандартного ввода.
Выход:
Это ascii-art , поэтому выходные данные будут отображаться в окне эмулятора терминала или аналогичном. Размер вывода может быть жестко задан, но число Лиссажу должно быть как минимум достаточно большим, чтобы заполнить окно размером 80x24.
Частота кадров анимации будет примерно 50 кадров в секунду. Хорошо спать по 20 мс между каждым кадром, если время для расчета каждого кадра мало по сравнению с фиксированным временем ожидания. Если выбранный вами язык не может достаточно быстро рассчитаться на выбранной вами платформе, вам придется рассчитывать время для динамического сна.
Каждый кадр не будет отображаться, пока все вычисления для этого кадра не будут завершены. Нет необходимости очищать экран между кадрами.
Фигура будет совершать полный 2*Pi
оборот примерно каждые 4 секунды.
Для каждого кадра должна быть сформирована полная замкнутая кривая. Не менее 1000 точек должны быть рассчитаны вдоль кривой. Рисование линий между точками не требуется.
Точки кривой будут отображаться как #
символы. Остальная часть области отображения будет пустой / пробел.
Это код-гольф , поэтому самый короткий ответ в байтах (который я считаю приемлемым) будет признан победителем через неделю после публикации.
Беззвучный справочный ответ .
Ответы:
Perl - 177
Коэффициенты передаются через аргументы. Выше GIF производится из
perl % 2 3
источник
С (справочный ответ - не в гольф)
Вывод с
./lissajous 2 3
:C 257 байт
Ладно, я не мог удержаться от игры в гольф сам. Я думаю, что на этом можно сделать гораздо больше:
источник
usleep
20000 мс, почему бы неsleep
20 с?usleep(2e4);
?Питон 3 - 280
Извините, у вас нет одного из этих модных анимированных гифок. Консоль Windows медленно печатает: P
Не уверен, что это соответствует требованию 50fps, хотя я не уверен, что это действительно возможно с Python. Вы можете отрегулировать 1000 во второй строке для количества точек, которые нужно вычислить (список содержит ширину вывода, высоту вывода, точки, которые нужно найти, прогрессию на кадр (pi * 2 / n) и начальную точку). Или вы можете удалить их и указать во входных данных.
БОЛЬШЕ ВАЖНОГО РЕДАКТИРОВАНИЯ: ввод через stdin, через пробел, перевод строки завершен. Будем ждать вашего ввода.
РЕДАКТИРОВАТЬ: Скриншот. Изменена высота до 40 для этого.
источник
lissajous.py
, а затем запуститьpython3 lissajous.py 2 3
должно быть достаточно, верно?stdin
, а не аргументы (не удалось указать, что ... упс). Пространственно-отделенный.input()
и угадать. Теперь у меня нормально работает с 3.2.3. +1C # -
360352 (кросс-платформенный - 332 только для Windows)Отредактировано после микро-игры в гольф и исправления ошибок округления + предложение от Ypnypn
Не совсем претендент такой длины - и это в значительной степени дословная копия ссылки - ну да ладно. :)
Захват памяти, создание нового массива для каждого обновления - изначально (пере) использовал StringBuilder, но пожертвовал им ради краткости. Но по крайней мере обновление занимает менее 1 мс на моем старом Core2.
После удаления некоторого - ныне обидного - старого игры в гольф, тем самым уменьшив его на 8 символов, я попытался вернуть его к «поэтическому» 360, вернувшись к удвоению, а не к разбору, и вернувшись к 80 * 24 вместо 1920. Это все еще только 359 - и никакое другое односимвольное дополнение, о котором я могу думать, действительно не добавляет никакой ценности к коду. Поэтому мы будем придерживаться 352. :-)
Развернутый (потерял код перед игрой в гольф):
Консоль Windows фактически допускает вывод множества нулевых символов, в результате чего вывод (графически) идентичен использованию фактического пробела - что позволяет инициализировать массив символов на несколько символов меньше.
источник
using C = Console
Действительно ли сохранить какие-либо символы?Python 2.7 - 214
Я думаю, что я собираюсь еще раз взглянуть на это. У меня есть ощущение, что это может быть снижено еще дальше, но будет трудно достичь количества байтов Perl. Математика, кажется, мое самое большое ограничение здесь.
Предупреждение: может произойти сбой любого терминала, который вы используете. Я проверил это в командной строке Windows с
lissajous.py 2 3
. Из-за быстрой записи в командную строку ожидайте, что кадры немного подпрыгнут. Это может быть в основном решено (за счет скорости) с помощью большегоs
вrange(s)
иt=2*pi*i
.Я не использую
\r
или\b
здесь специально, потому что я запускаю его на Windows, и это будет стоить дополнительных символов.источник