РЕДАКТИРОВАТЬ
Похоже, что после моей опечатки в первоначальном посте произошла некоторая путаница, в которой для определения плоскости использовалась строчная буква o, а затем - заглавная. К сожалению, эта ошибка не была обнаружена в Песочнице. Так как многие члены написали ответы с обоими, и так как опечатка была моей ошибкой, я позволю использовать прописные или строчные буквы o в определении плоскости. Я добавил новое правило для этого.
Задний план
Мне нравятся ascii art анимации, как я их называю, так что вот еще одна. Я не думаю, что это слишком сложно реализовать, поэтому надеюсь получить короткие и интересные ответы.
Всем товарищам по сообществу
Если вы улучшили свой ответ, пожалуйста, измените количество байт на
старый счетчик байтов новый счетчик байтов
так что мы можем видеть ваш прогресс. Благодарность!
Вызов
Вот самолет ASCII
--O--
Вот взлетно-посадочная полоса
____| |____
Самолет начинается на 5 новых линий выше взлетно-посадочной полосы. Чтобы предотвратить любые столкновения между метрической и имперской системами и сделать это действительно международным вызовом, я не буду упоминать метры или футы. Пример:
--O--
____| |____
Самолет должен приземлиться точно в середине взлетно-посадочной полосы, как показано ниже:
____|--O--|____
вход
Начальное горизонтальное положение плоскости определяется целочисленным вводом, который используется для ссылки на кончик левого крыла, т.е. он находится в диапазоне от 0 до 10 включительно.
Выход
Каждый этап полета самолетов должен быть показан. Пример ниже (input = 10):
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
____|--O--|____
Для простоты мы игнорируем законы перспективы. Взлетно-посадочная полоса остается того же размера, как вы приближаетесь.
правила
- Обновление Середина плоскости может быть в верхнем или нижнем регистре o, но какой бы ни был выбран, он должен быть согласован во всем коде. Если ваш язык не поддерживает символы, указанные выше, не стесняйтесь использовать альтернативные символы только ascii.
- Самолет спускается на 1 строку за кадр.
- Самолет может двигаться только на 1 пробел влево или вправо каждый раз, когда он спускается на одну линию. Он не должен двигаться по каждой линии спуска. Пока он заканчивается на взлетно-посадочной полосе, это зависит от вас, когда он движется вправо или влево. Ты пилот!
- Обработка ошибок не требуется. Вы можете предположить, что входные данные всегда будут действительными целыми числами от 0 до 10 включительно.
- Вывод должен состоять только из символов, показанных выше (если ваш язык не поддерживает их, см. Первое отредактированное правило) и должен быть одинакового размера, т.е. должен начинаться с 6 строк в высоту и 15 символов в ширину. Высота может уменьшаться по мере продвижения, как в примере выше.
- Программа или функция в порядке, но должны выдавать результат, как показано выше.
- Лидирующие / завершающие пробелы / переводы строк меня устраивают.
- Пожалуйста, не стесняйтесь очищать экран между выходными кадрами, если хотите. Это не требование.
- Стандартные лазейки, как обычно, запрещены (хотя я не думаю, что есть много людей, которые бы помогли с этим вызовом).
- Это кодовый гольф, поэтому самый короткий ответ, очевидно, является победителем и, вероятно, получит большинство голосов, но не обязательно будет принят как лучший ответ, если какое-то действительно интересное решение придет на каком-то неожиданном языке, даже если оно длиннее. Не стесняйтесь публиковать все, что соответствует правилам, пока это работает.
Реализованная справочная реализация в Python 2 доступна на Попробуй онлайн! так что вы можете увидеть, как он выглядит для разных входных значений.
Ответы:
TI-BASIC, 61 байт
источник
TI-BASIC, 62 байта
Обратите внимание, что TI-BASIC не поддерживает _ или | и поэтому я заменил на заглавную I и -. Это не должно влиять на количество байтов.
источник
Python 2, 107 байт
Попробуйте онлайн
Просто жестко кодирует последнюю строку для посадки самолета. Скорее всего, его можно сыграть в гольф, повторно использовав детали до или интегрировав в петлю.
источник
Perl, 94 байта
93 байта кода +
-p
флаг.Попробуйте онлайн!
источник
}{
(и$"
возиться с подсветкой синтаксиса).JavaScript (ES6), 108 байт
Попробуй это
Показать фрагмент кода
использование
Просто позвоните
f
с указателем самолета.Выход
источник
Scala,
224181 байтРЕДАКТИРОВАТЬ : Я понятия не имел, что вы могли бы сделать,
"string"*n
чтобы повторить это n раз! Скала продолжает поражать меня. Пропускif(t>0)
вместоif(t==0)
был ошибкой новичка. Спасибо за советы, Сума !Оригинальные замечания:
Я подумал, что было бы интересно попробовать рекурсивное решение. Я относительно новичок в Scala, поэтому я уверен, что это далеко не оптимально.
источник
:Unit=
. Пропуск знака равенства установит тип возвращаемого значения в Unit.o
в первой строке? И такi
как всегда> = 0, вы можете изменитьi!=0&&i==t
наi>0&i==t
(3-я строка).Пакет, 230 байтов
x
это количество пробелов, которые нужно удалить из начала строкиs
, поэтому я вычитаю параметр из 10. Последняя строка - это ближайший пакет, который долженx-=sgn(x-5)
.источник
sed, 181 байт + 2 для
-nr
флаговUngolfed
Использование:
$ echo 2 | sed -nrf flightsim.sed
источник
Retina ,
8683 байтаПопробуйте онлайн!
Вероятно, есть какое-то сжатие, которое я мог бы использовать на ВПП, и пустое пространство над ним, но все, что я пробовал, оказалось дороже, чем открытый текст (в Retina ¶ это новая строка, так что вы можете увидеть начальное состояние в виде открытого текста на вторая линия).
источник
Scala ,
177, 163, 159,137 байт.На основании другого ответа , со значительными сокращениями.
источник
Perl 6 ,
979081 байтВопреки тому, как это выглядит, он выводит версию * в нижнем регистре
--o--
, как это разрешено обновленным описанием задачи.Попробуйте онлайн!
Как это работает
Битовые строковые операторы FTW!
Это работает потому, что побитовые строковые операторы используют значения кодовой точки символов в заданной позиции в двух строках, чтобы вычислить новый символ в этой позиции в выходной строке.
В этом случае:
Для верхнего регистра
O
мы могли бы использовать~^
(строковое поразрядное XOR) с плоской маской\r\ro\r\r
(+4 байта для обратной косой черты):Формула для смещения плоскости,
h + v*(17 - h/5)
была упрощена из:источник
Python 2 , 160 байт
Попробуйте онлайн!
Вот эталонная реализация, упавшая до 160 с 384. Я думаю, что путь еще впереди. Просто опубликовано для удовольствия и для поощрения лучшего ответа Python.
источник
while-~x
?i
какi+=(i<5)-(i>5)
Befunge-93,
136130 байтПопробуйте онлайн!
объяснение
источник
Рубин, 94 байта
Печатает положение самолета с последующими символами новой строки и затем аэропортом. Затем он перемещает плоскость на 1, -1 или 0, в зависимости от его положения относительно 5.
После повторения 5 раз он печатает самолет в аэропорту.
источник
8-е ,
177172 байтаСлово
f
ожидает целое число от 0 до 10.использование
объяснение
источник
Mathematica, 111 байт
Анонимная функция. Принимает число в качестве ввода и возвращает строку в качестве вывода. Возможно, будет дальше в гольф.
источник
QBIC ,
939184 байтаУдалил несколько байтов, заменив объявление X $; оптимизирован цикл FOR, который печатает расстояние над землей. Приведенное ниже объяснение относится к старой версии, но в основном работает так же.
Для тестирования (и эстетики) у меня была немного другая версия, на 103 байта:
Они функционально идентичны. Второе дополнение имеет то, что экран очищается между кадрами и останавливается на 0,5 секунды между кадрами.
Образец вывода
Обратите внимание, что я добавил две новые строки между кадрами. Самый лучший код выше не добавляет пустые строки между кадрами, более прохладный очищает экран.
объяснение
Так как я чувствую, что это затрагивает многие вещи, которые мне действительно нравятся в QBIC, и дает хорошее представление о том, как некоторые из его функций работают под капотом, я немного упустил объяснение. Обратите внимание, что QBIC по своей сути является интерпретатором QBasic для Codegolf. Код QBIC входит - код QBasic выходит (и впоследствии выполняется).
источник
SmileBASIC,
109105 байтисточник
PHP 7, 139 байт
все еще ужасно долго
принимает входные данные из аргумента командной строки; беги с
-r
.сломать
источник