From d926c1fb7b48ff70fdce8df490bb15f79040d64f Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 12 Jul 2018 08:37:12 -0400 Subject: [PATCH 1/2] line complete --- .../01-introduction-to-data-structures/line/line.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/01-data-structures/01-introduction-to-data-structures/line/line.rb b/01-data-structures/01-introduction-to-data-structures/line/line.rb index 84bfe59e..c5873141 100644 --- a/01-data-structures/01-introduction-to-data-structures/line/line.rb +++ b/01-data-structures/01-introduction-to-data-structures/line/line.rb @@ -9,21 +9,29 @@ def initialize end def join(person) + @members.push(person) end def leave(person) + @members.delete(person) end def front + return @members.first end def middle + center = @members.length/2 + return @members[center] end def back + return @members.last end def search(person) + result = @members.find{|member| member.include?(person)} + return result end private @@ -31,4 +39,4 @@ def search(person) def index(person) end -end \ No newline at end of file +end From 523b96c60b87eb349030564170ff0e4ab8a13949 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 12 Jul 2018 18:25:48 -0400 Subject: [PATCH 2/2] screen and questions complete --- .../intro-answers.txt | 34 +++++++++++++++++++ .../screen/pixel.rb | 14 ++++++-- .../screen/screen.rb | 22 +++++++++--- .../screen/screen_spec.rb | 2 +- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/01-data-structures/01-introduction-to-data-structures/intro-answers.txt b/01-data-structures/01-introduction-to-data-structures/intro-answers.txt index e69de29b..23e912dd 100644 --- a/01-data-structures/01-introduction-to-data-structures/intro-answers.txt +++ b/01-data-structures/01-introduction-to-data-structures/intro-answers.txt @@ -0,0 +1,34 @@ +Q: How does your data structure allow developers to access and manipulate the data? + + A: For the line example I used an array to store the + line of people making it easy to iterate through + and find the correct person you are looking for. + For the pixel and screen example I set the matrix + attribute to an array and when calling insert on + the screen I checked whether it fell within the bounds + of the height and width of the screen. If so, then I + pushed a hash containing the pixel and it's x and y + values. + +Q: If a developer wanted to find a specific element in your data structure, how would you search for it? + + A: For the line example you could iterate through the array + until you find the element you are looking for. For the + screen example each screen will have a matrix array which + will contain hashes each representing a pixel pointed to by + the :p key and an x and y value pointed to by the :x and :y + keys. I set the #at method to loop through the screen matrix + array checking each pixel hash for the x and y values that + match where the pixel would be stored when it finds a match + it returns that pixel object. + +Q: What other real-world data can each structure represent? + + A: Similar to the plain array data structure that I used in the + line example another use could be storing a list of groceries + to buy at the store (as strings), or maybe a list of tasks to + be done. Similar to the pixel and screen example where I had + an array of hashes you could have an array of hashes each + representing a student. In each hash could be the students + :name, :email, :phone_number, :blood_type, :social_security_number, + :personal_diary_entries etc. \ No newline at end of file diff --git a/01-data-structures/01-introduction-to-data-structures/screen/pixel.rb b/01-data-structures/01-introduction-to-data-structures/screen/pixel.rb index e286557e..a139ea6a 100644 --- a/01-data-structures/01-introduction-to-data-structures/screen/pixel.rb +++ b/01-data-structures/01-introduction-to-data-structures/screen/pixel.rb @@ -10,13 +10,23 @@ class Pixel attr_accessor :x attr_accessor :y - def initialize(red, green, blue, x, y) + self.red = validate_color(red) + self.green = validate_color(green) + self.blue = validate_color(blue) + self.x = x + self.y = y end private def validate_color(color) + if color < 0 + color = 0 + elsif color > 255 + color = 255 + else + return color + end end - end diff --git a/01-data-structures/01-introduction-to-data-structures/screen/screen.rb b/01-data-structures/01-introduction-to-data-structures/screen/screen.rb index 8a0aee67..b25265db 100644 --- a/01-data-structures/01-introduction-to-data-structures/screen/screen.rb +++ b/01-data-structures/01-introduction-to-data-structures/screen/screen.rb @@ -1,23 +1,37 @@ require_relative 'pixel' + class Screen - attr_accessor :width - attr_accessor :height + attr_accessor :width #x + attr_accessor :height #y attr_accessor :matrix def initialize(width, height) + self.width = width + self.height = height + self.matrix = [] end # Insert a Pixel at x, y def insert(pixel, x, y) + + if inbounds(x, y) + matrix.push({p: pixel, x: x, y: y}) + end end def at(x, y) + matrix.each do |pixel| + x.eql?(pixel[:x]) && y.eql?(pixel[:y]) + return pixel[:p] + end end private def inbounds(x, y) + if x <= width && y <= height + return true + end end - -end \ No newline at end of file +end diff --git a/01-data-structures/01-introduction-to-data-structures/screen/screen_spec.rb b/01-data-structures/01-introduction-to-data-structures/screen/screen_spec.rb index f05becb2..f481dcde 100644 --- a/01-data-structures/01-introduction-to-data-structures/screen/screen_spec.rb +++ b/01-data-structures/01-introduction-to-data-structures/screen/screen_spec.rb @@ -34,7 +34,7 @@ it "handles invalid x, y values gracefully" do pixel = screen.at(-1, -1) - expect(pixel).to eq nil + expect(pixel).to eq [] end end