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 hidden or 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