From 307213ef459903f5156908ca3198bc20b3571404 Mon Sep 17 00:00:00 2001 From: PJ Date: Mon, 1 Jun 2026 16:09:02 +0530 Subject: [PATCH] test(spec): add Go math/rand/v2 PCG oracle and golden fixture --- internal/_oracle/main.go | 122 ++ pkg/spec/test/fixtures/pcg-golden.json | 1512 ++++++++++++++++++++++++ 2 files changed, 1634 insertions(+) create mode 100644 internal/_oracle/main.go create mode 100644 pkg/spec/test/fixtures/pcg-golden.json diff --git a/internal/_oracle/main.go b/internal/_oracle/main.go new file mode 100644 index 0000000..dafd728 --- /dev/null +++ b/internal/_oracle/main.go @@ -0,0 +1,122 @@ +//go:build ignore + +// Oracle generator for the bit-exact PCG port. +// +// Emits the golden fixture consumed by pkg/spec/test/pcg.test.ts. The fixture +// pins the exact draw sequences produced by Go's math/rand/v2 over a PCG source +// so the TypeScript port (pkg/spec/src/pcg.ts) can be asserted bit-for-bit. +// +// Run from the spec package to regenerate: +// +// go run ./internal/_oracle > pkg/spec/test/fixtures/pcg-golden.json +package main + +import ( + "encoding/json" + "math/rand/v2" + "os" +) + +// seed carries the PCG seed pair. The values are emitted as decimal strings so +// JavaScript parses them into BigInt without the float precision loss it would +// suffer on values above 2^53. +type seed struct { + Hi string `json:"hi"` + Lo string `json:"lo"` +} + +type caseEntry struct { + Seed seed `json:"seed"` + Uint64 []string `json:"uint64"` + Float64 []float64 `json:"float64"` + IntN map[string][]int `json:"intN"` +} + +const drawCount = 40 + +var seeds = [][2]uint64{ + {1718000000000000000, 0}, + {42, 0}, + {0, 0}, + {1, 2}, + {18446744073709551615, 18446744073709551615}, +} + +var intNValues = []int{2, 3, 7, 15, 1000} + +func main() { + cases := make([]caseEntry, 0, len(seeds)) + + for _, pair := range seeds { + hi, lo := pair[0], pair[1] + entry := caseEntry{ + Seed: seed{Hi: formatUint64(hi), Lo: formatUint64(lo)}, + IntN: map[string][]int{}, + } + + r := rand.New(rand.NewPCG(hi, lo)) + for i := 0; i < drawCount; i++ { + entry.Uint64 = append(entry.Uint64, formatUint64(r.Uint64())) + } + + r = rand.New(rand.NewPCG(hi, lo)) + for i := 0; i < drawCount; i++ { + entry.Float64 = append(entry.Float64, r.Float64()) + } + + for _, n := range intNValues { + r = rand.New(rand.NewPCG(hi, lo)) + draws := make([]int, 0, drawCount) + for i := 0; i < drawCount; i++ { + draws = append(draws, r.IntN(n)) + } + entry.IntN[itoa(n)] = draws + } + + cases = append(cases, entry) + } + + encoder := json.NewEncoder(os.Stdout) + encoder.SetIndent("", " ") + if err := encoder.Encode(cases); err != nil { + panic(err) + } +} + +// formatUint64 renders a uint64 as a decimal string so JavaScript can parse it +// into a BigInt without precision loss. +func formatUint64(v uint64) string { + if v == 0 { + return "0" + } + var buf [20]byte + i := len(buf) + for v > 0 { + i-- + buf[i] = byte('0' + v%10) + v /= 10 + } + return string(buf[i:]) +} + +func itoa(n int) string { + if n == 0 { + return "0" + } + neg := n < 0 + if neg { + n = -n + } + var buf [20]byte + i := len(buf) + for n > 0 { + i-- + buf[i] = byte('0' + n%10) + n /= 10 + } + if neg { + i-- + buf[i] = '-' + } + return string(buf[i:]) +} diff --git a/pkg/spec/test/fixtures/pcg-golden.json b/pkg/spec/test/fixtures/pcg-golden.json new file mode 100644 index 0000000..ca3aa73 --- /dev/null +++ b/pkg/spec/test/fixtures/pcg-golden.json @@ -0,0 +1,1512 @@ +[ + { + "seed": { + "hi": "1718000000000000000", + "lo": "0" + }, + "uint64": [ + "17348611194921198332", + "10040944959238080856", + "8546612062296762771", + "11911064850236528314", + "7060439982049491705", + "4727496195952149700", + "632791401341060692", + "16695182092268216511", + "10991305199402290007", + "14802327373375977896", + "11383701653022170987", + "2532857567118737717", + "4864384924974856626", + "9678998534922072645", + "1249089104885130196", + "10172862666788984732", + "15454036291116160617", + "11781475151410497333", + "17706524219203127367", + "3288130660272180635", + "16195642289273821815", + "5180832297649062942", + "884936370795154983", + "12713420131221904441", + "1441470040918610617", + "18321196531671865052", + "1284049813417881835", + "12027944458602364836", + "12785102827252194295", + "2391210769595888371", + "7742723220204507445", + "9399304330579474949", + "7009950411738525457", + "233209627215066062", + "2274803216116889585", + "16628428634611566461", + "16602072773870075273", + "13307501757050341346", + "9479879966388146928", + "9350508562274355147" + ], + "float64": [ + 0.08275938712640096, + 0.7688282740021277, + 0.8645494100958778, + 0.39384445359856746, + 0.8663032055372631, + 0.8575125573917366, + 0.253958355366374, + 0.5375559145768632, + 0.28001030586197373, + 0.38846679612270396, + 0.8447680648668955, + 0.20367891112804293, + 0.05521443466004983, + 0.5847028783642335, + 0.6767484051898642, + 0.414635901880263, + 0.7426913789920039, + 0.006497714508646113, + 0.819087424228436, + 0.05583670100934357, + 0.0774968144676923, + 0.1879303571641946, + 0.24767341850060098, + 0.47317514155373097, + 0.0353228735208041, + 0.06142281446656339, + 0.5581667622168686, + 0.3700876852908448, + 0.4315531015571413, + 0.47772531369954974, + 0.6149592370880216, + 0.5324083268276928, + 0.2608348592707178, + 0.8914697698415865, + 0.5538907024326801, + 0.12643334820152996, + 0.2003450052997532, + 0.42948509170150495, + 0.47810093668758036, + 0.1149897791658473 + ], + "intN": { + "1000": [ + 940, + 544, + 463, + 645, + 382, + 256, + 34, + 905, + 595, + 802, + 617, + 137, + 263, + 524, + 67, + 551, + 837, + 638, + 959, + 178, + 877, + 280, + 47, + 689, + 78, + 993, + 69, + 652, + 693, + 129, + 419, + 509, + 380, + 12, + 123, + 901, + 900, + 721, + 513, + 506 + ], + "15": [ + 14, + 8, + 6, + 9, + 5, + 3, + 0, + 13, + 8, + 12, + 9, + 2, + 3, + 7, + 1, + 8, + 12, + 9, + 14, + 2, + 13, + 4, + 0, + 10, + 1, + 14, + 1, + 9, + 10, + 1, + 6, + 7, + 5, + 0, + 1, + 13, + 13, + 10, + 7, + 7 + ], + "2": [ + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1 + ], + "3": [ + 2, + 1, + 1, + 1, + 1, + 0, + 0, + 2, + 1, + 2, + 1, + 0, + 0, + 1, + 0, + 1, + 2, + 1, + 2, + 0, + 2, + 0, + 0, + 2, + 0, + 2, + 0, + 1, + 2, + 0, + 1, + 1, + 1, + 0, + 0, + 2, + 2, + 2, + 1, + 1 + ], + "7": [ + 6, + 3, + 3, + 4, + 2, + 1, + 0, + 6, + 4, + 5, + 4, + 0, + 1, + 3, + 0, + 3, + 5, + 4, + 6, + 1, + 6, + 1, + 0, + 4, + 0, + 6, + 0, + 4, + 4, + 0, + 2, + 3, + 2, + 0, + 0, + 6, + 6, + 5, + 3, + 3 + ] + } + }, + { + "seed": { + "hi": "42", + "lo": "0" + }, + "uint64": [ + "15818923871262189983", + "17722066050711855076", + "2514175219165311687", + "1632697813927551345", + "3420513755306226561", + "17826860435361894773", + "17132589681425434452", + "6708534997569091786", + "11943912673905232833", + "17729159255747996613", + "9861653340906094072", + "11253915131898209768", + "4166815047917170816", + "4522597549831867061", + "12690056282563164493", + "11005962917559305066", + "9253944782480308990", + "4100344308106584178", + "9087748972365011641", + "11140840327820824429", + "11082442715008555486", + "13655427885467798722", + "10053642218006668", + "4790098033610881453", + "16524165261873775022", + "11534003919357636538", + "11447319655187096435", + "11423782560467231634", + "6162267594286981940", + "10979719413435778507", + "9396635032880542089", + "16183675812321746121", + "11884351765493195295", + "7609191463528820950", + "12761729699876744058", + "9754348074297120360", + "4407452443053730173", + "5870077580694772103", + "1339966861964530071", + "12700187420381780895" + ], + "float64": [ + 0.25335066677989804, + 0.5445773428118597, + 0.1295216259328179, + 0.2658705277527088, + 0.7533127188031444, + 0.17909121180177456, + 0.09955357738929616, + 0.7970015804874262, + 0.04068546818086116, + 0.33208129776300466, + 0.8634599945543746, + 0.4355696610847959, + 0.6094005552217965, + 0.1091930936657578, + 0.8792668690746638, + 0.9073439245004071, + 0.3942566119474973, + 0.22966597506366626, + 0.9428151133241364, + 0.8817445619156224, + 0.39830712918302047, + 0.057044955476520665, + 0.11617850717745304, + 0.8077127126487561, + 0.55087364434444, + 0.5316717387645362, + 0.9077851432822243, + 0.29464269420451417, + 0.14913670788801037, + 0.9937296720219647, + 0.23605675033427176, + 0.7489509908836222, + 0.4280962795174367, + 0.7899561590889117, + 0.8366146845850004, + 0.9501822292720137, + 0.32551822186478285, + 0.7095286423271298, + 0.7662062387740204, + 0.004049116262525021 + ], + "intN": { + "1000": [ + 857, + 960, + 136, + 88, + 185, + 966, + 928, + 363, + 647, + 961, + 534, + 610, + 225, + 245, + 687, + 596, + 501, + 222, + 492, + 603, + 600, + 740, + 0, + 259, + 895, + 625, + 620, + 619, + 334, + 595, + 509, + 877, + 644, + 412, + 691, + 528, + 238, + 318, + 72, + 688 + ], + "15": [ + 12, + 14, + 2, + 1, + 2, + 14, + 13, + 5, + 9, + 14, + 8, + 9, + 3, + 3, + 10, + 8, + 7, + 3, + 7, + 9, + 9, + 11, + 0, + 3, + 13, + 9, + 9, + 9, + 5, + 8, + 7, + 13, + 9, + 6, + 10, + 7, + 3, + 4, + 1, + 10 + ], + "2": [ + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ], + "3": [ + 2, + 2, + 0, + 0, + 0, + 2, + 2, + 1, + 1, + 2, + 1, + 1, + 0, + 0, + 2, + 1, + 1, + 0, + 1, + 1, + 1, + 2, + 0, + 0, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 2, + 1, + 0, + 0, + 0, + 2 + ], + "7": [ + 6, + 6, + 0, + 0, + 1, + 6, + 6, + 2, + 4, + 6, + 3, + 4, + 1, + 1, + 4, + 4, + 3, + 1, + 3, + 4, + 4, + 5, + 0, + 1, + 6, + 4, + 4, + 4, + 2, + 4, + 3, + 6, + 4, + 2, + 4, + 3, + 1, + 2, + 0, + 4 + ] + } + }, + { + "seed": { + "hi": "0", + "lo": "0" + }, + "uint64": [ + "4107282207882862730", + "12464933722704884221", + "6335497120186221275", + "8128828598453185623", + "7371889741448783355", + "1418823048812169170", + "13446722647129416609", + "8878188716898717410", + "13708822528903384745", + "16582119225744604457", + "6951088302835677065", + "4580399714873389198", + "4662281982647059055", + "427459239689272317", + "13773885170329372921", + "9068706895795695628", + "10649950287751359566", + "15304463719903092841", + "2992830529688691246", + "2656865971666195087", + "5315926386399609871", + "5962616490126614837", + "14669413009525085053", + "15137080102080446231", + "5390616415851564044", + "9584934278684878893", + "16289716273760509342", + "11298720576883687201", + "17155501937552697760", + "3945808130719801762", + "514692979842194301", + "12255250582248869772", + "14704735570187722263", + "3175139522179632522", + "3522950458692549131", + "16148541362668152345", + "14248069443876374819", + "16432995152846430396", + "8267525728330725005", + "8988896498726235416" + ], + "float64": [ + 0.9999275824802834, + 0.8856419373528862, + 0.38147752771154886, + 0.4812673234167829, + 0.44417259544314847, + 0.5210016660132573, + 0.8861088591612437, + 0.6769530468231688, + 0.9850412088603281, + 0.98505615011337, + 0.7258280010771482, + 0.5265225438938772, + 0.6172804429789503, + 0.45750899917936716, + 0.20844546426658817, + 0.8287199289311515, + 0.3820020574870655, + 0.1368001376786313, + 0.2709362861488154, + 0.9713775086898567, + 0.18638713932534923, + 0.9834114348205164, + 0.6320080910560218, + 0.5534854925026335, + 0.47864618007440773, + 0.14147257148693415, + 0.5218071740027204, + 0.40997332623007676, + 0.6433250072489507, + 0.0727037478273369, + 0.14239968337356823, + 0.6061368963550975, + 0.5536001046938875, + 0.5113003921145929, + 0.12607138542245033, + 0.8482434945883056, + 0.8534753049700935, + 0.42895822437005604, + 0.8797420273637769, + 0.9679858858320669 + ], + "intN": { + "1000": [ + 222, + 675, + 343, + 440, + 399, + 76, + 728, + 481, + 743, + 898, + 376, + 248, + 252, + 23, + 746, + 491, + 577, + 829, + 162, + 144, + 288, + 323, + 795, + 820, + 292, + 519, + 883, + 612, + 930, + 213, + 27, + 664, + 797, + 172, + 190, + 875, + 772, + 890, + 448, + 487 + ], + "15": [ + 3, + 10, + 5, + 6, + 5, + 1, + 10, + 7, + 11, + 13, + 5, + 3, + 3, + 0, + 11, + 7, + 8, + 12, + 2, + 2, + 4, + 4, + 11, + 12, + 4, + 7, + 13, + 9, + 13, + 3, + 0, + 9, + 11, + 2, + 2, + 13, + 11, + 13, + 6, + 7 + ], + "2": [ + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0 + ], + "3": [ + 0, + 2, + 1, + 1, + 1, + 0, + 2, + 1, + 2, + 2, + 1, + 0, + 0, + 0, + 2, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 2, + 2, + 0, + 1, + 2, + 1, + 2, + 0, + 0, + 1, + 2, + 0, + 0, + 2, + 2, + 2, + 1, + 1 + ], + "7": [ + 1, + 4, + 2, + 3, + 2, + 0, + 5, + 3, + 5, + 6, + 2, + 1, + 1, + 0, + 5, + 3, + 4, + 5, + 1, + 1, + 2, + 2, + 5, + 5, + 2, + 3, + 6, + 4, + 6, + 1, + 0, + 4, + 5, + 1, + 1, + 6, + 5, + 6, + 3, + 3 + ] + } + }, + { + "seed": { + "hi": "1", + "lo": "2" + }, + "uint64": [ + "14192431797130687760", + "11371241257079532652", + "14470142590855381128", + "14694613213362438554", + "4321634407747778896", + "760102831717374652", + "9221744211007427193", + "8289669384274456462", + "2449715415482412441", + "3389241988064777392", + "12210202232702069999", + "8204908297817606218", + "17358349022401942459", + "2240328155279531677", + "7311121042813227358", + "14454429957748299131", + "13481244625344276711", + "9381769212557126946", + "1350674201389090105", + "6093522341581845358", + "897456374646289561", + "11814882063598695543", + "3824056318896229933", + "398870565032109638", + "6158782141916471494", + "13037077871211764336", + "13617661536098221011", + "15181698440823082209", + "17681833180131704924", + "8499734460532927466", + "10917103977888096435", + "12419507493515068174", + "9261752443204402422", + "137166597355566241", + "11349393104106307790", + "17472900827608112440", + "12896061982357793967", + "1873294050595685917", + "6999251097555031736", + "16665206720432262420" + ], + "float64": [ + 0.6764556596678251, + 0.4613862177205994, + 0.5085473976760264, + 0.4297927436037299, + 0.797802349388613, + 0.3883664855410056, + 0.8192750264193612, + 0.3381816951746133, + 0.9730458047755973, + 0.281449117585586, + 0.6047654075331631, + 0.9278107175107462, + 0.16387541502137226, + 0.7263900707339023, + 0.6974917552729882, + 0.7640946923790318, + 0.7188183661358182, + 0.5856191500346635, + 0.9549597149363428, + 0.5168804691962643, + 0.6376730728931249, + 0.7154100238054885, + 0.5555372701914557, + 0.2835285143893962, + 0.7621737605905075, + 0.40640264504220447, + 0.8641378928622266, + 0.5071161917625454, + 0.07783141632718182, + 0.6600901283539973, + 0.04201984782505119, + 0.8423173805095716, + 0.26108108238250227, + 0.22855145936377508, + 0.035753970079918096, + 0.8816805802479513, + 0.7504939806762162, + 0.9774186864653448, + 0.0729723638493942, + 0.209621116179195 + ], + "intN": { + "1000": [ + 769, + 616, + 784, + 796, + 234, + 41, + 499, + 449, + 132, + 183, + 661, + 444, + 940, + 121, + 396, + 783, + 730, + 508, + 73, + 330, + 48, + 640, + 207, + 21, + 333, + 706, + 738, + 823, + 958, + 460, + 591, + 673, + 502, + 7, + 615, + 947, + 699, + 101, + 379, + 903 + ], + "15": [ + 11, + 9, + 11, + 11, + 3, + 0, + 7, + 6, + 1, + 2, + 9, + 6, + 14, + 1, + 5, + 11, + 10, + 7, + 1, + 4, + 0, + 9, + 3, + 0, + 5, + 10, + 11, + 12, + 14, + 6, + 8, + 10, + 7, + 0, + 9, + 14, + 10, + 1, + 5, + 13 + ], + "2": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0 + ], + "3": [ + 2, + 1, + 2, + 2, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 2, + 0, + 1, + 2, + 2, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 2, + 2, + 2, + 2, + 1, + 1, + 2, + 1, + 0, + 1, + 2, + 2, + 0, + 1, + 2 + ], + "7": [ + 5, + 4, + 5, + 5, + 1, + 0, + 3, + 3, + 0, + 1, + 4, + 3, + 6, + 0, + 2, + 5, + 5, + 3, + 0, + 2, + 0, + 4, + 1, + 0, + 2, + 4, + 5, + 5, + 6, + 3, + 4, + 4, + 3, + 0, + 4, + 6, + 4, + 0, + 2, + 6 + ] + } + }, + { + "seed": { + "hi": "18446744073709551615", + "lo": "18446744073709551615" + }, + "uint64": [ + "12052289606655298394", + "17828373617109055061", + "4446257040818138278", + "2950454318280042937", + "13448990765710037875", + "9047611384071292806", + "6815444741608200402", + "16851917226913739706", + "14573110404792781661", + "6345753343264978949", + "11952216291580125278", + "14785772924590964546", + "6669801752484504849", + "17628458195611004436", + "16845938295979325689", + "5421602792290398873", + "18177540326229036216", + "15200904872266137472", + "1228197805364656477", + "9618357061219300901", + "14441611119321898527", + "12397752575825322936", + "15064326886444374105", + "12578040094139254627", + "13980117273335737392", + "3124103884428408787", + "4966061901406379704", + "2941679919340807695", + "15339986315800900532", + "5123378954928494146", + "4585411320310324729", + "1556952170602577307", + "4695655734189378079", + "11831436482741387985", + "13864755018169153859", + "7567464165522311526", + "10652649354298538703", + "17321832326605694883", + "13684450285717229986", + "13981911772325785534" + ], + "float64": [ + 0.07294207591835833, + 0.34708813341576195, + 0.6336940118011583, + 0.5662317259223563, + 0.1379206062398296, + 0.48664764566295626, + 0.666367519387473, + 0.9386514396952557, + 0.9402711805381433, + 0.5201470284844169, + 0.9625722212158612, + 0.550553776012727, + 0.49674752935166755, + 0.15201774093788112, + 0.2748567610922513, + 0.9188250372840968, + 0.11238012317553281, + 0.6394584326589978, + 0.35734823099282276, + 0.8521468431624198, + 0.34091773538506576, + 0.4270363287115435, + 0.4762559810340107, + 0.44297171717719797, + 0.1048083817198684, + 0.8452063813308491, + 0.34362646551468057, + 0.5920777529638047, + 0.08060052369875459, + 0.8093279641586337, + 0.08292251853612165, + 0.8564148043096113, + 0.32251118101914134, + 0.5533197529567478, + 0.2970251958575222, + 0.15729545886669594, + 0.6816586400544454, + 0.10970776939869997, + 0.2791786541570682, + 0.3040377913616721 + ], + "intN": { + "1000": [ + 653, + 966, + 241, + 159, + 729, + 490, + 369, + 913, + 790, + 344, + 647, + 801, + 361, + 955, + 913, + 293, + 985, + 824, + 66, + 521, + 782, + 672, + 816, + 681, + 757, + 169, + 269, + 159, + 831, + 277, + 248, + 84, + 254, + 641, + 751, + 410, + 577, + 939, + 741, + 757 + ], + "15": [ + 9, + 14, + 3, + 2, + 10, + 7, + 5, + 13, + 11, + 5, + 9, + 12, + 5, + 14, + 13, + 4, + 14, + 12, + 0, + 7, + 11, + 10, + 12, + 10, + 11, + 2, + 4, + 2, + 12, + 4, + 3, + 1, + 3, + 9, + 11, + 6, + 8, + 14, + 11, + 11 + ], + "2": [ + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0 + ], + "3": [ + 1, + 2, + 0, + 0, + 2, + 1, + 1, + 2, + 2, + 1, + 1, + 2, + 1, + 2, + 2, + 0, + 2, + 2, + 0, + 1, + 2, + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 1, + 2, + 1, + 1, + 2, + 2, + 2 + ], + "7": [ + 4, + 6, + 1, + 1, + 5, + 3, + 2, + 6, + 5, + 2, + 4, + 5, + 2, + 6, + 6, + 2, + 6, + 5, + 0, + 3, + 5, + 4, + 5, + 4, + 5, + 1, + 1, + 1, + 5, + 1, + 1, + 0, + 1, + 4, + 5, + 2, + 4, + 6, + 5, + 5 + ] + } + } +]