Вступление
Для тех, кто никогда не слышал об этой игре раньше. Вы играете в мяч, который должен выжить как можно дольше. Это сделано, перемещаясь налево или направо, идя к отверстиям. Поскольку карта движется вверх, вам нужно идти вниз, чтобы выжить дольше. Если поиск изображений, вы , вероятно , знаете , какую игру я имею в виду.
Задание
Учитывая положительное целое число n , выведите карту падающего шара из n слоев. Между слоями есть 4 новых строки. Ширина слоя состоит из 25 символов подчеркивания с одним отверстием длиной 5. Это означает, что общая ширина равна 30. Это случайное смещение после каждого слоя. Пример допустимого слоя:
_______________ __________
Отверстие также может быть по краям, как будто слой похож на цилиндр:
_________________________
Обратите внимание, что есть 2 пробела и 3 пробела. Делаем одно отверстие шириной 5.
Контрольные примеры
Для n = 4 это правильный вывод:
_______________ __________
______ ___________________
_______________________ __
_________________________
Примечание: отверстия должны быть равномерно распределены. Трейлинг и / или ведущие новые строки разрешены.
Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Ответы:
Pyth, 19 байт
Попробуй это здесь!
объяснение
источник
Руби,
747159Спасибо Алексу А. за напоминание о том, что, в сущности, одна строка означает, что я могу использовать стабильную лямбду
источник
puts
добавляет новую строку в конец (в то время как Rubyprint
нет), поэтому она была обновлена до5
новой строки.times
функцию, позволяющую мне сэкономить 3 байта вfor
цикле: D->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}}
попробуйте здесь(->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}})[input]
или просто указать, что вам нужно назначить его для вызова. Это довольно часто встречается на сайте.Юлия, 72 байта
Это анонимная функция, которая принимает целое число и возвращает строку. Чтобы вызвать его, присвойте его переменной.
Мы создаем строку из 25 знаков подчеркивания, за которой следуют 5 пробелов, а затем разбиваем ее на массив символов. Мы циклически сдвигаем его случайное количество раз (от 1 до 30), соединяем его обратно в строку и добавляем 5 новых строк. Этот процесс повторяется n раз, где n - вход. Полученный массив соединяется и возвращается.
Попробуй здесь
источник
PowerShell 65 байт
Запустите цикл для n итераций. Получить случайное число и сделать строку подчеркивания с 5 пробелами в конце. Индексируйте строку как массив для извлечения, начиная со случайного места. Отрицательная индексация оборачивается с конца. Присоединитесь к этому снова и добавьте 5 новых строк.
Изменить: я не знаю, почему я думал, что мне нужен параметр,
-Maximum
поскольку он позиционный. Благодаря TimmyD я побрил несколько байтов и забыл получить информацию, что привело меня к 65- летию .источник
Pyth, 19 байт
Попробуй здесь
Спасибо FryAmTheEggman за обнаружение ошибки.
источник
SpecBAS - 93 байта
Делает строку из 25 подчеркиваний + 5 пробелов, выбирает случайную начальную точку и склеивает строку в этой позиции и привязывает начало строки к концу.
Апостроф вызывает новую строку, поэтому 1 в конце строки и 4 пустых строки.
источник
MATL , 23 байта
Попробуйте онлайн!
объяснение
источник
Java,
177140 байт-1 байт для Blue, перемещающего i ++
-2 байта для меня, оставляя бессмысленные пробелы в оригинале
-34 байта синему, чтобы понять, что мне вообще не нужен символ []
Потому что, вы знаете, Java.
Слегка разгульный
Поскольку в Java нет строкового «поворота», мне пришлось использовать другой подход. Я сгенерировал случайное целое число 0-29, которое представляет начальный индекс отверстия (OBO, потому что
>
короче>=
). Каждый отдельный персонаж определяется логикойЭто обрабатывает "оборачивающую" природу целого.
источник
s = ""
). Оба исправлены сейчас.Python 3,5 -
109113 байтов (+4 для вывода 4 новых строк между каждым результатом):Негольфированная форма:
В основном происходит то, что в качестве аргумента функции «g» указана строка «j», состоящая из 25 символов подчеркивания и 5 пробелов. Затем случайный модуль импортируется, и столько раз, сколько указано пользователем, в диапазоне выбирается случайное число
0 => 29
, и строка «j» смещается вправо столько раз. Затем результат распечатывается после каждой итерации, с 4 новыми строками между каждым результатом.источник
'\r'
на,'\r'*4
вероятно, должен работать. Кроме того, я думаю, что вы можете изменитьrange(a+1)
наrange(a)
.range(a)
самом деле печатаетa-1
количество строк, такrange(a+1)
что это лучший способ распечатать точное количество строк, предоставленных пользователем. Кроме того, теперь он печатает 4 новые строки между каждым результатом.g(5)
и он печатает 6 строк вместо пяти, поэтому изменениеa+1
наa
, вероятно, исправит это.Питон,
119103 байтаисточник
n
время строки