Анимируйте текст в вашем терминале
Цель
Цель состоит в том, чтобы «анимировать» строку «Hello world» в выходных данных, чтобы каждый символ стал заглавным после каждого.
Ваша программа может выйти после того, как каждая буква будет заглавной.
Например;
# Iteration 1
Hello world
# Iteration 2
hEllo world
# Iteration 3
heLlo world
# Iteration 4
helLo world
# Iteration 5
hellO world
# Iteration 6 (note: it should capitilize the space char (ie: a break between iteration 5 and iteration 7)
hello world
# Iteration 7
hello World
# Iteration 8
hello wOrld
# Iteration 9
hello woRld
# Iteration 10
hello worLd
# Iteration 11
hello worlD
Он должен анимировать строку только один раз, и между каждым состоянием должна быть задержка в 1 секунду.
вход
Ввод не требуется, но "Hello world" должна быть строкой, которая является "анимированной".
Выход
Строка «Hello world» должна быть анимированной. Вывод должен быть в виде 1 строки для создания своего рода волновой анимации. Пустая конечная новая строка разрешена. Пример GIF;
Я видел это на видео с metasploit youtube и думал, что эффект был довольно крутым, и именно здесь я записал GIF, поэтому он немного запаздывает, но я надеюсь, что он хорошо иллюстрирует вывод
Это код-гольф , победителем считается младший счетчик байтов.
Ответы:
Vim 26 байт
Пояснение (пока нет. Gif):
Во-первых, мы должны ввести текст «Привет, мир». Это довольно просто. Это просто:
В этот момент курсор находится на «d» в «мире». Следующий:
Есть также две другие 26-байтовые версии, которые я нашел:
источник
~
разрывает петлю . Я верю, что именноl
это делает тяжелую работуPython 2,
989490 байт-9-4 байта благодаря @ElPedro -4 байта благодаря @JonathanAllan и @Rodисточник
-u
аргумент и использоватьprint"\t"+s[:x]+s[x:].title(),;
(обратите внимание на запятую) . И это не изменит количество ваших байтов (потому что аргумент добавит +2 байта)python -c 'code here'
. С флагом, вызов будетpython -uc 'code here'
, который отличается на один байт.Commodore 64,
168162137133 BASIC (и токенизированных) использованных байтовВам нужно будет использовать сокращения BASIC для ввода ключевых слов в настоящий C64 или эмулятор (или ввести программу в Commodore 128 и загрузить ее обратно в режиме C64, хотя это также должно работать на 128).
{control+n}
Будет работать только / дисплей после открытия цитаты. Это сокращение дляchr$(14)
и поэтому сохраняет некоторые байты и переключает набор символов в бизнес-режим или символы верхнего / нижнего регистра.Я добавил некоторые сокращения для вас, чтобы вы. Символ
{clear home}
создается нажатием клавишиShift
иCLR/HOME
после открывающей кавычки.Для наглядности необъяснимый список может быть введен следующим образом:
Он работает, переключая кодировку PETSCII в бизнес-режим (верхний / нижний регистр) и записывая строку приветствия в верхнюю строку экрана, расположенную в ячейке памяти $ 0400, затем будет принимать значение в каждом месте для следующего Оттуда 11 байтов и увеличиваем каждое значение на 64 (в верхнем регистре). Если счетчик j> 0, он вызывает процедуру в строке 2, чтобы снова уменьшить предыдущую ячейку памяти на 64.
Строка 3 - это пауза, она также записывает пробел в ячейки $ 0405 и $ 040b, что является исправлением ошибки (которое, вероятно, можно удалить, чтобы сэкономить несколько байтов).
источник
fori=0to1step0
...nexti
по сути создает бесконечный (без перехода) цикл, вроде какwhile(true){...}
в более современных языках.GO TO
это забанено, верно ;-) Можно легко составить список самостоятельно,CLR
прежде чемFRE(0)
C #,
230215193161135134130 байтовЭто C #, так что долго верно! :-( Но после некоторой помощи и поиска мне (и другим, действительно) удалось уже удалить ровно 100 байт.
Golfed
Ungolfed
Скриншот
Хотя это выглядит намного лучше, когда циклы и быстрее ..
Обновления
Потерял 15 байтов при использовании возврата каретки вместо
Clear()
которого также позволил мне заменить использование наSystem.Console
где-то встроенное.Замененная программа на лямбду, экономящая 23 байта благодаря @devRicher
new string(b)
наb
иb[i]=char.ToUpper(b[i])
наb[i]-=' '
, сэкономив мне еще 26 байтов!i++
благодаря @Snowfirei<11
из моегоfor
циклаисточник
class P{static void Main(){ ... }}
на()=>{ ... }
несколько байтов. PPCG принимает функции в качестве ответов, поэтому лямбда работает нормально.void g(){ ... }
.char g = string j[x]
), чтобы сохранить около 50 байтов:()=>{var s="Hello world";for(int i=1;i<11;i++){string h = s;h[i]=char.ToUpper(s[i]);System.Console.Write(h+"\r");System.Threading.Thread.Sleep(1000);}}
b[i++]-=' '
. Это пригодится, потому что тогда вы также можете удалить условие в цикле for и просто написатьfor(int i=0;;)
. ОП указал в комментариях, что программа может завершиться с ошибкой, поэтому вы можете разрешить IndexOutOfRangeExceptionPowershell,
126119107104 байтРедакции (вероятно, будет много):
Изменить
$s.Length
на const1110
Реструктурированный построитель строк, удален 1 оператор соединения и используется
++$s
вместо($s+1)
, чтобы сохранить несколько байтов благодаря @AdmBorkBorkAdmBorkBork указывает, что просто использование строки дважды на самом деле короче, чем инкапсуляция, а затем
.ToLower()
ее вставка - что говорит о том, насколько многословен PowerShell, -3!в основном перебираем длину строки, формируем массив из трех частей: прекапитальный, заглавный и посткапитальный, отнимаем 32 от средней буквы, затем преобразуем обратно в символ, чтобы получить верхний регистр, к счастью, это не не превращаете ли пространство в видимый символ? Надеюсь, это приемлемо?
источник
$s
и.ToLower()
вставляя ее. -'Hello world';$s='hello world';
Сборка CP-1610 , 50 DECLE = 63 байта
Этот код предназначен для запуска на Intellivision .
Код операции CP-1610 кодируется 10-битным значением, известным как «DECLE». Длина этой программы составляет 50 ДЕЛЕ, начиная с 4800 долларов и заканчивая 4831 долларов.
Выход
источник
MATL , 30 байт
Попробуйте это в MATL Online!
источник
PHP,
767471 байтСпасибо @hd за задержку, равную целой секунде, а не за ее долю!
Спасибо @ user63956 за 2 байта и @aross за 3 байта.
Беги с
-nr
.источник
sleep(print"$s\r")
.C
97выведено106 байтовс экранированными символами считается за 1 байт
Примечание: я
прокомментировал задержку нанесвязанном TIO, потому что он ожидает завершения, прежде чем отобразить вывод, он также не распознает возврат каретки и ставит новые строки. Кроме того, если вы работаете в Windows, сон длится в миллисекундах, а не в секундах, так чтоsleep(1)
должно статьsleep(1000)
.Примечание 2: Я отозвал эту запись на время, пока не были устранены ошибки в выходных данных.источник
^C
это остановить. (также я на Mac)JavaScript (ES6),
141 139131 байтСохранено 8B благодаря Apsillers
объяснение
Это создает функцию без аргументов, которая разбивает строку
hello world
в массив символов и заглавнуюd+1
го символа.d
это счетчик, который начинается как0
и увеличивается каждый раз.использование
источник
_=>
то у вас будет готовая программа (например, если вы вставите ее в файл, Node.js успешно выполнит ее до конца). Мое понимание запрета «фрагментов кода» противоречит написанию кода, который неявно принимает некоторые входные данные в качестве переменной, например, «если мы предполагаем, чтоi
уже есть входные данные, мы можем сделать ...», чего здесь не происходит, поскольку явно нет ввода.Noodel , 22 байта
Попробуй:)
Как это устроено
Фрагмент использует 25-байтовую версию, которая зацикливается непрерывно.
источник
Bash + coreutils,
9998 байтисточник
Perl 6 ,
6561 байтGIF:
Как это устроено
Экранирующая последовательность ANSI
\ec
очищает экран.На каждой итерации
i
'-й символ жестко закодированной строки заменяется ее заглавной версией. Функция всегда возвращает , который передается функции сна , которое интерпретирует его как второй.say
True
1
источник
Рубин,
8281 байт^ H ascii 8 (backspace), и только 1 байт.
источник
C 87 байтов
Компилируется и работает на Linux.
источник
Mathematica,
130128123110108 байтОбъяснение: С
i=1
11 по 11 напечатайте с 1-го по (i-1) -й символ «привет мира», используйте заглавные буквы"hello world"[i]
, затем напечатайте остальную часть строки, увеличиваясьi
в то же время.источник
Java
215212204203 байтаUngolfed:
источник
interface A
(с пробелом)? Плюс вы можете удалить пространство между,
иCharacter.toUpperCase
.R ,
106103 байтаПростая петля, очистка консоли с помощью
cat('\f')
системы кажется несколько зависимой от системы, но я не знаю лучшего способа.источник
utf8ToInt
. Это не сработало, пространство необходимо обрабатывать как особый случай. В процессе я обнаружил, что,cat("\014")
кажется, работает лучше, чем работать там, гдеcat("\f")
нет. но не наC 122 байта
Короче C #: D
источник
i<11
вместо циклаi<10
forPerl, 75 байт
Использует код ANSI ESCcдля очистки консоли и перемещения курсора в верхний левый угол на каждой итерации, но все еще нуждается
\n
в конце строки замены, чтобы избежать потери всей анимации в буфере строк.Успешный вызов
print
возвращает значение 1, которое может быть передано непосредственноsleep
.источник
$`
и$'
для сохранения нескольких байтов(.{$_})(.)(.*)
(это не будет работать в терминале, но это не проблема). Это требует изменения немного остальную часть вашего кода , хотя:"hello world"=~s/./sleep print"\33c$`\U$&\E$'\n"/ger
. (Я написал почти этот точный код, а затем, когда посмотрел, кто-нибудь уже написал ответ на Perl, я нашел ваш). И немного подробностей о bytecount: вы можете использовать буквальный перевод строки для сохранения байта и, может быть, какой-то тип букв\33c
(хотя и не слишком уверен насчет последнего).SmileBASIC,
9071 байтисточник
Желе ,
2421 байтЭто нильадная ссылка / функция, которая печатает в STDOUT. Это не работает как полная программа.
Код не может быть протестирован на TIO; он использует управляющие символы, а TIO не имеет эмулятора терминала (пока).
Как это устроено
источник
(Strings are cast to Boolean.)
Это обманчиво!C 122 байта
В качестве упражнения я написал это, чтобы обеспечить более оптимальный выходной формат, чем некоторые другие ответы. Также это означает, что курсор ставится после последней заглавной буквы во время пауз.
(Новые строки и отступы косметические, а не часть байтов)
Теперь некоторые читатели могут заметить, что для запуска на современных машинах требуется некоторый массаж (волшебное заклинание
-static -Wl,-N
), но именно так привыкли вести себя реальные реализации C, так что я думаю, что это правильно. Он также предполагает, что набор символов - ASCII, и не печатает завершающий символ новой строки.Бонус: для версии EBCDIC вы можете заменить
8
на22
и64
с32
и переключить логику дляp[1]
иp[2]
. Чтобы протестировать систему не-EBCDIC, вы можете скомпилировать ее-funsigned-char -fexec-charset=cp037
.Выход составляет 43 байта:
Hello world«H‹hE‹eL‹lL‹lO‹o ‹ W‹wO‹oR‹rL‹lD
источник
Scala, 92 байта
Ungolfed
источник
h(i)toUpper
Пакет, 184 байта
Любопытно, что командная строка для
timeout/t>nul 1
повреждена, если нет завершающей строки, поэтому я не могу поместить ее в конец файла.источник
Рубин, 108 байт
Первый раз, студент первого курса. Это не орел, но я, по крайней мере, немного горжусь.
источник
Паскаль,
187152 байтаНе совсем самый эффективный или самый короткий, но работает довольно хорошо!
Протестировано и работает на Free Pascal Compiler 2.6+.
Спасибо @manatwork за сохранение 35 байт!
Я использовал http://www.onlinecompiler.net/pascal для компиляции файла и запуска его в Windows.
До сих пор не видел никаких проблем с этим.
источник
UpCase
Функция существует с давних времен Turbo. (Там он обрабатывается толькоChar
, но в Free Pascal также обрабатывает строки.)Word
(илиByte
); сделать P aconst
таким, чтобы оно выводило тип из значения инициализации; в то время как там, сделайте X инициализированной константой, чтобы избавиться от отдельногоvar
ключевого слова (это может работать не во всех вариантах Pascal, но, безусловно, работает во Free Pascal); используйтеClrScr
для перехода в верхний левый угол; заменить , чтоif
с одним выражением:X:=X*Ord(X<11)+1
. pastebin.com/FfaixkESconst X:Word=1;P='hello world';
и этоconst X:Word=1;P='hello world';
было возможно. Я изучил Pascal на Turbo Pascal 7, который может быть несовместим с этим. И совсем забылиupcase
. Спасибо большое!C
12011010496 байтНеуправляемая версия
@Pakk Спасибо за сохранение некоторых байтов, отличная идея. :)
@Pakk @KarlNapf Спасибо, ребята, за ваш вклад.
можно еще укоротить !? :)
источник
-=
и+=
. Кроме того, переменная указателя может сохранить,[]
но я не уверен.char *j,s[]="hello world";
чтобы сохранить еще несколько символов.f(){char*j,s[]="\rhello world";for(j=s;*++j;*j-=32,printf(s),*j+=32,fflush(0),sleep(1));}
89 байт.Python 2,
220189179 байтРешение без использования строк и
capitalize()
байтов, как есть:И немного более длинный вариант (191 символ) без сброса регистра:
источник
C ++,
88125 байтБезголовая версия:
Скомпилировано с TDM-GCC на компьютере с Windows 10 с Dev-C ++.
Изменить: я забыл о включениях в моей первой версии.
источник
for
цикла, переместив возврат каретки в начало строки ... Я тоже вам помогу: выполнениеfor(int c=1;;c++)
сэкономит вам 1 байт.for(int c=1;;)
а затемa[c++]-=32;
сохранить еще один байт.