-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path6-2.cfm
More file actions
44 lines (37 loc) · 1.21 KB
/
6-2.cfm
File metadata and controls
44 lines (37 loc) · 1.21 KB
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
<cffunction name="solve" output="false">
<cfargument name="input" required="true" />
<cfset var banks = ListToArray(Trim(arguments.input), Chr(9)) />
<cfset var numberOfBanks = ArrayLen(banks) />
<cfset var seen = {} />
<cfset var key = ArrayToList(banks) />
<cfset seen[key] = 0 />
<cfset var numberOfCycles = 0 />
<cfset var maxNumberOfBlocks = '' />
<cfset var firstBankWithMaxNumberOfBlocks = '' />
<cfset var offset = '' />
<cfloop condition="true">
<cfset numberOfCycles++ />
<cfset maxNumberOfBlocks = ArrayMax(banks) />
<cfset firstBankWithMaxNumberOfBlocks = ArrayFind(banks, maxNumberOfBlocks) />
<cfset banks[firstBankWithMaxNumberOfBlocks] = 0 />
<cfloop from="1" to="#maxNumberOfBlocks#" index="offset">
<cfset banks[(firstBankWithMaxNumberOfBlocks + offset - 1) mod numberOfBanks + 1]++ />
</cfloop>
<cfset key = ArrayToList(banks) />
<cfif StructKeyExists(seen, key)>
<cfreturn numberOfCycles - seen[key] />
</cfif>
<cfset seen[key] = numberOfCycles />
</cfloop>
</cffunction>
<cfset testCases = [
{
input = '0 2 7 0',
expectedOutput = 4
},
{
input = Trim(FileRead(ExpandPath('6.txt'))),
expectedOutput = 2793
}
] />
<cfinclude template="test_runner_include.cfm" />