<commit_before>#+title: learntris test suite

* DONE [4/4] basic i/o
** DONE establish a command loop and a way to exit

#+name: io.q
#+begin_src
> q
#+end_src

** DONE establish a way to print the matrix (p)

Matrix is the official term for the 10 \times 22 grid of cells.

The playing area is only 10 \times 20 but there are 2 extra lines
above where new tetriminos form.

#+name: io.p
#+begin_src
> p
# 1 2 3 4 5 6 7 8 9 ( first column, hidden by the #, is 0
. . . . . . . . . . #  0
. . . . . . . . . . #  1
. . . . . . . . . . #  2
. . . . . . . . . . #  3
. . . . . . . . . . #  4
. . . . . . . . . . #  5
. . . . . . . . . . #  6
. . . . . . . . . . #  7
. . . . . . . . . . #  8
. . . . . . . . . . #  9
. . . . . . . . . . # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
. . . . . . . . . . # 13
. . . . . . . . . . # 14
. . . . . . . . . . # 15
. . . . . . . . . . # 16
. . . . . . . . . . # 17
. . . . . . . . . . # 18
. . . . . . . . . . # 19
. . . . . . . . . . # 20
. . . . . . . . . . # 21
> q
#+end_src

** DONE establish a way to set the entire matrix (g)

#+name: io.g
#+begin_src
> g
> . . . . . . . . . . # 0
> . . . . . . . . . . # 1
> . . . . . . . . . . # 2
> . . . . . . . . . . # 3
> m m m m m m m m m m # 4
> b b b b b b b b b b # 5
> c c c c c c c c c c # 6
> g g g g g g g g g g # 7
> y y y y y y y y y y # 8
> o o o o o o o o o o # 9
> r r r r r r r r r r # 10
> . . . . . . . . . . # 11
> . . . . . . . . . . # 12
> . . . . . . . . . . # 13
> . . . . . . . . . . # 14
> c . . . . . . . . . # 15
> c . . . . . . . . . # 16
> c. . .  . g . . . . # 17
> c . . o . g g . . . # 18
> . . . o . b g . . . # 19
> . m r r o o b y y . # 20
> m m m r r b b y y . # 21
> p
. . . . . . . . . . # 0
. . . . . . . . . . # 1
. . . . . . . . . . # 2
. . . . . . . . . . # 3
m m m m m m m m m m # 4
b b b b b b b b b b # 5
c c c c c c c c c c # 6
g g g g g g g g g g # 7
y y y y y y y y y y # 8
o o o o o o o o o o # 9
r r r r r r r r r r # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
. . . . . . . . . . # 13
. . . . . . . . . . # 14
c . . . . . . . . . # 15
c . . . . . . . . . # 16
c. . .  . g . . . . # 17
c . . o . g g . . . # 18
. . . o . b g . . . # 19
. m r r o o b y y . # 20
m m m r r b b y y . # 21
> q
#+end_src

** DONE and a way to clear the matrix (c)

This is the same as the previous test, but it adds a c command to clear it before the print.

#+name: io.c
#+begin_src
> g
> . . . . . . . . . . # 0
> . . . . . . . . . . # 1
> . . . . . . . . . . # 2
> . . . . . . . . . . # 3
> m m m m m m m m m m # 4
> b b b b b b b b b b # 5
> c c c c c c c c c c # 6
> g g g g g g g g g g # 7
> y y y y y y y y y y # 8
> o o o o o o o o o o # 9
> r r r r r r r r r r # 10
> . . . . . . . . . . # 11
> . . . . . . . . . . # 12
> . . . . . . . . . . # 13
> . . . . . . . . . . # 14
> c . . . . . . . . . # 15
> c . . . . . . . . . # 16
> c. . .  . g . . . . # 17
> c . . o . g g . . . # 18
> . . . o . b g . . . # 19
> . m r r o o b y y . # 20
> m m m r r b b y y . # 21
> c
> p
. . . . . . . . . . #  0
. . . . . . . . . . #  1
. . . . . . . . . . #  2
. . . . . . . . . . #  3
. . . . . . . . . . #  4
. . . . . . . . . . #  5
. . . . . . . . . . #  6
. . . . . . . . . . #  7
. . . . . . . . . . #  8
. . . . . . . . . . #  9
. . . . . . . . . . # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
. . . . . . . . . . # 13
. . . . . . . . . . # 14
. . . . . . . . . . # 15
. . . . . . . . . . # 16
. . . . . . . . . . # 17
. . . . . . . . . . # 18
. . . . . . . . . . # 19
. . . . . . . . . . # 20
. . . . . . . . . . # 21
> q
#+end_src

* DONE [3/4] basic game ideas
** DONE establish protocol to set and query the score

score register:

#+name: io.score.?s
#+begin_src
> ?s
0
>q
#+end_src

number of lines register:

#+name: io.score.?n
#+begin_src
> ?n
0
>q
#+end_src

** DONE establish the line-clearing mechanic
#+name: rule.clear
#+begin_src
> ?s
0
> g
> . . . . . . . . . . # 0
> . . . . . . . . . . # 1
> . . . . . . . . . . # 2
> . . . . . . . . . . # 3
> . . . . . . . . . . # 4
> . . . . . . . . . . # 5
> . . . . . . . . . . # 6
> . . . . . . . . . . # 7
> . . . . . . . . . . # 8
> . . . . . . . . . . # 9
> m c r g b y m c o b # 10
> . . . . . . . . . . # 11
> . . . . . . . . . . # 12
> m y o . c r g c m y # 13
> . . . . . . . . . . # 14
> . . . . . . . . . . # 15
> . . . . . . . . . . # 16
> . . . . . . . . . . # 17
> . . . . . . . . . . # 18
> . . . . . . . . . . # 19
> . . . . . . . . . . # 20
> . . . . . . . . . . # 21
> s
> p
. . . . . . . . . . #  0
. . . . . . . . . . #  1
. . . . . . . . . . #  2
. . . . . . . . . . #  3
. . . . . . . . . . #  4
. . . . . . . . . . #  5
. . . . . . . . . . #  6
. . . . . . . . . . #  7
. . . . . . . . . . #  8
. . . . . . . . . . #  9
. . . . . . . . . . # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
m y o . c r g c m y # 13
. . . . . . . . . . # 14
. . . . . . . . . . # 15
. . . . . . . . . . # 16
. . . . . . . . . . # 17
. . . . . . . . . . # 18
. . . . . . . . . . # 19
. . . . . . . . . . # 20
. . . . . . . . . . # 21
> ?n
1
> ?s
100
> s
> q
#+end_src

** DONE [7/7] introduce the tetraminos
*** DONE The I (cyan)

#+name: io.multi
#+begin_src
> I t q
. . . .
c c c c
. . . .
. . . .
#+end_src

*** DONE The O (yellow)

The O spawns in a 4 \times 3 grid:

#+name: shape.O
#+begin_src
> O t q
. y y .
. y y .
. . . .
#+end_src

*** DONE The Z (red)

The Z and others fit in 3x3 grids

#+name: shape.Z
#+begin_src
> Z t q
r r .
. r r
. . .
#+end_src

*** DONE The S (green)

#+name: shape.S
#+begin_src
> S t q
. g g
g g .
. . .
#+end_src

*** DONE The J (blue)

#+name: shape.J
#+begin_src
> J t q
b . .
b b b
. . .
#+end_src

*** DONE The L (orange)

#+name: shape.L
#+begin_src
> L t q
. . o
o o o
. . .
#+end_src

*** DONE The T (magenta)

#+name: shape.T
#+begin_src
> T t q
. m .
m m m
. . .
#+end_src

** TODO introduce super rotation system
<commit_msg>rotation tests for tetraminos<commit_after>#+title: learntris test suite

* DONE [4/4] basic i/o
** DONE establish a command loop and a way to exit

#+name: io.q
#+begin_src
> q
#+end_src

** DONE establish a way to print the matrix (p)

Matrix is the official term for the 10 \times 22 grid of cells.

The playing area is only 10 \times 20 but there are 2 extra lines
above where new tetriminos form.

#+name: io.p
#+begin_src
> p
# 1 2 3 4 5 6 7 8 9 ( first column, hidden by the #, is 0
. . . . . . . . . . #  0
. . . . . . . . . . #  1
. . . . . . . . . . #  2
. . . . . . . . . . #  3
. . . . . . . . . . #  4
. . . . . . . . . . #  5
. . . . . . . . . . #  6
. . . . . . . . . . #  7
. . . . . . . . . . #  8
. . . . . . . . . . #  9
. . . . . . . . . . # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
. . . . . . . . . . # 13
. . . . . . . . . . # 14
. . . . . . . . . . # 15
. . . . . . . . . . # 16
. . . . . . . . . . # 17
. . . . . . . . . . # 18
. . . . . . . . . . # 19
. . . . . . . . . . # 20
. . . . . . . . . . # 21
> q
#+end_src

** DONE establish a way to set the entire matrix (g)

#+name: io.g
#+begin_src
> g
> . . . . . . . . . . # 0
> . . . . . . . . . . # 1
> . . . . . . . . . . # 2
> . . . . . . . . . . # 3
> m m m m m m m m m m # 4
> b b b b b b b b b b # 5
> c c c c c c c c c c # 6
> g g g g g g g g g g # 7
> y y y y y y y y y y # 8
> o o o o o o o o o o # 9
> r r r r r r r r r r # 10
> . . . . . . . . . . # 11
> . . . . . . . . . . # 12
> . . . . . . . . . . # 13
> . . . . . . . . . . # 14
> c . . . . . . . . . # 15
> c . . . . . . . . . # 16
> c. . .  . g . . . . # 17
> c . . o . g g . . . # 18
> . . . o . b g . . . # 19
> . m r r o o b y y . # 20
> m m m r r b b y y . # 21
> p
. . . . . . . . . . # 0
. . . . . . . . . . # 1
. . . . . . . . . . # 2
. . . . . . . . . . # 3
m m m m m m m m m m # 4
b b b b b b b b b b # 5
c c c c c c c c c c # 6
g g g g g g g g g g # 7
y y y y y y y y y y # 8
o o o o o o o o o o # 9
r r r r r r r r r r # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
. . . . . . . . . . # 13
. . . . . . . . . . # 14
c . . . . . . . . . # 15
c . . . . . . . . . # 16
c. . .  . g . . . . # 17
c . . o . g g . . . # 18
. . . o . b g . . . # 19
. m r r o o b y y . # 20
m m m r r b b y y . # 21
> q
#+end_src

** DONE and a way to clear the matrix (c)

This is the same as the previous test, but it adds a c command to clear it before the print.

#+name: io.c
#+begin_src
> g
> . . . . . . . . . . # 0
> . . . . . . . . . . # 1
> . . . . . . . . . . # 2
> . . . . . . . . . . # 3
> m m m m m m m m m m # 4
> b b b b b b b b b b # 5
> c c c c c c c c c c # 6
> g g g g g g g g g g # 7
> y y y y y y y y y y # 8
> o o o o o o o o o o # 9
> r r r r r r r r r r # 10
> . . . . . . . . . . # 11
> . . . . . . . . . . # 12
> . . . . . . . . . . # 13
> . . . . . . . . . . # 14
> c . . . . . . . . . # 15
> c . . . . . . . . . # 16
> c. . .  . g . . . . # 17
> c . . o . g g . . . # 18
> . . . o . b g . . . # 19
> . m r r o o b y y . # 20
> m m m r r b b y y . # 21
> c
> p
. . . . . . . . . . #  0
. . . . . . . . . . #  1
. . . . . . . . . . #  2
. . . . . . . . . . #  3
. . . . . . . . . . #  4
. . . . . . . . . . #  5
. . . . . . . . . . #  6
. . . . . . . . . . #  7
. . . . . . . . . . #  8
. . . . . . . . . . #  9
. . . . . . . . . . # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
. . . . . . . . . . # 13
. . . . . . . . . . # 14
. . . . . . . . . . # 15
. . . . . . . . . . # 16
. . . . . . . . . . # 17
. . . . . . . . . . # 18
. . . . . . . . . . # 19
. . . . . . . . . . # 20
. . . . . . . . . . # 21
> q
#+end_src

* DONE [3/4] basic game ideas
** DONE establish protocol to set and query the score

score register:

#+name: io.score.?s
#+begin_src
> ?s
0
>q
#+end_src

number of lines register:

#+name: io.score.?n
#+begin_src
> ?n
0
>q
#+end_src

** DONE establish the line-clearing mechanic
#+name: rule.clear
#+begin_src
> ?s
0
> g
> . . . . . . . . . . # 0
> . . . . . . . . . . # 1
> . . . . . . . . . . # 2
> . . . . . . . . . . # 3
> . . . . . . . . . . # 4
> . . . . . . . . . . # 5
> . . . . . . . . . . # 6
> . . . . . . . . . . # 7
> . . . . . . . . . . # 8
> . . . . . . . . . . # 9
> m c r g b y m c o b # 10
> . . . . . . . . . . # 11
> . . . . . . . . . . # 12
> m y o . c r g c m y # 13
> . . . . . . . . . . # 14
> . . . . . . . . . . # 15
> . . . . . . . . . . # 16
> . . . . . . . . . . # 17
> . . . . . . . . . . # 18
> . . . . . . . . . . # 19
> . . . . . . . . . . # 20
> . . . . . . . . . . # 21
> s
> p
. . . . . . . . . . #  0
. . . . . . . . . . #  1
. . . . . . . . . . #  2
. . . . . . . . . . #  3
. . . . . . . . . . #  4
. . . . . . . . . . #  5
. . . . . . . . . . #  6
. . . . . . . . . . #  7
. . . . . . . . . . #  8
. . . . . . . . . . #  9
. . . . . . . . . . # 10
. . . . . . . . . . # 11
. . . . . . . . . . # 12
m y o . c r g c m y # 13
. . . . . . . . . . # 14
. . . . . . . . . . # 15
. . . . . . . . . . # 16
. . . . . . . . . . # 17
. . . . . . . . . . # 18
. . . . . . . . . . # 19
. . . . . . . . . . # 20
. . . . . . . . . . # 21
> ?n
1
> ?s
100
> s
> q
#+end_src

** DONE [7/7] introduce the tetraminos
*** DONE The I (cyan)

#+name: shape.I
#+begin_src
> I t q
. . . .
c c c c
. . . .
. . . .
#+end_src

*** DONE The O (yellow)

The O spawns in a 4 \times 3 grid:

#+name: shape.O
#+begin_src
> O t q
. y y .
. y y .
. . . .
#+end_src

*** DONE The Z (red)

The Z and others fit in 3x3 grids

#+name: shape.Z
#+begin_src
> Z t q
r r .
. r r
. . .
#+end_src

*** DONE The S (green)

#+name: shape.S
#+begin_src
> S t q
. g g
g g .
. . .
#+end_src

*** DONE The J (blue)

#+name: shape.J
#+begin_src
> J t q
b . .
b b b
. . .
#+end_src

*** DONE The L (orange)

#+name: shape.L
#+begin_src
> L t q
. . o
o o o
. . .
#+end_src

*** DONE The T (magenta)

#+name: shape.T
#+begin_src
> T t q
. m .
m m m
. . .
#+end_src

** TODO introduce (simplified) super rotation system

Clockwise only. No wall-kicks. For each test, four rotations should bring it back to the staring position.

*** DONE The I (cyan)

#+name: clockwise.I
#+begin_src
> I ) t
. . c .
. . c .
. . c .
. . c .
> ) t
. . . .
. . . .
c c c c
. . . .
> ) t
. c . .
. c . .
. c . .
. c . .
> ) t q
. . . .
c c c c
. . . .
. . . .
#+end_src

*** DONE The O (yellow)

The O looks the same in all orientations.

#+name: clockwise.O
#+begin_src
> O ) t
. y y .
. y y .
. . . .
> ) t q
. y y .
. y y .
. . . .
> ) t
. y y .
. y y .
. . . .
> ) t q
. y y .
. y y .
. . . .
#+end_src

*** TODO The Z (red)

The Z and others fit in 3x3 grids

#+name: clockwise.Z
#+begin_src
> Z t q
r r .
. r r
. . .
> ) t
r r .
. r r
. . .
> ) t
r r .
. r r
. . .
> ) t q
r r .
. r r
. . .
#+end_src

*** TODO The S (green)

#+name: clockwise.S
#+begin_src
> S t q
. g g
g g .
. . .
> ) t
. g g
g g .
. . .
> ) t
. g g
g g .
. . .
> ) t q
. g g
g g .
. . .
#+end_src

*** TODO The J (blue)

#+name: clockwise.J
#+begin_src
> J t q
b . .
b b b
. . .
> ) t
b . .
b b b
. . .
> ) t
b . .
b b b
. . .
> ) t q
b . .
b b b
. . .
#+end_src

*** TODO The L (orange)

#+name: clockwise.L
#+begin_src
> L ) t
. . o
o o o
. . .
> ) t
. . o
o o o
. . .
> ) t
. . o
o o o
. . .
> ) t q
. . o
o o o
. . .
#+end_src

*** TODO The T (magenta)

#+name: clockwise.T
#+begin_src
> T ) t
. m .
m m m
. . .
> ) t
. m .
m m m
. . .
> ) t
. m .
m m m
. . .
> ) t q
. m .
m m m
. . .
#+end_src

{'fraction_non_alphanumeric': 0.28577908822862325, 'fraction_numerical': 0.04158161336659862, 'mean_word_length': 0.6385482472438995, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 221, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 304, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1297968', 'n_tokens_mistral': 7194, 'n_tokens_neox': 6706, 'n_words': 1855}