module Answers::Issue20260216
Original answer
Public Instance Methods
Source
# File answers/20260216.rb, line 38 def izkreny_zoom_each_with_index_times(grid, factor) grid.zoom_in_by(factor) end
A monkey-patched (Answers::Issue20260216::ZoomifyArray), n00by, implement-the-first-obvious-pattern, ‘Shameless Green’, 4-nested-loops (YUCK!) version inspired by the recent exposure to Sandi Metz’s ‘Smalltalkism’ — I really like the idea of sending messages to the objects! 🙃
Ruby Users Forum answers
Public Instance Methods
Source
# File answers/20260216.rb, line 48 def charlie_zoom_map_flat_map_flatten(matrix, factor) raise ArgumentError, "factor must be >= 2" unless factor >= 2 matrix.map do |vector| repeated_items = vector.flat_map { [it] * factor } Array.new(factor, repeated_items) end.flatten(1) end
Source
# File answers/20260216.rb, line 119 def eayurt_and_ai_zoom_each_flat_map(grid, factor) result = [] grid.each do |row| zoomed_row = row.flat_map { |cell| [cell] * factor } factor.times { result << zoomed_row } end result end
Source
# File answers/20260216.rb, line 115 def fpsvogel_zoom_map_flat_map_oneliner(grid, factor) grid.map { |row| row.flat_map { |col| [col] * factor } }.flat_map { |row| [row] * factor } end
Original code layout:
def zoom(grid, factor) grid .map { |row| row.flat_map { |col| [col] * factor } # zoom on x axis } .flat_map { |row| [row] * factor } # zoom on y axis end
Source
# File answers/20260216.rb, line 168 def fuzzy_zoom_flat_map_reduce_push_oneliner(matrix, factor) matrix.flat_map { |row| Array.new(factor, row.reduce([]) { |memo, number| memo.push(*Array.new(factor, number)) }) } end
Original code layout:
def zoom(matrix, factor) matrix.flat_map do |row| Array.new( factor, row.reduce([]) do |memo, number| memo.push(*Array.new(factor, number)) end ) end end
Source
# File answers/20260216.rb, line 93 def lpogic_zoom_each_with_yielder(grid, factor) grid.each_with_yielder do |grid_yielder, row| factor.times do grid_yielder << row.each_with_yielder do |row_yielder, cell| factor.times do row_yielder << cell end end.to_a end end.to_a end
Enumerable Answers::Issue20260216::EachWithYielder version by lpogic modified (with AI help) to be more readable
Original code layout:
module Enumerable def eachator Enumerator.new do |e| each{ yield(e, it) } end end end def zoom a, f a.eachator do |e, i| f.times do e << i.eachator{|e, i| f.times{ e << i } }.to_a end end.to_a end
Source
# File answers/20260216.rb, line 132 def roasted_oolong_and_maybe_ai_zoom_flat_map(grid, factor) return "error" if factor < 2 grid.flat_map do |row| more_rows = row.flat_map { |n| [n] * factor } # Multiply rows by integer [more_rows] * factor # Repeat rows by integer end end
Possible use of AI? (syntax corrected)
Source
# File answers/20260216.rb, line 141 def sean_zoom_each_times(arr, factor) result = [] arr.each do |row| new_row = [] row.each do |item| factor.times { new_row << item } end factor.times { result << new_row } end result end