Вступление
Помните бурные 80-е? Я имею в виду, вы знаете, как 30 лет назад? Нет сотовых телефонов, нет интернета, нет банкоматов, флуоресцентной одежды (что это было ?!) и прокрутки маркиз ! Нет нет нет! Не онлайн, а настоящие, со светодиодной подсветкой.
Поскольку у меня ностальгическое настроение, я бы хотел, чтобы вы создали прокрутку с прокруткой.
Вызов
Создайте программу, в которой вы можете ввести строку в одну строку. Ваша программа должна создать область прокрутки шириной 80 символов, повторяя текст при необходимости.
правила
- Пользователь должен иметь возможность вводить строку в вашу программу в качестве ввода. Строка может быть параметром командной строки или строкой, введенной при запуске программы.
- Ваша программа должна непрерывно печатать строку из ровно 80 (видимых) символов.
- Строка должна обновляться каждые 0,1 секунды (более или менее; я не буду ее синхронизировать), смещая символы каждую итерацию на одну позицию влево.
- Строка "вращается". В конце предоставленной пользователем строки должен появиться другой экземпляр строки.
- Ваша программа должна напечатать вывод в одну строку без перевода строки (используйте «\ r» вместо «\ n»)
- Ваша программа должна работать до бесконечности , пока пользователь не прервет.
- Это код-гольф, поэтому выигрывает самый короткий код в байтах.
- Существует 10% бонус (округленный до следующего целого числа) для печати красным на черном фоне.
- Применяются стандартные лазейки.
Ссылочная реализация в Python 2.7
Эта программа не игра в гольф, но она обеспечивает эталонную реализацию (и, следовательно, верхний предел размера).
import time,sys
s=raw_input()*99
while 1:
for i in range(80):
print s[i:i+80]+'\r',
sys.stdout.flush()
time.sleep(0.1)
1 2 3 4 5 6 7 8 9 10 11 ... 300
обрезается примерно после 56.Ответы:
CJam, 31 байт
Ждет ровно 100 мс.
Это будет работать только с официальным интерпретатором Java , поскольку онлайн-интерпретатор показывает вывод только после выхода из программы.
Красный текст на черном фоне возможен в 40 (или 39) байтах, для оценки 36:
Как это устроено
источник
;
в объясненииPowerShell,
118 113 112 108 102 101 9996 - 10% = 86Код
С оговоркой, что теперь начинается первый цикл со вторым символом; В правилах не говорится, что он должен начинаться с начала строки, а первое включено в целом, так что это нормально для меня. Я получу как-нибудь до 100 символов - edit: спасибо @ConnorLSW за изменения, чтобы получить его ниже 100.
инструкции
Выход
Примечания
Более читаемая версия с именами переменных и параметрами, заполненными немного:
-F R
достаточно уникальными, например, для установки Red ForegroundColor.-B 0
устанавливает цвет Enum 0, который интерпретируется как «Черный».Альтернатива, более «правильный» шатер:
Код ссылки не обрабатывает строки длиной более 80 символов, пропуская что-либо в сообщении после ~ 160 символов, и он сбрасывает сбои каждые 99 * len (строковые) символы. например, если ширина знака была 5 символов, он делает это:
Эта версия индексирует по модулю длину текста вместо ширины знака, поэтому она проходит по всей строке. 106 - 10% = 95 символов
Альтернатива: знак, который повторяет, как .gif в вопросе, 118-10% = 106
Потому что это выглядит лучше.
источник
Bla
к0
-Write-Host
будет интерпретировать цифры к цветам.while(1)
чтобыfor()
сохранить несколько байтов :)for()
вы можете сохранить еще один байт, изменив его$s=(Read-Host)*180;for(){
наfor($s=(Read-Host)*180){
Matlab, 76 байт
Я думаю, что здесь хорошо то, что вы можете иметь векторы в виде индексов массивов. Это возвращает вектор соответствующих записей массива, что позволяет очень легко добавлять данную строку независимо от длины.
Результат:
источник
clc
. Вы забыли добавить's'
вinput
a=input('','s')
'
качестве входных данных можно использовать строки с разделителями. Многим языкам нужен разделитель строк, иначе они будут интерпретировать аргумент командной строки в форме предложения (слова, разделенные пробелами) как множественные аргументы в любом случае.QBasic,
116113 байтов - 10% =105102Вот отформатированная версия с некоторыми комментариями:
Пара заметок:
PRINT
послеFOR
.CLS
следует каждый раз сбрасывать курсор в верхний левый угол. Но на QB64, по крайней мере, если я не добавлю лишнее, выделениеPRINT
заканчивается на второй строке вместо первой. Если у кого-нибудь есть QBasic на DosBox или что-то подобное, мне было бы интересно узнать, происходит ли там то же самое или это ошибка QB64.TIMER
(количество секунд с полуночи) для задержки. Если код выполняется в полночь, выделение застрянет, потому чтоTIMER
будет сброшено0
и всегда будет меньше, чемt
после.источник
PRINT
а сCLS
--afterCLS
, независимо от того, что было напечатано ранее, следующийPRINT
оператор должен выводиться в 1,1; но вместо этого я столкнулся с ситуацией, когда он выдает 2,1.Perl,
9998 байт (-10% = 89)Принимает его из параметра командной строки.
источник
pb , ⌈ (216 + 3) * 0,9⌉ = 198
+3 байта за флаг интерпретатора
d=1
Довольно ужасная оценка, но, учитывая, как трудно сделать что-либо на этом языке, может быть и хуже. Отношение этого ответа (байты, используемые для получения красного текста) к (бонус от наличия красного текста) действительно хорошее, весь вывод становится красным только с
c
в начале!Время между каждым тактом варьируется в зависимости от длины входной строки, но оно составляет около 0,1 секунды.
Кстати, вывод этой программы выглядит как полный мусор, потому что интерпретатор очень плохой. Каждую миллисекунду он очищает терминал и перерисовывает все, поэтому он становится действительно мерцающим.
С комментариями:
источник
Perl - 120 байт (-10% = 108)
источник
Matlab, ⌈188 * .9⌉ = 170
Это работает в версии Matlab R2014b или выше. Результат показан в окне рисунка.
В следующем примере текст набирается жирным шрифтом для лучшей визуализации (в приведенном выше коде это не делается, поскольку он стоит несколько байтов). Также обратите внимание, что скорость анимации в формате GIF не соответствует требуемой паузе в 0,1 с, но время корректно на фактическом рисунке, показанном при запуске программы.
источник
SpecBAS, 130 байт (-10% = 117)
Умножает исходную строку на 80 или более символов, а затем обрезает ее до точно 80.
TEXT
это команда в SpecBAS, которая работает так же, какPRINT
(в этом примере), но сохраняет один символ.SCALE
добавляет несколько дополнительных символов в код, но делает его более привлекательным.Программа продолжает работать, пока вы не нажмете Esc.
источник
Perl, 63 (70 символов - 10% на бонус)
Не очень отличное решение от других, но я потратил впустую свое время, делая это, поэтому я подумал, что я также опубликую это!
Полагается на Unix-совместимый терминал для кодов ANSI и вызова coreutils '
sleep
. Два\x..
символа в приведенном выше являются буквальным переводом строки и escape-символом в соответствии с этим шестнадцатеричным дампом:источник
Рубин,
797675 байтЯ все еще не специалист по рубину, возможно, я могу сыграть в гольф.
С красным и черным же счетом:
источник
Perl, 84 байта (- 10% = 76)
Это принимает аргумент командной строки, который является текстом в выделении.
Объяснение:
$_
\b
) и пробел (). Это удаляет последний символ из предыдущей печати. Затем распечатайте возврат каретки и цвет.
$p
$p = ($p+1) % length of text
источник
Баш, 121 байт
источник
Python 3, 96 байт
Это будет работать только на терминалах, которые поддерживают escape-последовательности ANSI. Если вы используете Windows, попробуйте ansicon .
Ура для
flush
ключевого слова в Python 3, поэтому нам не нужно делать дорогойsys.stdout.flush()
звонок.источник
C,
293269 байт(Новые строки добавлены для удобства чтения)
Это берет вход от стандартного входа, завершенного EOF; поэтому лучше всего ввести строку, символ новой строки, а затем EOF (например, Ctrl ^ D).
Ungolfed:
источник
SmileBASIC BIG, 79 байтов
У меня было хорошее графическое решение, почти готовое, когда я понял, что нужно прокручивать по 1 целому персонажу за раз.
источник
Желе ,
201918 байт80
на⁹
(= 256), потому что его нужно умножить как минимум на 80Çß
(сÇ1¿
).С некоторыми уловками от @Dennis 'ответ здесь . Желе новее, чем вызов, но не специально приспособленный для этого. Предложения по улучшению приветствуются! Если ваша консоль находится в utf-8, запустите
export LC_ALL=en_US
или аналогичную, прежде чем пытаться.пример
объяснение
источник
LOVE2D Lua, 197-10% = 178 байт
Требуется, чтобы входные данные находились в файле с именем 'tt' в корне, таким образом, 3 дополнительных байта были добавлены к счету.
Действительно базовый по функциональности, просто в цикле for из 80 итераций, добавьте символ с индексом i плюс текущее время в секундах, модулированное длиной текущей строки, давая повторную строку ввода длиной 80 символов, которая сдвигается влево со временем
Я использовал LOVE2D для смеха.
источник
Sinclair ZX81 / Timex TS1000 / 1500 BASIC,
110 байтов182 байта (для листинга)Он работает, печатая первые
3280 символов строкиA$
в позиции экрана 0,0 во второй строке, а затем манипулируя строкой от позиции 2 до конца строки в строке 3 (Sinclair ZX81 BASIC индексирует строки от 1, а не от нуля ), поэтому добавляем первый символ в конец и передаем его обратно вA$
переменную; тогда есть безусловный цикл обратно к строке 2.источник
Commodore 64, 434 байта
Поскольку для отображения требуется 80 символов, а для C64 по умолчанию используется только 40 символов, то 40 символов прокрутки печатаются в верхней строке области экрана, а остальные 40 печатаются рядом с нижней частью.
Чтобы выяснить, на что
{HOME}
и другие символы переводятся как PETSCII, вот скриншот, взятый из моего эмулятора:Я сделаю полную версию игры в гольф, когда я установлю CBM PRG Studio (или когда я не на обеде на работе).
источник
Рубин,
7977 символовисточник
PHP, 136 байт
php -f marquee.php hello\ world
чтобы выделить строку «Привет, мир».hello worlddddddddddddddddddddddddddddddddddddddd
, но он будет проходить только через 80 символов - я надеюсь, что это все равно будет иметь значение.Это был долгий день, наверное, я могу что-то сделать, чтобы улучшить его
источник
PHP, 85 байт
принимает входные данные из первого аргумента командной строки; бежать с
-nr
.Начинает прокрутку со второго символа. Добавьте один байт , чтобы начать с первого символа:
Заменить
=++$i%
с%=
и;;
с;;$i++,
.источник