Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
19
Task/Pancake-numbers/Nim/pancake-numbers-1.nim
Normal file
19
Task/Pancake-numbers/Nim/pancake-numbers-1.nim
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import strformat, strutils
|
||||
|
||||
func pancake(n: int): int =
|
||||
var
|
||||
gap, sumGaps = 2
|
||||
pg = 1
|
||||
adj = -1
|
||||
while sumGaps < n:
|
||||
inc adj
|
||||
inc pg, gap
|
||||
swap pg, gap
|
||||
inc sumGaps, gap
|
||||
result = n + adj
|
||||
|
||||
var line = ""
|
||||
for n in 1..20:
|
||||
line.addSep(" ")
|
||||
line.add &"p({n:>2}) = {pancake(n):>2}"
|
||||
if n mod 5 == 0: (echo line; line.setLen(0))
|
||||
41
Task/Pancake-numbers/Nim/pancake-numbers-2.nim
Normal file
41
Task/Pancake-numbers/Nim/pancake-numbers-2.nim
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
import sequtils, strformat, strutils, tables
|
||||
|
||||
type
|
||||
StepTable = TableRef[seq[int], int]
|
||||
Result = tuple[steps: int; example: seq[int]]
|
||||
|
||||
func findMax(t: StepTable): Result =
|
||||
result.steps = -1
|
||||
for example, steps in t.pairs:
|
||||
if steps > result.steps:
|
||||
result = (steps, example)
|
||||
|
||||
func partialReversed(arr: openArray[int]; pos: int): seq[int] =
|
||||
result.setlen(arr.len)
|
||||
for i in 0..<pos:
|
||||
result[i] = arr[pos - 1 - i]
|
||||
for i in pos..arr.high:
|
||||
result[i] = arr[i]
|
||||
|
||||
func pancake(n: int): Result =
|
||||
var goalStack = toSeq(1..n)
|
||||
var stacks, newStacks: StepTable = newTable({goalStack: 0})
|
||||
var numStacks = 1
|
||||
for i in 1..1000:
|
||||
var nextStacks = new(StepTable)
|
||||
for arr, steps in newStacks.pairs:
|
||||
for pos in 2..n:
|
||||
let newStack = partialReversed(arr, pos)
|
||||
if newStack notin stacks:
|
||||
nextStacks[newStack] = i
|
||||
newStacks = nextStacks
|
||||
for key, value in newStacks:
|
||||
stacks[key] = value
|
||||
let perms = stacks.len
|
||||
if perms == numStacks:
|
||||
return stacks.findMax()
|
||||
numStacks = perms
|
||||
|
||||
for n in 1..10:
|
||||
let (steps, example) = pancake(n)
|
||||
echo &"p({n:>2}) = {steps:>2} example: ", example.join(", ")
|
||||
Loading…
Add table
Add a link
Reference in a new issue