Mosaic matrix

Revision as of 13:09, 18 February 2022 by PureFox (talk | contribs) (Tried to clarify the task description.)

Draw a 'mosaic' matrix which, for the purposes of this task, is a square matrix of odd order (e.g. 9) which has 1's in alternate cells (both horizontally and vertically) starting with a 1 in the top-left hand cell.

Mosaic matrix is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task

Other cells can either be left blank or filled with some other character.
Mosaic Matrix - image

F#

<lang fsharp> // Four sides of square. Nigel Galloway: February 18th., 2022 let m11 m=Array2D.init m m (fun n g->if (n+g)%2=0 then 1 else 0) printfn "%A\n\n%A" (m11 5) (m11 6) </lang>

Output:
[[1; 0; 1; 0; 1]
 [0; 1; 0; 1; 0]
 [1; 0; 1; 0; 1]
 [0; 1; 0; 1; 0]
 [1; 0; 1; 0; 1]]

[[1; 0; 1; 0; 1; 0]
 [0; 1; 0; 1; 0; 1]
 [1; 0; 1; 0; 1; 0]
 [0; 1; 0; 1; 0; 1]
 [1; 0; 1; 0; 1; 0]
 [0; 1; 0; 1; 0; 1]]

Ring

<lang ring>

  1. Project : Identity Matrix
  2. Date  : 2022/16/02
  3. Author  : Gal Zsolt (~ CalmoSoft ~)
  4. Email  : <calmosoft@gmail.com>

load "stdlib.ring" load "guilib.ring"

size = 8 C_Spacing = 1

C_ButtonBlueStyle = 'border-radius:6px;color:black; background-color: blue' C_ButtonOrangeStyle = 'border-radius:6px;color:black; background-color: orange'

Button = newlist(size,size) LayoutButtonRow = list(size)

app = new qApp {

     win = new qWidget() {

setWindowTitle('Identity Matrix') move(500,100) reSize(600,600) winheight = win.height() fontSize = 18 + (winheight / 100)

	    LayoutButtonMain = new QVBoxLayout()			

LayoutButtonMain.setSpacing(C_Spacing) LayoutButtonMain.setContentsmargins(0,0,0,0)

for Row = 1 to size LayoutButtonRow[Row] = new QHBoxLayout() { setSpacing(C_Spacing) setContentsmargins(0,0,0,0) }

        	 for Col = 1 to size

Button[Row][Col] = new QPushButton(win) {

                                       setSizePolicy(1,1)                                                

}

LayoutButtonRow[Row].AddWidget(Button[Row][Col]) next LayoutButtonMain.AddLayout(LayoutButtonRow[Row]) next

             LayoutDataRow1 = new QHBoxLayout() { setSpacing(C_Spacing) setContentsMargins(0,0,0,0) }
             LayoutButtonMain.AddLayout(LayoutDataRow1)
             setLayout(LayoutButtonMain)
             show()
  }
  pBegin()
  exec()
  }

func pBegin()

    for Row = 1 to size
        for Col = 1 to size 
            if (Row%2 = 1 and Col%2 = 1) or (Row%2 = 0 and Col%2 = 0)
               Button[Row][Col].setStyleSheet(C_ButtonOrangeStyle)
               Button[Row][Col].settext("1")
            ok

next

    next

</lang> Output image: Mosaic Matrix

Wren

Text based

<lang ecmascript>var mosaicMatrix = Fn.new { |n|

   for (i in 0...n) {
       for (j in 0...n) {
           System.write(((i + j) % 2 == 0) ? "1 " : ". ")
       }
       System.print()
   }

}

mosaicMatrix.call(9)</lang>

Output:
1 . 1 . 1 . 1 . 1 
. 1 . 1 . 1 . 1 . 
1 . 1 . 1 . 1 . 1 
. 1 . 1 . 1 . 1 . 
1 . 1 . 1 . 1 . 1 
. 1 . 1 . 1 . 1 . 
1 . 1 . 1 . 1 . 1 
. 1 . 1 . 1 . 1 . 
1 . 1 . 1 . 1 . 1 

Graphical

Library: DOME
Library: Go-fonts

<lang ecmascript>import "dome" for Window import "graphics" for Canvas, Color, Font, ImageData

class Main {

   construct new(n) {
       var size = 60 * n + 10
       Window.resize(size, size)
       Canvas.resize(size, size)
       Window.title = "Mosaic matrix"
       // see Go-fonts page
       Font.load("Go-Regular20", "Go-Regular.ttf", 20)
       Canvas.font = "Go-Regular20"
       var beige = Color.new(245, 245, 220)
       Canvas.cls(Color.lightgray)
       for (x in 0...n) {
           for (y in 0...n) {
               var cx = x*60 + 10
               var cy = y*60 + 10
               if ((x + y) % 2 == 0) {
                   Canvas.rectfill(cx, cy, 50, 50, Color.brown)
                   Canvas.print("1", cx + 20, cy + 15, beige)
                } else {
                   Canvas.rectfill(cx, cy, 50, 50, beige)
                }
           }
       }
       // save to .png file for publication
       var outputImage = ImageData.create("", size, size)
       for (x in 0...size) {
           for (y in 0...size) outputImage.pset(x, y, Canvas.pget(x, y))
       }
       outputImage.saveToFile("mosaic_matrix.png")
   }
   init() {}
   update() {}
   draw(alpha) {}

}

var Game = Main.new(9)</lang>

Output:

https://commons.wikimedia.org/wiki/File:Mosaic_matrix.png