Skip to content

Instantly share code, notes, and snippets.

@topher6345
Last active June 5, 2017 03:08
Show Gist options
  • Save topher6345/edcd1bbf3e0beedfa6a2f7c54af3e4fb to your computer and use it in GitHub Desktop.
Save topher6345/edcd1bbf3e0beedfa6a2f7c54af3e4fb to your computer and use it in GitHub Desktop.
class Array
def palindromize
_, *tail = reverse
self + tail
end
end
class String
def make_diamond
return "A\n" if eql? 'A'
letters = 'A'..self
width = (letters.count * 2) - 1
blank_row = ' ' * width
build_line = proc do |result, (letter, n)|
result << blank_row.palindrome_insert(letter, n) + "\n"
end
letters.each_with_index.inject([], &build_line).palindromize.join
end
def midpoint
raise ArgumentError if size.even?
(size - 1) / 2
end
def palindrome_insert(letter, offset)
result = dup
result[midpoint + offset] = letter
result[midpoint - offset] = letter
result
end
end
class Diamond
def self.make_diamond(letter)
letter.make_diamond
end
end
Diamond.make_diamond('C')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment