Last active
October 6, 2017 04:10
-
-
Save thinkphp/40ccc01a508e2c35e0d8e23b6710c239 to your computer and use it in GitHub Desktop.
Perm and Queen in Ruby using the concept the OOP Polymorphism
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Adrian Statescu <mergesortv@gmail.com> | |
# Object-oriented Programming Concept Polymorphism. | |
# A class enherits states and behavior from its superclass. Inheritance provides a powerful and natural mechanism for | |
# organizing and structuring software program. | |
# Polymorphism is ability to appear in many forms and it is to redefine methods for derivated classes. | |
# The languages's ability to process objects differently depending on their datatype and class | |
class Bkt | |
def initialize(_n) | |
@n = _n | |
@stack = [0]*(_n+1) | |
@level = 0 | |
end | |
def init | |
0 | |
end | |
def succ | |
0 | |
end | |
def valid | |
0 | |
end | |
def sol | |
0 | |
end | |
def print | |
p @stack | |
end | |
def back | |
@level = 1 | |
self.init | |
while @level > 0 do | |
hs = 1 | |
iv = 0 | |
while hs==1 && iv==0 do | |
hs = self.succ | |
if hs | |
iv = self.valid | |
end | |
end | |
if hs == 1 | |
if self.sol | |
self.print | |
else | |
@level = @level + 1 | |
self.init() | |
end | |
else | |
@level = @level - 1 | |
end | |
end | |
end | |
end | |
class Perm < Bkt | |
def initialize(_n) | |
super(_n) | |
end | |
def run | |
self.back | |
end | |
def init | |
@stack[@level] = 0 | |
end | |
def succ | |
if @stack[@level] < @n | |
@stack[@level] += 1 | |
return 1 | |
end | |
return 0 | |
end | |
def valid | |
for i in 1..@level-1 | |
if @stack[i] == @stack[@level] | |
return 0 | |
end | |
end | |
return 1 | |
end | |
def sol | |
return @level == @n | |
end | |
end | |
class Queens < Perm | |
def valid | |
for i in 1..@level-1 | |
if @stack[i] == @stack[@level] || (@stack[i] - @stack[@level]).abs == (i - @level).abs | |
return 0 | |
end | |
end | |
return 1 | |
end | |
end | |
p = Perm.new(3) | |
p.run() | |
q = Queens.new(4) | |
q.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment