0000: 66 72 6f 6d 20 5f 5f 66 75 74 75 72 65 5f 5f 20 from __future__
0010: 69 6d 70 6f 72 74 20 70 72 69 6e 74 5f 66 75 6e import print_fun
0020: 63 74 69 6f 6e 2c 20 75 6e 69 63 6f 64 65 5f 6c ction, unicode_l
0030: 69 74 65 72 61 6c 73 0a 0a 66 72 6f 6d 20 73 70 iterals..from sp
0040: 61 63 65 6d 61 70 20 69 6d 70 6f 72 74 20 53 70 acemap import Sp
0050: 61 63 65 4d 61 70 0a 0a 64 65 66 20 74 65 73 74 aceMap..def test
0060: 28 29 3a 0a 09 64 65 66 20 63 68 65 63 6b 28 64 ():..def check(d
0070: 65 73 63 2c 20 63 6f 72 72 65 63 74 2c 20 72 65 esc, correct, re
0080: 73 75 6c 74 29 3a 0a 09 09 69 66 20 63 6f 72 72 sult):...if corr
0090: 65 63 74 20 3d 3d 20 72 65 73 75 6c 74 3a 0a 09 ect == result:..
00a0: 09 09 70 72 69 6e 74 28 27 50 41 53 53 45 44 3a ..print('PASSED:
00b0: 27 2c 20 64 65 73 63 2c 20 27 3d 3d 27 20 2c 20 ', desc, '==' ,
00c0: 72 65 73 75 6c 74 2c 20 27 3d 3d 27 2c 20 63 6f result, '==', co
00d0: 72 72 65 63 74 29 0a 09 09 65 6c 73 65 3a 0a 09 rrect)...else:..
00e0: 09 09 70 72 69 6e 74 28 27 46 41 49 4c 45 44 3a ..print('FAILED:
00f0: 27 2c 20 64 65 73 63 2c 20 27 3d 3d 27 20 2c 20 ', desc, '==' ,
0100: 72 65 73 75 6c 74 2c 20 27 21 3d 27 2c 20 63 6f result, '!=', co
0110: 72 72 65 63 74 29 0a 0a 09 63 68 65 63 6b 28 27 rrect)...check('
0120: 5b 34 3a 38 29 20 2d 20 5b 30 3a 32 29 2c 5b 33 [4:8) - [0:2),[3
0130: 3a 35 29 27 2c 20 53 70 61 63 65 4d 61 70 28 7b :5)', SpaceMap({
0140: 35 3a 38 7d 29 2c 20 53 70 61 63 65 4d 61 70 28 5:8}), SpaceMap(
0150: 7b 34 3a 38 7d 29 20 2d 20 53 70 61 63 65 4d 61 {4:8}) - SpaceMa
0160: 70 28 7b 30 3a 32 2c 20 33 3a 35 7d 29 29 0a 09 p({0:2, 3:5}))..
0170: 63 68 65 63 6b 28 27 5b 34 3a 38 29 2c 5b 38 3a check('[4:8),[8:
0180: 39 30 29 27 2c 20 53 70 61 63 65 4d 61 70 28 7b 90)', SpaceMap({
0190: 34 3a 39 30 7d 29 2c 20 53 70 61 63 65 4d 61 70 4:90}), SpaceMap
01a0: 28 7b 34 3a 38 2c 20 38 3a 39 30 7d 29 29 0a 09 ({4:8, 8:90}))..
01b0: 63 68 65 63 6b 28 27 5b 34 3a 38 29 2c 5b 38 30 check('[4:8),[80
01c0: 3a 39 30 29 20 2d 20 5b 30 3a 32 29 27 2c 20 53 :90) - [0:2)', S
01d0: 70 61 63 65 4d 61 70 28 7b 34 3a 38 2c 20 38 30 paceMap({4:8, 80
01e0: 3a 39 30 7d 29 2c 20 53 70 61 63 65 4d 61 70 28 :90}), SpaceMap(
01f0: 7b 34 3a 38 2c 20 38 30 3a 39 30 7d 29 20 2d 20 {4:8, 80:90}) -
0200: 53 70 61 63 65 4d 61 70 28 7b 30 3a 32 7d 29 29 SpaceMap({0:2}))
0210: 0a 09 63 68 65 63 6b 28 27 5b 34 3a 38 29 2c 5b ..check('[4:8),[
0220: 38 30 3a 39 30 29 20 2d 20 5b 30 3a 31 30 29 27 80:90) - [0:10)'
0230: 2c 20 53 70 61 63 65 4d 61 70 28 7b 38 30 3a 39 , SpaceMap({80:9
0240: 30 7d 29 2c 20 53 70 61 63 65 4d 61 70 28 7b 34 0}), SpaceMap({4
0250: 3a 38 2c 20 38 30 3a 39 30 7d 29 20 2d 20 53 70 :8, 80:90}) - Sp
0260: 61 63 65 4d 61 70 28 7b 30 3a 31 30 7d 29 29 0a aceMap({0:10})).
0270: 09 63 68 65 63 6b 28 27 5b 34 3a 38 29 2c 5b 38 .check('[4:8),[8
0280: 30 3a 39 30 29 20 2d 20 5b 31 30 3a 32 30 29 27 0:90) - [10:20)'
0290: 2c 20 53 70 61 63 65 4d 61 70 28 7b 34 3a 38 2c , SpaceMap({4:8,
02a0: 20 38 30 3a 39 30 7d 29 2c 20 53 70 61 63 65 4d 80:90}), SpaceM
02b0: 61 70 28 7b 34 3a 38 2c 20 38 30 3a 39 30 7d 29 ap({4:8, 80:90})
02c0: 20 2d 20 53 70 61 63 65 4d 61 70 28 7b 31 30 3a - SpaceMap({10:
02d0: 32 30 7d 29 29 0a 09 63 68 65 63 6b 28 27 5b 34 20}))..check('[4
02e0: 3a 38 29 2c 5b 38 30 3a 39 30 29 20 2d 20 5b 31 :8),[80:90) - [1
02f0: 30 3a 32 30 29 27 2c 20 53 70 61 63 65 4d 61 70 0:20)', SpaceMap
0300: 28 7b 34 3a 38 7d 29 2c 20 53 70 61 63 65 4d 61 ({4:8}), SpaceMa
0310: 70 28 7b 34 3a 38 2c 20 38 30 3a 39 30 7d 29 20 p({4:8, 80:90})
0320: 2d 20 53 70 61 63 65 4d 61 70 28 7b 31 30 3a 31 - SpaceMap({10:1
0330: 30 30 7d 29 29 0a 09 63 68 65 63 6b 28 27 5b 32 00}))..check('[2
0340: 3a 39 29 20 2d 20 5b 31 30 3a 31 35 29 2c 5b 32 :9) - [10:15),[2
0350: 30 3a 34 38 29 2c 5b 36 30 3a 31 30 30 29 27 2c 0:48),[60:100)',
0360: 20 53 70 61 63 65 4d 61 70 28 7b 34 38 3a 20 36 SpaceMap({48: 6
0370: 30 2c 20 32 3a 20 31 30 2c 20 31 35 3a 20 32 30 0, 2: 10, 15: 20
0380: 7d 29 2c 20 53 70 61 63 65 4d 61 70 28 7b 32 3a }), SpaceMap({2:
0390: 39 30 7d 29 20 2d 20 53 70 61 63 65 4d 61 70 28 90}) - SpaceMap(
03a0: 7b 31 30 3a 31 35 2c 20 32 30 3a 34 38 2c 20 36 {10:15, 20:48, 6
03b0: 30 3a 31 30 30 7d 29 29 0a 09 63 68 65 63 6b 28 0:100}))..check(
03c0: 27 5b 32 3a 35 29 20 61 6e 64 20 5b 31 30 3a 31 '[2:5) and [10:1
03d0: 35 29 27 2c 20 53 70 61 63 65 4d 61 70 28 7b 32 5)', SpaceMap({2
03e0: 3a 20 35 2c 20 31 30 3a 20 31 35 7d 29 2c 20 53 : 5, 10: 15}), S
03f0: 70 61 63 65 4d 61 70 28 7b 32 3a 20 35 7d 29 20 paceMap({2: 5})
0400: 61 6e 64 20 53 70 61 63 65 4d 61 70 28 7b 31 30 and SpaceMap({10
0410: 3a 20 31 35 7d 29 29 0a 09 72 65 74 75 72 6e 28 : 15}))..return(
0420: 4e 6f 6e 65 29 0a 0a 09 70 72 69 6e 74 28 53 70 None)...print(Sp
0430: 61 63 65 4d 61 70 28 7b 34 3a 38 7d 29 20 2d 20 aceMap({4:8}) -
0440: 53 70 61 63 65 4d 61 70 28 7b 30 3a 34 7d 29 29 SpaceMap({0:4}))
0450: 0a 09 70 72 69 6e 74 28 53 70 61 63 65 4d 61 70 ..print(SpaceMap
0460: 28 7b 34 3a 38 7d 29 20 2d 20 53 70 61 63 65 4d ({4:8}) - SpaceM
0470: 61 70 28 7b 30 3a 35 7d 29 29 0a 09 70 72 69 6e ap({0:5}))..prin
0480: 74 28 53 70 61 63 65 4d 61 70 28 7b 34 3a 38 7d t(SpaceMap({4:8}
0490: 29 20 2d 20 53 70 61 63 65 4d 61 70 28 7b 30 3a ) - SpaceMap({0:
04a0: 38 7d 29 29 0a 09 70 72 69 6e 74 28 53 70 61 63 8}))..print(Spac
04b0: 65 4d 61 70 28 7b 34 3a 38 7d 29 20 2d 20 53 70 eMap({4:8}) - Sp
04c0: 61 63 65 4d 61 70 28 7b 30 3a 31 30 7d 29 29 0a aceMap({0:10})).
04d0: 09 70 72 69 6e 74 28 53 70 61 63 65 4d 61 70 28 .print(SpaceMap(
04e0: 7b 34 3a 38 7d 29 20 2d 20 53 70 61 63 65 4d 61 {4:8}) - SpaceMa
04f0: 70 28 7b 34 3a 34 7d 29 29 0a 09 70 72 69 6e 74 p({4:4}))..print
0500: 28 53 70 61 63 65 4d 61 70 28 7b 34 3a 38 7d 29 (SpaceMap({4:8})
0510: 20 2d 20 53 70 61 63 65 4d 61 70 28 7b 34 3a 35 - SpaceMap({4:5
0520: 7d 29 29 0a 09 70 72 69 6e 74 28 53 70 61 63 65 }))..print(Space
0530: 4d 61 70 28 7b 34 3a 38 7d 29 20 2d 20 53 70 61 Map({4:8}) - Spa
0540: 63 65 4d 61 70 28 7b 34 3a 38 7d 29 29 0a 09 70 ceMap({4:8}))..p
0550: 72 69 6e 74 28 53 70 61 63 65 4d 61 70 28 7b 34 rint(SpaceMap({4
0560: 3a 38 7d 29 20 2d 20 53 70 61 63 65 4d 61 70 28 :8}) - SpaceMap(
0570: 7b 34 3a 31 30 7d 29 29 0a 09 70 72 69 6e 74 28 {4:10}))..print(
0580: 53 70 61 63 65 4d 61 70 28 7b 34 3a 38 7d 29 20 SpaceMap({4:8})
0590: 2d 20 53 70 61 63 65 4d 61 70 28 7b 35 3a 35 7d - SpaceMap({5:5}
05a0: 29 29 0a 09 70 72 69 6e 74 28 53 70 61 63 65 4d ))..print(SpaceM
05b0: 61 70 28 7b 34 3a 38 7d 29 20 2d 20 53 70 61 63 ap({4:8}) - Spac
05c0: 65 4d 61 70 28 7b 35 3a 38 7d 29 29 0a 09 70 72 eMap({5:8}))..pr
05d0: 69 6e 74 28 53 70 61 63 65 4d 61 70 28 7b 34 3a int(SpaceMap({4:
05e0: 38 7d 29 20 2d 20 53 70 61 63 65 4d 61 70 28 7b 8}) - SpaceMap({
05f0: 35 3a 31 30 7d 29 29 0a 09 70 72 69 6e 74 28 53 5:10}))..print(S
0600: 70 61 63 65 4d 61 70 28 7b 34 3a 38 7d 29 20 2d paceMap({4:8}) -
0610: 20 53 70 61 63 65 4d 61 70 28 7b 38 3a 38 7d 29 SpaceMap({8:8})
0620: 29 0a 09 70 72 69 6e 74 28 53 70 61 63 65 4d 61 )..print(SpaceMa
0630: 70 28 7b 34 3a 38 7d 29 20 2d 20 53 70 61 63 65 p({4:8}) - Space
0640: 4d 61 70 28 7b 38 3a 31 30 7d 29 29 0a 09 70 72 Map({8:10}))..pr
0650: 69 6e 74 28 53 70 61 63 65 4d 61 70 28 7b 34 3a int(SpaceMap({4:
0660: 38 7d 29 20 2d 20 53 70 61 63 65 4d 61 70 28 7b 8}) - SpaceMap({
0670: 31 30 3a 31 30 7d 29 29 0a 10:10})).