Skip to content

Instantly share code, notes, and snippets.

@binji
Created October 27, 2016 16:57
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save binji/403b4de6e4d4c3b65677e5bce8502f4e to your computer and use it in GitHub Desktop.
Save binji/403b4de6e4d4c3b65677e5bce8502f4e to your computer and use it in GitHub Desktop.
gameboy mode3 sprite timing
#!/usr/bin/env python
import math
import os
import sys
def calculate(scx, expected_cycles, sprites):
buckets = [0] * (((168 + scx + 7) // 8))
scx &= 7
total = scx
if 0 in sprites:
total += scx
for x in sprites:
if x >= 168:
continue
x += scx
bucket = x >> 3
buckets[bucket] = max(buckets[bucket], 5 - (x & 7))
total += 6
total += sum(buckets)
return total >> 2
def testcase(scx, expected_cycles, sprites):
actual_cycles_nofloor = calculate(scx, expected_cycles, sprites)
actual_cycles = math.floor(actual_cycles_nofloor)
# if sprites[0] == 0:
# print('scx=%d: %d (%s) (actual), %s' % (
# scx, actual_cycles, actual_cycles_nofloor, sprites))
if expected_cycles != actual_cycles:
print('*** scx=%d: %d (expected) != %d (%s) (actual), %s' % (
scx, expected_cycles, actual_cycles, actual_cycles_nofloor, sprites))
TESTS = {
0: [
(2, [0]),
(4, [0, 0]),
(5, [0, 0, 0]),
(7, [0, 0, 0, 0]),
(8, [0, 0, 0, 0, 0]),
(10, [0, 0, 0, 0, 0, 0]),
(11, [0, 0, 0, 0, 0, 0, 0]),
(13, [0, 0, 0, 0, 0, 0, 0, 0]),
(14, [0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
(15, [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
(15, [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]),
(15, [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]),
(15, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]),
(15, [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]),
(15, [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]),
(16, [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]),
(16, [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]),
(15, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]),
(15, [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]),
(15, [12, 12, 12, 12, 12, 12, 12, 12, 12, 12]),
(15, [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]),
(15, [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]),
(15, [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]),
(16, [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]),
(16, [17, 17, 17, 17, 17, 17, 17, 17, 17, 17]),
(16, [32, 32, 32, 32, 32, 32, 32, 32, 32, 32]),
(16, [33, 33, 33, 33, 33, 33, 33, 33, 33, 33]),
(16, [160,160,160,160,160,160,160,160,160,160]),
(16, [161,161,161,161,161,161,161,161,161,161]),
(15, [162,162,162,162,162,162,162,162,162,162]),
(15, [167,167,167,167,167,167,167,167,167,167]),
(15, [167,167,167,167,167,167,167,167,167,167]),
(0, [168,168,168,168,168,168,168,168,168,168]),
(0, [169,169,169,169,169,169,169,169,169,169]),
(17, [0, 0, 0, 0, 0, 160,160,160,160,160]),
(17, [1, 1, 1, 1, 1, 161,161,161,161,161]),
(16, [2, 2, 2, 2, 2, 162,162,162,162,162]),
(16, [3, 3, 3, 3, 3, 163,163,163,163,163]),
(15, [4, 4, 4, 4, 4, 164,164,164,164,164]),
(15, [5, 5, 5, 5, 5, 165,165,165,165,165]),
(15, [6, 6, 6, 6, 6, 166,166,166,166,166]),
(15, [7, 7, 7, 7, 7, 167,167,167,167,167]),
(17, [64, 64, 64, 64, 64, 160,160,160,160,160]),
(17, [65, 65, 65, 65, 65, 161,161,161,161,161]),
(16, [66, 66, 66, 66, 66, 162,162,162,162,162]),
(16, [67, 67, 67, 67, 67, 163,163,163,163,163]),
(15, [68, 68, 68, 68, 68, 164,164,164,164,164]),
(15, [69, 69, 69, 69, 69, 165,165,165,165,165]),
(15, [70, 70, 70, 70, 70, 166,166,166,166,166]),
(15, [71, 71, 71, 71, 71, 167,167,167,167,167]),
(2, [0]),
(2, [1]),
(2, [2]),
(2, [3]),
(1, [4]),
(1, [5]),
(1, [6]),
(1, [7]),
(2, [8]),
(2, [9]),
(2, [10]),
(2, [11]),
(1, [12]),
(1, [13]),
(1, [14]),
(1, [15]),
(2, [16]),
(2, [17]),
(2, [160]),
(2, [161]),
(2, [162]),
(2, [163]),
(1, [164]),
(1, [165]),
(1, [166]),
(1, [167]),
(5, [0, 8]),
(5, [1, 9]),
(4, [2, 10]),
(4, [3, 11]),
(3, [4, 12]),
(3, [5, 13]),
(3, [6, 14]),
(3, [7, 15]),
(5, [8, 16]),
(5, [9, 17]),
(4, [10, 18]),
(4, [11, 19]),
(3, [12, 20]),
(3, [13, 21]),
(3, [14, 22]),
(3, [15, 23]),
(5, [16, 24]),
(27, [0, 8, 16, 24, 32, 40, 48, 56, 64, 72]),
(25, [1, 9, 17, 25, 33, 41, 49, 57, 65, 73]),
(22, [2, 10, 18, 26, 34, 42, 50, 58, 66, 74]),
(20, [3, 11, 19, 27, 35, 43, 51, 59, 67, 75]),
(17, [4, 12, 20, 28, 36, 44, 52, 60, 68, 76]),
(15, [5, 13, 21, 29, 37, 45, 53, 61, 69, 77]),
(15, [6, 14, 22, 30, 38, 46, 54, 62, 70, 78]),
(15, [7, 15, 23, 31, 39, 47, 55, 63, 71, 79]),
(27, [72, 64, 56, 48, 40, 32, 24, 16, 8, 0]),
(25, [73, 65, 57, 49, 41, 33, 25, 17, 9, 1]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 3 ]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 4 ]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 1, 2 ]),
(16, [0, 0, 0, 0, 0, 0, 0, 1, 2, 3 ]),
(16, [0, 0, 0, 0, 0, 0, 1, 2, 3, 4 ]),
(16, [0, 0, 0, 0, 0, 1, 2, 3, 4, 5 ]),
(16, [0, 0, 0, 0, 1, 2, 3, 4, 5, 6 ]),
(16, [0, 0, 0, 1, 2, 3, 4, 5, 6, 7 ]),
(17, [0, 0, 1, 2, 3, 4, 5, 6, 7, 8 ]),
(17, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]),
(17, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
(17, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
(16, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
(16, [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
(16, [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
(16, [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
(17, [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
(17, [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]),
(17, [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]),
(17, [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),
(16, [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
(16, [12, 13, 14, 15, 16, 17, 18, 19, 20, 21]),
],
1: [
(3, [0]),
(2, [1]),
(2, [2]),
(2, [3]),
(1, [4]),
(1, [5]),
(1, [6]),
(3, [7]),
(2, [8]),
(2, [9]),
(2, [10]),
(2, [11]),
(1, [12]),
(1, [13]),
(1, [14]),
(3, [15]),
(2, [16]),
(2, [17]),
(2, [160]),
(2, [161]),
(2, [162]),
(2, [163]),
(1, [164]),
(1, [165]),
(1, [166]),
(3, [167]),
(4, [0, 0]),
(5, [0, 8]),
(4, [1, 9]),
(4, [2, 10]),
(3, [3, 11]),
(3, [4, 12]),
(3, [5, 13]),
(3, [6, 14]),
(5, [7, 15]),
(5, [8, 16]),
(4, [10, 18]),
(3, [11, 19]),
(3, [12, 20]),
(3, [14, 22]),
(5, [15, 23]),
(5, [16, 24]),
(6, [0, 0, 0]),
(7, [0, 0, 0, 0]),
(9, [0, 0, 0, 0, 0]),
(10, [0, 0, 0, 0, 0, 0]),
(12, [0, 0, 0, 0, 0, 0, 0]),
(13, [0, 0, 0, 0, 0, 0, 0, 0]),
(15, [0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
(15, [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
(15, [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]),
(15, [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]),
(15, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]),
(15, [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]),
(16, [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]),
(16, [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]),
(16, [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]),
(15, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]),
(15, [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]),
(15, [12, 12, 12, 12, 12, 12, 12, 12, 12, 12]),
(15, [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]),
(15, [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]),
(16, [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]),
(16, [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]),
(16, [17, 17, 17, 17, 17, 17, 17, 17, 17, 17]),
(16, [32, 32, 32, 32, 32, 32, 32, 32, 32, 32]),
(16, [33, 33, 33, 33, 33, 33, 33, 33, 33, 33]),
(16, [160,160,160,160,160,160,160,160,160,160]),
(16, [161,161,161,161,161,161,161,161,161,161]),
(15, [162,162,162,162,162,162,162,162,162,162]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(0, [168,168,168,168,168,168,168,168,168,168]),
(0, [169,169,169,169,169,169,169,169,169,169]),
(17, [0, 0, 0, 0, 0, 160,160,160,160,160]),
(16, [1, 1, 1, 1, 1, 161,161,161,161,161]),
(16, [2, 2, 2, 2, 2, 162,162,162,162,162]),
(15, [3, 3, 3, 3, 3, 163,163,163,163,163]),
(15, [4, 4, 4, 4, 4, 164,164,164,164,164]),
(15, [5, 5, 5, 5, 5, 165,165,165,165,165]),
(15, [6, 6, 6, 6, 6, 166,166,166,166,166]),
(17, [7, 7, 7, 7, 7, 167,167,167,167,167]),
(17, [64, 64, 64, 64, 64, 160,160,160,160,160]),
(16, [65, 65, 65, 65, 65, 161,161,161,161,161]),
(16, [66, 66, 66, 66, 66, 162,162,162,162,162]),
(15, [67, 67, 67, 67, 67, 163,163,163,163,163]),
(15, [68, 68, 68, 68, 68, 164,164,164,164,164]),
(15, [69, 69, 69, 69, 69, 165,165,165,165,165]),
(15, [70, 70, 70, 70, 70, 166,166,166,166,166]),
(17, [71, 71, 71, 71, 71, 167,167,167,167,167]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 4]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 1, 2]),
(16, [0, 0, 0, 0, 0, 0, 0, 1, 2, 3]),
(16, [0, 0, 0, 0, 0, 0, 1, 2, 3, 4]),
(16, [0, 0, 0, 0, 0, 1, 2, 3, 4, 5]),
(16, [0, 0, 0, 0, 1, 2, 3, 4, 5, 6]),
(17, [0, 0, 0, 1, 2, 3, 4, 5, 6, 7]),
(17, [0, 0, 1, 2, 3, 4, 5, 6, 7, 8]),
(17, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
(17, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
(17, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
(16, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
(16, [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
(16, [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
(17, [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
(17, [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
(17, [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]),
(17, [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]),
(17, [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),
(16, [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
(16, [12, 13, 14, 15, 16, 17, 18, 19, 20, 21]),
(25, [0, 8, 16, 24, 32, 40, 48, 56, 64, 72]),
(22, [1, 9, 17, 25, 33, 41, 49, 57, 65, 73]),
(20, [2, 10, 18, 26, 34, 42, 50, 58, 66, 74]),
(17, [3, 11, 19, 27, 35, 43, 51, 59, 67, 75]),
(15, [4, 12, 20, 28, 36, 44, 52, 60, 68, 76]),
(15, [5, 13, 21, 29, 37, 45, 53, 61, 69, 77]),
(15, [6, 14, 22, 30, 38, 46, 54, 62, 70, 78]),
(27, [7, 15, 23, 31, 39, 47, 55, 63, 71, 79]),
(25, [8, 16, 24, 32, 40, 48, 56, 64, 72, 80]),
(25, [72, 64, 56, 48, 40, 32, 24, 16, 8, 0]),
(22, [73, 65, 57, 49, 41, 33, 25, 17, 9, 1]),
],
2: [
(3, [0]),
(2, [1]),
(2, [2]),
(2, [3]),
(2, [4]),
(2, [5]),
(3, [6]),
(3, [7]),
(2, [8]),
(2, [9]),
(2, [10]),
(2, [11]),
(2, [12]),
(2, [13]),
(3, [14]),
(3, [15]),
(2, [16]),
(2, [17]),
(2, [160]),
(2, [161]),
(2, [162]),
(2, [163]),
(2, [164]),
(2, [165]),
(3, [166]),
(3, [167]),
(4, [0, 0]),
(5, [0, 8]),
(4, [1, 9]),
(4, [2, 10]),
(3, [3, 11]),
(3, [4, 12]),
(3, [5, 13]),
(6, [6, 14]),
(5, [7, 15]),
(5, [8, 16]),
(4, [9, 17]),
(4, [10, 18]),
(3, [11, 19]),
(3, [12, 20]),
(3, [13, 21]),
(6, [14, 22]),
(5, [15, 23]),
(5, [16, 24]),
(6, [0, 0, 0]),
(7, [0, 0, 0, 0]),
(9, [0, 0, 0, 0, 0]),
(10, [0, 0, 0, 0, 0, 0]),
(12, [0, 0, 0, 0, 0, 0, 0]),
(13, [0, 0, 0, 0, 0, 0, 0, 0]),
(15, [0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
(15, [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
(15, [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]),
(15, [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]),
(15, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]),
(16, [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]),
(16, [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]),
(16, [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]),
(16, [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]),
(15, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]),
(15, [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]),
(15, [12, 12, 12, 12, 12, 12, 12, 12, 12, 12]),
(15, [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]),
(16, [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]),
(16, [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]),
(16, [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]),
(16, [17, 17, 17, 17, 17, 17, 17, 17, 17, 17]),
(16, [32, 32, 32, 32, 32, 32, 32, 32, 32, 32]),
(16, [33, 33, 33, 33, 33, 33, 33, 33, 33, 33]),
(16, [160,160,160,160,160,160,160,160,160,160]),
(16, [161,161,161,161,161,161,161,161,161,161]),
(15, [162,162,162,162,162,162,162,162,162,162]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(0, [168,168,168,168,168,168,168,168,168,168]),
(0, [169,169,169,169,169,169,169,169,169,169]),
(17, [0, 0, 0, 0, 0, 160,160,160,160,160]),
(16, [1, 1, 1, 1, 1, 161,161,161,161,161]),
(16, [2, 2, 2, 2, 2, 162,162,162,162,162]),
(15, [3, 3, 3, 3, 3, 163,163,163,163,163]),
(15, [4, 4, 4, 4, 4, 164,164,164,164,164]),
(15, [5, 5, 5, 5, 5, 165,165,165,165,165]),
(18, [6, 6, 6, 6, 6, 166,166,166,166,166]),
(17, [7, 7, 7, 7, 7, 167,167,167,167,167]),
(17, [64, 64, 64, 64, 64, 160,160,160,160,160]),
(16, [65, 65, 65, 65, 65, 161,161,161,161,161]),
(16, [66, 66, 66, 66, 66, 162,162,162,162,162]),
(15, [67, 67, 67, 67, 67, 163,163,163,163,163]),
(15, [68, 68, 68, 68, 68, 164,164,164,164,164]),
(15, [69, 69, 69, 69, 69, 165,165,165,165,165]),
(18, [70, 70, 70, 70, 70, 166,166,166,166,166]),
(17, [71, 71, 71, 71, 71, 167,167,167,167,167]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 0, 4]),
(16, [0, 0, 0, 0, 0, 0, 0, 0, 1, 2]),
(16, [0, 0, 0, 0, 0, 0, 0, 1, 2, 3]),
(16, [0, 0, 0, 0, 0, 0, 1, 2, 3, 4]),
(16, [0, 0, 0, 0, 0, 1, 2, 3, 4, 5]),
(18, [0, 0, 0, 0, 1, 2, 3, 4, 5, 6]),
(18, [0, 0, 0, 1, 2, 3, 4, 5, 6, 7]),
(18, [0, 0, 1, 2, 3, 4, 5, 6, 7, 8]),
(18, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
(17, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
(17, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
(16, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
(16, [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
(18, [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
(18, [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
(17, [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
(17, [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]),
(17, [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]),
(17, [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),
(16, [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
(16, [12, 13, 14, 15, 16, 17, 18, 19, 20, 21]),
(23, [0, 8, 16, 24, 32, 40, 48, 56, 64, 72]),
(20, [1, 9, 17, 25, 33, 41, 49, 57, 65, 73]),
(18, [2, 10, 18, 26, 34, 42, 50, 58, 66, 74]),
(15, [3, 11, 19, 27, 35, 43, 51, 59, 67, 75]),
(15, [4, 12, 20, 28, 36, 44, 52, 60, 68, 76]),
(15, [5, 13, 21, 29, 37, 45, 53, 61, 69, 77]),
(28, [6, 14, 22, 30, 38, 46, 54, 62, 70, 78]),
(25, [7, 15, 23, 31, 39, 47, 55, 63, 71, 79]),
(23, [8, 16, 24, 32, 40, 48, 56, 64, 72, 80]),
(23, [72, 64, 56, 48, 40, 32, 24, 16, 8, 0]),
(20, [73, 65, 57, 49, 41, 33, 25, 17, 9, 1]),
],
3: [
(3, [0]),
(2, [1]),
(2, [2]),
(2, [3]),
(2, [4]),
(3, [5]),
(3, [6]),
(3, [7]),
(2, [8]),
(2, [9]),
(2, [10]),
(2, [11]),
(2, [12]),
(3, [13]),
(3, [14]),
(3, [15]),
(2, [16]),
(2, [17]),
(2, [160]),
(2, [161]),
(2, [162]),
(2, [163]),
(2, [164]),
(3, [165]),
(3, [166]),
(3, [167]),
(5, [0, 0]),
(5, [0, 8]),
(4, [1, 9]),
(3, [2, 10]),
(3, [3, 11]),
(3, [4, 12]),
(6, [5, 13]),
(5, [6, 14]),
(5, [7, 15]),
(4, [8, 16]),
(4, [9, 17]),
(3, [10, 18]),
(3, [11, 19]),
(3, [12, 20]),
(6, [13, 21]),
(5, [14, 22]),
(5, [15, 23]),
(4, [16, 24]),
(6, [0, 0, 0]),
(8, [0, 0, 0, 0]),
(9, [0, 0, 0, 0, 0]),
(11, [0, 0, 0, 0, 0, 0]),
(12, [0, 0, 0, 0, 0, 0, 0]),
(14, [0, 0, 0, 0, 0, 0, 0, 0]),
(15, [0, 0, 0, 0, 0, 0, 0, 0, 0]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
(15, [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
(15, [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]),
(15, [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]),
(17, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]),
(16, [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]),
(16, [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]),
(16, [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]),
(16, [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]),
(15, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]),
(15, [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]),
(15, [12, 12, 12, 12, 12, 12, 12, 12, 12, 12]),
(17, [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]),
(16, [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]),
(16, [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]),
(16, [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]),
(16, [17, 17, 17, 17, 17, 17, 17, 17, 17, 17]),
(16, [32, 32, 32, 32, 32, 32, 32, 32, 32, 32]),
(16, [33, 33, 33, 33, 33, 33, 33, 33, 33, 33]),
(16, [160,160,160,160,160,160,160,160,160,160]),
(16, [161,161,161,161,161,161,161,161,161,161]),
(15, [162,162,162,162,162,162,162,162,162,162]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(0, [168,168,168,168,168,168,168,168,168,168]),
(0, [169,169,169,169,169,169,169,169,169,169]),
(17, [0, 0, 0, 0, 0, 160,160,160,160,160]),
(16, [1, 1, 1, 1, 1, 161,161,161,161,161]),
(15, [2, 2, 2, 2, 2, 162,162,162,162,162]),
(15, [3, 3, 3, 3, 3, 163,163,163,163,163]),
(15, [4, 4, 4, 4, 4, 164,164,164,164,164]),
(18, [5, 5, 5, 5, 5, 165,165,165,165,165]),
(17, [6, 6, 6, 6, 6, 166,166,166,166,166]),
(17, [7, 7, 7, 7, 7, 167,167,167,167,167]),
(16, [64, 64, 64, 64, 64, 160,160,160,160,160]),
(16, [65, 65, 65, 65, 65, 161,161,161,161,161]),
(15, [66, 66, 66, 66, 66, 162,162,162,162,162]),
(15, [67, 67, 67, 67, 67, 163,163,163,163,163]),
(15, [68, 68, 68, 68, 68, 164,164,164,164,164]),
(18, [69, 69, 69, 69, 69, 165,165,165,165,165]),
(17, [70, 70, 70, 70, 70, 166,166,166,166,166]),
(17, [71, 71, 71, 71, 71, 167,167,167,167,167]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 4]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 1, 2]),
(17, [0, 0, 0, 0, 0, 0, 0, 1, 2, 3]),
(17, [0, 0, 0, 0, 0, 0, 1, 2, 3, 4]),
(18, [0, 0, 0, 0, 0, 1, 2, 3, 4, 5]),
(18, [0, 0, 0, 0, 1, 2, 3, 4, 5, 6]),
(18, [0, 0, 0, 1, 2, 3, 4, 5, 6, 7]),
(18, [0, 0, 1, 2, 3, 4, 5, 6, 7, 8]),
(18, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
(17, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
(17, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
(17, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
(18, [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
(18, [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
(18, [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
(17, [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
(17, [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]),
(17, [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]),
(17, [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),
(17, [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
(18, [12, 13, 14, 15, 16, 17, 18, 19, 20, 21]),
(21, [0, 8, 16, 24, 32, 40, 48, 56, 64, 72]),
(18, [1, 9, 17, 25, 33, 41, 49, 57, 65, 73]),
(15, [2, 10, 18, 26, 34, 42, 50, 58, 66, 74]),
(15, [3, 11, 19, 27, 35, 43, 51, 59, 67, 75]),
(15, [4, 12, 20, 28, 36, 44, 52, 60, 68, 76]),
(28, [5, 13, 21, 29, 37, 45, 53, 61, 69, 77]),
(25, [6, 14, 22, 30, 38, 46, 54, 62, 70, 78]),
(23, [7, 15, 23, 31, 39, 47, 55, 63, 71, 79]),
(20, [8, 16, 24, 32, 40, 48, 56, 64, 72, 80]),
(21, [72, 64, 56, 48, 40, 32, 24, 16, 8, 0]),
(18, [73, 65, 57, 49, 41, 33, 25, 17, 9, 1]),
],
4: [
(3, [0]),
(2, [1]),
(2, [2]),
(2, [3]),
(3, [4]),
(3, [5]),
(3, [6]),
(3, [7]),
(2, [8]),
(2, [9]),
(2, [10]),
(2, [11]),
(3, [12]),
(3, [13]),
(3, [14]),
(3, [15]),
(2, [16]),
(2, [17]),
(2, [160]),
(2, [161]),
(2, [162]),
(2, [163]),
(3, [164]),
(3, [165]),
(3, [166]),
(3, [167]),
(5, [0, 0]),
(5, [0, 8]),
(4, [1, 9]),
(4, [2, 10]),
(4, [3, 11]),
(6, [4, 12]),
(6, [5, 13]),
(5, [6, 14]),
(5, [7, 15]),
(4, [8, 16]),
(4, [9, 17]),
(4, [10, 18]),
(4, [11, 19]),
(6, [12, 20]),
(6, [13, 21]),
(5, [14, 22]),
(5, [15, 23]),
(4, [16, 24]),
(6, [0, 0, 0]),
(8, [0, 0, 0, 0]),
(9, [0, 0, 0, 0, 0]),
(11, [0, 0, 0, 0, 0, 0]),
(12, [0, 0, 0, 0, 0, 0, 0]),
(14, [0, 0, 0, 0, 0, 0, 0, 0]),
(15, [0, 0, 0, 0, 0, 0, 0, 0, 0]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
(16, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]),
(16, [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
(16, [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]),
(17, [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]),
(17, [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]),
(16, [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]),
(16, [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]),
(16, [8, 8, 8, 8, 8, 8, 8, 8, 8, 8]),
(16, [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]),
(16, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]),
(16, [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]),
(17, [12, 12, 12, 12, 12, 12, 12, 12, 12, 12]),
(17, [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]),
(16, [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]),
(16, [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]),
(16, [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]),
(16, [17, 17, 17, 17, 17, 17, 17, 17, 17, 17]),
(16, [32, 32, 32, 32, 32, 32, 32, 32, 32, 32]),
(16, [33, 33, 33, 33, 33, 33, 33, 33, 33, 33]),
(16, [160,160,160,160,160,160,160,160,160,160]),
(16, [161,161,161,161,161,161,161,161,161,161]),
(16, [162,162,162,162,162,162,162,162,162,162]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(16, [167,167,167,167,167,167,167,167,167,167]),
(1, [168,168,168,168,168,168,168,168,168,168]),
(1, [169,169,169,169,169,169,169,169,169,169]),
(17, [0, 0, 0, 0, 0, 160,160,160,160,160]),
(16, [1, 1, 1, 1, 1, 161,161,161,161,161]),
(16, [2, 2, 2, 2, 2, 162,162,162,162,162]),
(16, [3, 3, 3, 3, 3, 163,163,163,163,163]),
(18, [4, 4, 4, 4, 4, 164,164,164,164,164]),
(18, [5, 5, 5, 5, 5, 165,165,165,165,165]),
(17, [6, 6, 6, 6, 6, 166,166,166,166,166]),
(17, [7, 7, 7, 7, 7, 167,167,167,167,167]),
(16, [64, 64, 64, 64, 64, 160,160,160,160,160]),
(16, [65, 65, 65, 65, 65, 161,161,161,161,161]),
(16, [66, 66, 66, 66, 66, 162,162,162,162,162]),
(16, [67, 67, 67, 67, 67, 163,163,163,163,163]),
(18, [68, 68, 68, 68, 68, 164,164,164,164,164]),
(18, [69, 69, 69, 69, 69, 165,165,165,165,165]),
(17, [70, 70, 70, 70, 70, 166,166,166,166,166]),
(17, [71, 71, 71, 71, 71, 167,167,167,167,167]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]),
(18, [0, 0, 0, 0, 0, 0, 0, 0, 0, 4]),
(17, [0, 0, 0, 0, 0, 0, 0, 0, 1, 2]),
(17, [0, 0, 0, 0, 0, 0, 0, 1, 2, 3]),
(18, [0, 0, 0, 0, 0, 0, 1, 2, 3, 4]),
(18, [0, 0, 0, 0, 0, 1, 2, 3, 4, 5]),
(18, [0, 0, 0, 0, 1, 2, 3, 4, 5, 6]),
(18, [0, 0, 0, 1, 2, 3, 4, 5, 6, 7]),
(18, [0, 0, 1, 2, 3, 4, 5, 6, 7, 8]),
(18, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
(17, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
(17, [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
(18, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),
(18, [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
(18, [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
(18, [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
(17, [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
(17, [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]),
(17, [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]),
(17, [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),
(18, [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]),
(18, [12, 13, 14, 15, 16, 17, 18, 19, 20, 21]),
(19, [0, 8, 16, 24, 32, 40, 48, 56, 64, 72]),
(16, [1, 9, 17, 25, 33, 41, 49, 57, 65, 73]),
(16, [2, 10, 18, 26, 34, 42, 50, 58, 66, 74]),
(16, [3, 11, 19, 27, 35, 43, 51, 59, 67, 75]),
(28, [4, 12, 20, 28, 36, 44, 52, 60, 68, 76]),
(26, [5, 13, 21, 29, 37, 45, 53, 61, 69, 77]),
(23, [6, 14, 22, 30, 38, 46, 54, 62, 70, 78]),
(21, [7, 15, 23, 31, 39, 47, 55, 63, 71, 79]),
(18, [8, 16, 24, 32, 40, 48, 56, 64, 72, 80]),
(19, [72, 64, 56, 48, 40, 32, 24, 16, 8, 0]),
(16, [73, 65, 57, 49, 41, 33, 25, 17, 9, 1]),
]
}
def main(args):
for scx, tests in TESTS.items():
# if scx != 0: continue
for test in tests:
testcase(scx, test[0], test[1])
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment