Напишите программу, которая отображает движущийся шар ASCII *
внутри прямоугольника (20 на 10 символов, включая границу). Мяч не должен пересекать прямоугольник, например, удариться о стену. Сцена должна очищаться и перерисовываться каждые 0,1 секунды, и шар должен двигаться на 1 символ в направлении x и y в каждом кадре. Самая короткая программа, написанная на любом языке, выигрывает.
Пример вывода (кадр 1)
+------------------+
|* |
| |
| |
| |
| |
| |
| |
| |
+------------------+
Пример вывода (кадр 2)
+------------------+
| |
| * |
| |
| |
| |
| |
| |
| |
+------------------+
Пример вывода (кадр 8)
+------------------+
| |
| |
| |
| |
| |
| |
| |
| * |
+------------------+
Пример вывода (кадр 9)
+------------------+
| |
| |
| |
| |
| |
| |
| * |
| |
+------------------+
1080x1920
разрешением :)Ответы:
Ruby 1.9, 115 знаков
Логика движения очень похожа на Данко «s ответ .
Эта версия была протестирована только на Linux.
источник
puts"\e[2J"
просто печатает←[2J
(и перевод строки) на экране.cls
не работает для меня, ноsystem ("cls")
работает.Powershell, 144 символа
Основываясь на превосходном ответе Джои , используя тот факт, что координаты шара являются функцией индекса кадра (i), поэтому, если у вас есть что-то вроде
x=n-abs(n-(i mod (2*n)))
, x будет переходить от 0 к n, обратно к 0 и так далее ...источник
if(-1,18-eq$x){$a*=-1;$x+=2*$a}if(-1,8-eq$y){$b*=-1;$y+=2*$b}
что заменил четыреif
раньше ;-). Я был уверен, что должна быть формула.Python 2, 234
Я уверен, что это может быть больше в гольфе, но я должен идти, вот что у меня есть софар. будет работать над этим позже
примечание: работает в командной консоли Windows. Другие операционные системы могут использовать команду, отличную от команды
cls
очистки экрана, напримерclear
источник
print "\e[H\e[2J"
работу на окнах?Рубин (
179174147)EDIT избавился от еще нескольких символов:
EDIT сбрил некоторые символы, теперь 174:
Ungolfed:
источник
sleep .1
работать тоже?SyntaxError: (irb):1: no .<digit> floating literal anymore; put 0 before dot
, Но я вернусь к этому, если мне это понадобится в будущем, спасибо!?*
вместо'*'
, и т. Д.←[2J←[f+------------------+
первую строку.$> << "\e[2J\e[f"+f
на'cls';$><<f
(используйте обратныеcls
JavaScript (275
283)Демо: http://jsfiddle.net/eKcfu/2/
Я написал это довольно быстро, так что я уверен, что есть еще много возможностей для улучшения. Предложения приветствуются :)
Редактировать 1 : удалить ненужный отдельный вызов функции, встроить непосредственно в
setInterval
.источник
Haskell, 212 символов
Использует более функциональный подход для вычисления координат, создавая бесконечную последовательность для каждой координаты отдельно, а затем объединяя их (линии 2 и 3). Остальное - рисование кода.
источник
PowerShell, 184
185215Только пол-гольф, так как мой мозг не работает должным образом, когда я болен ...
Однако, есть несколько хороших трюков.
[Редактировать]: зацикливание на поле намного короче.
источник
QBasic (QB64),
178173 байта-5 байт благодаря DLosc
источник
DO ... LOOP
вместоWHILE 1 ... WEND
и сохранить 5 байтов.Perl 5, 141 символов
Не начинается в верхнем левом углу, как в примере с выходом, но это не указано как требование.
источник
Ruby 1.9, 162 символа
Ответ на вопрос @ Ventero был на 35 символов, но я был впечатлен, что смог сделать это так далеко, все еще используя относительно простой подход к реальной логике. ^ [Является буквальным ESC (1 символ).
источник
R, 233 символа
источник
Еще одна запись Bash -
213204 символовНе совсем призер, но, тем не менее, это было весело. Он использует последовательности символов vt100 для рисования. (код, представленный здесь, использует 215 символов для удобства чтения, 2 символа могут быть удалены экранированием, например, '*' -> \ *
источник
Powershell, 139 байт
Вдохновленный Danko Durbić в ответ .
Этот скрипт использует
-replace
оператор для рисования*
внутри прямоугольника.Менее гольф-сценарий, чтобы объяснить, как это работает:
источник
Баш 278
300, 296\ Е в строке
echo -e "\e[$2;$1H$3"
может быть произведензаменить его. Как двоичный 0x1b это на 3 символа короче; Я считаю только 1 для "\ e", потому что только программное обеспечение верстки заставляет меня использовать
\e
.источник
$
символы внутри((...))
и заменитьx=$(($x+$p))
на((x+=p))
и аналогично в следующей строке. (Они также предложили использовать\e
для побега персонажа).\*
может работать в качестве замены"*"
.1,337
должен быть постоянно заблокирован: PTI Basic,
169167 байтУжасно медленно, но это работает.
источник
(X=20)→S
может быть(X=20→S
, и вы можете воспользоваться Ans, чтобы сэкономить несколько байтов в последнем цикле For (у меня есть положительные линии 8 и 9, которые можно сыграть в гольф, но я не уверен, как на данный момент."| \ Output(O,1,Ans \ Output(O,20,Ans
должно сработать.Ans
это один байт маркера , набранный2nd
(-)
. Это приведет к экономии одного байта, поскольку|
токен на калькуляторе занимает два байта.PHP,
196 186148 байтЯ удалил избегая целочисленного переполнения, чтобы сохранить 6 байтов. Он будет работать в течение 29 миллиардов лет до переполнения; еще 6,8 года на 32-битной системе. Я бы сказал, что это приемлемо.
Расчет позиции вместо ее корректировки сэкономил много, подготовив полный шаблон сразу другого лота.
Бежать с
-nr
. Требуется PHP 7.1.разбивка :
источник