summaryrefslogtreecommitdiff
path: root/day2/invids2.TXT
blob: a4a031e9b590ffb50db5fe3da7123581b914bce3 (plain) (blame)
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
\START92\
\COMMENT=Single file dated Thu Dec  4 00:09:27 20
\NAME=invids2
\FILE=day2.invids2.92f
(str)
Func
Local start,end,dims,dime,startn,endn,starte,ende,startne,endne,i,j,t,result,dime0,dims0,end0,start0,seen

inString(str,"-")\->\i
left(str,i-1)\->\start0
right(str,dim(str)-i)\->\end0

0\->\result
dim(start0)\->\dims0
dim(end0)\->\dime0
{}\->\seen
For j,2,dime0
 mod(dims0,j)\->\i
 If i\!=\0 Then
  string(10^(floor(log(expr(start0))+j-i)))\->\start
  dim(start)\->\dims
 Else
  start0\->\start
  dims0\->\dims
 EndIf
 mod(dime0,j)\->\i
 If i\!=\0 Then
  string(10^(floor(log(expr(end0)))-i+1)-1)\->\end
  dim(end)\->\dime
 Else
  end0\->\end
  dime0\->\dime
 EndIf
 
 left(start,dims/j)\->\startn
 left(end,dime/j)\->\endn
 expr(startn)\->\startne
 expr(endn)\->\endne
 expr(start)\->\starte
 expr(end)\->\ende

 \(C)\ skip if end < last invalid
 If expr(end)\>=\expr(startn&startn) Then
 
  For i,startne,endne
   string(i)\->\t
   expr(repeats(t,j))\->\t
   If t\>=\starte and t\<=\ende and ?contains(seen,t) Then
    augment(seen,{t})\->\seen
    result+t\->\result
   EndIf
  EndFor
 EndIf
EndFor
Return result
EndFunc

\STOP92\