HiveBrain v1.2.0
Get Started
← Back to all entries
patternrubyMinor

Different ways of creating a multiplication grid in ruby

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
gridmultiplicationcreatingwaysdifferentruby

Problem

The idea is to create a function that gets a number passed in and ouputs a multiplication grid.

For example the desired output for grid(10) would be :

1,2,3,4,5,6,7,8,9,10
2,4,6,8,10,12,14,16,18,20
3,6,9,12,15,18,21,24,27,30
4,8,12,16,20,24,28,32,36,40
5,10,15,20,25,30,35,40,45,50
6,12,18,24,30,36,42,48,54,60
7,14,21,28,35,42,49,56,63,70
8,16,24,32,40,48,56,64,72,80
9,18,27,36,45,54,63,72,81,90
10,20,30,40,50,60,70,80,90,100


I've come up with two variations of the same solution:

Variation 1

def grid1(grid_size)
  output = String.new
  for y in 1..grid_size
    line = Array.new
    for x in 1..grid_size
      line << x * y
    end
    output += "#{line.join(",")}\n"
  end

  output
end


Variation 2

def grid(grid_size)
  output = (1..grid_size).to_a.map do |y|
    (1..grid_size).to_a.map{|x| x*y}.join(",")
  end

  output
end


Any other ideas on how to solve this or ways that the current solutions could be improved would be most appreciated!

Solution

return from function anti-pattern

For the second example, doing

x = computation()
x


In a function is an anti-pattern, you should return the result directly:

computation()


It is more common and easier for the same result.

No Array

The first function does not need an array, just append to the string directly.

Code Snippets

x = computation()
x
computation()

Context

StackExchange Code Review Q#112449, answer score: 3

Revisions (0)

No revisions yet.