Created
October 27, 2016 16:57
-
-
Save binji/403b4de6e4d4c3b65677e5bce8502f4e to your computer and use it in GitHub Desktop.
gameboy mode3 sprite timing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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