day 8
This commit is contained in:
		
							parent
							
								
									dc8eddd0bd
								
							
						
					
					
						commit
						a0a5e5f447
					
				
					 3 changed files with 702 additions and 0 deletions
				
			
		
							
								
								
									
										636
									
								
								day8.input
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										636
									
								
								day8.input
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,636 @@
 | 
			
		|||
acc -13
 | 
			
		||||
jmp +37
 | 
			
		||||
acc -19
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +413
 | 
			
		||||
acc +10
 | 
			
		||||
jmp +194
 | 
			
		||||
jmp +587
 | 
			
		||||
jmp +388
 | 
			
		||||
acc +48
 | 
			
		||||
nop +284
 | 
			
		||||
acc +35
 | 
			
		||||
jmp +239
 | 
			
		||||
acc +0
 | 
			
		||||
jmp +58
 | 
			
		||||
acc +22
 | 
			
		||||
acc +45
 | 
			
		||||
acc +25
 | 
			
		||||
acc +23
 | 
			
		||||
jmp +544
 | 
			
		||||
jmp +610
 | 
			
		||||
nop +273
 | 
			
		||||
jmp +554
 | 
			
		||||
jmp +584
 | 
			
		||||
acc +30
 | 
			
		||||
jmp +481
 | 
			
		||||
acc +29
 | 
			
		||||
jmp +342
 | 
			
		||||
acc +9
 | 
			
		||||
acc +23
 | 
			
		||||
nop +377
 | 
			
		||||
jmp +483
 | 
			
		||||
acc +33
 | 
			
		||||
jmp +128
 | 
			
		||||
nop +560
 | 
			
		||||
nop +437
 | 
			
		||||
jmp +485
 | 
			
		||||
acc +2
 | 
			
		||||
acc +30
 | 
			
		||||
jmp +456
 | 
			
		||||
acc +0
 | 
			
		||||
acc -15
 | 
			
		||||
nop +126
 | 
			
		||||
acc +47
 | 
			
		||||
jmp +299
 | 
			
		||||
acc +36
 | 
			
		||||
acc +9
 | 
			
		||||
jmp -21
 | 
			
		||||
acc +10
 | 
			
		||||
acc +26
 | 
			
		||||
acc -3
 | 
			
		||||
acc +31
 | 
			
		||||
jmp +337
 | 
			
		||||
nop +517
 | 
			
		||||
jmp +303
 | 
			
		||||
acc +20
 | 
			
		||||
nop -43
 | 
			
		||||
acc +30
 | 
			
		||||
acc +24
 | 
			
		||||
jmp +348
 | 
			
		||||
jmp +158
 | 
			
		||||
acc +23
 | 
			
		||||
acc +16
 | 
			
		||||
acc +40
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +465
 | 
			
		||||
acc +12
 | 
			
		||||
jmp +276
 | 
			
		||||
acc +0
 | 
			
		||||
acc +32
 | 
			
		||||
acc +43
 | 
			
		||||
jmp +487
 | 
			
		||||
acc +40
 | 
			
		||||
acc +49
 | 
			
		||||
nop +540
 | 
			
		||||
jmp +455
 | 
			
		||||
acc +24
 | 
			
		||||
jmp +481
 | 
			
		||||
acc +30
 | 
			
		||||
nop +256
 | 
			
		||||
acc +29
 | 
			
		||||
acc +14
 | 
			
		||||
jmp +390
 | 
			
		||||
jmp +1
 | 
			
		||||
acc -3
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +295
 | 
			
		||||
acc +6
 | 
			
		||||
acc +46
 | 
			
		||||
acc +16
 | 
			
		||||
nop +128
 | 
			
		||||
jmp -38
 | 
			
		||||
acc +0
 | 
			
		||||
acc +16
 | 
			
		||||
acc +10
 | 
			
		||||
jmp +185
 | 
			
		||||
acc -19
 | 
			
		||||
acc +0
 | 
			
		||||
acc +23
 | 
			
		||||
acc -16
 | 
			
		||||
jmp +180
 | 
			
		||||
acc +14
 | 
			
		||||
jmp +1
 | 
			
		||||
acc +31
 | 
			
		||||
acc -4
 | 
			
		||||
jmp +439
 | 
			
		||||
jmp +204
 | 
			
		||||
acc +50
 | 
			
		||||
acc +12
 | 
			
		||||
nop +154
 | 
			
		||||
jmp +474
 | 
			
		||||
acc -16
 | 
			
		||||
jmp +511
 | 
			
		||||
acc +6
 | 
			
		||||
acc +32
 | 
			
		||||
jmp +504
 | 
			
		||||
acc +17
 | 
			
		||||
acc +21
 | 
			
		||||
acc -18
 | 
			
		||||
jmp +298
 | 
			
		||||
acc -17
 | 
			
		||||
acc +16
 | 
			
		||||
acc +4
 | 
			
		||||
acc +18
 | 
			
		||||
jmp +18
 | 
			
		||||
acc -10
 | 
			
		||||
acc +26
 | 
			
		||||
acc +36
 | 
			
		||||
jmp +166
 | 
			
		||||
nop -109
 | 
			
		||||
jmp +266
 | 
			
		||||
acc -9
 | 
			
		||||
jmp +306
 | 
			
		||||
nop +324
 | 
			
		||||
acc +16
 | 
			
		||||
acc +33
 | 
			
		||||
acc +18
 | 
			
		||||
jmp -50
 | 
			
		||||
acc +25
 | 
			
		||||
jmp +196
 | 
			
		||||
acc +21
 | 
			
		||||
jmp +308
 | 
			
		||||
jmp +38
 | 
			
		||||
acc +27
 | 
			
		||||
jmp -48
 | 
			
		||||
acc +14
 | 
			
		||||
acc +46
 | 
			
		||||
acc +48
 | 
			
		||||
acc +15
 | 
			
		||||
jmp +223
 | 
			
		||||
acc +0
 | 
			
		||||
acc +12
 | 
			
		||||
jmp -115
 | 
			
		||||
acc +19
 | 
			
		||||
acc +27
 | 
			
		||||
acc +30
 | 
			
		||||
jmp +377
 | 
			
		||||
jmp -144
 | 
			
		||||
jmp +231
 | 
			
		||||
acc +1
 | 
			
		||||
jmp +410
 | 
			
		||||
acc +41
 | 
			
		||||
jmp +138
 | 
			
		||||
acc -13
 | 
			
		||||
acc -8
 | 
			
		||||
acc -7
 | 
			
		||||
acc +25
 | 
			
		||||
jmp +366
 | 
			
		||||
acc +8
 | 
			
		||||
jmp +182
 | 
			
		||||
acc +2
 | 
			
		||||
nop +104
 | 
			
		||||
acc +24
 | 
			
		||||
acc +21
 | 
			
		||||
jmp -43
 | 
			
		||||
acc -8
 | 
			
		||||
acc +37
 | 
			
		||||
acc +23
 | 
			
		||||
jmp +292
 | 
			
		||||
jmp +365
 | 
			
		||||
acc +33
 | 
			
		||||
nop -144
 | 
			
		||||
acc -10
 | 
			
		||||
jmp +387
 | 
			
		||||
acc +13
 | 
			
		||||
acc -6
 | 
			
		||||
acc -12
 | 
			
		||||
nop +134
 | 
			
		||||
jmp +345
 | 
			
		||||
acc +5
 | 
			
		||||
acc +16
 | 
			
		||||
acc +35
 | 
			
		||||
acc +50
 | 
			
		||||
jmp +250
 | 
			
		||||
acc +46
 | 
			
		||||
jmp +105
 | 
			
		||||
acc -6
 | 
			
		||||
nop -152
 | 
			
		||||
jmp +233
 | 
			
		||||
jmp -88
 | 
			
		||||
acc +39
 | 
			
		||||
jmp +59
 | 
			
		||||
acc -4
 | 
			
		||||
acc +47
 | 
			
		||||
jmp +165
 | 
			
		||||
acc +32
 | 
			
		||||
acc +49
 | 
			
		||||
acc +24
 | 
			
		||||
jmp +344
 | 
			
		||||
acc -5
 | 
			
		||||
acc +3
 | 
			
		||||
jmp +359
 | 
			
		||||
acc +27
 | 
			
		||||
jmp +72
 | 
			
		||||
acc +0
 | 
			
		||||
acc +16
 | 
			
		||||
acc +40
 | 
			
		||||
jmp +98
 | 
			
		||||
acc +2
 | 
			
		||||
acc +23
 | 
			
		||||
acc +48
 | 
			
		||||
acc +2
 | 
			
		||||
jmp -33
 | 
			
		||||
jmp -186
 | 
			
		||||
acc +27
 | 
			
		||||
nop -83
 | 
			
		||||
acc +2
 | 
			
		||||
acc +19
 | 
			
		||||
jmp -141
 | 
			
		||||
acc +39
 | 
			
		||||
acc +34
 | 
			
		||||
acc +33
 | 
			
		||||
jmp +282
 | 
			
		||||
jmp +306
 | 
			
		||||
acc +12
 | 
			
		||||
jmp +317
 | 
			
		||||
acc +32
 | 
			
		||||
acc +50
 | 
			
		||||
acc +17
 | 
			
		||||
jmp +52
 | 
			
		||||
acc +3
 | 
			
		||||
acc +35
 | 
			
		||||
jmp +328
 | 
			
		||||
acc +26
 | 
			
		||||
nop +163
 | 
			
		||||
acc +6
 | 
			
		||||
acc +19
 | 
			
		||||
jmp +154
 | 
			
		||||
acc +4
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +373
 | 
			
		||||
acc -12
 | 
			
		||||
acc +47
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp -234
 | 
			
		||||
acc +45
 | 
			
		||||
acc +46
 | 
			
		||||
acc -14
 | 
			
		||||
acc +50
 | 
			
		||||
jmp -134
 | 
			
		||||
acc +26
 | 
			
		||||
jmp +128
 | 
			
		||||
jmp +233
 | 
			
		||||
acc +23
 | 
			
		||||
nop -133
 | 
			
		||||
jmp -154
 | 
			
		||||
jmp +260
 | 
			
		||||
acc +21
 | 
			
		||||
acc +14
 | 
			
		||||
nop -89
 | 
			
		||||
acc +9
 | 
			
		||||
jmp -113
 | 
			
		||||
acc +10
 | 
			
		||||
acc +5
 | 
			
		||||
jmp +127
 | 
			
		||||
acc -9
 | 
			
		||||
acc +2
 | 
			
		||||
jmp +286
 | 
			
		||||
nop +274
 | 
			
		||||
jmp +93
 | 
			
		||||
acc +46
 | 
			
		||||
acc +36
 | 
			
		||||
jmp +53
 | 
			
		||||
acc +30
 | 
			
		||||
jmp -126
 | 
			
		||||
acc +11
 | 
			
		||||
acc +11
 | 
			
		||||
acc +23
 | 
			
		||||
jmp +296
 | 
			
		||||
nop -100
 | 
			
		||||
jmp +304
 | 
			
		||||
jmp +219
 | 
			
		||||
acc +16
 | 
			
		||||
jmp -93
 | 
			
		||||
acc +12
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +205
 | 
			
		||||
acc +6
 | 
			
		||||
acc -11
 | 
			
		||||
jmp +202
 | 
			
		||||
jmp +107
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp -224
 | 
			
		||||
acc +24
 | 
			
		||||
acc +50
 | 
			
		||||
acc +37
 | 
			
		||||
jmp +45
 | 
			
		||||
acc +25
 | 
			
		||||
acc -15
 | 
			
		||||
jmp -151
 | 
			
		||||
jmp +1
 | 
			
		||||
acc +47
 | 
			
		||||
jmp -196
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +300
 | 
			
		||||
jmp +116
 | 
			
		||||
acc +39
 | 
			
		||||
acc +0
 | 
			
		||||
nop -176
 | 
			
		||||
acc -7
 | 
			
		||||
jmp -53
 | 
			
		||||
acc +20
 | 
			
		||||
nop -216
 | 
			
		||||
nop +291
 | 
			
		||||
jmp +38
 | 
			
		||||
acc +0
 | 
			
		||||
acc +32
 | 
			
		||||
acc -19
 | 
			
		||||
jmp -28
 | 
			
		||||
jmp -176
 | 
			
		||||
acc +33
 | 
			
		||||
acc +11
 | 
			
		||||
acc +47
 | 
			
		||||
nop -58
 | 
			
		||||
jmp -203
 | 
			
		||||
acc +48
 | 
			
		||||
acc +50
 | 
			
		||||
acc +41
 | 
			
		||||
jmp -315
 | 
			
		||||
acc -12
 | 
			
		||||
acc +23
 | 
			
		||||
acc +32
 | 
			
		||||
jmp +210
 | 
			
		||||
acc +46
 | 
			
		||||
acc -11
 | 
			
		||||
acc -16
 | 
			
		||||
jmp +103
 | 
			
		||||
acc +25
 | 
			
		||||
nop +95
 | 
			
		||||
acc +9
 | 
			
		||||
jmp -117
 | 
			
		||||
nop +18
 | 
			
		||||
acc -19
 | 
			
		||||
acc +38
 | 
			
		||||
jmp -130
 | 
			
		||||
acc +22
 | 
			
		||||
jmp +25
 | 
			
		||||
nop +201
 | 
			
		||||
nop +205
 | 
			
		||||
acc +14
 | 
			
		||||
jmp -124
 | 
			
		||||
jmp -46
 | 
			
		||||
acc +9
 | 
			
		||||
jmp -257
 | 
			
		||||
acc -19
 | 
			
		||||
acc -17
 | 
			
		||||
acc +36
 | 
			
		||||
acc +24
 | 
			
		||||
jmp -210
 | 
			
		||||
jmp -231
 | 
			
		||||
acc +40
 | 
			
		||||
jmp +46
 | 
			
		||||
nop -192
 | 
			
		||||
acc -13
 | 
			
		||||
acc +7
 | 
			
		||||
acc +33
 | 
			
		||||
jmp +103
 | 
			
		||||
acc +18
 | 
			
		||||
acc +37
 | 
			
		||||
acc -14
 | 
			
		||||
jmp -11
 | 
			
		||||
acc +12
 | 
			
		||||
nop -240
 | 
			
		||||
acc +35
 | 
			
		||||
acc +33
 | 
			
		||||
jmp -274
 | 
			
		||||
acc -9
 | 
			
		||||
acc +24
 | 
			
		||||
jmp -128
 | 
			
		||||
nop -129
 | 
			
		||||
acc -17
 | 
			
		||||
jmp -62
 | 
			
		||||
acc +0
 | 
			
		||||
acc +42
 | 
			
		||||
nop +116
 | 
			
		||||
jmp -44
 | 
			
		||||
acc +16
 | 
			
		||||
jmp +179
 | 
			
		||||
acc -8
 | 
			
		||||
acc +8
 | 
			
		||||
jmp -149
 | 
			
		||||
acc +39
 | 
			
		||||
acc +2
 | 
			
		||||
acc +14
 | 
			
		||||
acc +12
 | 
			
		||||
jmp -373
 | 
			
		||||
jmp +76
 | 
			
		||||
jmp -232
 | 
			
		||||
jmp -385
 | 
			
		||||
acc +22
 | 
			
		||||
acc +41
 | 
			
		||||
acc +28
 | 
			
		||||
jmp -179
 | 
			
		||||
acc +0
 | 
			
		||||
acc +22
 | 
			
		||||
acc +15
 | 
			
		||||
jmp -291
 | 
			
		||||
acc -18
 | 
			
		||||
jmp -222
 | 
			
		||||
acc +45
 | 
			
		||||
acc -15
 | 
			
		||||
jmp +61
 | 
			
		||||
acc +10
 | 
			
		||||
acc +16
 | 
			
		||||
acc +43
 | 
			
		||||
jmp +177
 | 
			
		||||
acc +43
 | 
			
		||||
acc -12
 | 
			
		||||
acc +20
 | 
			
		||||
acc +27
 | 
			
		||||
jmp -13
 | 
			
		||||
acc -14
 | 
			
		||||
jmp -336
 | 
			
		||||
nop -158
 | 
			
		||||
acc +3
 | 
			
		||||
nop -409
 | 
			
		||||
acc +17
 | 
			
		||||
jmp -257
 | 
			
		||||
acc +0
 | 
			
		||||
nop +124
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp +117
 | 
			
		||||
jmp -179
 | 
			
		||||
acc -17
 | 
			
		||||
acc -2
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp -37
 | 
			
		||||
acc +42
 | 
			
		||||
jmp +175
 | 
			
		||||
acc -9
 | 
			
		||||
acc +12
 | 
			
		||||
acc +4
 | 
			
		||||
jmp +69
 | 
			
		||||
acc -7
 | 
			
		||||
jmp +1
 | 
			
		||||
acc +32
 | 
			
		||||
jmp +54
 | 
			
		||||
jmp -444
 | 
			
		||||
acc +7
 | 
			
		||||
jmp -87
 | 
			
		||||
acc -6
 | 
			
		||||
nop -323
 | 
			
		||||
acc +47
 | 
			
		||||
acc -5
 | 
			
		||||
jmp -143
 | 
			
		||||
jmp +1
 | 
			
		||||
nop -44
 | 
			
		||||
acc +27
 | 
			
		||||
acc +21
 | 
			
		||||
jmp -184
 | 
			
		||||
jmp -404
 | 
			
		||||
jmp -70
 | 
			
		||||
acc +32
 | 
			
		||||
jmp -13
 | 
			
		||||
acc +0
 | 
			
		||||
nop -452
 | 
			
		||||
acc +1
 | 
			
		||||
acc +31
 | 
			
		||||
jmp -77
 | 
			
		||||
jmp -401
 | 
			
		||||
acc +42
 | 
			
		||||
jmp -428
 | 
			
		||||
nop -120
 | 
			
		||||
acc -17
 | 
			
		||||
nop -75
 | 
			
		||||
acc +6
 | 
			
		||||
jmp +20
 | 
			
		||||
jmp -291
 | 
			
		||||
acc +7
 | 
			
		||||
jmp +37
 | 
			
		||||
acc +10
 | 
			
		||||
acc +15
 | 
			
		||||
jmp +1
 | 
			
		||||
acc +11
 | 
			
		||||
jmp -363
 | 
			
		||||
acc -14
 | 
			
		||||
nop -321
 | 
			
		||||
jmp -40
 | 
			
		||||
acc +41
 | 
			
		||||
acc +31
 | 
			
		||||
jmp +58
 | 
			
		||||
jmp -493
 | 
			
		||||
acc +32
 | 
			
		||||
acc -10
 | 
			
		||||
acc +44
 | 
			
		||||
jmp -211
 | 
			
		||||
acc +47
 | 
			
		||||
acc +23
 | 
			
		||||
jmp -241
 | 
			
		||||
jmp -224
 | 
			
		||||
acc -1
 | 
			
		||||
jmp -350
 | 
			
		||||
acc +8
 | 
			
		||||
jmp -280
 | 
			
		||||
acc -19
 | 
			
		||||
acc +0
 | 
			
		||||
acc +17
 | 
			
		||||
jmp -274
 | 
			
		||||
acc +27
 | 
			
		||||
acc +11
 | 
			
		||||
jmp -82
 | 
			
		||||
acc +48
 | 
			
		||||
acc +27
 | 
			
		||||
jmp -518
 | 
			
		||||
acc +3
 | 
			
		||||
jmp -124
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp -490
 | 
			
		||||
acc +41
 | 
			
		||||
jmp -238
 | 
			
		||||
acc -6
 | 
			
		||||
jmp -386
 | 
			
		||||
jmp -189
 | 
			
		||||
acc -11
 | 
			
		||||
jmp +80
 | 
			
		||||
acc -8
 | 
			
		||||
acc +9
 | 
			
		||||
nop -99
 | 
			
		||||
jmp +56
 | 
			
		||||
acc -18
 | 
			
		||||
jmp -83
 | 
			
		||||
acc +28
 | 
			
		||||
acc +13
 | 
			
		||||
jmp -228
 | 
			
		||||
acc +32
 | 
			
		||||
acc +34
 | 
			
		||||
acc +3
 | 
			
		||||
jmp -272
 | 
			
		||||
nop -410
 | 
			
		||||
acc +13
 | 
			
		||||
acc -17
 | 
			
		||||
jmp -236
 | 
			
		||||
acc +45
 | 
			
		||||
acc +0
 | 
			
		||||
acc +19
 | 
			
		||||
nop +29
 | 
			
		||||
jmp +38
 | 
			
		||||
jmp -75
 | 
			
		||||
acc +7
 | 
			
		||||
acc +33
 | 
			
		||||
acc +40
 | 
			
		||||
jmp -180
 | 
			
		||||
jmp -557
 | 
			
		||||
acc +22
 | 
			
		||||
jmp -249
 | 
			
		||||
acc +44
 | 
			
		||||
acc +45
 | 
			
		||||
acc +2
 | 
			
		||||
acc -19
 | 
			
		||||
jmp -537
 | 
			
		||||
acc +44
 | 
			
		||||
acc +32
 | 
			
		||||
acc -14
 | 
			
		||||
acc +39
 | 
			
		||||
jmp -406
 | 
			
		||||
jmp -488
 | 
			
		||||
acc +14
 | 
			
		||||
acc +41
 | 
			
		||||
jmp -327
 | 
			
		||||
acc +17
 | 
			
		||||
acc +25
 | 
			
		||||
nop -573
 | 
			
		||||
acc +0
 | 
			
		||||
jmp -563
 | 
			
		||||
acc +18
 | 
			
		||||
nop -282
 | 
			
		||||
acc +13
 | 
			
		||||
acc +45
 | 
			
		||||
jmp -325
 | 
			
		||||
acc +41
 | 
			
		||||
acc -10
 | 
			
		||||
nop -47
 | 
			
		||||
nop -223
 | 
			
		||||
jmp -155
 | 
			
		||||
acc +14
 | 
			
		||||
acc +23
 | 
			
		||||
jmp +23
 | 
			
		||||
acc +21
 | 
			
		||||
nop -229
 | 
			
		||||
acc +27
 | 
			
		||||
acc -5
 | 
			
		||||
jmp -95
 | 
			
		||||
acc +2
 | 
			
		||||
acc -10
 | 
			
		||||
nop -451
 | 
			
		||||
jmp -393
 | 
			
		||||
jmp -406
 | 
			
		||||
acc +42
 | 
			
		||||
acc +18
 | 
			
		||||
acc +49
 | 
			
		||||
jmp -307
 | 
			
		||||
acc -11
 | 
			
		||||
jmp +1
 | 
			
		||||
jmp -424
 | 
			
		||||
jmp -192
 | 
			
		||||
acc +49
 | 
			
		||||
acc -1
 | 
			
		||||
acc -17
 | 
			
		||||
jmp -355
 | 
			
		||||
jmp -268
 | 
			
		||||
nop -320
 | 
			
		||||
acc +1
 | 
			
		||||
jmp -134
 | 
			
		||||
acc +46
 | 
			
		||||
jmp -564
 | 
			
		||||
acc +40
 | 
			
		||||
acc +29
 | 
			
		||||
acc +13
 | 
			
		||||
nop -285
 | 
			
		||||
jmp -272
 | 
			
		||||
acc +19
 | 
			
		||||
acc -14
 | 
			
		||||
acc +25
 | 
			
		||||
acc +18
 | 
			
		||||
jmp +1
 | 
			
		||||
							
								
								
									
										57
									
								
								day8.ml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								day8.ml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
let read name =
 | 
			
		||||
    let ic = open_in name in
 | 
			
		||||
    let try_read () =
 | 
			
		||||
        try Some (input_line ic)
 | 
			
		||||
        with End_of_file -> None in
 | 
			
		||||
    let rec loop acc =
 | 
			
		||||
        match try_read () with
 | 
			
		||||
        | Some s -> loop (s::acc)
 | 
			
		||||
        | None -> close_in ic; acc in
 | 
			
		||||
    List.rev (loop [])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let build lines =
 | 
			
		||||
    let rec aux res idx = function
 | 
			
		||||
        | h :: t -> let [instr; value] = String.split_on_char ' ' h in
 | 
			
		||||
                                         let () = res.(idx) <- (0, instr, int_of_string value) in
 | 
			
		||||
                                         aux res (idx + 1) t
 | 
			
		||||
        | [] -> res in
 | 
			
		||||
    aux (Array.make (List.length lines) (0, "nop", 0)) 0 lines
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let rec step pc acc instructions =
 | 
			
		||||
    let (n, instr, v) = instructions.(pc) in
 | 
			
		||||
    let () = instructions.(pc) <- (n + 1, instr, v) in
 | 
			
		||||
    match instr with
 | 
			
		||||
    | "nop" -> (n + 1, pc + 1, acc)
 | 
			
		||||
    | "acc" -> (n + 1, pc + 1, acc + v)
 | 
			
		||||
    | "jmp" -> step (pc + v) acc instructions
 | 
			
		||||
    | _ -> raise (Failure "unreachable")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let run instructions =
 | 
			
		||||
    let rec aux pc acc instructions =
 | 
			
		||||
        match step pc acc instructions with
 | 
			
		||||
        | (2, _, _) -> raise (Failure (Printf.sprintf "Loop detected with accumulator %d!" acc))
 | 
			
		||||
        | (_, pc, result) when pc = (Array.length instructions - 1) -> result
 | 
			
		||||
        | (_, pc, acc_) -> aux pc acc_ instructions
 | 
			
		||||
    in aux 0 0 instructions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let rec swap_from idx ins =
 | 
			
		||||
    match ins.(idx) with
 | 
			
		||||
    | (_, "nop", v) when v <> 0 -> let () = ins.(idx) <- (0, "jmp", v) in (idx + 1, ins)
 | 
			
		||||
    | (_, "jmp", v) -> let () = ins.(idx) <- (0, "nop", v) in (idx + 1, ins)
 | 
			
		||||
    | _ -> swap_from (idx + 1) ins
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
let fix instructions =
 | 
			
		||||
    let rec aux idx ins instructions =
 | 
			
		||||
        try run ins
 | 
			
		||||
        with e -> let (i, ins) = swap_from idx (Array.copy instructions) in
 | 
			
		||||
                  aux i ins instructions
 | 
			
		||||
    in aux 0 (Array.copy instructions) instructions
 | 
			
		||||
 | 
			
		||||
let () = try let _ = read "day8.input" |> build |> run in ()
 | 
			
		||||
         with Failure msg -> print_endline msg
 | 
			
		||||
let () = print_endline (string_of_int (read "day8.input" |> build |> fix))
 | 
			
		||||
							
								
								
									
										9
									
								
								day8.test
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								day8.test
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
nop +0
 | 
			
		||||
acc +1
 | 
			
		||||
jmp +4
 | 
			
		||||
acc +3
 | 
			
		||||
jmp -3
 | 
			
		||||
acc -99
 | 
			
		||||
acc +1
 | 
			
		||||
jmp -4
 | 
			
		||||
acc +6
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue