-
Notifications
You must be signed in to change notification settings - Fork 0
/
day04.test.ts
1096 lines (806 loc) · 21.6 KB
/
day04.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* === TYPES === */
type Passport = Record<
"ecl" | "pid" | "eyr" | "hcl" | "byr" | "iyr" | "hgt" | "cid",
string
>;
type Predicate = (val: string) => boolean;
/* === PREPARE INPUT === */
const parsePassport = (raw: string): Passport =>
Object.fromEntries(raw.split(/[\n\s]/).map((field) => field.split(":")));
export const prepareInput = ([input]: TemplateStringsArray) =>
input.split("\n\n").map(parsePassport);
/* === UTILS === */
type AllPass = <T>(...predicates: ((v: T) => boolean)[]) => (val: T) => boolean;
const allPass: AllPass = (...predicates) => (val) =>
predicates.every((f) => f(val));
const hasXDigits = (count: number) => (val: string) => val.length === count;
const inRange = (min: number, max: number) => (field: string) => {
const val = Number.parseInt(field, 10);
return min <= val && val <= max;
};
type FieldsPass = (
structure: Partial<Record<keyof Passport, Predicate>>
) => (val: Passport) => boolean;
const fieldsPass: FieldsPass = (structure) => (passport) =>
Object.entries(structure).every(
([key, predicate]) =>
predicate && predicate(passport[key as keyof Passport])
);
const REQUIRED_FIELDS = ["ecl", "pid", "eyr", "hcl", "byr", "iyr", "hgt"];
const EYE_COLORS = "amb blu brn gry grn hzl oth".split(" ");
/* === IMPLEMENTATION === */
const hasMandatoryFields = (passport: Passport): boolean => {
const keys = Object.keys(passport);
return REQUIRED_FIELDS.every((key) => keys.includes(key));
};
const isValidHeight = (hgt: string): boolean => {
const value = hgt.slice(0, -2);
const unit = hgt.slice(-2);
return (
(unit === "cm" && inRange(150, 193)(value)) ||
(unit === "in" && inRange(59, 76)(value))
);
};
type IsValidPassport = (passport: Passport) => boolean;
const isValidPassport: IsValidPassport = allPass(
hasMandatoryFields,
fieldsPass({
byr: allPass(hasXDigits(4), inRange(1920, 2002)),
iyr: allPass(hasXDigits(4), inRange(2010, 2020)),
eyr: allPass(hasXDigits(4), inRange(2020, 2030)),
hgt: isValidHeight,
hcl: (hcl) => /^#[\da-f]{6}/.test(hcl),
ecl: (ecl) => EYE_COLORS.includes(ecl),
pid: hasXDigits(9),
})
);
/* === TESTS === */
test("Day 4a - test", () => {
const validPassports = testInput.filter(hasMandatoryFields);
expect(validPassports.length).toBe(2);
});
test("Day 4a - prod", () => {
const validPassports = prodInput.filter(hasMandatoryFields);
expect(validPassports.length).toBe(190);
});
test("Day 4b - test", () => {
const invalid = prepareInput`eyr:1972 cid:100
hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
iyr:2019
hcl:#602927 eyr:1967 hgt:170cm
ecl:grn pid:012533040 byr:1946
hcl:dab227 iyr:2012
ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
hgt:59cm ecl:zzz
eyr:2038 hcl:74454a iyr:2023
pid:3556412378 byr:2007`;
expect(invalid.filter(isValidPassport).length).toBe(0);
const valid = prepareInput`pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
hcl:#623a2f
eyr:2029 ecl:blu cid:129 byr:1989
iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
hcl:#888785
hgt:164cm byr:2001 iyr:2015 cid:88
pid:545766238 ecl:hzl
eyr:2022
iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719`;
expect(valid.filter(isValidPassport).length).toBe(4);
});
test("Day 4b - prod", () => {
expect(prodInput.filter(isValidPassport).length).toBe(121);
});
/* === INPUTS === */
const testInput = prepareInput`ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
byr:1937 iyr:2017 cid:147 hgt:183cm
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
hcl:#cfa07d byr:1929
hcl:#ae17e1 iyr:2013
eyr:2024
ecl:brn pid:760753108 byr:1931
hgt:179cm
hcl:#cfa07d eyr:2025 pid:166559648
iyr:2011 ecl:brn hgt:59in`;
const prodInput = prepareInput`iyr:1928 cid:150 pid:476113241 eyr:2039 hcl:a5ac0f
ecl:#25f8d2
byr:2027 hgt:190
hgt:168cm eyr:2026 ecl:hzl hcl:#fffffd cid:169 pid:920076943
byr:1929 iyr:2013
hgt:156cm ecl:brn eyr:2023
iyr:2011
hcl:#6b5442 pid:328412891 byr:1948
byr:1950 iyr:2019 eyr:2020 ecl:amb cid:279 pid:674907993 hgt:189cm hcl:#602927
byr:1976
ecl:hzl iyr:2015 hgt:178cm eyr:2022 hcl:#341e13
pid:473630095
iyr:2020 eyr:2023 ecl:blu byr:1984
hgt:163cm hcl:#866857 pid:628113926
ecl:amb
pid:312508073
hgt:70in byr:1922 iyr:2019 eyr:2030 hcl:#866857
hcl:#007d7c pid:195125455 cid:213 hgt:154cm eyr:2021 ecl:grn byr:1981
ecl:oth hgt:185cm pid:958027833 hcl:#b6652a iyr:2028 cid:171
eyr:1994
ecl:hzl byr:1982 hcl:#fffffd hgt:188cm iyr:2018 pid:039931872 cid:288 eyr:2025
cid:71 iyr:2012 byr:1950 hcl:#7d3b0c pid:803324747 eyr:2023 hgt:151cm ecl:oth
iyr:2013
ecl:grn eyr:2022
pid:053411982 byr:1946 cid:302 hcl:#60ca85
hgt:160cm
hgt:169cm eyr:2035 pid:023983645 iyr:2014 ecl:amb hcl:#c0946f byr:1975 cid:258
byr:1933 ecl:hzl
hcl:#c0946f iyr:2013 pid:655452550
hgt:170cm
eyr:2024
hgt:156
ecl:oth
cid:235
pid:609823906 iyr:2016 eyr:2021 hcl:#6b5442
byr:1932
iyr:2006
hgt:103 ecl:#2d77e5 cid:214 byr:2018 hcl:6c53a4 pid:190cm eyr:1940
ecl:grn
pid:497830156 byr:2002 eyr:2023 hgt:169cm iyr:2016 hcl:#733820
ecl:gmt hgt:75cm byr:2007 eyr:2037 iyr:2028 hcl:4591f6 cid:118
cid:94
ecl:hzl byr:1972 hcl:#7d3b0c iyr:2015 pid:219956257
eyr:2022 hgt:165cm
eyr:2022 hgt:180cm ecl:amb hcl:#c0946f
pid:543330083
iyr:2014
cid:286 byr:1989
ecl:hzl eyr:2027 iyr:2019 pid:125201586
byr:1947 cid:74 hcl:#341e13
iyr:2020 hgt:192cm ecl:oth
pid:651509606 byr:1965 eyr:2029
hcl:#b6652a
hgt:165cm eyr:2025 ecl:oth pid:844167324 byr:1950 iyr:2014 hcl:#a97842
hgt:159cm
byr:1945 hcl:#6b5442 iyr:2027
eyr:2024
cid:94 ecl:brn pid:476551927
pid:479260033 hcl:#efcc98 iyr:2018 ecl:grn
byr:1993 cid:92 hgt:165cm
eyr:2027
iyr:2015 pid:106083602
hgt:168cm eyr:2025 ecl:gry byr:1996 cid:341
hcl:#fffffd
iyr:2010 hgt:192cm
pid:247508683 ecl:#57a15d byr:1972
hcl:#602927 eyr:2024
ecl:blu byr:1934 hcl:#888785 iyr:2019 pid:905361316 eyr:2021 hgt:150cm
hgt:184cm hcl:#cfa07d cid:335 iyr:2018 byr:1995
ecl:grn eyr:2026 pid:435090537
pid:302395756
ecl:grn hcl:z byr:2005 hgt:111 eyr:2031 cid:147
ecl:gry pid:561021264 cid:178 byr:1980 iyr:2010
eyr:2028 hcl:#7d3b0c hgt:181cm
hgt:172cm byr:1923 pid:741415636 ecl:grn eyr:2022 iyr:2013
pid:457776708
byr:1992
hcl:#b6652a hgt:157cm eyr:2024 iyr:2011
pid:177860177
ecl:blu
hgt:154cm hcl:#cfa07d iyr:2015 eyr:2022
byr:1977
pid:992814815 eyr:2028 iyr:2017 hgt:181cm hcl:#cfa07d
byr:1961 ecl:hzl
eyr:2025 hcl:#a97842
byr:1930 pid:468404395
iyr:2013 ecl:oth cid:220 hgt:170cm
cid:198
iyr:2018 hcl:#a97842 hgt:74in
pid:279483949 eyr:2029 ecl:gry byr:1931
byr:2004 iyr:2021 pid:165cm ecl:#7e7d04
hcl:#18171d
eyr:2035 hgt:61
ecl:#492a33
hgt:168cm
iyr:2018
byr:2017 cid:293
pid:1764204298 hcl:#cfa07d eyr:2022
hcl:#866857
eyr:2026
cid:193 hgt:160cm byr:1970 iyr:2011 ecl:amb pid:895650554
eyr:2022
iyr:2018
hcl:#efcc98 cid:181
byr:2029 ecl:utc hgt:188cm pid:332630362
hcl:#ceb3a1
iyr:2013 pid:592603167
cid:95 ecl:blu eyr:2022
hcl:#efcc98
iyr:2011 pid:550968343
ecl:hzl byr:1924 eyr:2022
hgt:191cm cid:120
hgt:150cm ecl:grn
hcl:8f3824 pid:735766540 eyr:2029
byr:2000 iyr:2015
hcl:z
ecl:hzl byr:2003 hgt:118 eyr:2008 iyr:2022
pid:157cm
byr:1950 ecl:blu hgt:163cm
pid:455597862 cid:302 eyr:2027
hcl:#341e13 iyr:2015
iyr:2015 ecl:oth eyr:2023 byr:1998 hcl:#ceb3a1 cid:136 pid:253146183
hgt:179cm
iyr:2018 hcl:#cfa07d cid:80
pid:347839572 byr:1946 eyr:2023 ecl:blu
hgt:163cm
iyr:1969 cid:324 eyr:1927 ecl:lzr
hcl:z
byr:2030 hgt:172cm
pid:#997235
iyr:2017 ecl:brn
hgt:165cm
pid:818623102 byr:1968 hcl:#fffffd eyr:2020
eyr:2023 byr:1966 ecl:blu
cid:295 pid:347753668
hcl:#c0946f
iyr:2010 hgt:163cm
hcl:#ceb3a1 pid:395843182 hgt:168cm eyr:2025 iyr:2014 byr:1991 ecl:gry cid:283
iyr:2011 byr:1928 pid:438089427
hgt:152cm
ecl:hzl eyr:2022 cid:254 hcl:#866857
iyr:2015
hcl:#ceb3a1
ecl:lzr eyr:2022 hgt:173cm pid:1799325911 cid:210 byr:2018
iyr:2010
pid:121142355
eyr:2020
cid:302
hgt:158cm ecl:amb
byr:1978 hcl:#623a2f
pid:110863702
hcl:#341e13 iyr:2017 byr:1942 hgt:175cm cid:277 eyr:2030
ecl:amb
hcl:#c0946f
pid:473360783 byr:1986
hgt:159cm ecl:brn
iyr:2011 eyr:2023
iyr:2015 hcl:#733820 pid:245692263
ecl:oth byr:1960 eyr:2022
hcl:b9c0fd iyr:1996 hgt:83
byr:2029 pid:#449a30
ecl:grt eyr:1925
hgt:68cm
eyr:2039 hcl:#cfa07d
pid:193cm iyr:1984
ecl:#b9ec76
eyr:2023 ecl:amb
byr:1942
iyr:2012 hcl:#b6652a hgt:156cm pid:398126488
ecl:oth hgt:150cm byr:1937 pid:927692980 iyr:2013 eyr:2023 hcl:#623a2f
eyr:2026 byr:1921 pid:297672804 hgt:172cm iyr:2011 ecl:brn
eyr:2026 cid:241
hcl:#341e13
pid:316611397 hgt:193cm
byr:1977
pid:509492550 hgt:64cm eyr:2030 hcl:#b6652a byr:1986 iyr:1922 ecl:gry
hgt:165cm cid:248 hcl:#6b5442 eyr:2026
pid:703744314
byr:1921 iyr:2020
ecl:blu
byr:2001 pid:332016728
iyr:2018 cid:89
eyr:2031 hgt:155cm ecl:zzz
hcl:#866857
byr:2023
hcl:z pid:3586415546 iyr:2022 cid:209 hgt:188in ecl:brn
ecl:grn
hgt:61in iyr:1925 byr:1984 hcl:#733820
pid:216995428 eyr:1944
byr:1969 hcl:#a97842 cid:226
iyr:2011 pid:621770561
eyr:2024 ecl:blu
hcl:#efcc98 eyr:2024
iyr:2010 ecl:hzl
pid:153620883 byr:1957
iyr:2015
cid:162 eyr:2020
pid:89806820 byr:1955
hcl:b043dd ecl:brn
hgt:162cm
hcl:2ee8db
byr:2008 iyr:2003 pid:50279629 eyr:2030 ecl:grt
pid:939011546 byr:1945
hgt:70in hcl:#cfa07d eyr:2027 ecl:grn iyr:2015
hgt:83 ecl:hzl hcl:z eyr:2026 byr:2029
cid:244 hcl:#623a2f iyr:2012 pid:527925497
byr:1957
eyr:2024 ecl:brn
hgt:179cm
byr:1928
pid:933893768 hcl:#18171d ecl:gry iyr:2016 eyr:2027
hgt:158cm iyr:2017 ecl:brn byr:1935 eyr:2020
pid:331047535 cid:345 hcl:#888785
byr:2009
ecl:#893922
iyr:2020 hcl:a59633 hgt:170in eyr:1995
pid:28540793
byr:1955 hgt:68cm
hcl:#67dac3 eyr:2031 pid:502641687 ecl:oth iyr:1922
pid:2523045951 cid:203 hgt:75cm eyr:2031 hcl:#888785
iyr:1937 byr:1988
pid:558076850 eyr:2030
hgt:192cm ecl:brn
cid:296 byr:1954
hcl:#733820 iyr:2012
cid:272 eyr:2030 pid:044961585
hcl:#602927 byr:1990 hgt:173cm ecl:gry iyr:2018
byr:1958 iyr:2019 hgt:163cm eyr:2029
pid:384542472 hcl:819959
ecl:#866be8
iyr:2027
pid:7267919678 byr:2013 hgt:161in hcl:z ecl:brn
pid:855195796 ecl:oth
eyr:2030 hgt:163cm hcl:#341e13 byr:1978
iyr:2011 cid:206
ecl:brn eyr:2029 hcl:#fffffd iyr:2018 pid:065149883 byr:1938 hgt:178cm
eyr:2024
byr:1983
ecl:gry
hgt:154cm
iyr:2019
pid:#f331f5 hcl:#7d3b0c cid:315
ecl:brn pid:131551626 iyr:2013 eyr:2022 byr:1949
hgt:155cm hcl:#18171d
cid:203 eyr:2028 iyr:2019
byr:1939
hcl:#18171d pid:091534428 hgt:175cm
byr:1921 eyr:2025 iyr:2014 pid:719127279 ecl:brn hcl:#cfa07d cid:243 hgt:176cm
byr:1976 hgt:182cm
ecl:gry pid:534666141
iyr:2019 eyr:2027 cid:197 hcl:#602927
byr:2015
pid:164cm hgt:90 eyr:2036 iyr:1947 hcl:b7b0e6 ecl:#fd96b3
eyr:2029 cid:264 pid:931433692
byr:1974 ecl:oth hcl:z hgt:67in iyr:2012
pid:179cm ecl:#00a56d
eyr:2025 hcl:eed83e iyr:1949 hgt:177in
hgt:159cm ecl:blu
pid:5642951907 iyr:2029 byr:1952
hcl:#6b5442
ecl:amb hgt:163cm
pid:811866600 byr:1952
iyr:2019 hcl:#888785
cid:250 eyr:2027
byr:1953 hgt:190cm
pid:156cm hcl:#7d3b0c eyr:2022 ecl:#1b0b35 iyr:2015
pid:709465009 byr:1971 iyr:2018 hcl:#602927 ecl:oth
cid:222 eyr:2025
hcl:#623a2f pid:583448566
byr:1999
eyr:2026 hgt:179cm
iyr:2015 ecl:gry cid:55
hgt:179cm iyr:2013 ecl:amb hcl:#95766f pid:620956072
byr:1997 eyr:2026
ecl:blu iyr:1924 pid:866797032 hgt:193cm cid:90 hcl:#fffffd eyr:1998 byr:1990
hcl:#733820 ecl:brn byr:1950 eyr:2028
hgt:155cm iyr:2017
pid:605542221
hgt:171cm iyr:2019 byr:1930
ecl:hzl
eyr:2026 hcl:#a6ef22 pid:294449839
pid:480248391
hgt:150cm eyr:2027 cid:226 hcl:#cfa07d
byr:1940 ecl:brn
iyr:2018
hcl:z ecl:#769ca0 pid:180cm
byr:1922 iyr:2026 eyr:2028
hgt:180cm
ecl:lzr byr:1967 pid:50313895 hcl:34441e hgt:158in iyr:2030 eyr:2039
iyr:2025
pid:2210753 byr:2010 hgt:173cm cid:208
eyr:2008 hcl:de66d6
ecl:grt
iyr:2018 eyr:2026
cid:289 byr:1992
hgt:170cm pid:856187601 ecl:gry hcl:#efcc98
cid:94 byr:1934 hgt:59in eyr:2022
hcl:#623a2f pid:573884719
iyr:2016 ecl:oth
pid:206185815 ecl:grn hcl:#cfa07d eyr:2027
iyr:2018 byr:1989
hgt:176cm
hgt:175cm byr:1999
pid:409477026
hcl:#cfa07d
ecl:amb eyr:2021 iyr:2017 cid:75
byr:2018
cid:150 eyr:2033 pid:043853978 iyr:2017 hgt:61cm hcl:z
ecl:#f19d87
pid:549507973 hgt:178cm byr:1929 ecl:oth
iyr:2020 eyr:2025
hcl:#7d3b0c
iyr:2014 hgt:171cm ecl:blu byr:1999
hcl:#6b5442 pid:813505466
eyr:2029
ecl:zzz eyr:2034
byr:2022
pid:52407584 iyr:2016 hcl:#888785
hgt:176in
ecl:oth
byr:1994 iyr:2018 hgt:64in pid:136896463
eyr:2022
hcl:#a97842
ecl:#535e3c hgt:84
eyr:1963 hcl:z
iyr:1986 pid:187cm byr:2028 cid:258
eyr:2029
cid:257 hgt:175cm
ecl:oth iyr:2016
hcl:#602927 pid:506432649
iyr:2015 hgt:165cm
ecl:gmt cid:116 hcl:z
byr:1998
eyr:2021
pid:170cm
iyr:2023 hgt:178cm cid:109 pid:#6eca6e hcl:#7d3b0c eyr:1961
ecl:xry byr:2012
eyr:2025
ecl:grn
pid:708755870 hgt:189cm hcl:#e23d5f
iyr:2017 byr:1982
hcl:#866857 pid:85618849 ecl:brn byr:1958 eyr:2025
hgt:111
cid:190
hgt:75cm byr:1983 iyr:2000
eyr:2007
cid:307
pid:227345093 ecl:#080923 hcl:#ceb3a1
hcl:#602927
ecl:oth hgt:158cm byr:1992 iyr:2012 pid:708206240
eyr:2026 cid:125
eyr:1920 pid:873476029 hgt:192cm byr:1971 ecl:gry iyr:2020 hcl:#f463f6
pid:295847270 hcl:#7d3b0c ecl:oth iyr:2015
byr:2000 hgt:181cm eyr:2025
hgt:189cm
hcl:#18171d iyr:2013
pid:686835652 byr:1972
ecl:grn eyr:2029
iyr:2010
ecl:grn hgt:63cm eyr:2027 hcl:#602927 pid:240973955 byr:1984 cid:280
pid:883408516 eyr:2022
iyr:2010 hgt:182cm ecl:hzl byr:2000 cid:220
iyr:2018 pid:026680847 cid:117 hcl:#602927 hgt:67cm ecl:xry eyr:2030
byr:1989
byr:1933 ecl:hzl
hgt:179cm
pid:500053352 eyr:2020 hcl:#fffffd
iyr:2014
hgt:153cm
pid:523083973 ecl:brn
iyr:2011 byr:2000 hcl:#cfa07d
eyr:2020 cid:114
hcl:#efcc98 ecl:blu
byr:1974 iyr:2019
hgt:165cm
eyr:2020 pid:755433303
eyr:2022
ecl:amb byr:1927 iyr:2012 pid:409960222 hcl:#733820 hgt:169cm cid:336
ecl:#564a01
hgt:136 iyr:1984
pid:#646419
eyr:2032
hcl:z
hgt:71in hcl:14d37b
byr:2017 cid:243 ecl:zzz pid:208245975
iyr:2029
byr:1974 hcl:#6b5442 pid:562222331 hgt:68in
cid:319
ecl:grn
iyr:2012 eyr:2028
iyr:2010 byr:1948 hgt:169cm eyr:2022 hcl:#623a2f
cid:93 ecl:hzl
cid:347
byr:1939 hgt:151cm eyr:2026
iyr:2010
hcl:#fffffd ecl:gry
pid:562919031
hgt:171cm
iyr:2010 pid:812511153 byr:1971 eyr:2026 ecl:hzl
hcl:#6b5442
cid:319 eyr:2026 iyr:2013
hgt:155in
hcl:z pid:185cm
hgt:178cm ecl:gry cid:139 hcl:#341e13 pid:390510619 eyr:2026 iyr:2012
byr:1952
eyr:2025 pid:78761845
hcl:#866857 iyr:2019
hgt:173cm ecl:blu byr:1936
eyr:2028 hgt:192cm
byr:1946 pid:897533472 ecl:brn hcl:#efcc98
pid:467427172 hcl:#efcc98
eyr:2021 byr:1923
iyr:2012 cid:139 hgt:176cm
iyr:2015 eyr:2028
pid:069618718
hgt:190cm ecl:grn hcl:#888785
byr:1956 cid:68
ecl:brn hgt:173cm eyr:2022
iyr:2010 pid:525711593 byr:1990
cid:292
ecl:blu hcl:#602927 hgt:67in iyr:2011 byr:1990 eyr:2027 pid:298224903
hgt:159cm eyr:2029 pid:854089988 iyr:2018 ecl:gry byr:1962 hcl:#efcc98
ecl:grn byr:1964 eyr:2022
hgt:61in pid:202756433 hcl:#cfa07d cid:241
iyr:2015
hgt:68in byr:1973 hcl:#18171d ecl:hzl
pid:701847555 eyr:2030 iyr:2019
eyr:2022
ecl:grn hgt:151cm iyr:2020 hcl:#83f878 byr:1982 pid:816902510
cid:130 hgt:187in eyr:2040
ecl:brn
iyr:2020
hcl:z pid:7364218001
byr:1949
hgt:183cm
eyr:2023 iyr:2019 byr:1946 pid:684966686
cid:307 ecl:brn hcl:#cfa07d
hcl:#6b5442 eyr:2024 pid:7727182081
iyr:2017
hgt:110 ecl:dne
ecl:blu byr:1987 cid:167 iyr:2015 hgt:189cm
pid:797675433 eyr:2024 hcl:#6b5442
iyr:2018 byr:1929 ecl:brn hgt:60in eyr:2024 pid:152cm hcl:#a97842
iyr:2020 eyr:2025 byr:1942 pid:007017276 ecl:oth hgt:170cm
hcl:#ceb3a1 cid:104
iyr:2012 ecl:oth eyr:2020
byr:1965 hcl:#efcc98
hgt:173cm
cid:102 pid:302599543
hgt:187cm pid:958933966
ecl:hzl byr:1955
eyr:2027 hcl:#6b5442
ecl:oth iyr:2013
eyr:2027 hgt:153cm cid:86 hcl:#602927
pid:568040159 byr:1926
hgt:187cm iyr:2008 pid:151cm ecl:blu eyr:1954
byr:2014
pid:9029821667 hgt:59cm eyr:2035 hcl:e9c79a
iyr:2010
eyr:2027 pid:#d676d0
hcl:d2fcfa hgt:154cm ecl:hzl byr:1938
ecl:lzr hgt:61in eyr:2025
pid:556812665
byr:1923 iyr:2019
hcl:e962ed
iyr:2019
eyr:2029
hcl:#866857 byr:1977 pid:115229656 hgt:193cm
ecl:brn cid:350
hcl:z pid:#8d311d iyr:2023 hgt:71cm
byr:1923 ecl:zzz eyr:2039
cid:66 hgt:165cm
eyr:2027 iyr:2012 hcl:#b6652a ecl:amb pid:946987379 byr:1999
byr:2028 iyr:2013 ecl:#376cda
eyr:1928 pid:#c135ce hcl:z hgt:185in
hcl:100344 iyr:1933 eyr:2023 hgt:71cm byr:2010 ecl:#6a8007 pid:90001213
iyr:2012
byr:1987 eyr:2020 hgt:190cm cid:298 hcl:#866857
hgt:161cm hcl:#efcc98 ecl:grn eyr:2028 iyr:2014
byr:1966 pid:769989459
hgt:173cm pid:527615519 eyr:2024 hcl:#602927 byr:1949 ecl:oth cid:328
pid:679489285
hgt:153cm byr:1963
hcl:#602927 eyr:2026 ecl:blu
ecl:blu hgt:186cm hcl:#c0946f pid:741255292 eyr:2022 byr:1996 iyr:2017
hgt:172cm
hcl:#888785 eyr:2022 pid:377797887 byr:1980
hcl:z pid:399837694 iyr:2018 ecl:#33e59d eyr:2038
hgt:60in
eyr:2027
byr:1923
hgt:170cm pid:754104917
iyr:2020 cid:135 hcl:#341e13
ecl:brn
ecl:grn hcl:#c0946f
byr:2028 iyr:2016 pid:950191991
hgt:193cm cid:93
eyr:1935
ecl:brn hcl:#733820 eyr:2024
iyr:2017 pid:450063924
byr:2000 hgt:172cm
iyr:2008
cid:229 byr:2023 eyr:2022 hcl:#341e13
ecl:grn
hgt:70in pid:104660281
eyr:2023 hgt:181cm cid:289 pid:828542447
iyr:2013 ecl:grn byr:1922 hcl:#866857
iyr:2030 pid:152cm cid:297 ecl:#75a512 hcl:z hgt:156in byr:2006
eyr:2035
iyr:2012 hcl:#18171d eyr:2025 hgt:188cm
ecl:blu byr:1976
iyr:2018 hgt:157cm hcl:#b6652a
ecl:oth byr:2002 eyr:2023
cid:161
hcl:#b6652a iyr:2016
byr:1930 ecl:oth pid:000425745 hgt:167cm eyr:2022
hgt:160cm hcl:#89f1a0 eyr:2023 pid:867868252 byr:1976 iyr:2019 ecl:hzl
byr:1966 ecl:grn pid:597443937
iyr:2014 eyr:2029
pid:306301971 ecl:#a145cc
hcl:z iyr:2018 cid:325 eyr:2023 byr:1942 hgt:157cm
ecl:brn
pid:771134604 hgt:160cm
byr:1961 eyr:2020
iyr:2012 hcl:#6b5442
iyr:1922
ecl:gmt
eyr:1963
pid:#d1a6f3 hcl:z byr:2015 hgt:153in
eyr:2022 ecl:gry
hgt:156cm
pid:640711969
hcl:#cfa07d
ecl:grn
eyr:1980 pid:385212564 hcl:5b27f7 hgt:160cm iyr:2016 cid:171 byr:1990
iyr:2020
cid:212 pid:959667791 byr:2002 ecl:amb
hgt:75in eyr:2026 hcl:#888785
byr:1969 eyr:2021
iyr:2012
pid:318752605 hgt:179cm
cid:81 hcl:#888785
byr:1926 hcl:#c0946f iyr:2010 hgt:155cm ecl:gry pid:475722917
eyr:2030
eyr:2025
ecl:grn byr:1980 iyr:2010 hgt:160cm hcl:#d03ef0 pid:474973131
eyr:2020 iyr:2012 hgt:150cm
hcl:#c0946f
byr:1924 ecl:amb
iyr:2016 hgt:173cm eyr:2029
hcl:#888785 ecl:hzl byr:2001 cid:334 pid:291454183
iyr:2013
pid:909258239 byr:1970
ecl:utc eyr:2026
cid:312 hgt:158cm
hcl:#18171d
ecl:grn
byr:1941 pid:395943714
eyr:2027
hcl:#7d3b0c
iyr:2011 hgt:158cm
ecl:amb hcl:#fffffd
byr:1992
pid:266072435
eyr:2028 iyr:2020 hgt:161cm
hcl:de3776 eyr:2021
cid:234 ecl:#160982
iyr:2017 byr:1992
byr:1979 iyr:2020 ecl:brn
hcl:#6b5442
pid:492860333 hgt:168cm eyr:2030
eyr:2025 hcl:#fffffd pid:776551474
ecl:hzl hgt:169cm
iyr:2017
ecl:hzl
eyr:2029
iyr:2013 byr:1952 hgt:152cm
pid:968064648 hcl:#6b5442
byr:1955
pid:947711080
cid:149 ecl:amb
hgt:150cm
hcl:#341e13 eyr:2022 iyr:2016
hgt:71cm ecl:#c6c47f
byr:2028 iyr:1994 eyr:2030 pid:0684877002 cid:237 hcl:#341e13
eyr:2030 hcl:#a97842 hgt:188cm byr:2000 pid:262013450
iyr:2018
hgt:74in byr:1955 ecl:blu iyr:2012 hcl:#341e13 pid:165688658
hgt:176cm cid:346 iyr:2012
pid:322396589
ecl:gry eyr:2029
byr:1976
hcl:#888785
eyr:2021
iyr:2015 hcl:3a6401 byr:1997 ecl:blu pid:188cm hgt:166in
ecl:blu iyr:2010 byr:1984 hgt:183
pid:306571244 hcl:#623a2f eyr:2033 cid:113
ecl:#804adb byr:2004 hgt:181cm
hcl:#623a2f
eyr:2040 pid:#57e9d1
iyr:2028 cid:97
iyr:2015 pid:294753454 byr:1980 eyr:2020
hgt:76in
ecl:oth
hcl:#a97842
hcl:#a7a05c pid:0137262572 eyr:2023 cid:350 iyr:2015
ecl:#52d3fe hgt:190cm
byr:2007
pid:826827136 eyr:2030 ecl:brn byr:1946 hcl:#a97842 iyr:2018
hgt:173in
byr:1967
iyr:2015 pid:142177822 hgt:157cm ecl:oth eyr:2024 cid:221
iyr:2012 byr:1942 cid:187 pid:886132093
hgt:158cm ecl:hzl hcl:#1bc909
pid:490847399
byr:1963
hgt:69in
iyr:2011 ecl:gry
eyr:2027 hcl:#e4f497 cid:87
iyr:2014 ecl:hzl hgt:159cm hcl:#c0946f eyr:2028 byr:1926 pid:007819051
hcl:#cfa07d pid:639664506 ecl:amb
byr:1997 cid:137 iyr:2014 eyr:2030 hgt:67in
hgt:191in
eyr:2025
cid:128
byr:2021 iyr:2015
hcl:5ed1ae ecl:lzr
pid:406311551
eyr:2035
ecl:gmt hcl:71e1ef iyr:2023
pid:4347854 byr:2017
hgt:169cm
eyr:2028
ecl:oth iyr:2016 byr:1954
pid:662755630 hcl:#733820