Решение на Шеста задача от Веселин Русинов

Обратно към всички решения

Към профила на Веселин Русинов

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 14 успешни тест(а)
  • 0 неуспешни тест(а)

Код

module TurtleGraphics
module Canvas
class Standard
ORIENTATIONS = %i(right down left up)
attr_accessor :width, :height, :x, :y
def initialize(width, height)
@width, @height = width, height
@canvas = Array.new
@max = 0
if (width != 0 && height != 0)
populate_canvas
end
@row, @column = 0, 0
@orientation = 0
end
def populate_canvas
(0..(@height - 1)).each do
row = Array.new
(1..@width).each do
row.push(0)
end
@canvas.push(row)
end
@canvas[0][0] = 1
@max = 1
end
def draw(&block)
self.instance_eval(&block)
to_a
end
def turn_right()
@orientation += 1
@orientation = 0 if @orientation > 3
end
def turn_left()
@orientation -= 1
@orientation = 3 if @orientation < 0
end
def fix_position
@column = 0 if @column == @width
@column = @width - 1 if @column < 0
@row = 0 if @row == @height
@row = @height - 1 if @row < 0
@canvas[@row][@column] += 1
@max = @canvas.flatten.max if @canvas[@row][@column] > @max
end
def move()
case ORIENTATIONS[@orientation]
when :right
@column += 1
when :down
@row += 1
when :left
@column -= 1
when :up
@row -= 1
end
fix_position
end
def spawn_at(row, column)
@canvas[0][0] = 0
@canvas[row][column] = 1
@row, @column = row, column
@orientation = 0
end
def look(orientation)
@orientation = ORIENTATIONS.index(orientation)
end
def to_a
@canvas
end
end
class ASCII < Standard
def initialize(chars)
@chars = chars
super(0,0)
end
def draw(&block)
self.instance_eval(&block)
to_s
end
def get_symbol(intensity)
step = 1.0 / (@chars.size - 1)
index, initial_intensity = 0, 0
while intensity > initial_intensity
index += 1
initial_intensity += step
end
@chars[index]
end
def add_column(element)
get_symbol(element.to_f / @max)
end
def add_row(row)
result = ""
row.each do |element|
result += add_column(element)
end
result + "\n"
end
def to_s
result = ""
@canvas.each do |row|
result += add_row(row)
end
result.chomp
end
end
class HTML < Standard
HTML_STRING = "
<!DOCTYPE html>
<html>
<head>
<title>Turtle graphics</title>
<style>
table {
border-spacing: 0;
}
tr {
padding: 0;
}
td {
width: ##|width|##px;
height: ##|height|##px;
background-color: black;
padding: 0;
}
</style>
</head>
<body>
<table>
##|table|##
</table>
</body>
</html>"
def initialize(pixels)
@pixels = pixels
super(0,0)
end
def draw(&block)
self.instance_eval(&block)
to_s
end
def generate_td(element)
"<td style=\"opacity: #{format('%.2f', (element.to_f / @max)) }\" ></td>"
end
def generate_tr(row)
result = '<tr>'
row.each do |element|
result += generate_td(element)
end
result += '</tr>'
result
end
def to_s
table = ""
@canvas.each do |row|
table += generate_tr(row)
end
result = HTML_STRING.gsub("##|table|##", table)
result = result.gsub!("##|width|##", @pixels.to_s)
result = result.gsub!("##|height|##", @pixels.to_s)
result
end
end
end
class Turtle
def initialize(height, width)
@width, @height = width, height
@canvas = Canvas::Standard.new(width, height)
end
def draw(canvas = nil, &block)
if canvas != nil
canvas.width = @width
canvas.height = @height
canvas.populate_canvas
canvas.draw(&block)
else
@canvas.draw(&block)
end
end
end
end

Лог от изпълнението

..............

Finished in 0.0124 seconds
14 examples, 0 failures

История (2 версии и 0 коментара)

Веселин обнови решението на 01.12.2015 21:07 (преди над 8 години)

+module TurtleGraphics
+
+ module Canvas
+
+ class Standard
+ ORIENTATIONS = %i(right down left up)
+ attr_accessor :width, :height, :x, :y
+
+ def initialize(width, height)
+ @width, @height = width, height
+ @canvas = Array.new
+ if (width != 0 && height != 0)
+ populate_canvas
+ end
+ @row, @column = 0, 0
+ @orientation = 0
+ @max = 0
+ end
+
+ def populate_canvas
+ (0..(@height - 1)).each do
+ row = Array.new
+ (1..@width).each do
+ row.push(0)
+ end
+ @canvas.push(row)
+ end
+ @canvas[0][0] = 1
+ end
+
+ def draw(&block)
+ self.instance_eval(&block)
+ to_a
+ end
+
+ def turn_right()
+ @orientation += 1
+ @orientation = 0 if @orientation > 3
+ end
+
+ def turn_left()
+ @orientation -= 1
+ @orientation = 3 if @orientation < 0
+ end
+
+ def fix_position
+ @column = 0 if @column == @width
+ @column = @width - 1 if @column < 0
+ @row = 0 if @row == @height
+ @row = @height - 1 if @row < 0
+ @canvas[@row][@column] += 1
+ @max = @canvas.flatten.max if @canvas[@row][@column] > @max
+ end
+
+ def move()
+ case ORIENTATIONS[@orientation]
+ when :right
+ @column += 1
+ when :down
+ @row += 1
+ when :left
+ @column -= 1
+ when :up
+ @row -= 1
+ end
+ fix_position
+ end
+
+ def spawn_at(row, column)
+ @canvas[0][0] = 0
+ @canvas[row][column] = 1
+ @row, @column = row, column
+ @orientation = 0
+ end
+
+ def look(orientation)
+ @orientation = ORIENTATIONS.index(orientation)
+ end
+
+ def to_a
+ @canvas
+ end
+ end
+
+ class ASCII < Standard
+ def initialize(chars)
+ @chars = chars
+ super(0,0)
+ end
+
+ def draw(&block)
+ self.instance_eval(&block)
+ to_s
+ end
+
+ def get_symbol(intensity)
+ step = 1.0 / (@chars.size - 1)
+ index, initial_intensity = 0, 0
+ while intensity > initial_intensity
+ index += 1
+ initial_intensity += step
+ end
+ @chars[index]
+ end
+
+ def add_column(element)
+ get_symbol(element.to_f / @max)
+ end
+
+ def add_row(row)
+ result = ""
+ row.each do |element|
+ result += add_column(element)
+ end
+ result + "\n"
+ end
+
+ def to_s
+ result = ""
+ @canvas.each do |row|
+ result += add_row(row)
+ end
+ result
+ end
+
+ end
+
+ class HTML < Standard
+
+ HTML_STRING = "
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Turtle graphics</title>
+ <style>
+ table {
+ border-spacing: 0;
+ }
+
+ tr {
+ padding: 0;
+ }
+
+ td {
+ width: ##|width|##px;
+ height: ##|height|##px;
+
+ background-color: black;
+ padding: 0;
+ }
+ </style>
+ </head>
+ <body>
+ <table>
+ ##|table|##
+ </table>
+ </body>
+</html>"
+
+ def initialize(pixels)
+ @pixels = pixels
+ super(0,0)
+ end
+
+ def draw(&block)
+ self.instance_eval(&block)
+ to_s
+ end
+
+ def generate_td(element)
+ '<td style="opacity: ' + (element.to_f / @max).to_s + '" ></td>'
+ end
+
+ def generate_tr(row)
+ result = '<tr>'
+ row.each do |element|
+ result += generate_td(element)
+ end
+ result += '</tr>'
+ result
+ end
+
+ def to_s
+ table = ""
+ @canvas.each do |row|
+ table += generate_tr(row)
+ end
+ result = HTML_STRING.gsub("##|table|##", table)
+ result = result.gsub!("##|width|##", @pixels.to_s)
+ result = result.gsub!("##|height|##", @pixels.to_s)
+ result
+ end
+ end
+
+ end
+
+ class Turtle
+
+ def initialize(width, height)
+ @width, @height = width, height
+ @canvas = Canvas::Standard.new(width, height)
+ end
+
+ def draw(canvas = nil, &block)
+ if canvas != nil
+ canvas.width = @width
+ canvas.height = @height
+ canvas.populate_canvas
+ canvas.draw(&block)
+ else
+ @canvas.draw(&block)
+ end
+ end
+
+ end
+
+end

Веселин обнови решението на 02.12.2015 15:25 (преди над 8 години)

module TurtleGraphics
module Canvas
class Standard
ORIENTATIONS = %i(right down left up)
attr_accessor :width, :height, :x, :y
def initialize(width, height)
@width, @height = width, height
@canvas = Array.new
+ @max = 0
if (width != 0 && height != 0)
populate_canvas
end
@row, @column = 0, 0
@orientation = 0
- @max = 0
end
def populate_canvas
(0..(@height - 1)).each do
row = Array.new
(1..@width).each do
row.push(0)
end
@canvas.push(row)
end
@canvas[0][0] = 1
+ @max = 1
end
def draw(&block)
self.instance_eval(&block)
to_a
end
def turn_right()
@orientation += 1
@orientation = 0 if @orientation > 3
end
def turn_left()
@orientation -= 1
@orientation = 3 if @orientation < 0
end
def fix_position
@column = 0 if @column == @width
@column = @width - 1 if @column < 0
@row = 0 if @row == @height
@row = @height - 1 if @row < 0
@canvas[@row][@column] += 1
@max = @canvas.flatten.max if @canvas[@row][@column] > @max
end
def move()
case ORIENTATIONS[@orientation]
when :right
@column += 1
when :down
@row += 1
when :left
@column -= 1
when :up
@row -= 1
end
fix_position
end
def spawn_at(row, column)
@canvas[0][0] = 0
@canvas[row][column] = 1
@row, @column = row, column
@orientation = 0
end
def look(orientation)
@orientation = ORIENTATIONS.index(orientation)
end
def to_a
@canvas
end
end
class ASCII < Standard
+
def initialize(chars)
@chars = chars
super(0,0)
end
def draw(&block)
self.instance_eval(&block)
to_s
end
def get_symbol(intensity)
step = 1.0 / (@chars.size - 1)
index, initial_intensity = 0, 0
while intensity > initial_intensity
index += 1
initial_intensity += step
end
@chars[index]
end
def add_column(element)
get_symbol(element.to_f / @max)
end
def add_row(row)
result = ""
row.each do |element|
result += add_column(element)
end
result + "\n"
end
def to_s
result = ""
@canvas.each do |row|
result += add_row(row)
end
- result
+ result.chomp
end
end
class HTML < Standard
HTML_STRING = "
<!DOCTYPE html>
<html>
<head>
<title>Turtle graphics</title>
<style>
table {
border-spacing: 0;
}
tr {
padding: 0;
}
td {
width: ##|width|##px;
height: ##|height|##px;
background-color: black;
padding: 0;
}
</style>
</head>
<body>
<table>
##|table|##
</table>
</body>
</html>"
- def initialize(pixels)
- @pixels = pixels
- super(0,0)
- end
+def initialize(pixels)
+ @pixels = pixels
+ super(0,0)
+end
- def draw(&block)
- self.instance_eval(&block)
- to_s
- end
+def draw(&block)
+ self.instance_eval(&block)
+ to_s
+end
- def generate_td(element)
- '<td style="opacity: ' + (element.to_f / @max).to_s + '" ></td>'
- end
+def generate_td(element)
+ "<td style=\"opacity: #{format('%.2f', (element.to_f / @max)) }\" ></td>"
+end
- def generate_tr(row)
- result = '<tr>'
- row.each do |element|
- result += generate_td(element)
- end
- result += '</tr>'
- result
- end
+def generate_tr(row)
+ result = '<tr>'
+ row.each do |element|
+ result += generate_td(element)
+ end
+ result += '</tr>'
+ result
+end
- def to_s
- table = ""
- @canvas.each do |row|
- table += generate_tr(row)
- end
- result = HTML_STRING.gsub("##|table|##", table)
- result = result.gsub!("##|width|##", @pixels.to_s)
- result = result.gsub!("##|height|##", @pixels.to_s)
- result
- end
+def to_s
+ table = ""
+ @canvas.each do |row|
+ table += generate_tr(row)
+ end
+ result = HTML_STRING.gsub("##|table|##", table)
+ result = result.gsub!("##|width|##", @pixels.to_s)
+ result = result.gsub!("##|height|##", @pixels.to_s)
+ result
+end
end
end
class Turtle
- def initialize(width, height)
+ def initialize(height, width)
@width, @height = width, height
@canvas = Canvas::Standard.new(width, height)
end
def draw(canvas = nil, &block)
if canvas != nil
canvas.width = @width
canvas.height = @height
canvas.populate_canvas
canvas.draw(&block)
else
@canvas.draw(&block)
end
end
end
end