Skip to content

Instantly share code, notes, and snippets.

@kamiyaowl
Created April 1, 2014 09:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kamiyaowl/9911174 to your computer and use it in GitHub Desktop.
Save kamiyaowl/9911174 to your computer and use it in GitHub Desktop.
ハノイの塔
Stack(1, 2, 3, 4, 5)
Stack()
Stack()
*** moved ***
self : Stack(2, 3, 4, 5)
target : Stack(1)
swap : Stack()
*** moved ***
self : Stack(3, 4, 5)
target : Stack(2)
swap : Stack(1)
*** moved ***
self : Stack()
target : Stack(1, 2)
swap : Stack(3, 4, 5)
*** moved ***
self : Stack(4, 5)
target : Stack(3)
swap : Stack(1, 2)
*** moved ***
self : Stack(2)
target : Stack(1, 4, 5)
swap : Stack(3)
*** moved ***
self : Stack()
target : Stack(2, 3)
swap : Stack(1, 4, 5)
*** moved ***
self : Stack(4, 5)
target : Stack(1, 2, 3)
swap : Stack()
*** moved ***
self : Stack(5)
target : Stack(4)
swap : Stack(1, 2, 3)
*** moved ***
self : Stack(2, 3)
target : Stack(1, 4)
swap : Stack(5)
*** moved ***
self : Stack(3)
target : Stack(2, 5)
swap : Stack(1, 4)
*** moved ***
self : Stack(4)
target : Stack(1, 2, 5)
swap : Stack(3)
*** moved ***
self : Stack()
target : Stack(3, 4)
swap : Stack(1, 2, 5)
*** moved ***
self : Stack(2, 5)
target : Stack(1)
swap : Stack(3, 4)
*** moved ***
self : Stack(5)
target : Stack(2, 3, 4)
swap : Stack(1)
*** moved ***
self : Stack()
target : Stack(1, 2, 3, 4)
swap : Stack(5)
*** moved ***
self : Stack()
target : Stack(5)
swap : Stack(1, 2, 3, 4)
*** moved ***
self : Stack(2, 3, 4)
target : Stack(1)
swap : Stack(5)
*** moved ***
self : Stack(3, 4)
target : Stack(2, 5)
swap : Stack(1)
*** moved ***
self : Stack()
target : Stack(1, 2, 5)
swap : Stack(3, 4)
*** moved ***
self : Stack(4)
target : Stack(3)
swap : Stack(1, 2, 5)
*** moved ***
self : Stack(2, 5)
target : Stack(1, 4)
swap : Stack(3)
*** moved ***
self : Stack(5)
target : Stack(2, 3)
swap : Stack(1, 4)
*** moved ***
self : Stack(4)
target : Stack(1, 2, 3)
swap : Stack(5)
*** moved ***
self : Stack()
target : Stack(4, 5)
swap : Stack(1, 2, 3)
*** moved ***
self : Stack(2, 3)
target : Stack(1, 4, 5)
swap : Stack()
*** moved ***
self : Stack(3)
target : Stack(2)
swap : Stack(1, 4, 5)
*** moved ***
self : Stack(4, 5)
target : Stack(1, 2)
swap : Stack(3)
*** moved ***
self : Stack()
target : Stack(3, 4, 5)
swap : Stack(1, 2)
*** moved ***
self : Stack(2)
target : Stack(1)
swap : Stack(3, 4, 5)
*** moved ***
self : Stack()
target : Stack(2, 3, 4, 5)
swap : Stack(1)
*** moved ***
self : Stack()
target : Stack(1, 2, 3, 4, 5)
swap : Stack()
Stack()
Stack()
Stack(1, 2, 3, 4, 5)
import scala.collection.mutable.Stack
object Hanoi {
implicit class Tower(val self:Stack[Int]) {
def moveTo(target:Stack[Int]) = {
target.push(self.pop)
}
def <<(target:Stack[Int]) = {
target.moveTo(self)
}
def >>(target:Stack[Int]) = {
moveTo(target)
}
def moveWith(target:Stack[Int], swap:Stack[Int])(index:Int = target.size ) : Unit = {
if(index > 1) self.moveWith(swap,target)(index - 1)
self >> target
println("*** moved ***")
println("self : " + self)
println("target : " + target)
println("swap : " + swap)
if(index > 1) swap.moveWith(target,self)(index - 1)
}
}
def main(args:Array[String]) = {
val a = new Stack[Int]
val b = new Stack[Int]
val c = new Stack[Int]
(1 to 5).reverse.foreach(a.push)//data
//before
println(a)
println(b)
println(c)
a.moveWith(c,b)(a.size)
//after
println(a)
println(b)
println(c)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment