Описание задачи
Вы должны показать симуляцию дождя в терминале.
В приведенном ниже примере добавляются 100 случайных капель дождя (используйте случайную функцию по умолчанию, которую предлагает ваш язык), ожидающие 0,2 секунды, а затем перерисовывающие, пока не истечет заданное время. Любой символ может быть использован для представления капли дождя.
параметры
- Время ожидания между перерисовками в секундах.
- Время, за которое будет виден дождь. Это просто целое число, представляющее количество итераций. [Таким образом, чистое время, за которое будет виден дождь, - это целое число, умноженное на время ожидания]
- Сообщение для отображения, когда заканчивается дождь. (Это должно быть в центре)
- Количество капель дождя для отображения на экране.
правила
- Для представления капли дождя должен использоваться один байт, и это может быть что угодно, даже кошки и собаки.
- Он не должен реагировать на размер терминала, что означает, что вам не нужно обрабатывать ошибку для терминалов различного размера. Вы можете указать ширину и высоту терминала самостоятельно.
- Применяются стандартные правила игры в гольф.
Пример кода и вывод
Это негольфированная версия, написанная на python 2.7 с использованием ncurses.
import curses
import random
import time
myscreen = curses.initscr()
curses.curs_set(0) # no cursor please
HEIGHT, WIDTH = myscreen.getmaxyx()
RAIN = '/' # this is what my rain drop looks like
TIME = 10
def make_it_rain(window, tot_time, msg, wait_time, num_drops):
"""
window :: curses window
time :: Total time for which it rains
msg :: Message displayed when it stops raining
wait_time :: Time between redrawing scene
num_drops :: Number of rain drops in the scene
"""
for _ in range(tot_time):
for i in range(num_drops):
x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)
window.addstr(x,y,RAIN)
window.refresh()
time.sleep(wait_time)
window.erase()
window.refresh()
window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)
if __name__ == '__main__':
make_it_rain(myscreen, TIME, 'IT HAS STOPPED RAINING!', 0.2, 100)
myscreen.getch()
curses.endwin()
Выход -
Ответы:
MATL , 52 байта
Входные данные расположены в следующем порядке: пауза между обновлениями, количество отбрасываний, сообщение, количество повторений. Монитор имеет размер 80 × 25 символов (жестко запрограммирован).
GIF или не случилось! (Пример с входами
0.2
,100
,'THE END'
,30
)Или попробуйте это в MATL Online .
объяснение
источник
why
:)JavaScript (ES6),
268261 байтПо крайней мере, в моем браузере вывод рассчитан на область фрагмента стека без необходимости переходить на «полную страницу», поэтому, если вы запросите более 702 капель дождя, произойдет сбой.
Редактировать: Сохранено 7 байтов с использованием текстового узла в качестве моей области вывода.
источник
setInterval
. Кроме того, почему вы используетеtextContent
вместоinnerHTML
?R
196 192185 байтПросто фиктивная версия, которую я написал на основе описания. Надеюсь, это то, что искала OP.
Сохранено несколько байтов благодаря @plannapus.
Аргументы:
w
: Время ожидания между кадрамиt
: Общее количество кадровm
: Пользовательское сообщениеn
: Количество капель дождяпример
Почему похоже, что идет дождь вверх?
Изменить: я должен отметить, что это моя настраиваемая консоль R-studio 23x100 символов. Размеры жестко закодированы в функцию, но в принципе ее можно использовать,
getOption("width")
чтобы сделать ее гибкой для размера консоли.Разгромил и объяснил
источник
rep()
автоматическиtimes
аргументация, поэтому в этом нет необходимости. Сохранено еще 7 байтов!runif
вместоsample
случайного заполнения матрицы.f=function(w,t,m,n,x,y){for(i in 1:t){r=matrix(" ",x,y);r[runif(n)*x*y]="/";cat("\f",rbind(r,"\n"),sep="");Sys.sleep(w)};cat("\f",g<-rep("\n",y/2),rep(" ",(x-nchar(m))/2),m,g,sep="")}
C 160 байт
Безголовая версия:
источник
R 163 символа
С отступами и переносами:
Он адаптирован к размеру терминала 24 строки по 80 столбцов.
w
это время ожидания,t
количество кадров,n
количество капель дождя иm
окончательное сообщение.Он отличается от @ ответ billywob в в другое использование
sample
: если выходной размер не указан,sample
дает перестановку входного вектора (здесь вектор , содержащий необходимое количество дождевых капель и соответствующее количество пробелов, благодаря тому , что аргументtimes
о функцияrep
векторизована). Поскольку размер вектора точно соответствует размеру экрана, нет необходимости добавлять новые строки или принудительно формировать их в матрицу.источник
NodeJS:
691158148 байтредактировать
По запросу, дополнительные функции удалены и Golf'd.
Правила указывают игнорирование размера, но эта версия включает в себя глюк для первых нескольких кадров. Это 129 байт.
Предыдущий ответ
Возможно, не самый лучший гольф, но я немного увлекся. У этого есть дополнительное направление ветра и фактор дождя.
node rain.js 0 0.3
Смотрите webm это работает здесь
источник
Noodel , неконкурентный 44 байта
После того, как я сделал язык, в моем списке дел было центрировано текста ... Но я был ленивым и не добавил ничего до этого. Итак, я не участвую в соревнованиях, но получаю удовольствие от испытаний :)
Размер консоли жестко запрограммирован в 25x50, что не очень хорошо выглядит в онлайн-редакторе, но подходит для фрагмента кода.
Попытайся:)
Как это работает
источник
Ruby + GNU Core Utils, 169 байт
Параметрами функции являются время ожидания, количество итераций, сообщение и количество капель дождя в указанном порядке. Новые строки для удобства чтения.
Core Utils были необходимы для
tput
иclear
.источник
Python 2,7,
254251 байтЭто моя собственная попытка без использования ncurses.
Спасибо @ErikTheOutgolfer за исправление и сохранение моих байтов.
источник
for
цикл в одну строку (как у вас40)];for i in u(
). Вы также нуждаетесь в символе ESC,'[2J'
я думаю. Кроме того, было дополнительное место вu(n): r[y
. Я не знаю, как ты насчитал 249, хотя. Все найденные мной проблемы были исправлены здесь .<esc>
обозначает буквальный байт ESC 0x1B. Число байт 242 , а не 246.SmileBASIC, 114 байт
Размер консоли всегда 50 * 30.
источник
Perl 5, 156 байт
Код 154 байта + 2 для
-pl
.Использует фиксированный размер 160x50.
Смотрите это онлайн!
Perl 5, 203 байта
201 байтовый код + 2 для
-pl
.Используется
tput
для определения размера терминала.источник