├── utils
├── __init__.py
├── cursor.py
├── input.py
└── board.py
├── .gitignore
├── .gitattributes
├── requirements.txt
├── .github
├── knight-1-5.gif
├── knight-2-5.gif
├── knight-3-7.gif
├── knight-5-6.gif
├── knight-7-2.gif
├── knight-tour.gif
└── visualizer.gif
├── SAMPLES.md
├── README.md
├── main.py
└── visualizer.yml
/utils/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode/
2 | .mypy_cache/
3 | __pycache__/
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.gif filter=lfs diff=lfs merge=lfs -text
2 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | windows-curses ; platform_system == 'Windows'
2 | mypy
3 | colorama
--------------------------------------------------------------------------------
/.github/knight-1-5.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:77c61a81f2b4368ad79f5f1b4542909ca30f60508eb6bddcd20f3acea5b45924
3 | size 1023125
4 |
--------------------------------------------------------------------------------
/.github/knight-2-5.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:77eccfb0cc884552b0b222b0f853bae541f6b5312de6b9d48fc27195839c99c3
3 | size 1031873
4 |
--------------------------------------------------------------------------------
/.github/knight-3-7.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:dc8d5ffb7ad587fa85403880c4fc7aa09d05c0974832686b310fd471210a9432
3 | size 1033454
4 |
--------------------------------------------------------------------------------
/.github/knight-5-6.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:c73a333ff21d860789f7faccc8c5dbae1ee5a52a1d0c123f0cae5a866a8ecf75
3 | size 1033951
4 |
--------------------------------------------------------------------------------
/.github/knight-7-2.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:a38698074ca54c41f7f7007347101c8c00748a82d1c488dc37eeb83d5bbf0ce9
3 | size 1032930
4 |
--------------------------------------------------------------------------------
/.github/knight-tour.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:8592a37d27bcbbc694add49d0c7aa1d47496f5200eae7acd8c5f59d94438b066
3 | size 51088
4 |
--------------------------------------------------------------------------------
/.github/visualizer.gif:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:4d7d62cd4f4a24351d0eaa89e16c2f87d90e235a24720b9b71c1b897e5f17da8
3 | size 1138891
4 |
--------------------------------------------------------------------------------
/utils/cursor.py:
--------------------------------------------------------------------------------
1 | class Cursor(object):
2 | x: int
3 | y: int
4 | max_x: int
5 | max_y: int
6 |
7 | def __init__(self, max_x: int, max_y: int) -> None:
8 | self.max_x = max_x
9 | self.max_y = max_y
10 | self.x = self.max_x // 2 - 15
11 | self.y = self.max_y // 2 - 8
12 |
13 | def get_x(self) -> int:
14 | return self.x
15 |
16 | def get_y(self) -> int:
17 | return self.y
18 |
19 | def set_x(self, x: int) -> None:
20 | self.x += x
21 |
22 | def set_y(self, y: int) -> None:
23 | self.y += y
24 |
25 | def reset_x(self) -> None:
26 | self.x = self.max_x // 2 - 15
27 |
28 | def reset_y(self) -> None:
29 | self.y = self.max_y // 2 - 8
30 |
--------------------------------------------------------------------------------
/SAMPLES.md:
--------------------------------------------------------------------------------
1 | # Samples
2 |
3 |
4 |

5 |
Fig.1 Knight @ 1,5
6 |
7 |
8 |
9 |

10 |
Fig.2 Knight @ 2,5
11 |
12 |
13 |
14 |

15 |
Fig.3 Knight @ 3,7
16 |
17 |
18 |
19 |

20 |
Fig.4 Knight @ 5,6
21 |
22 |
23 |
24 |

25 |
Fig.5 Knight @ 7,2
26 |
--------------------------------------------------------------------------------
/utils/input.py:
--------------------------------------------------------------------------------
1 | from colorama import Fore
2 | from os import system, name
3 |
4 |
5 | def clear() -> None:
6 | '''
7 | clears the console
8 | '''
9 | # for windows
10 | if name == 'nt':
11 | _ = system('cls')
12 |
13 | # for mac and linux
14 | else:
15 | _ = system('clear')
16 |
17 |
18 | def print_dummy_board() -> None:
19 | '''
20 | print a dummy board with indexes for all the cells
21 | '''
22 | j: int = 0
23 | for i in range(9):
24 | if i != 0:
25 | print(
26 | str(j) + ' ' + Fore.YELLOW +
27 | '| | | | | | | | |')
28 | print(' ' + Fore.YELLOW + '---------------------------------')
29 | j += 1
30 | else:
31 | print(' ' + '0 1 2 3 4 5 6 7\n')
32 | print(' ' + Fore.YELLOW + '---------------------------------')
33 | print('\n')
34 |
35 |
36 | def validate(pos: str) -> bool:
37 | '''
38 | check if user's input is valid
39 | '''
40 | try:
41 | row, col = list(map(int, pos.split(',')))
42 |
43 | if not 0 <= row <= 7 or not 0 <= col <= 7:
44 | raise ValueError()
45 | except:
46 | return False
47 | return True
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Warnsdorff's Algorithm
2 |
3 |
4 |

5 |
Fig.1 Algorithm Visualization
6 |
7 |
8 | ## Build
9 |
10 | ```
11 | $ pip install -r requirements.txt
12 | ```
13 |
14 | ## Intro
15 |
16 | A **knight's tour** (See `Fig.2`) is a sequence of moves of a knight on a chessboard such that the knight visits every square only once. If the knight ends on a square that is one knight's move from the beginning square (so that it could tour the board again immediately, following the same path), the tour is closed, otherwise it is open.
17 |
18 |
19 |

20 |
Fig.2 Sample Knight's Tour
21 |
22 |
23 | We can solve the **knight's tour** problem using warnsdorff's algorithm, which states that:-
24 |
25 | - We can start from any initial position of the knight on the board.
26 | - We can always move to an adjacent, unvisited square with minimal degree(minimum number of unvisited adjacent).
27 |
28 | ## Sample Run
29 |
30 | `Fig.1` demonstrates a sample run of the visualizer when knight is placed at `0, 0`, you can find other samples [here](https://github.com/muj-programmer/warnsdorff-algorithm-visualizer/blob/master/SAMPLES.md).
31 |
32 | | Symbol | Meaning |
33 | |:--------:|-------------------|
34 | | 0 | Unvisited Cell |
35 | | 1 | Visited Cell |
36 | | 2 | Knight's Position |
37 |
38 | ## Fun Fact
39 |
40 | On an *8 × 8 board*, there are exactly *26,534,728,821,064 directed closed tours* (i.e. two tours along the same path that travel in opposite directions are counted separately, as are rotations and reflections). The number of *undirected closed tours is half this number*, since every tour can be traced in reverse!
41 |
42 | ## Facing a Issue
43 |
44 | If you are in this situation _first and foremost_ Don't panic :cry: I'm here to help you get over it. Simply click [this](https://github.com/muj-programmer/warnsdorff-algorithm-visualizer/issues) and properly state your issue (be as verbose as you can be), After that sit tight and watch :movie_camera: the movie you have been postponing for so long while I :construction_worker: fix the issue.
45 |
46 | ## Want to Contribute
47 |
48 | I will be glad :smiley: to work with you on a new idea or fixing a invisible bug :bug: or if you have already done the work :hammer: just create a pull request and I will merge it asap.
49 |
50 | Well that's all for now but before you close this browser tab hit the star :star: button (it motivates me to make new stuff).
51 |
52 | Have a great day :sunglasses:.
53 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 | import curses
4 | from typing import List, Tuple
5 | from colorama import init, Fore
6 | from time import sleep
7 | from heapq import heappush, heappop
8 | from utils.cursor import Cursor
9 | from utils.input import print_dummy_board, clear, validate
10 | from utils.board import print_board, update_board
11 |
12 |
13 | def algorithm(stdscr, cursor: Cursor, board: List[List[int]], krow: int,
14 | kcol: int) -> None:
15 | '''
16 | warnsdorff's algorithm implementation
17 | '''
18 | # directions the Knight can move on the chessboard
19 | dx: List[int] = [1, 2, 2, 1, -1, -2, -2, -1]
20 | dy: List[int] = [-2, -1, 1, 2, 2, 1, -1, -2]
21 |
22 | for _ in range(64):
23 | board[krow][kcol] = 1
24 | pq: List[Tuple[int, int]] = [] # priority queue of avialable neighbors
25 |
26 | # degree of neighbors
27 | for i in range(8):
28 | nrow: int = krow + dx[i]
29 | ncol: int = kcol + dy[i]
30 |
31 | if 0 <= nrow <= 7 and 0 <= ncol <= 7 and board[nrow][ncol] == 0:
32 | # count the available neighbors of the neighbor
33 | count = 0
34 | for j in range(8):
35 | nnrow: int = nrow + dx[j]
36 | nncol: int = ncol + dy[j]
37 |
38 | if 0 <= nnrow <= 7 and 0 <= nncol <= 7 and board[nnrow][
39 | nncol] == 0:
40 | count += 1
41 | heappush(pq, (count, i))
42 |
43 | if len(pq) > 0:
44 | (p, m) = heappop(pq) # knight's next position
45 | krow += dx[m]
46 | kcol += dy[m]
47 | board[krow][kcol] = 2
48 | update_board(stdscr, cursor, board)
49 | else:
50 | board[krow][kcol] = 1
51 | update_board(stdscr, cursor, board)
52 |
53 |
54 | def visualize(stdscr, pos: Tuple[int, int]) -> None:
55 | # clear the window
56 | stdscr.clear()
57 |
58 | # hide the cursor
59 | curses.curs_set(0)
60 |
61 | # colors
62 | curses.init_pair(1, curses.COLOR_YELLOW, curses.COLOR_BLACK) # boundry
63 | curses.init_pair(2, curses.COLOR_GREEN, curses.COLOR_BLACK) # visited cell
64 | curses.init_pair(3, curses.COLOR_RED, curses.COLOR_BLACK) # knight's cell
65 | curses.init_pair(4, curses.COLOR_WHITE,
66 | curses.COLOR_BLACK) # unvisited cell
67 | curses.init_pair(5, curses.COLOR_MAGENTA,
68 | curses.COLOR_BLACK) # progress bar
69 |
70 | # get max x and y co-ordinates of the window
71 | max_y, max_x = stdscr.getmaxyx()
72 |
73 | # 8 x 8 chess board
74 | board: List[List[int]] = [[0] * 8 for _ in range(8)]
75 |
76 | # initialize the cursor
77 | cursor: Cursor = Cursor(max_x, max_y)
78 |
79 | # place the knight on the board
80 | board[pos[0]][pos[1]] = 2
81 |
82 | # print the chess board
83 | print_board(stdscr, cursor, board, sleep_value=2.0, initialize=True)
84 |
85 | # start the warnsdorff algorithm
86 | algorithm(stdscr, cursor, board, pos[0], pos[1])
87 |
88 | sleep(5.0)
89 |
90 |
91 | def main() -> None:
92 | # initialize colorama
93 | init(autoreset=True)
94 |
95 | while True:
96 | clear()
97 |
98 | # print dummy chess board to help user decide knight's position
99 | print_dummy_board()
100 |
101 | pos = input('knight\'s position (row, col): ')
102 |
103 | # check user's input
104 | if validate(pos):
105 | break
106 | else:
107 | print(Fore.RED + 'Invalid, Try Again.')
108 | sleep(1)
109 |
110 | # start visualization
111 | curses.wrapper(visualize, tuple(map(int, pos.split(','))))
112 |
113 | clear()
114 |
115 |
116 | if __name__ == '__main__':
117 | # Get the size
118 | # of the terminal
119 | size = os.get_terminal_size()
120 |
121 | if size[0] < 55 or size[1] < 25:
122 | sys.exit('Maximize your terminal window. (Req: column=55, lines=25)')
123 |
124 | main()
125 |
--------------------------------------------------------------------------------
/utils/board.py:
--------------------------------------------------------------------------------
1 | import curses
2 | from .cursor import Cursor
3 | from typing import List
4 | from time import sleep
5 |
6 |
7 | def horizontal_line(stdscr, cursor: Cursor) -> None:
8 | '''
9 | horizontal boundry line
10 | '''
11 | cursor.set_x(1)
12 | stdscr.addstr(cursor.get_y(), cursor.get_x(), '-' * 29,
13 | curses.color_pair(1))
14 | cursor.set_y(1)
15 |
16 |
17 | def vertical_line(stdscr, cursor: Cursor, side: str) -> None:
18 | '''
19 | vertical boundry line
20 | '''
21 | if side == 'L':
22 | stdscr.addstr(cursor.get_y(), cursor.get_x(), '|',
23 | curses.color_pair(1))
24 | cursor.set_x(1)
25 | elif side == 'R':
26 | stdscr.addstr(cursor.get_y(), cursor.get_x(), '|',
27 | curses.color_pair(1))
28 | cursor.set_y(1)
29 | else:
30 | raise ValueError('invalid value for argument \'side\'')
31 |
32 |
33 | def get_progress(board) -> str:
34 | '''
35 | returns the progress of the algorithm
36 | '''
37 | visited_cell_count = 0
38 | total_cell_count = 64
39 |
40 | for row in range(8):
41 | visited_cell_count += board[row].count(1)
42 |
43 | progress = (visited_cell_count / total_cell_count) * 100
44 |
45 | return f'{progress}%'
46 |
47 |
48 | def update_board(stdscr, cursor: Cursor, board: List[List[int]]) -> None:
49 | '''
50 | paint the updated board on the window
51 | '''
52 | cursor.reset_x()
53 | cursor.reset_y()
54 | print_board(stdscr, cursor, board, progress=True)
55 |
56 |
57 | def print_progress_bar(stdscr, cursor: Cursor, board: List[List[int]]) -> None:
58 | '''
59 | paint the progress bar on the window
60 | '''
61 | cursor.set_x(-cursor.get_x())
62 | cursor.set_y(-cursor.get_y())
63 | stdscr.addstr(cursor.get_y(), cursor.get_x(), 'completed: ')
64 | stdscr.addstr(cursor.get_y(), cursor.get_x() + 11, ' ' * cursor.max_x)
65 | stdscr.addstr(cursor.get_y(),
66 | cursor.get_x() + 11, get_progress(board),
67 | curses.color_pair(5))
68 |
69 |
70 | def print_board(stdscr,
71 | cursor: Cursor,
72 | board: List[List[int]],
73 | progress: bool = False,
74 | sleep_value: float = 0.5,
75 | initialize: bool = False) -> None:
76 | '''
77 | paint the board on the window
78 | '''
79 | horizontal_line(stdscr, cursor)
80 | for row in range(8):
81 | cursor.reset_x()
82 |
83 | # print empty line
84 | if 0 < row <= 7:
85 | stdscr.addstr(cursor.get_y(), cursor.get_x(), '|' + ' ' * 29 + '|',
86 | curses.color_pair(1))
87 | cursor.set_y(1)
88 |
89 | # print left border
90 | vertical_line(stdscr, cursor, side='L')
91 |
92 | for col in range(8):
93 | # cell is visited
94 | if board[row][col] == 1:
95 | stdscr.addstr(cursor.get_y(), cursor.get_x(),
96 | str(board[row][col]), curses.color_pair(2))
97 | # knight's cell
98 | elif board[row][col] == 2:
99 | stdscr.addstr(cursor.get_y(), cursor.get_x(),
100 | str(board[row][col]), curses.color_pair(3))
101 | # cell is unvisited
102 | else:
103 | stdscr.addstr(cursor.get_y(), cursor.get_x(),
104 | str(board[row][col]), curses.color_pair(4))
105 | cursor.set_x(1)
106 |
107 | if col != 7:
108 | cursor.set_x(3)
109 |
110 | # print right border
111 | vertical_line(stdscr, cursor, side='R')
112 |
113 | cursor.reset_x()
114 | horizontal_line(stdscr, cursor)
115 |
116 | if progress:
117 | # print the progress bar
118 | print_progress_bar(stdscr, cursor, board)
119 |
120 | if initialize:
121 | cursor.set_x(-cursor.get_x())
122 | cursor.set_y(-cursor.get_y())
123 | stdscr.addstr(cursor.get_y(), cursor.get_x(), 'initializing......', curses.color_pair(2))
124 |
125 | stdscr.refresh()
126 | sleep(sleep_value)
--------------------------------------------------------------------------------
/visualizer.yml:
--------------------------------------------------------------------------------
1 | # The configurations that used for the recording, feel free to edit them
2 | config:
3 |
4 | # Specify a command to be executed
5 | # like `/bin/bash -l`, `ls`, or any other commands
6 | # the default is bash for Linux
7 | # or powershell.exe for Windows
8 | command: zsh
9 |
10 | # Specify the current working directory path
11 | # the default is the current working directory path
12 | cwd: /Users/muj-programmer/warnsdorff-algorithm-visualizer
13 |
14 | # Export additional ENV variables
15 | env:
16 | recording: true
17 |
18 | # Explicitly set the number of columns
19 | # or use `auto` to take the current
20 | # number of columns of your shell
21 | cols: 96
22 |
23 | # Explicitly set the number of rows
24 | # or use `auto` to take the current
25 | # number of rows of your shell
26 | rows: 31
27 |
28 | # Amount of times to repeat GIF
29 | # If value is -1, play once
30 | # If value is 0, loop indefinitely
31 | # If value is a positive number, loop n times
32 | repeat: 0
33 |
34 | # Quality
35 | # 1 - 100
36 | quality: 100
37 |
38 | # Delay between frames in ms
39 | # If the value is `auto` use the actual recording delays
40 | frameDelay: auto
41 |
42 | # Maximum delay between frames in ms
43 | # Ignored if the `frameDelay` isn't set to `auto`
44 | # Set to `auto` to prevent limiting the max idle time
45 | maxIdleTime: 2000
46 |
47 | # The surrounding frame box
48 | # The `type` can be null, window, floating, or solid`
49 | # To hide the title use the value null
50 | # Don't forget to add a backgroundColor style with a null as type
51 | frameBox:
52 | type: floating
53 | title: visualizer
54 | style:
55 | border: 0px black solid
56 | # boxShadow: none
57 | # margin: 0px
58 |
59 | # Add a watermark image to the rendered gif
60 | # You need to specify an absolute path for
61 | # the image on your machine or a URL, and you can also
62 | # add your own CSS styles
63 | watermark:
64 | imagePath: null
65 | style:
66 | position: absolute
67 | right: 15px
68 | bottom: 15px
69 | width: 100px
70 | opacity: 0.9
71 |
72 | # Cursor style can be one of
73 | # `block`, `underline`, or `bar`
74 | cursorStyle: bar
75 |
76 | # Font family
77 | # You can use any font that is installed on your machine
78 | # in CSS-like syntax
79 | fontFamily: "Hack Nerd Font, Lucida Console, Ubuntu Mono, Monospace"
80 |
81 | # The size of the font
82 | fontSize: 12
83 |
84 | # The height of lines
85 | lineHeight: 1
86 |
87 | # The spacing between letters
88 | letterSpacing: 0
89 |
90 | # Theme
91 | theme:
92 | background: "transparent"
93 | foreground: "#afafaf"
94 | cursor: "#c7c7c7"
95 | black: "#232628"
96 | red: "#fc4384"
97 | green: "#b3e33b"
98 | yellow: "#ffa727"
99 | blue: "#75dff2"
100 | magenta: "#ae89fe"
101 | cyan: "#708387"
102 | white: "#d5d5d0"
103 | brightBlack: "#626566"
104 | brightRed: "#ff7fac"
105 | brightGreen: "#c8ed71"
106 | brightYellow: "#ebdf86"
107 | brightBlue: "#75dff2"
108 | brightMagenta: "#ae89fe"
109 | brightCyan: "#b1c6ca"
110 | brightWhite: "#f9f9f4"
111 |
112 | # Records, feel free to edit them
113 | records:
114 | - delay: 783
115 | content: "\e[1m\e[7m%\e[27m\e[1m\e[0m \r \r"
116 | - delay: 150
117 | content: "\r\e[0m\e[27m\e[24m\e[J\e[39m\e[0m\e[49m\e[44m\e[30m ~/warnsdorff-algorithm-visualizer \e[42m\e[34m\e[30m master \e[49m\e[32m\e[39m \e[K\e[?1h\e=\e[?2004h"
118 | - delay: 918
119 | content: "\e[1m\e[31mp\e[0m\e[39m\e[90mython3 main.py\e[39m\e[14D"
120 | - delay: 280
121 | content: "\b\e[1m\e[31mp\e[1m\e[31my\e[0m\e[39m"
122 | - delay: 94
123 | content: "\b\b\e[1m\e[31mp\e[1m\e[31my\e[1m\e[31mt\e[0m\e[39m"
124 | - delay: 118
125 | content: "\b\e[1m\e[31mt\e[1m\e[31mh\e[0m\e[39m"
126 | - delay: 81
127 | content: "\b\e[1m\e[31mh\e[1m\e[31mo\e[0m\e[39m"
128 | - delay: 158
129 | content: "\b\b\b\b\b\e[0m\e[32mp\e[0m\e[32my\e[0m\e[32mt\e[0m\e[32mh\e[0m\e[32mo\e[32mn\e[39m"
130 | - delay: 594
131 | content: "\b\e[32mn\e[32m3\e[39m"
132 | - delay: 103
133 | content: "\e[39m "
134 | - delay: 228
135 | content: "\e[39m\e[4mm\e[24m"
136 | - delay: 124
137 | content: "\b\e[4mm\e[39m\e[4ma\e[24m"
138 | - delay: 127
139 | content: "\b\e[4ma\e[39m\e[4mi\e[24m"
140 | - delay: 64
141 | content: "\b\e[4mi\e[39m\e[4mn\e[24m"
142 | - delay: 471
143 | content: "\b\e[4mn\e[39m\e[4m.\e[24m"
144 | - delay: 279
145 | content: "\b\e[4m.\e[39m\e[4mp\e[24m"
146 | - delay: 235
147 | content: "\b\e[4mp\e[39m\e[4my\e[24m"
148 | - delay: 1140
149 | content: "\e[?1l\e>"
150 | - delay: 6
151 | content: "\e[?2004l\r\r\n"
152 | - delay: 64
153 | content: "\e[H\e[2J 0 1 2 3 4 5 6 7\r\n\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m0 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m1 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m2 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m3 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m4 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m5 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m6 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m7 \e[33m| | | | | | | | |\e[0m\r\n\e[0m \e[33m---------------------------------\e[0m\r\n\e[0m\r\n\e[0m\r\n\e[0mknight's position (row, col): "
154 | - delay: 1808
155 | content: '0'
156 | - delay: 622
157 | content: ','
158 | - delay: 432
159 | content: ' '
160 | - delay: 797
161 | content: '0'
162 | - delay: 1111
163 | content: "\r\n\e[?1049h\e[1;31r\e(B\e[m\e[4l\e[?7h\e[?1h\e=\e[39;49m\e[?25l\e[39;49m\e[37m\e[40m\e[H\e[2J\e[32m\e[40minitializing......\e[8;35H\e[33m\e[40m-----------------------------\e[9;34H|\e[31m\e[40m2\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[10;34H|\e[29X\e[10;64H|\e[11;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[12;34H|\e[29X\e[12;64H|\e[13;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[14;34H|\e[29X\e[14;64H|\e[15;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[16;34H|\e[29X\e[16;64H|\e[17;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[18;34H|\e[29X\e[18;64H|\e[19;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[20;34H|\e[29X\e[20;64H|\e[21;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[22;34H|\e[29X\e[22;64H|\e[23;34H|\e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e(B\e[m\e[39;49m\e[37m\e[40m \e[37m\e[40m0\e[33m\e[40m|\e[24;35H-----------------------------\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
164 | - delay: 2005
165 | content: "\rcompleted: \e[35m\e[40m1.5625%\e[9;35H\e[32m\e[40m1\e[13;39H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
166 | - delay: 506
167 | content: "\e[12G\e[35m\e[40m3.125%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[13;39H\e[32m\e[40m1\e[17;35H\e[31m\e[40m2\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
168 | - delay: 506
169 | content: "\e[12G\e[35m\e[40m4.6875%\e[17;35H\e[32m\e[40m1\e[21;39H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
170 | - delay: 503
171 | content: "\e[12G\e[35m\e[40m6.25%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[21;39H\e[32m\e[40m1\e[23;47H\e[31m\e[40m2\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
172 | - delay: 506
173 | content: "\e[12G\e[35m\e[40m7.8125%\e[21;55H\e[31m\e[40m2\e[23;47H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
174 | - delay: 504
175 | content: "\e[12G\e[35m\e[40m9.375%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[21;55H\e[32m\e[40m1\e[23;63H\e[31m\e[40m2\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
176 | - delay: 506
177 | content: "\e[12G\e[35m\e[40m10.9375%\e[19;59H\e[31m\e[40m2\e[23;63H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
178 | - delay: 506
179 | content: "\e[13G\e[35m\e[40m2.5%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[19;59H\e[32m\e[40m1\e[23;55H\e[31m\e[40m2\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
180 | - delay: 505
181 | content: "\b\b\b\b\e[35m\e[40m4.0625%\e[21;63H\e[31m\e[40m2\e[23;55H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
182 | - delay: 506
183 | content: "\e[13G\e[35m\e[40m5.625%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[17;59H\e[31m\e[40m2\e[21;63H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
184 | - delay: 506
185 | content: "\e[13G\e[35m\e[40m7.1875%\e[13;63H\e[31m\e[40m2\e[17;59H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
186 | - delay: 503
187 | content: "\e[13G\e[35m\e[40m8.75%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;59H\e[31m\e[40m2\e[13;63H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
188 | - delay: 504
189 | content: "\e[12G\e[35m\e[40m20.3125%\e[9;59H\e[32m\e[40m1\e[11;51H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
190 | - delay: 504
191 | content: "\e[13G\e[35m\e[40m1.875%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;43H\e[31m\e[40m2\e[11;51H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
192 | - delay: 503
193 | content: "\e[13G\e[35m\e[40m3.4375%\e[9;43H\e[32m\e[40m1\e[11;35H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
194 | - delay: 506
195 | content: "\e[13G\e[35m\e[40m5.0%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[11;35H\e[32m\e[40m1\e[15;39H\e[31m\e[40m2\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
196 | - delay: 506
197 | content: "\b\b\b\b\e[35m\e[40m6.5625%\e[15;39H\e[32m\e[40m1\e[19;35H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
198 | - delay: 504
199 | content: "\e[13G\e[35m\e[40m8.125%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[19;35H\e[32m\e[40m1\e[23;39H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
200 | - delay: 504
201 | content: "\e[13G\e[35m\e[40m9.6875%\e[21;47H\e[31m\e[40m2\e[23;39H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
202 | - delay: 502
203 | content: "\e[1;12H\e[35m\e[40m31.25%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[17;43H\e[31m\e[40m2\e[21;47H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
204 | - delay: 506
205 | content: "\e[13G\e[35m\e[40m2.8125%\e[15;35H\e[31m\e[40m2\e[17;43H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
206 | - delay: 503
207 | content: "\e[13G\e[35m\e[40m4.375%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[11;39H\e[31m\e[40m2\e[15;35H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
208 | - delay: 506
209 | content: "\e[13G\e[35m\e[40m5.9375%\e[9;47H\e[31m\e[40m2\e[11;39H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
210 | - delay: 506
211 | content: "\e[13G\e[35m\e[40m7.5%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;47H\e[32m\e[40m1\e[13;43H\e[31m\e[40m2\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
212 | - delay: 503
213 | content: "\b\b\b\b\e[35m\e[40m9.0625%\e[9;39H\e[31m\e[40m2\e[13;43H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
214 | - delay: 502
215 | content: "\e[1;12H\e[35m\e[40m40.625%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;39H\e[32m\e[40m1\e[13;35H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
216 | - delay: 503
217 | content: "\e[13G\e[35m\e[40m2.1875%\e[11;43H\e[31m\e[40m2\e[13;35H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
218 | - delay: 505
219 | content: "\e[13G\e[35m\e[40m3.75%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;51H\e[31m\e[40m2\e[11;43H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
220 | - delay: 501
221 | content: "\e[13G\e[35m\e[40m5.3125%\e[9;51H\e[32m\e[40m1\e[13;47H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
222 | - delay: 501
223 | content: "\e[13G\e[35m\e[40m6.875%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[11;55H\e[31m\e[40m2\e[13;47H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
224 | - delay: 504
225 | content: "\e[13G\e[35m\e[40m8.4375%\e[9;63H\e[31m\e[40m2\e[11;55H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
226 | - delay: 503
227 | content: "\e[1;12H\e[35m\e[40m50.0%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;63H\e[32m\e[40m1\e[13;59H\e[31m\e[40m2\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
228 | - delay: 503
229 | content: "\b\b\b\b\e[35m\e[40m1.5625%\e[13;59H\e[32m\e[40m1\e[15;51H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
230 | - delay: 503
231 | content: "\e[13G\e[35m\e[40m3.125%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[11;47H\e[31m\e[40m2\e[15;51H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
232 | - delay: 502
233 | content: "\e[13G\e[35m\e[40m4.6875%\e[9;55H\e[31m\e[40m2\e[11;47H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
234 | - delay: 502
235 | content: "\e[13G\e[35m\e[40m6.25%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[9;55H\e[32m\e[40m1\e[11;63H\e[31m\e[40m2\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
236 | - delay: 503
237 | content: "\e[13G\e[35m\e[40m7.8125%\e[11;63H\e[32m\e[40m1\e[13;55H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
238 | - delay: 504
239 | content: "\e[13G\e[35m\e[40m9.375%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[13;55H\e[32m\e[40m1\e[15;63H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
240 | - delay: 502
241 | content: "\e[12G\e[35m\e[40m60.9375%\e[11;59H\e[31m\e[40m2\e[15;63H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
242 | - delay: 503
243 | content: "\e[13G\e[35m\e[40m2.5%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[11;59H\e[32m\e[40m1\e[15;55H\e[31m\e[40m2\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
244 | - delay: 502
245 | content: "\b\b\b\b\e[35m\e[40m4.0625%\e[15;55H\e[32m\e[40m1\e[17;63H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
246 | - delay: 503
247 | content: "\e[13G\e[35m\e[40m5.625%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[17;63H\e[32m\e[40m1\e[21;59H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
248 | - delay: 503
249 | content: "\e[13G\e[35m\e[40m7.1875%\e[19;51H\e[31m\e[40m2\e[21;59H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
250 | - delay: 503
251 | content: "\e[13G\e[35m\e[40m8.75%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[15;47H\e[31m\e[40m2\e[19;51H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
252 | - delay: 503
253 | content: "\e[12G\e[35m\e[40m70.3125%\e[15;47H\e[32m\e[40m1\e[17;39H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
254 | - delay: 503
255 | content: "\e[13G\e[35m\e[40m1.875%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[17;39H\e[32m\e[40m1\e[21;35H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
256 | - delay: 502
257 | content: "\e[13G\e[35m\e[40m3.4375%\e[19;43H\e[31m\e[40m2\e[21;35H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
258 | - delay: 503
259 | content: "\e[13G\e[35m\e[40m5.0%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[17;51H\e[31m\e[40m2\e[19;43H\e[32m\e[40m1\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
260 | - delay: 502
261 | content: "\b\b\b\b\e[35m\e[40m6.5625%\e[15;59H\e[31m\e[40m2\e[17;51H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
262 | - delay: 504
263 | content: "\e[13G\e[35m\e[40m8.125%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[15;59H\e[32m\e[40m1\e[19;63H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
264 | - delay: 505
265 | content: "\e[13G\e[35m\e[40m9.6875%\e[19;63H\e[32m\e[40m1\e[23;59H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
266 | - delay: 503
267 | content: "\e[1;12H\e[35m\e[40m81.25%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[19;55H\e[31m\e[40m2\e[23;59H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
268 | - delay: 504
269 | content: "\e[13G\e[35m\e[40m2.8125%\e[19;55H\e[32m\e[40m1\e[23;51H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
270 | - delay: 503
271 | content: "\e[13G\e[35m\e[40m4.375%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[21;43H\e[31m\e[40m2\e[23;51H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
272 | - delay: 506
273 | content: "\e[13G\e[35m\e[40m5.9375%\e[21;43H\e[32m\e[40m1\e[23;35H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
274 | - delay: 506
275 | content: "\e[13G\e[35m\e[40m7.5%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[19;39H\e[31m\e[40m2\e[23;35H\e[32m\e[40m1\e[1;17H\e(B\e[m\e[39;49m\e[37m\e[40m"
276 | - delay: 506
277 | content: "\b\b\b\b\e[35m\e[40m9.0625%\e[19;39H\e[32m\e[40m1\e[23;43H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
278 | - delay: 504
279 | content: "\e[1;12H\e[35m\e[40m90.625%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[21;51H\e[31m\e[40m2\e[23;43H\e[32m\e[40m1\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
280 | - delay: 503
281 | content: "\e[13G\e[35m\e[40m2.1875%\e[17;47H\e[31m\e[40m2\e[21;51H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
282 | - delay: 504
283 | content: "\e[13G\e[35m\e[40m3.75%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[13;51H\e[31m\e[40m2\e[17;47H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
284 | - delay: 504
285 | content: "\e[13G\e[35m\e[40m5.3125%\e[13;51H\e[32m\e[40m1\e[15;43H\e[31m\e[40m2\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
286 | - delay: 506
287 | content: "\e[13G\e[35m\e[40m6.875%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[15;43H\e[32m\e[40m1\e[19;47H\e[31m\e[40m2\e[1;19H\e(B\e[m\e[39;49m\e[37m\e[40m"
288 | - delay: 506
289 | content: "\e[13G\e[35m\e[40m8.4375%\e[17;55H\e[31m\e[40m2\e[19;47H\e[32m\e[40m1\e[1;20H\e(B\e[m\e[39;49m\e[37m\e[40m"
290 | - delay: 506
291 | content: "\e[1;12H\e[35m\e[40m100.0%\e(B\e[m\e[39;49m\e[37m\e[40m\e[K\e[17;55H\e[32m\e[40m1\e[1;18H\e(B\e[m\e[39;49m\e[37m\e[40m"
292 | - delay: 5505
293 | content: "\e[?1l\e>\e[39;49m\r\e[31d\e[K\e[31;1H\e[?12l\e[?25h\e[?1049l\r\e[?1l\e>"
294 | - delay: 8
295 | content: "\e[H\e[2J\e[0m"
296 | - delay: 8
297 | content: "\e[1m\e[7m%\e[27m\e[1m\e[0m \r \r"
298 | - delay: 143
299 | content: "\r\e[0m\e[27m\e[24m\e[J\e[39m\e[0m\e[49m\e[44m\e[30m ~/warnsdorff-algorithm-visualizer \e[42m\e[34m\e[30m master \e[49m\e[32m\e[39m \e[K\e[?1h\e=\e[?2004h"
300 | - delay: 1880
301 | content: "\e[?2004l\r\r\n"
302 |
--------------------------------------------------------------------------------