Решение на Трета задача от Александър Тахчиев

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

Към профила на Александър Тахчиев

Резултати

  • 2 точки от тестове
  • 0 бонус точки
  • 2 точки общо
  • 26 успешни тест(а)
  • 43 неуспешни тест(а)

Код

require 'matrix'
module Graphics
class Canvas
attr_accessor :field
attr_reader :width, :height
def initialize(width, height)
@width = width
@height = height
@field = Matrix.build(@width, @height){|row, col| "-"}
end
def set_pixel(x, y)
if not pixel_at?(x, y)
p pixel_at?(x, y)
matrix_1 = @field
matrix_2 = *matrix_1
matrix_2[x][y] = "@"
@field = Matrix[*matrix_2]
end
end
def pixel_at?(x, y)
return @field.[](x, y) == "@"
end
def draw (figure)
if figure.is_a? Point
set_pixel(figure.x, figure.y)
end
end
def render_as(constant)
if constant == Graphics::Renderers::Ascii
return @field.to_a.map{|i| i.join("")}.join("\n")
end
#Graphics::Renderers::Html::FIRST_HTML_PART + "\n" +
@field.to_a.
flatten.map{|i| i == '-' ? '<i></i>' : '<b></b>' }.each_slice(width).to_a.
join("<br>\n") #+ Graphics::Renderers::Html::SECOND_HTML_PART
end
end
module Renderers
class Ascii
end
class Html
FIRST_HTML_PART = '<!DOCTYPE html>
<html>
<head>
<title>Rendered Canvas</title>
<style type="text/css">
.canvas {
font-size: 1px;
line-height: 1px;
}
.canvas * {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 5px;
}
.canvas i {
background-color: #eee;
}
.canvas b {
background-color: #333;
}
</style>
</head>
<body>
<div class="canvas">'
SECOND_HTML_PART = '</div>
</body>
</html>'
end
end
class Point < Canvas
def initialize(x, y)
@x = x
@y = y
end
def x
@x
end
def y
@y
end
def ==(other)
@x == other.x and @y == other.y
end
def eql?(other)
@x.eql? other.x and @y.eql? other.y
end
def draw_figure(field)
set_pixel(field.x, field.y)
end
end
class Line
attr_reader :from, :to
def initialize(from, to)
if from.x > to.x
from, to = to, from
if from.x == to.x and from.y > to.y
from, to = to, from
end
end
@from, @to = from, to
end
# private
# deltax = @from.x - @to.x
# deltay = @from.y - @to.y
# def draw_line() #(x0, x1, y0, y1)
# error = 0
# real deltaerr = (deltay / deltax).abs
# int y = to.y
# for x in (@from.x..@to.x)
# plot(x,y)
# error = error + deltaerr
# if error >= 0.5
# y = y + 1
# error = error - 1.0
# end
# end
# end
end
end

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

......false
.false
.Ffalse
.false
false
false
false
false
FFFFFFFFFFFFFfalse
false
FFFfalse
false
Ffalse
false
........F.......FF.FFFFF.FFFFFFFFFFFFFFFFF

Failures:

  1) Graphics Canvas drawing of shapes and rasterization renders multiple drawn shapes
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:205:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) Graphics Canvas drawing of shapes and rasterization of points works for multiple ones
     Failure/Error: canvas.set_pixel 4, 4
     NoMethodError:
       undefined method `[]=' for nil:NilClass
     # /tmp/d20131223-4637-mo5q8u/solution.rb:17:in `set_pixel'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:57:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  3) Graphics Canvas drawing of shapes and rasterization of lines works with simple horizontal lines
     Failure/Error: ascii.should eq rendering(expected)
       
       expected: "--------\n---@@@@-\n--------"
            got: "---\n---\n---\n---\n---\n---\n---\n---"
       
       (compared using ==)
       
       Diff:
       @@ -1,4 +1,9 @@
       ---------
       ----@@@@-
       ---------
       +---
       +---
       +---
       +---
       +---
       +---
       +---
       +---
     # /tmp/d20131223-4637-mo5q8u/spec.rb:624:in `check_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:73:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  4) Graphics Canvas drawing of shapes and rasterization of lines works with vertical lines
     Failure/Error: ascii.should eq rendering(expected)
       
       expected: "-@------\n-@------\n-@------\n-@------\n-@------\n-@------\n-@------\n--------"
            got: "--------\n--------\n--------\n--------\n--------\n--------\n--------\n--------"
       
       (compared using ==)
       
       Diff:
       @@ -1,9 +1,9 @@
       --@------
       --@------
       --@------
       --@------
       --@------
       --@------
       --@------
       +--------
       +--------
       +--------
       +--------
       +--------
       +--------
       +--------
        --------
     # /tmp/d20131223-4637-mo5q8u/spec.rb:624:in `check_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:84:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  5) Graphics Canvas drawing of shapes and rasterization of lines works with lines with a small slope
     Failure/Error: ascii.should eq rendering(expected)
       
       expected: "----------\n-@@-------\n---@@@@---\n-------@@-\n----------"
            got: "-----\n-----\n-----\n-----\n-----\n-----\n-----\n-----\n-----\n-----"
       
       (compared using ==)
       
       Diff:
       @@ -1,6 +1,11 @@
       -----------
       --@@-------
       ----@@@@---
       --------@@-
       -----------
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
     # /tmp/d20131223-4637-mo5q8u/spec.rb:624:in `check_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:100:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  6) Graphics Canvas drawing of shapes and rasterization of lines works with lines with a significant slope, with swapped ends
     Failure/Error: ascii.should eq rendering(expected)
       
       expected: "----------\n-@--------\n-@--------\n--@-------\n--@-------\n--@-------\n--@-------\n---@------\n---@------\n----------"
            got: "----------\n----------\n----------\n----------\n----------\n----------\n----------\n----------\n----------\n----------"
       
       (compared using ==)
       
       Diff:
       @@ -1,11 +1,11 @@
        ----------
       --@--------
       --@--------
       ---@-------
       ---@-------
       ---@-------
       ---@-------
       ----@------
       ----@------
       +----------
       +----------
       +----------
       +----------
       +----------
       +----------
       +----------
       +----------
        ----------
     # /tmp/d20131223-4637-mo5q8u/spec.rb:624:in `check_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:113:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  7) Graphics Canvas drawing of shapes and rasterization of lines works with multiple lines
     Failure/Error: ascii.should eq rendering(expected)
       
       expected: "-@--------\n-@@-------\n-@-@@@@---\n-@-----@@-\n----------"
            got: "-----\n-----\n-----\n-----\n-----\n-----\n-----\n-----\n-----\n-----"
       
       (compared using ==)
       
       Diff:
       @@ -1,6 +1,11 @@
       --@--------
       --@@-------
       --@-@@@@---
       --@-----@@-
       -----------
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
       +-----
     # /tmp/d20131223-4637-mo5q8u/spec.rb:624:in `check_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:132:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  8) Graphics Canvas drawing of shapes and rasterization of lines draws lines with two equal ends as points
     Failure/Error: ascii.should eq rendering(expected)
       
       expected: "---\n-@-\n---"
            got: "---\n---\n---"
       
       (compared using ==)
       
       Diff:
       @@ -1,4 +1,4 @@
        ---
       --@-
       +---
        ---
     # /tmp/d20131223-4637-mo5q8u/spec.rb:624:in `check_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:145:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  9) Graphics Canvas drawing of shapes and rasterization of rectangles works with simple rects
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:156:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  10) Graphics Canvas drawing of shapes and rasterization of rectangles works with rects defined with their bottom left and top right points
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:169:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  11) Graphics Canvas drawing of shapes and rasterization of rectangles works with rects with a zero height as a line
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:182:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  12) Graphics Canvas drawing of shapes and rasterization of rectangles works with rects with a zero width and height as a single point
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:193:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  13) Graphics Renderers Ascii renders a grid of the size of the canvas
     Failure/Error: lines.size.should eq 3
       
       expected: 3
            got: 4
       
       (compared using ==)
     # /tmp/d20131223-4637-mo5q8u/spec.rb:240:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  14) Graphics Renderers Ascii renders blank canvases
     Failure/Error: canvas.render_as(ascii).should eq rendering('
       
       expected: "----\n----\n----"
            got: "---\n---\n---\n---"
       
       (compared using ==)
       
       Diff:
       @@ -1,4 +1,5 @@
       -----
       -----
       -----
       +---
       +---
       +---
       +---
     # /tmp/d20131223-4637-mo5q8u/spec.rb:245:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  15) Graphics Renderers Ascii renders simple canvases
     Failure/Error: canvas.render_as(ascii).should eq rendering('
       
       expected: "@---\n----\n---@"
            got: "@--\n---\n---\n--@"
       
       (compared using ==)
       
       Diff:
       @@ -1,4 +1,5 @@
       -@---
       -----
       ----@
       +@--
       +---
       +---
       +--@
     # /tmp/d20131223-4637-mo5q8u/spec.rb:256:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  16) Graphics Renderers Html returns html
     Failure/Error: rendering.should include '<!doctypehtml>'
       expected "<i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i><br><i></i>" to include "<!doctypehtml>"
     # /tmp/d20131223-4637-mo5q8u/spec.rb:273:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  17) Graphics Renderers Html renders a grid of the size of the canvas
     Failure/Error: rendering.match(/<divclass="canvas">(.*?)<\/div>/)[1]
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20131223-4637-mo5q8u/spec.rb:310:in `html_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:281:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  18) Graphics Renderers Html renders simple canvases
     Failure/Error: rendering.match(/<divclass="canvas">(.*?)<\/div>/)[1]
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20131223-4637-mo5q8u/spec.rb:310:in `html_rendering_of'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:291:in `block (4 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  19) Graphics shapes Point comparison for equality returns the same hash for the same points
     Failure/Error: a1.hash.should eq a2.hash
       
       expected: 258115602
            got: -689034806
       
       (compared using ==)
     # /tmp/d20131223-4637-mo5q8u/spec.rb:361:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  20) Graphics shapes Line initialization with swapped points puts the top point of vertical lines in the from field
     Failure/Error: vertical_line.from.y.should eq 1
       
       expected: 1
            got: 8
       
       (compared using ==)
     # /tmp/d20131223-4637-mo5q8u/spec.rb:413:in `block (6 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  21) Graphics shapes Line initialization with swapped points puts the bottom point of vertical lines in the to field
     Failure/Error: vertical_line.to.y.should eq 8
       
       expected: 8
            got: 1
       
       (compared using ==)
     # /tmp/d20131223-4637-mo5q8u/spec.rb:418:in `block (6 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  22) Graphics shapes Line comparison for equality is true if line ends are the same
     Failure/Error: (a == b).should be_true
       expected: true value
            got: false
     # /tmp/d20131223-4637-mo5q8u/spec.rb:435:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  23) Graphics shapes Line comparison for equality is true if line ends are the same, even if swapped
     Failure/Error: (a == b).should be_true
       expected: true value
            got: false
     # /tmp/d20131223-4637-mo5q8u/spec.rb:442:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  24) Graphics shapes Line comparison for equality is true if line is vertical and the bottom is given first
     Failure/Error: (a == b).should be_true
       expected: true value
            got: false
     # /tmp/d20131223-4637-mo5q8u/spec.rb:449:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  25) Graphics shapes Line comparison for equality works with eql? as well
     Failure/Error: a.should eql b
       
       expected: #<Graphics::Line:0xb89d2250 @from=#<Graphics::Point:0xb89d23f4 @x=1, @y=1>, @to=#<Graphics::Point:0xb89d22a0 @x=10, @y=14>>
            got: #<Graphics::Line:0xb89d250c @from=#<Graphics::Point:0xb89d2a34 @x=1, @y=1>, @to=#<Graphics::Point:0xb89d2764 @x=10, @y=14>>
       
       (compared using eql?)
       
       Diff:
       @@ -1,4 +1,4 @@
       -#<Graphics::Line:0xb89d2250
       - @from=#<Graphics::Point:0xb89d23f4 @x=1, @y=1>,
       - @to=#<Graphics::Point:0xb89d22a0 @x=10, @y=14>>
       +#<Graphics::Line:0xb89d250c
       + @from=#<Graphics::Point:0xb89d2a34 @x=1, @y=1>,
       + @to=#<Graphics::Point:0xb89d2764 @x=10, @y=14>>
     # /tmp/d20131223-4637-mo5q8u/spec.rb:457:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  26) Graphics shapes Line comparison for equality returns the same hash if the lines are the same
     Failure/Error: a.hash.should eq b.hash
       
       expected: 710466736
            got: 601264558
       
       (compared using ==)
     # /tmp/d20131223-4637-mo5q8u/spec.rb:465:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  27) Graphics shapes Rectangle initialization requires arguments
     Failure/Error: expect { Graphics::Rectangle.new }.to raise_error(ArgumentError)
       expected ArgumentError, got #<NameError: uninitialized constant Graphics::Rectangle> with backtrace:
         # /tmp/d20131223-4637-mo5q8u/spec.rb:480:in `block (6 levels) in <top (required)>'
         # /tmp/d20131223-4637-mo5q8u/spec.rb:480:in `block (5 levels) in <top (required)>'
         # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
         # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:480:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  28) Graphics shapes Rectangle initialization can be created from two points
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:484:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  29) Graphics shapes Rectangle initialization allows accessing its left and right points via getters
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:488:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  30) Graphics shapes Rectangle initialization does not allow setting its x and y
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:497:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  31) Graphics shapes Rectangle initialization puts the leftmost point in its left field
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:505:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  32) Graphics shapes Rectangle comparison for equality is false if any of the points differ
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:516:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  33) Graphics shapes Rectangle comparison for equality is true if rectangle points are the same
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:523:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  34) Graphics shapes Rectangle comparison for equality is true if rectangle points are the same, even if swapped
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:530:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  35) Graphics shapes Rectangle comparison for equality is true for rectangles defined with different diagonal corners
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:537:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  36) Graphics shapes Rectangle comparison for equality works with eql? as well
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:544:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  37) Graphics shapes Rectangle comparison for equality returns the same hash if the rectangles are the same
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:553:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  38) Graphics shapes Rectangle comparison for equality returns the same hash for rectangles defined with different diagonal corners
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:560:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  39) Graphics shapes Rectangle comparison for equality returns a different hash if the rectangles differ
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:567:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  40) Graphics shapes Rectangle corners top left
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:576:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  41) Graphics shapes Rectangle corners top right
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:582:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  42) Graphics shapes Rectangle corners bottom right
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:588:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  43) Graphics shapes Rectangle corners bottom left
     Failure/Error: Graphics::Rectangle.new(*args)
     NameError:
       uninitialized constant Graphics::Rectangle
     # /tmp/d20131223-4637-mo5q8u/spec.rb:615:in `make_rectangle'
     # /tmp/d20131223-4637-mo5q8u/spec.rb:594:in `block (5 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.09716 seconds
69 examples, 43 failures

Failed examples:

rspec /tmp/d20131223-4637-mo5q8u/spec.rb:203 # Graphics Canvas drawing of shapes and rasterization renders multiple drawn shapes
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:51 # Graphics Canvas drawing of shapes and rasterization of points works for multiple ones
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:69 # Graphics Canvas drawing of shapes and rasterization of lines works with simple horizontal lines
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:80 # Graphics Canvas drawing of shapes and rasterization of lines works with vertical lines
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:96 # Graphics Canvas drawing of shapes and rasterization of lines works with lines with a small slope
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:109 # Graphics Canvas drawing of shapes and rasterization of lines works with lines with a significant slope, with swapped ends
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:127 # Graphics Canvas drawing of shapes and rasterization of lines works with multiple lines
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:141 # Graphics Canvas drawing of shapes and rasterization of lines draws lines with two equal ends as points
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:154 # Graphics Canvas drawing of shapes and rasterization of rectangles works with simple rects
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:167 # Graphics Canvas drawing of shapes and rasterization of rectangles works with rects defined with their bottom left and top right points
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:180 # Graphics Canvas drawing of shapes and rasterization of rectangles works with rects with a zero height as a line
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:191 # Graphics Canvas drawing of shapes and rasterization of rectangles works with rects with a zero width and height as a single point
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:237 # Graphics Renderers Ascii renders a grid of the size of the canvas
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:244 # Graphics Renderers Ascii renders blank canvases
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:252 # Graphics Renderers Ascii renders simple canvases
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:271 # Graphics Renderers Html returns html
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:280 # Graphics Renderers Html renders a grid of the size of the canvas
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:287 # Graphics Renderers Html renders simple canvases
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:360 # Graphics shapes Point comparison for equality returns the same hash for the same points
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:411 # Graphics shapes Line initialization with swapped points puts the top point of vertical lines in the from field
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:416 # Graphics shapes Line initialization with swapped points puts the bottom point of vertical lines in the to field
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:431 # Graphics shapes Line comparison for equality is true if line ends are the same
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:438 # Graphics shapes Line comparison for equality is true if line ends are the same, even if swapped
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:445 # Graphics shapes Line comparison for equality is true if line is vertical and the bottom is given first
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:452 # Graphics shapes Line comparison for equality works with eql? as well
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:461 # Graphics shapes Line comparison for equality returns the same hash if the lines are the same
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:479 # Graphics shapes Rectangle initialization requires arguments
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:483 # Graphics shapes Rectangle initialization can be created from two points
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:487 # Graphics shapes Rectangle initialization allows accessing its left and right points via getters
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:496 # Graphics shapes Rectangle initialization does not allow setting its x and y
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:504 # Graphics shapes Rectangle initialization puts the leftmost point in its left field
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:515 # Graphics shapes Rectangle comparison for equality is false if any of the points differ
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:522 # Graphics shapes Rectangle comparison for equality is true if rectangle points are the same
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:529 # Graphics shapes Rectangle comparison for equality is true if rectangle points are the same, even if swapped
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:536 # Graphics shapes Rectangle comparison for equality is true for rectangles defined with different diagonal corners
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:543 # Graphics shapes Rectangle comparison for equality works with eql? as well
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:552 # Graphics shapes Rectangle comparison for equality returns the same hash if the rectangles are the same
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:559 # Graphics shapes Rectangle comparison for equality returns the same hash for rectangles defined with different diagonal corners
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:566 # Graphics shapes Rectangle comparison for equality returns a different hash if the rectangles differ
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:575 # Graphics shapes Rectangle corners top left
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:581 # Graphics shapes Rectangle corners top right
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:587 # Graphics shapes Rectangle corners bottom right
rspec /tmp/d20131223-4637-mo5q8u/spec.rb:593 # Graphics shapes Rectangle corners bottom left

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

Александър обнови решението на 22.12.2013 22:15 (преди почти 11 години)

+require 'matrix'
+module Graphics
+class Canvas
+ attr_accessor :field
+ attr_reader :width, :height
+ def initialize(width, height)
+ @width = width
+ @height = height
+ @field = Matrix.build(@width, @height){|row, col| "-"}
+ end
+
+ def set_pixel(x, y)
+ if not pixel_at?(x, y)
+ p pixel_at?(x, y)
+ matrix_1 = @field
+ matrix_2 = *matrix_1
+ matrix_2[x][y] = "@"
+ @field = Matrix[*matrix_2]
+ end
+ end
+
+ def pixel_at?(x, y)
+ return @field.[](x, y)
+ end
+
+ def draw (figure)
+ figure.draw_figure(self)
+ end
+ def render_as(constant)
+ if constant == Graphics::Renderers::Ascii
+ return @field.to_a.map{|i| i.join("")}.join("\n")
+ end
+ Graphics::Renderers::Html::FIRST_HTML_PART + "\n" +
+ @field.to_a.
+ flatten.map{|i| i == '-' ? '<i></i>' : '<b></b>' }.each_slice(width).to_a.
+ join("<br>\n") + Graphics::Renderers::Html::SECOND_HTML_PART
+ end
+end
+module Renderers
+ class Ascii
+
+ end
+ class Html
+ FIRST_HTML_PART = '<!DOCTYPE html>
+ <html>
+ <head>
+ <title>Rendered Canvas</title>
+ <style type="text/css">
+ .canvas {
+ font-size: 1px;
+ line-height: 1px;
+ }
+ .canvas * {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ border-radius: 5px;
+ }
+ .canvas i {
+ background-color: #eee;
+ }
+ .canvas b {
+ background-color: #333;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="canvas">'
+ SECOND_HTML_PART = '</div>
+ </body>
+ </html>'
+ end
+end
+class Point
+ def initialize(width, height)
+ @x = x
+ @y = y
+ end
+
+ def draw_figure(field)
+ field.set_pixel(x, y)
+ end
+
+ def x
+ @x
+ end
+
+ def y
+ @y
+ end
+
+end
+# class Line
+# attr_reader :from, :to
+# def initialize(from, to)
+# if from.x > to.x
+# from, to = to, from
+# if from.x == to.x and from.y > to.y
+# from, to = to, from
+# end
+# end
+# @from, @to = from, to
+# end
+# private
+# deltax = @from.x - @to.x
+# deltay = @from.y - @to.y
+# def draw_line() #(x0, x1, y0, y1)
+# error = 0
+# real deltaerr = (deltay / deltax).abs
+# int y = to.y
+# for x in (@from.x..@to.x)
+# plot(x,y)
+# error = error + deltaerr
+# if error >= 0.5
+# y = y + 1
+# error = error - 1.0
+# end
+# end
+# end
+# end
+end

Александър обнови решението на 22.12.2013 23:13 (преди почти 11 години)

require 'matrix'
module Graphics
class Canvas
attr_accessor :field
attr_reader :width, :height
def initialize(width, height)
@width = width
@height = height
@field = Matrix.build(@width, @height){|row, col| "-"}
end
def set_pixel(x, y)
if not pixel_at?(x, y)
p pixel_at?(x, y)
matrix_1 = @field
matrix_2 = *matrix_1
matrix_2[x][y] = "@"
@field = Matrix[*matrix_2]
end
end
def pixel_at?(x, y)
- return @field.[](x, y)
+ return @field.[](x, y) == "@"
end
def draw (figure)
- figure.draw_figure(self)
+ if figure.is_a? Point
+ set_pixel(figure.x, figure.y)
+
+ end
end
def render_as(constant)
if constant == Graphics::Renderers::Ascii
return @field.to_a.map{|i| i.join("")}.join("\n")
end
- Graphics::Renderers::Html::FIRST_HTML_PART + "\n" +
+ #Graphics::Renderers::Html::FIRST_HTML_PART + "\n" +
@field.to_a.
flatten.map{|i| i == '-' ? '<i></i>' : '<b></b>' }.each_slice(width).to_a.
- join("<br>\n") + Graphics::Renderers::Html::SECOND_HTML_PART
+ join("<br>\n") #+ Graphics::Renderers::Html::SECOND_HTML_PART
end
end
module Renderers
class Ascii
end
class Html
FIRST_HTML_PART = '<!DOCTYPE html>
<html>
<head>
<title>Rendered Canvas</title>
<style type="text/css">
.canvas {
font-size: 1px;
line-height: 1px;
}
.canvas * {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 5px;
}
.canvas i {
background-color: #eee;
}
.canvas b {
background-color: #333;
}
</style>
</head>
<body>
<div class="canvas">'
SECOND_HTML_PART = '</div>
</body>
</html>'
end
end
-class Point
- def initialize(width, height)
+class Point < Canvas
+ def initialize(x, y)
@x = x
@y = y
end
- def draw_figure(field)
- field.set_pixel(x, y)
- end
-
def x
@x
end
def y
@y
end
+ def ==(other)
+ @x == other.x and @y == other.y
+ end
+
+ def eql?(other)
+ @x.eql? other.x and @y.eql? other.y
+ end
+
+ def draw_figure(field)
+ set_pixel(field.x, field.y)
+ end
end
-# class Line
-# attr_reader :from, :to
-# def initialize(from, to)
-# if from.x > to.x
-# from, to = to, from
-# if from.x == to.x and from.y > to.y
-# from, to = to, from
-# end
-# end
-# @from, @to = from, to
-# end
+class Line
+ attr_reader :from, :to
+ def initialize(from, to)
+ if from.x > to.x
+ from, to = to, from
+ if from.x == to.x and from.y > to.y
+ from, to = to, from
+ end
+ end
+ @from, @to = from, to
+ end
+
# private
# deltax = @from.x - @to.x
# deltay = @from.y - @to.y
# def draw_line() #(x0, x1, y0, y1)
# error = 0
# real deltaerr = (deltay / deltax).abs
# int y = to.y
# for x in (@from.x..@to.x)
# plot(x,y)
# error = error + deltaerr
# if error >= 0.5
# y = y + 1
# error = error - 1.0
# end
# end
# end
-# end
+end
end