Загрузка навсегда ... стиль Windows


36

Создайте панель загрузки в стиле Windows, следуя инструкциям.

(обратите внимание, что это отличается от загрузки ... навсегда )

Ваш вывод должен начинаться с [.... ].

Каждый тик, вы должны подождать 100 мс, а затем переместить каждую точку на один символ вправо. если точка находится на десятом символе, переместите его на первый. Обратите внимание, что вы должны очистить экран перед повторным выводом. Вывод упорядочен следующим образом:

[....      ]
[ ....     ]
[  ....    ]
[   ....   ]
[    ....  ]
[     .... ]
[      ....]
[.      ...]
[..      ..]
[...      .]

.. Затем он зацикливается навсегда.

правила

  • Это , поэтому самый короткий ответ выигрывает, я сомневаюсь, что я бы даже принял выигрышный ответ, хотя
  • Пожалуйста, предоставьте GIF-файл панели загрузки в действии, если это возможно.

1
Можем ли мы вывести, скажем, двадцать новых строк перед каждым выводом, чтобы «очистить» экран?
Okx

2
@Okx Да, если у вашего языка нет другого способа очистки экрана.
Мэтью Ро,

Сколько ошибок может быть задержка? (Например, + - 0,5 секунды) Я бы предложил ошибку 250 миллисекунд ....
stevefestl

1
Могу ли я предложить не включать фиксированную задержку на будущие испытания? Я нахожу, что это появилось во многих недавних задачах, и каждый раз, когда я пишу один и тот же шаблон, который нельзя использовать, чтобы заставить систему ждать n миллисекунд.
xnor

2
\rРазрешено ли использование вместо буквальной очистки экрана?
phyrfox

Ответы:


19

V, 17 16 15 байтов

i[´.¶ ]<esc>ògó$X|p

<esc>есть 0x1b.

И hexdump:

00000000: 695b b42e b620 5d1b f267 f324 587c 70    i[... ]..g.$X|p

объяснение

i                       " Insert
[                       " a [
´.                      " 4 .s
¶<space>                " 6 spaces
]<esc>                  " and a ]. Then return to normal mode
ò                       " Recursively do:
 gó                     "  Sleep for 100 milliseconds
 $                      "  Go to the ]
 X                      "  Delete the character to the left of the ]
 |                      "  Go to the [
 p                      "  And paste the deleted character right after the [
                        " Implicit ending ò

GIF


Как проверить в Vim?
Павел

@Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@qдолжен работать ( <esc>это, очевидно, клавиша escape и <CR>перевод строки) (после 4 точек есть 6 пробелов)
Kritixi Lithos

3
Рад видеть полезную функцию. Хороший ответ BTW :)
DJMcMayhem

19

CSS / HTML, 202 190 186 + 45 = 247 235 231 байт

pre{position:relative}x{position:absolute;display:inline-block;width:10ch;height:1em;overflow:hidden}x>x{width:14ch;left:-10ch;animation:1s steps(10,end)infinite l}@keyframes l{to{left:0
<pre>[<x><x>....      ....</x></x>          ]

Изменить: Сохранено 12 14 байт благодаря @Luke.


Разве вы не можете сохранить 6 байтов, переименовав анимацию в нечто подобное b?
Люк

@ Люк, я не могу поверить, что я забыл это сделать ...
Нил

Вы можете сохранить еще 2 байта, опустив chв конце; 0не нужен блок.
Люк

2
Как насчет перехода <x>на <span>(и в CSS также: xстановится spanи x>xстановится span>*)? Это экономит display:inline-block;, но стоит всего 15 байт. Таким образом, в общей сложности 6B сохранены.
Люк

1
@ Люк, мне плевать на дисплей, но я хочу избежать повторения position:absolute;.
Нил

12

PowerShell, 67 66 байт

for($s='.'*4+' '*6;$s=-join($s[,9+0..8])){cls;"[$s]";sleep -m 100}

-1 с помощью сокращенного конструктора благодаря Beatcracker

заменяет строку копией строки, в которой последний символ помещается перед остальными символами, очищает экран, печатает его, а затем спит в течение 100 мс.

сэкономил много байтов, используя конструктор цикла for, а не заключал логику в строку.

введите описание изображения здесь


1
+1 за forтрюк с петлей и заставляющий меня перечитать about_Join .
битрейкер

1
PS Вы можете играть в гольф еще одним байтом, используя $s='.'*4+' '*6.
битрейкер

@beatcracker спасибо за это - обновлено :)
colsw

Сценарий не начинается с [.... ]. Вы можете исправить это без штрафа:for($s='.'*4+' '*6){cls;"[$s]";$s=-join($s[,9+0..8]);sleep -m 100}
Маззи

10

Python 3 , 99 93 85 83 + 2 ( -u flag ) байтов

-12 байт благодаря овсу
-2 байта благодаря полностью человеческому

import time
s=4*'.'+6*' '
while 1:print(end='\r[%s]'%s);time.sleep(.1);s=s[9]+s[:9]

Попробуйте онлайн!


Почему у тебя flush=True? Это работает без меня
L3viathan

3
@ L3viathan, потому что мой терминал (ubuntu) не промывался. Это поведение промывки зависит от ОС = /
Род

1
Сохранить несколько байт сprint(end='\r[%s]'%s,flush=1)
овсом

2
Вы можете полностью удалить сброс, используя -uфлаг командной строки. Связанный SO вопрос
овс

1
Вы также можете сохранить несколько байтов с помощью s[9]+s[:9].
полностью человек

10

Пакет Windows, 201 181 байт

Оказывается, использование метода старой школы на самом деле экономит байты!

@for %%p in ("....      " " ....     " "  ....    " "   ....   " "    ....  " "     .... " "      ...." ".      ..." "..      .." "...      .")do @echo [%%~p]&timeout 0 >nul&cls
@%0

Заметка:

get-screenrecorder.level
- low grade

get-gpu.level
- horrible

if get-screenrecorder.level == low grade || get-gpu.level == horrible {
     say("GIF may not be accurate");
}

GIF!

Пожалуйста, обратите внимание, что мой GIF-рекордер пропустил несколько кадров, делая скачок полосы загрузки :(


1
Вместо того, чтобы вычислять количество точек, если вы просто сохранили переменную с точками и пробелами и выполнили с ней манипуляции со строками, вы, вероятно, могли бы уменьшить ее до 100 байт.
Нейл,

Я бы попробовал поработать над этим, спасибо за советы :)!
stevefestl

timeout / t 0> nul вместо ping 1.1 -n 1 -w 100> nul будет соответствовать требованию синхронизации 100 мс +/- 250 мс (обычно должно быть около 25-100 мс), поэтому можно сохранить там несколько байтов ( ss64.com/ nt / timeout.html )
Лиам Дейли,

1
Кроме того, удаление @echo offи замена do do @(echo %%~p&timeout/t 0 >nul&cls)также будет работать и должно сохранить 11 символов (200 байт на моем компьютере)
Лиам Дейли,

8

Mathematica, 67 77 байт

+10 байт, как я забыл квадратные скобки.

Animate["["<>"....      "~StringRotateRight~n<>"]",{n,1,10,1},RefreshRate->10]

1
Неужели у Mathematica есть встроенный Animate? : |
Мистер Кскодер

Да, он будет анимировать практически все что угодно над данной переменной. :)
Ян Миллер

Это, кажется, не включает прямоугольные скобки, которые делают большинство других ответов.
Марк С.

Ох, крысы, не выглядело достаточно внимательно. Хорошо исправлено.
Ян Миллер

8

C (gcc) , 126 125 124 123 122 121 119 118 117 114 115 байтов

Этот использует битовую маску, чтобы отслеживать, где находятся точки.

Мне пришлось добавить еще один байт, так как раньше я выводил только 5 пробелов.

m=30;f(i){usleep(3<<15);system("clear");for(i=1;i<1920;i*=2)putchar(i^1?i&m?46:32:91);m+=m&512?m+1:m;f(puts("]"));}

Попробуйте онлайн!

введите описание изображения здесь


48
ПОЧЕМУ ваш шрифт командной строки Comic Sans MS?!?!?!
MD XF


6

JavaScript (ES6) + HTML, 104 85 83 байта

f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`)
<input id=o
  • Сохранено 2 байта благодаря Йохана , чтобы я использовал inputвместо pre.

Попытайся

Требует закрытия >на inputтеге, чтобы функционировать в сниппет.

(f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`))()
<input id=o>


1
Разве не должно быть 10 символов между []s?
Нейл,

Ты прав, @Neil; Есть 6 пробелов - если я собираюсь посчитать вещи на глаз, самое меньшее, что я мог бы сделать, это носить мои очки!
Лохматый

1
Разве вы не можете использовать <input>вместо, <pre>а затем valueвместо innerText?
Йохан Карлссон

Хороший звонок, @JohanKarlsson; это экономит 2 байта.
Лохматый

Привет! Это тот же счетчик байтов: s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=oможет быть, кто-то сможет его улучшить (замените кавычку на `)
Томас В.

5

Noodel , 16 15 14 13 байт

[CỤ'Ṁ ~ ððÐ] ʠḷẸḍt

] ʠ [Ð. × 4¤ × 6⁺ḷẸḍt

] ʠ⁶¤⁴.ȧ [ėÐḷẸḍt

Попытайся:)


Как это работает

]ʠ⁶¤⁴.ȧ[ėÐḷẸḍt

]ʠ⁶¤⁴.ȧ[ėÐ     # Set up for the animation.
]              # Pushes the literal string "]" onto the stack.
 ʠ             # Move the top of the stack down by one such that the "]" will remain on top.
  ⁶¤           # Pushes the string "¤" six times onto the stack where "¤" represents a space.
    ⁴.         # Pushes the string "." four times onto the stack.
      ȧ        # Take everything on the stack and create an array.
       [       # Pushes on the string literal "[".
        ė      # Take what is on the top of the stack and place it at the bottom (moves the "[" to the bottom).
         Ð     # Pushes the stack to the screen which in Noodel means by reference.

          ḷẸḍt # The main animation loop.
          ḷ    # Loop endlessly the following code.
           Ẹ   # Take the last character of the array and move it to the front.
            ḍt # Delay for a tenth of a second.
               # Implicit end of loop.

Обновить

[Ð]ıʠ⁶¤⁴.ḷėḍt

Попытайся:)

Не знаю, почему это заняло у меня некоторое время, чтобы подумать. Так или иначе, это помещает это в 13 байтов .

[Ð]ıʠ⁶¤⁴.ḷėḍt

[Ð]ıʠ⁶¤⁴.     # Sets up the animation.
[             # Push on the character "["
 Ð            # Push the stack as an array (which is by reference) to the screen.
  ]           # Push on the character "]"
   ı          # Jump into a new stack placing the "[" on top.
    ʠ         # Move the top of the stack down one.
     ⁶¤       # Push on six spaces.
       ⁴.     # Push on four dots.

         ḷėḍt # The main loop that does the animation.
         ḷ    # Loop the following code endlessly.
          ė   # Take the top of the stack and put it at the bottom.
           ḍt # Delay for a tenth of a second.

<div id="noodel" code="[Ð]ıʠ⁶¤⁴.ḷėḍt" input="" cols="12" rows="2"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


2
Никогда не слышал о Noodel раньше, но, похоже, это правильный инструмент для правильной работы! +1
Кевин Круйссен

1
@KevinCruijssen, ETHProductions имеет хороший список с языками для игры в гольф кода :)
tkellehe

6
Как раз тогда, когда я думал, что обошел вас, я заметил, что вы уже дважды отыграли свое решение
Kritixi Lithos

@KritixiLithos, я боялся, что ты собираешься побить меня, поэтому я потратил целую вечность, пытаясь добраться до 14 байтов . Но теперь вы снова близко! Dang !!
tkellehe

1
@ nitro2k01 Noodel использует свою собственную кодовую страницу с 256 символами , которые все сохраняются как один байт в своей собственной кодировке. Подобно другим языкам игры в гольф, таким как Jelly или 05AB1E . Если бы вы сохранили эти символы в качестве кодировки UTF-8 по умолчанию, они действительно будут иметь размер 2 или 3 байта, но в своей собственной кодировке они будут по 1 байту каждый.
Кевин Круйссен

4

PHP, 67 байт

for($s="...      .";$s=substr($s.$s,9,10);usleep(1e5))echo"\r[$s]";

без комментариев


4

C #, 162 157 байт

()=>{for(string o="[....      ]";;){o=o.Insert(1,o[10]+"").Remove(11,1);System.Console.Write(o);System.Threading.Thread.Sleep(100);System.Console.Clear();}};

или как целая программа на 177 байт

namespace System{class P{static void Main(){for(string o="[....      ]";;){o=o.Insert(1,o[10]+"").Remove(11,1);Console.Write(o);Threading.Thread.Sleep(100);Console.Clear();}}}}

+1 Что-то в гольф: for(string o="[.... ]";;)можно в гольф var o="[.... ]";for(;;). Или вы можете воспользоваться портом моего ответа Java 7 для игры в гольф:()=>{var o=".... "for(;;){o=(o+o).Substring(9,10);System.Console.Write("["+o+"]\n");System.Threading.Thread.Sleep(100);System.Console.Clear();}};
Кевин Круйссен,

Будет ли отключена интерполяция строк? Нечто подобное$"[{o}]\n"
Мари

1
Если заменить System.Console.Write(o)с System.Console.Write(o+"\r")вами можно удалитьSystem.Console.Clear();
grabthefish


4

MATL , 24 байта

`1&Xx'['897B@YS46*93hhDT

Попробуйте это в MATL Online! Или посмотрите GIF из автономного компилятора:

введите описание изображения здесь

объяснение

`        % Do...while
  1&Xx   %   Pause for 0.1 s and clear screen
  '['    %   Push this character
  897B   %   Push [1 1 1 0 0 0 0 0 0 1]
  @      %   Push current iteration index, 1-based
  YS     %   Circularly shift the array by that amount
  46*    %   Multiply by 46 (code point of '.')
  93     %   Push 93 (code point of ']')
  hh     %   Concatenate horizontally twice. Numbers are interpreted as chars
         %   with the corresponding code points
  D      %   Display
  T      %   Push true. Used as loop condition. Results in an infinite loop
         % End (implicit)

Ваша ссылка падает, а это значит, что я не могу ее убить.
Утренняя монахиня

1
@LeakyNun Что вы имеете в виду, что именно он падает? Это работает для меня, и я могу убить его. Иногда возникают проблемы с тайм-аутом. Если это не начинается, попробуйте обновить страницу
Луис Мендо

4

Желе , 28 27 байт

ṙ©-j@⁾[]ṭ”ÆȮœS.1®ß
897ṃ⁾. Ç

Пример запуска

Как?

ṙ©-j@⁾[]ṭ”ÆȮœS.1®ß - Link 1, the infinite loop: list of characters s
ṙ                  - rotate s left by:
  -                -   -1 (e.g. "...      ." -> "....      ")
 ©                 -   copy to the register and yield
     ⁾[]           - literal ['[',']']
   j@              - join with reversed @rguments
         Ӯ        - literal '\r'
        ṭ          - tack (append the display text to the '\r')
           Ȯ       - print with no newline ending
              .1   - literal 0.1
            œS     - sleep for 0.1 seconds then yield the printed text (unused)
                ®  - recall the value from the register
                 ß - call this link (1) again with the same arity

897ṃ⁾. Ç - Main link: no arguments
897      - literal 897
    ⁾.   - literal ['.',' ']
   ṃ     - base decompression: convert 897 to base ['.',' '] = "...      ."

4

C (gcc), 202 198 196 189 96 99 88 86 79 77 75 74 73 байта

Сохранено 7 8 байт благодаря Digital Trauma .

f(i){usleep(dprintf(2,"\r[%-10.10s]","....      ...."+i%10)<<13);f(i+9);}

Или, если ваша система stdout не нуждается в сбросе после каждой записи без перевода строки:

C (gcc), 70 байт

f(i){usleep(printf("\r[%-10.10s]","....      ...."+i%10)<<13);f(i+9);}

Как это работает

  • usleep( спит для следующего возвращаемого значения в микросекундах.
  • dprintf(2,печатает в дескриптор файла 2, или stderr. Это необходимо, поскольку while stdoutбуферизуется строкой (то есть вывод не будет отображаться до тех пор, пока не будет напечатана новая строка), stderrбуферизуется символами (весь вывод отображается немедленно).
  • "\r печатает возврат каретки (очищает текущую строку).
  • [%-10.10s]"является printfспецификатором формата для строки с точной длиной 10 (независимо от того, какая строка при условии, что на выходе всегда будет строка длиной 10), дополненная пробелами справа, если необходимо. Это будет заключено в скобки.
  • ".... ...." это панель загрузки.
  • +i%10смещает полосу загрузки на текущий индекс по модулю 10. Например, если i == 3,i % 10 равно 3. Взаимозачет планки загрузки на 3 делает его , равным ". ....".
  • Когда смещенная строка передается в printfспецификатор формата, она ограничивается длиной 10, если необходимо, и добавляет пробелы в конец, если необходимо. Поэтому полоса загрузки всегда будет между [.... ]и [. ...].

i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));}должно сработать.
Кристоф

1
Отличный гольф! Сохраните еще 1 байт с помощьюf(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);}
Digital Trauma

@DigitalTrauma Пробелы в вашем коде не отображаются должным образом. Тем не менее, я понимаю, что вы имели в виду, и спасибо за помощь!
MD XF

3

Java 7, 139 124 байта

String s="....      ";void c()throws Exception{System.out.print("["+s+"]\r");s=(s+s).substring(9,19);Thread.sleep(100);c();}
  • Упоминание \rспасибо @Phoenix .

Возврат каретки \rсбрасывает курсор в начало строки, которая затем может быть перезаписана. К сожалению, онлайн-компиляторы и Eclipse IDE не поддерживают это, поэтому я добавил gif в конце этого ответа, чтобы показать его из командной строки Windows.

Попробуй это здесь.(Немного изменено, поэтому вам не придется ждать тайм-аут перед просмотром результата. Кроме того, TIO не поддерживает возврат каретки, поэтому каждая строка печатается без перезаписи предыдущей строки.)

Объяснение:

String s="....      ";            // Starting String "....      " on class level
void c()                          // Method without parameter nor return-type
 throws Exception{                // throws-clause/try-catch is mandatory for Thread.sleep
  System.out.print("["+s+"]\r");  //  Print the String between square-brackets,
                                  //  and reset the 'cursor' to the start of the line
  s=(s+s).substring(9,19);        //  Set `s` to the next String in line
  Thread.sleep(100);              //  Wait 100 ms
  c();                            //  Recursive call to same method
}                                 // End of method

Выходной GIF:

введите описание изображения здесь


Вы можете очистить линию, заменив printlnс printи выводом возврата каретки. Может не работать в терминале вашей IDE, но будет работать в любом другом нормальном.
Павел

@ Phoenix Под возвратом кареты ты имеешь ввиду \r\n? Как System.out.print(someString+"\r\n);очистить консоль .. Это то же самое, что и использование System.out.println(someString);.. Она просто переходит к следующей строке, но не удаляет предыдущую напечатанную строку ..: S
Кевин Кройссен

4
Нет, я имею в виду \r, без \n. Это сбрасывает «курсор» в начало строки, поэтому при печати чего-либо эта строка будет перезаписана.
Павел

@ Phoenix А, конечно. Спасибо. Модифицировал мой ответ и добавил gif, чтобы показать результат. Жаль, что онлайн-компиляторы и Eclipse IDE не поддерживают это ..>.>
Кевин Круйссен

3

Python 2 , 81 78 байт

-1 байт (замечая, что я пропустил использование, %sкогда Род представил почти идентичную версию Python 3 одновременно!)
-2 байта (используя идею полностью человека - заменить s[-1]+s[:-1]на s[9]+s[:9])

import time
s='.'*4+' '*6
while s:print'\r[%s]'%s,;s=s[9]+s[:9];time.sleep(.1)

Пример запуска


Как это сбрасывает вывод? это причина, по которой я использую python3 в своем ответе (потребуется больше байтов для очистки на python2)
Rod

@ Род \r перезаписывает строку и ,заставляет ее печатать кортеж, а не строку - я это где-то видел некоторое время назад и раньше тоже использовал.
Джонатан Аллан

1
Да, это то, что я делал, но вывод не печатался в режиме реального времени (пришлось использовать sys.stdout.flush())
Род

1
Нашел виновника: мой терминал ubuntu: c
Rod

3

Go , 150 145 132 129 124 байта

-5 байт благодаря sudee.

Я чувствую, что не вижу достаточно. Иди сюда ... Но мой ответ превосходит С, так что ... пожалуйста, помогите в гольф?

package main
import(."fmt"
."time")
func main(){s:="....      ";for{Print("\r["+s+"]");Sleep(Duration(1e8));s=(s+s)[9:19];}}

Попробуйте онлайн!


1
Не знаком с Go, но я предполагаю, что вы можете преобразовать 100000000в, 10^8чтобы сэкономить 5 байтов.
Грант Миллер

@goatmeal Я попробовал это, но это явно побитовое отрицание. Я также попробовал, 10**8который также дает ошибку.
полностью человек

3
Вы можете использовать научные обозначения: 1e8.
sudee

1
@ sudee Ага, это был бы способ использовать большие числа. Благодарность!
полностью человек

2
@MDXF Я должен был сформулировать это по-другому, я имел в виду, что мой ответ переигрывает С.
полностью человек

3

VBA 32-битный, 159 157 143 141 134 байта

VBA не имеет встроенной функции, которая позволяет ожидать периоды времени менее одной секунды, поэтому мы должны объявить функцию из kernel32.dll

32-битное объявление объявления (41 байт)

Declare Sub Sleep Lib"kernel32"(ByVal M&)

Заявление 64-битного объявления (49 байт)

Declare PtrSafe Sub Sleep Lib"kernel32"(ByVal M&)

Кроме того, мы должны включить DoEvents флаг, чтобы из-за бесконечного цикла Excel не отображался как неотвечающий. Последняя функция - это подпрограмма, которая не принимает никаких входных данных и выводит их в непосредственное окно VBE.

Функция непосредственного окна, 93 байта

Функция анонимного непосредственного окна VBE, которая не принимает никаких входных и выходных данных в диапазоне A1ActiveSheet

s="...      ....      .":Do:DoEvents:Sleep 100:[A1]="["&Mid(s,10-i,10)&"]":i=(i+1)Mod 10:Loop

Старая версия, 109 байт

Функция непосредственного окна, которая не принимает никаких входных данных и выводит их в непосредственное окно VBE.

s="...      ....      .":i=0:Do:DoEvents:Sleep 100:Debug.?"["&Mid(s,10-i,10)&"]":i=(i+1) Mod 10:Loop

Неутолщенный и отформатированный

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal M&)
Sub a()
    Dim i As Integer, s As String
    s = "...      ....      ."
    i = 0
    Do
        Debug.Print [REPT(CHAR(10),99]; "["; Mid(s, 10 - i, 10); "]"
        DoEvents
        Sleep 100
        i = (i + 1) Mod 10
    Loop
End Sub

-2 байта для удаления пробелов

-30 байт для правильного подсчета

-14 байт для преобразования в непосредственную оконную функцию

Выход

GIF ниже использует полную версию подпрограммы, потому что мне было лень перезаписать это с помощью функции непосредственного окна.

VBA loading Gif


Что это aв верхней части вывода?
MD XF

@MDXF - это вызов для запуска подпрограммы, aкак указано выше; это функционально эквивалентно более многословному call a().
Тейлор Скотт,

Ах, мой плохой. Просто ищу плохие представления.
MD

2

05AB1E , 23 байта

'.4×ð6×J[D…[ÿ],Á¶т×,т.W

Попробуйте онлайн!

объяснение

'.4×ð6×J                  # push the string "....      "
        [                 # forever do:
         D                # duplicate
          …[ÿ],           # interpolate the copy between brackets and print
               Á          # rotate the remaining copy right
                ¶т×,      # print 100 newlines
                    т.W   # wait 100ms

2

Пакетный, 99 98 байт

Сохранено 1 байт благодаря SteveFest!

(Я мог бы удалить \rиз кода, но в духе пакетной игры в гольф, я не буду.)

@SET s=....      
:g
@CLS
@ECHO [%s%]
@SET s=%s:~-1%%s:~,-1%
@ping 0 -n 1 -w 100>nul
@GOTO g

Записано с LICEcap

Есть четыре пробела после первой строки.

Основная логика - изменение строки. %s:~-1%это последний символ %s%и%s:~0,-1% является только последним символом %s%. Таким образом, мы перемещаем последний символ в начало строки, которая вращает строку.


Оу ... Я искал это ...
Stevefestl

1
Гольф 1 байт: 0переменная подстрока может быть удалена
stevefestl

Вы используете cmder. Хорошая работа.
MD XF

1
@ SteveFest Да, TIL. Благодарность!
Конор О'Брайен

1
@MDXF Это единственная причина, по которой я все еще в здравом уме: P
Конор О'Брайен,

2

Руби, 57 56 байт

s=?.*4+' '*6;loop{$><<"[%s]\r"%s=s[-1]+s.chop;sleep 0.1}

Сильно под влиянием других ответов здесь.

Сохраненный байт благодаря @manatwork. Также, по-видимому, у меня проблемы с подсчетом символов - я использую ST3, и, очевидно, он будет включать в себя новые строки в количестве символов в строке, если вы не будете внимательны.


Как это работает? Предполагается ли, что вход хранится в s?
Rɪᴋᴇʀ

@Riker Он определяет sв начале программы, как 4 .с и несколько пробелов
Конор О'Брайен

s[0..8]s.chop
manatwork

2

Perl, 69 байт

-3 байта благодаря @Dom Hastings .

$_="....".$"x6;{print"\ec[$_]
";select$a,$a,!s/(.*)(.)/$2$1/,.1;redo}

Это select undef,undef,undef,.1самый короткий способ спать менее 1 секунды в Perl, и он занимает много байтов ...


Чуть дольше (79 байт) есть:

@F=((".")x4,($")x6);{print"\ec[",@F,"]\n";@F=@F[9,0..8];select$a,$a,$a,.1;redo}

Вечером мне удалось получить еще немного 69 (или 68 с буквальным ESC): gist.github.com/dom111/e3ff41c8bc835b81cbf55a9827d69992 Я чувствую, что пытаюсь использовать, !printно вам нужны парены, чтобы они заканчивались одинаковой длиной: /
Дом Гастингс

@DomHastings Хорошо, спасибо! Ты все еще умеешь
Dada

2

Bash, 93 90 96 байт

s="...      ....      ."
for((;;)){ for i in {0..9};do printf "\r[${s:10-i:10}]";sleep .1;done;}

посмотреть здесь

не может быть вложенным {} для синтаксиса


Я собирался опубликовать довольно похожее решение, но сейчас это бессмысленно. Но может дать некоторое вдохновение, чтобы улучшить вашу: pastebin.com/Ld6rryNX
manatwork

намного лучше! Я не краду у тебя, я знал, что мне нужно с этим разобраться ...
marcosm

отредактировано, printf padding не может помочь в сокращении s. обтекание строки как @DigitalTrauma выглядит лучше.
marcosm

1

Groovy, 72 байта

s="*"*4+" "*6
for(;;){print("["+s+"]"+"\n"*20);s=s[9]+s[0..8];sleep 100}

Explaination

s="*"*4+" "*6 //creates the string "****      "
for(;;){ //classic infinite loop
    print("["+s+"]"+"\n"*20) //prints the string with [ at the beginning and ] at the end. After that some newlines
    s=s[9]+s[0..8] //appends the final char of the string to beginning, creating a cycling illusion
    sleep 100 //100 ms delay
}

Не знал, как правильно очистить консоль в Groovy / Java. Если у кого-то есть способ сделать это, пожалуйста, скажите мне
staticmethod

1
Вы можете использовать, \rчтобы вернуть курсор в начало строки. Похоже, что по крайней мере несколько ответов делают это. Оттуда вы можете удалить * 20, сохранив 3 байта.
phyrfox

1

Haskell (Windows), 159 байт

import System.Process
import Control.Concurrent
main=mapM id[do system"cls";putStrLn('[':["....      "!!mod(i-n)10|i<-[0..9]]++"]");threadDelay(10^5)|n<-[0..]]

объяснение

mapM id             sequentially perform each IO action in the following list
[                   start a list comprehension where each element is...
  do                  an IO operation where
    system "cls";       we clear the screen by calling the windows builtin "cls"
    putStrLn(           then display the string...
      '[':                with '[' appended to
      [                   a list comprehension where each character is...
        "....      "!!       the character in literal string "....      " at the index
        mod(i-n)10          (i - n) % 10
      |i<-[0..9]]         where i goes from 0 to 9
      ++"]"             and that ends with ']'
    );
    threadDelay(10^5)   then sleep for 100,000 microseconds (100 ms)
|n<-[0..]]          where n starts at 0 and increments without bound

Чистота Хаскелла делала создание шаблона с циклическими точками несколько сложным. Я закончил тем, что создал понимание вложенного списка, которое генерировало бесконечный список строк в порядке их вывода, затем вернулся и добавил соответствующие операции ввода-вывода.


1

Рубин, 61 байт

Если бы спецификация была для точек, чтобы прокрутить влево, а не вправо, это бы сэкономило 1 байт, потому что rotate! без аргументов массив сдвигал один раз влево.

s=[?.]*4+[' ']*6
loop{print ?[,*s,"]\r";s.rotate!9;sleep 0.1}


1

с, 100

char *s="....      ....     ";main(i){for(i=0;;i=(i+9)%10)dprintf(2,"[%.10s]\r",s+i),usleep(3<<15);}

Зачем печатать, чтобы stderrиспользовать, dprintfа не просто использовать printf?
MD XF

@MDXF Потому что по умолчанию stderrбуферизация символов, тогда как stdoutбуферизация строки. Так как я не хочу ничего печатать \n, то printf()мне придется явно, fflush(stdout)а также#include <stdio.h>
Digital Trauma

Хороший вопрос, но на самом деле вам не нужно #include <stdio.h>сбрасывать STDOUT. fflush(0)сбрасывает все буферы.
MD XF

1
Сохранить три байта путем переименования mainв f, что имеет значение.
MD XF
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.