Песочные часы
У этих песочных часов есть 60 «песков времени», и они полностью заполняют каждую камеру. Часы имеют 19 символов в ширину и 13 символов в высоту. Каждая камера имеет 5 рядов песка, и в центре есть ряд, в котором может содержаться 1 песок. Верхний ряд может содержать 17 песков, следующий 15 и так далее (см. Ниже). Пески падают в нижнюю камеру со скоростью один песок в секунду.
START 3 SECONDS LATER 38 SECONDS LATER
███████████████████ ███████████████████ ███████████████████
█.................█ 17 █.............. █ 14 █ █ 0
██...............██ 15 ██...............██ 15 ██ ██ 0
███.............███ 13 ███.............███ 13 ███....... ███ 7
█████.........█████ 09 █████.........█████ 09 █████.........█████ 09
███████.....███████ 05 ███████.....███████ 05 ███████.....███████ 05
█████████.█████████ 01 █████████.█████████ 01 █████████.█████████ 01
███████ ███████ ███████ . ███████ ███████ . ███████
█████ █████ █████ . █████ █████ . █████
███ ███ ███ . ███ ███.... ███
██ ██ ██ ██ ██...............██
█ █ █ █ █.................█
███████████████████ ███████████████████ ███████████████████
Соревнование
Отобразите песочные часы (без цифр или заголовков) по истечении определенного периода времени (0 ≤ t ≤ 60).
Правила кодирования
- Песочные часы должны выглядеть точно так, как показано здесь. Вы можете заменить
█
символ и / или.
символ тем, что вам нравится, в соответствии с вашим языком (Unicode, проблемы совместимости ASCII). - На входе должно быть число, например 45 или 7. По прошествии этих секунд на дисплее появятся часы.
- Вывод может быть отображен или сохранен в файл. Никакого дополнительного текста или меток, как показано выше, не требуется - только песочные часы - это все, что нам нужно.
- Если пользователь вводит t> 60, вам не нужно обрабатывать ошибку.
Точки
- Самый короткий код выигрывает.
Ответы:
JavaScript ( ES6 ), 203
208 233 270 256символовРедактировать Пересмотрено, используя цикл вместо последовательности вызовов.
Редактировать Добавлен верхний и нижний ряд, которые отсутствовали.
Функция, возвращающая вывод. Запустите фрагмент в Firefox для проверки.
источник
setTimeout( tick, 1000);
Python 2, 200
xnor сделал 197- байтовую версию в чате .
Я бы опубликовал объяснение, но я потерял представление о том, как это на самом деле работает ...
Также, вот анимированная версия с проклятиями:
источник
Python 2.7,
362356347Выход за 38 секунд:
источник
С 544
Вот что у меня пока есть для решения C.
Скомпилировано с помощью следующей команды:
Надо признать, что этот язык имеет большой объем - включение оператора было небольшим препятствием, исходящим прямо из блоков, но я действительно искал повод для практики использования C.
Я надеюсь, что вам понравится мое решение, и дайте мне знать, если вы видите пути улучшения.
источник
for
вместо того , чтобыwhere
,?:
вместо тогоif else
, глобальный переменный ИНТ не нужноint
,include
не нужно. (Мне нравится твоя математика)r,i,y,x,b,d,n[]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[14][20];main(s,a)char**a;{for(s=atoi(a[1]);y<13;){b=x=i=0;d=abs(y-6);d+=3<d?3:d;d=9-d?9-d:10;r=s>55?59-s:s>38?4:s>24?3:s>12?2:s>4?1:r;for(;b<19;)H[y][b++]=35;for(;x<19-2*d;x++)H[y][x+d]=(x>s-n[y]?" .":". ")[y>6];for(;i<r;)H[7+i++][9]=46;H[y++][b]=10;}puts(H);}
(будьте осторожны, к длинным комментариям добавляются странные невидимые символы)Matlab, 252 байта
Идея заключается в построении матрицы, которая выглядит следующим образом:
Оттуда легко заполнить записи строками, зависящими от
n
(заполнение всех записей, которые большеn
и меньше, чемn+60
с точками)Ибо
n=38
мы получаем этот вывод:источник
Ява, 712
Ввод берется из командной строки. Обрабатывает как отрицательные значения для времени, так и больше, чем требуется.
выход:
Он заполняет песок из центра, расширяясь наружу. Я, вероятно, могу играть в гольф больше, если мне лень с тем, как он заполняет нижнюю половину и опустошает верхнюю. Но сейчас мне это очень нравится.
источник
Haskell 512 байт
вход
m 55
Выход
Вход-
m 48
выходисточник
++
. Также вы можете сохранить несколько байтов, предварительно задавlength
иreverse
.C #, 382
410все еще возможно уменьшить его на несколько байтов ...
Скрипач - 38сек
источник
int u=60-22
а не толькоint u=38
??Рубин:
196190186185184 символовCW, потому что не соответствует в точности размещенным образцам, так как это потребляет песок, начиная слева. В основном просто демонстрация
String.[]=
метода.Образец прогона:
Рубин: 215 символов
Это генерирует точный требуемый результат:
Образец прогона:
источник