question about complicated compatibility checking

Just starting out? Need help? Post your questions and find answers here.
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

question about complicated compatibility checking

Post by SeregaZ »

i have some table or field 32x32. each item of it can have some value 1 up to 360. and that items must be compatibility each other. for example 1:1 item have 5. for right value - in this case it is 1:2 for 5 value - can be one of a few values. 7, 20, 34, 65 (array probably). if that 1:2 one of them - fine. if is not, check 1:3 value and need to try some value in the middle 1:2 - that can be compatibile with 5 1:1 and for example 1:3 was 85 and change that 1:2 value...

but it was first line. with second line case is much worse. need to chek right value and up value both. i mean 2:1 value must be compatibile with 1:1 and 2:2 same time.

probably structure need to be some kind of:

Code: Select all

stucture compcomp
  array right()
  array up()
endstructure
global dim mainarray.compcomp(360)
how to organise this task? any ideas?
RobertSF
User
User
Posts: 61
Joined: Thu May 03, 2018 4:24 pm

Re: question about complicated compatibility checking

Post by RobertSF »

I'm trying to understand the requirements. You have a 32 x 32. All the cells are full, and you want to calculate if values in one cell are compatible with values in the surrounding cells? When you say 1:3, does that mean row 1, column 3? And you mentioned a few values. 7, 20, 34, 65. Can you explain further?

Image
#NULL
Addict
Addict
Posts: 1499
Joined: Thu Aug 30, 2007 11:54 pm
Location: right here

Re: question about complicated compatibility checking

Post by #NULL »

Is there a minesweeper going on? :D
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

RobertSF, yes. first - row, second collumn.

#NULL, it is map editor for Sega Mega Drive's Dune The Battle For Arrakis :)

this forum have some "spoiler" button?
Image

when you are edit that manualy - it will have some "unsoft" blocks.

Image

so idea is after rough editing start some procedure, which will make that map more "soft".


one of masters says - use some kind of this system:
Image

where that cross is make change box in a center, accordings his left, right, up and down boxes.
Image
User avatar
Olliv
Enthusiast
Enthusiast
Posts: 542
Joined: Tue Sep 22, 2009 10:41 pm

Re: question about complicated compatibility checking

Post by Olliv »

Code: Select all

#Quarter = #Pi / 2.0


TypeOfTileToSearch = ??? ; code of the tile to search


for row = rowMin to rowMax
 for column = columnMin to columnMax
  AroundType = 0
  AroundQty = 0
  for direction = 0 to 3
   x = column + sin(direction * #Quarter)
   y = row - cos(direction * #Quarter)
   if x => columnMin
    if x <= columnMax
     if y => rowMin
      if y <= rowMax
       if myArray(x, y) = TypeOfTileToSearch
        AroundType + (1 << direction)
        AroundQty + 1
       endif
      endif
     endif
    endif
   endif
  next
 ; Here, for each tile, you get
 ; AroundQty : Quantity of specific tile found
 ; AroundType : see below
 next
next
AroundType is between 0 and 15.

examples :
1 = found on the top
2 = found on the right
3 = found on the top AND on the right
etc...

as you mentioned in your last picture :

Code: Select all

0  1  2  3
4  5  6  7
8  9  10 11
12 13 14 15
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

not crear that code for me... i am try to make code, that i have in a head. but it is not fine code, becouse this table of cross - not have whole cases. for example first is whole 4 directions cubs - is sand, but it can have three cases:
Image

so my code cant have break options. it need to "for" for all 360 cases. and only then make some solution for wich cube exactly it need to change.

i am fill only first line of cross on image to see work, or not work my ugly code :)

Code: Select all

Enumeration
  #MAPFile
EndEnumeration

; y:x
Structure maparr
  Array Column.l(0)
EndStructure
Global Dim MAPArray.maparr(0) ; rows

Global MAPType


Structure MAPCrossstructure
  MAPleft.u
  MAPright.u
  MAPup.u
  MAPdown.u
EndStructure
Global Dim MAPCross.MAPCrossstructure(360)

;{ fill cross data - MAPCross(center cub code)\direction
; 127 sand
MAPCross(127)\MAPleft  = 127
MAPCross(127)\MAPright = 127
MAPCross(127)\MAPup    = 127
MAPCross(127)\MAPdown  = 127
; spice in a center of sand
MAPCross(176)\MAPleft  = 127
MAPCross(176)\MAPright = 127
MAPCross(176)\MAPup    = 127
MAPCross(176)\MAPdown  = 127
; earth in a center of sand
MAPCross(128)\MAPleft  = 127
MAPCross(128)\MAPright = 127
MAPCross(128)\MAPup    = 127
MAPCross(128)\MAPdown  = 127
; up = earth 124, 129 up pice of earth on a sand
MAPCross(129)\MAPleft  = 127
MAPCross(129)\MAPright = 127
MAPCross(129)\MAPup    = 124
MAPCross(129)\MAPdown  = 127
; right = earth 124
MAPCross(130)\MAPleft  = 127
MAPCross(130)\MAPright = 124
MAPCross(130)\MAPup    = 127
MAPCross(130)\MAPdown  = 127
; up + right = earth
MAPCross(131)\MAPleft  = 127
MAPCross(131)\MAPright = 124
MAPCross(131)\MAPup    = 124
MAPCross(131)\MAPdown  = 127
;}

Procedure.u MAPSofting(entervalue.u, MAPleft.u, MAPright.u, MAPup.u, MAPdown.u)
  
  ret.u
  
  ret = entervalue ; default
  
  For i = 1 To 360
    check = 4 ; default
    
    If MAPleft ; becouse it can be 0, when cross on a borders
      If MAPleft = MAPCross(i)\MAPleft
        check - 1
      EndIf
    Else
      check - 1 ; if it is 0, means it was found
    EndIf
    
    If MAPright
      If MAPright = MAPCross(i)\MAPright
        check - 1
      EndIf
    Else
      check - 1
    EndIf
    
    If MAPup
      If MAPup = MAPCross(i)\MAPup
        check - 1
      EndIf
    Else
      check - 1
    EndIf
    
    If MAPdown
      If MAPdown = MAPCross(i)\MAPdown
        check - 1
      EndIf
    Else
      check - 1
    EndIf
    
    If check = 0 
      ; full 4 directions is match
      If entervalue = i
        ret = entervalue ; becouse ret can be before changed with ret = i
        Break
      Else
        ;Debug "probably mistake. or = " + Str(entervalue) + ", need = " + Str(i)
        ;Debug "MAPleft = " + Str(MAPleft) + ", MAPright = " + Str(MAPright) + ", MAPup = " + Str(MAPup) + ", MAPdown = " + Str(MAPdown)
        ; return correct value... but it can be Break
        ; becouse same directions cubs can have a few cases.
        ; need to compare for all of them... some how...
        ret = i
      EndIf

    EndIf
    
  Next
  
  If ret <> entervalue
    Debug "probably mistake. or = " + Str(entervalue) + ", need = " + Str(ret)
  EndIf
  
  ProcedureReturn ret
  
EndProcedure

Procedure MAPParse(path$)
  
  plotcolor.l
  
  MAPEditorError = 0
  ReDim MAPArray(0)
  
  ; prepear array
  Select FileSize(path$)
    Case  1024 ;  32x32
      ReDim MAPArray(32)
      For i = 0 To 32
        ReDim MAPArray(i)\Column(32)
      Next

      MAPType = 33

    Case  4096 ;  64x64
      ReDim MAPArray(64)
      For i = 0 To 64
        ReDim MAPArray(i)\Column(64)
      Next

      MAPType = 65
      
    Case 16384 ; 128x128
      ReDim MAPArray(128)
      For i = 0 To 128
        ReDim MAPArray(i)\Column(128)
      Next

      MAPType = 129
      
    Default
      MAPType = 0
      
  EndSelect
  
  If MAPType And ReadFile(#MAPFile, path$)

    x   = 1
    y   = 1
    
      While Eof(#MAPFile) = 0
        ;Debug y
        ;Debug x
        ;Debug ""
        MAPArray(y)\Column(x) = ReadAsciiCharacter(#MAPFile)
                    
        Debug "MAPArray(" + Str(y) + ")\Column(" + Str(x) + ") = " + Str(MAPArray(y)\Column(x)) 
      
        ;MAPArray(y)\Column(x) + #MAPBlock1
      
        x + 1
        If x = MAPType
          y + 1
          x = 1
        EndIf

      Wend
    
    CloseFile(#MAPFile)
    
    MAPLineFirst   = 1
    MAPColumnFirst = 1
    
    ;DrawMap()
    
  EndIf
  
EndProcedure

;MAPParse("F:\DISTR\SEREGASOFT\DUNE\DUE\maps\atr\map_01.bin")

; data
;{
MAPType = 33
MAPLength = MAPType - 1

ReDim MAPArray(MAPLength)
For i = 0 To MAPLength
  ReDim MAPArray(i)\Column(MAPLength)
Next

MAPArray(1)\Column(1) = 159
MAPArray(1)\Column(2) = 159
MAPArray(1)\Column(3) = 159
MAPArray(1)\Column(4) = 159
MAPArray(1)\Column(5) = 159
MAPArray(1)\Column(6) = 159
MAPArray(1)\Column(7) = 158
MAPArray(1)\Column(8) = 159
MAPArray(1)\Column(9) = 151
MAPArray(1)\Column(10) = 86
MAPArray(1)\Column(11) = 127
MAPArray(1)\Column(12) = 127
MAPArray(1)\Column(13) = 127
MAPArray(1)\Column(14) = 127
MAPArray(1)\Column(15) = 128
MAPArray(1)\Column(16) = 129
MAPArray(1)\Column(17) = 131
MAPArray(1)\Column(18) = 143
MAPArray(1)\Column(19) = 143
MAPArray(1)\Column(20) = 143
MAPArray(1)\Column(21) = 141
MAPArray(1)\Column(22) = 86
MAPArray(1)\Column(23) = 88
MAPArray(1)\Column(24) = 146
MAPArray(1)\Column(25) = 158
MAPArray(1)\Column(26) = 154
MAPArray(1)\Column(27) = 155
MAPArray(1)\Column(28) = 127
MAPArray(1)\Column(29) = 182
MAPArray(1)\Column(30) = 191
MAPArray(1)\Column(31) = 196
MAPArray(1)\Column(32) = 191
MAPArray(2)\Column(1) = 159
MAPArray(2)\Column(2) = 159
MAPArray(2)\Column(3) = 159
MAPArray(2)\Column(4) = 159
MAPArray(2)\Column(5) = 159
MAPArray(2)\Column(6) = 158
MAPArray(2)\Column(7) = 159
MAPArray(2)\Column(8) = 154
MAPArray(2)\Column(9) = 152
MAPArray(2)\Column(10) = 127
MAPArray(2)\Column(11) = 127
MAPArray(2)\Column(12) = 127
MAPArray(2)\Column(13) = 127
MAPArray(2)\Column(14) = 127
MAPArray(2)\Column(15) = 127
MAPArray(2)\Column(16) = 127
MAPArray(2)\Column(17) = 127
MAPArray(2)\Column(18) = 60
MAPArray(2)\Column(19) = 139
MAPArray(2)\Column(20) = 137
MAPArray(2)\Column(21) = 129
MAPArray(2)\Column(22) = 127
MAPArray(2)\Column(23) = 127
MAPArray(2)\Column(24) = 88
MAPArray(2)\Column(25) = 89
MAPArray(2)\Column(26) = 87
MAPArray(2)\Column(27) = 127
MAPArray(2)\Column(28) = 178
MAPArray(2)\Column(29) = 191
MAPArray(2)\Column(30) = 198
MAPArray(2)\Column(31) = 207
MAPArray(2)\Column(32) = 206
MAPArray(3)\Column(1) = 158
MAPArray(3)\Column(2) = 159
MAPArray(3)\Column(3) = 159
MAPArray(3)\Column(4) = 159
MAPArray(3)\Column(5) = 159
MAPArray(3)\Column(6) = 154
MAPArray(3)\Column(7) = 156
MAPArray(3)\Column(8) = 153
MAPArray(3)\Column(9) = 86
MAPArray(3)\Column(10) = 127
MAPArray(3)\Column(11) = 127
MAPArray(3)\Column(12) = 127
MAPArray(3)\Column(13) = 127
MAPArray(3)\Column(14) = 127
MAPArray(3)\Column(15) = 127
MAPArray(3)\Column(16) = 127
MAPArray(3)\Column(17) = 127
MAPArray(3)\Column(18) = 127
MAPArray(3)\Column(19) = 128
MAPArray(3)\Column(20) = 127
MAPArray(3)\Column(21) = 127
MAPArray(3)\Column(22) = 127
MAPArray(3)\Column(23) = 127
MAPArray(3)\Column(24) = 127
MAPArray(3)\Column(25) = 127
MAPArray(3)\Column(26) = 127
MAPArray(3)\Column(27) = 127
MAPArray(3)\Column(28) = 180
MAPArray(3)\Column(29) = 183
MAPArray(3)\Column(30) = 68
MAPArray(3)\Column(31) = 207
MAPArray(3)\Column(32) = 201
MAPArray(4)\Column(1) = 159
MAPArray(4)\Column(2) = 159
MAPArray(4)\Column(3) = 159
MAPArray(4)\Column(4) = 158
MAPArray(4)\Column(5) = 154
MAPArray(4)\Column(6) = 155
MAPArray(4)\Column(7) = 127
MAPArray(4)\Column(8) = 127
MAPArray(4)\Column(9) = 127
MAPArray(4)\Column(10) = 128
MAPArray(4)\Column(11) = 134
MAPArray(4)\Column(12) = 63
MAPArray(4)\Column(13) = 127
MAPArray(4)\Column(14) = 127
MAPArray(4)\Column(15) = 127
MAPArray(4)\Column(16) = 127
MAPArray(4)\Column(17) = 127
MAPArray(4)\Column(18) = 127
MAPArray(4)\Column(19) = 127
MAPArray(4)\Column(20) = 127
MAPArray(4)\Column(21) = 127
MAPArray(4)\Column(22) = 127
MAPArray(4)\Column(23) = 127
MAPArray(4)\Column(24) = 127
MAPArray(4)\Column(25) = 132
MAPArray(4)\Column(26) = 127
MAPArray(4)\Column(27) = 176
MAPArray(4)\Column(28) = 179
MAPArray(4)\Column(29) = 191
MAPArray(4)\Column(30) = 187
MAPArray(4)\Column(31) = 193
MAPArray(4)\Column(32) = 192
MAPArray(5)\Column(1) = 159
MAPArray(5)\Column(2) = 159
MAPArray(5)\Column(3) = 154
MAPArray(5)\Column(4) = 156
MAPArray(5)\Column(5) = 87
MAPArray(5)\Column(6) = 127
MAPArray(5)\Column(7) = 127
MAPArray(5)\Column(8) = 127
MAPArray(5)\Column(9) = 127
MAPArray(5)\Column(10) = 61
MAPArray(5)\Column(11) = 143
MAPArray(5)\Column(12) = 143
MAPArray(5)\Column(13) = 142
MAPArray(5)\Column(14) = 140
MAPArray(5)\Column(15) = 127
MAPArray(5)\Column(16) = 127
MAPArray(5)\Column(17) = 127
MAPArray(5)\Column(18) = 132
MAPArray(5)\Column(19) = 127
MAPArray(5)\Column(20) = 127
MAPArray(5)\Column(21) = 132
MAPArray(5)\Column(22) = 128
MAPArray(5)\Column(23) = 132
MAPArray(5)\Column(24) = 134
MAPArray(5)\Column(25) = 141
MAPArray(5)\Column(26) = 127
MAPArray(5)\Column(27) = 127
MAPArray(5)\Column(28) = 127
MAPArray(5)\Column(29) = 183
MAPArray(5)\Column(30) = 184
MAPArray(5)\Column(31) = 179
MAPArray(5)\Column(32) = 191
MAPArray(6)\Column(1) = 158
MAPArray(6)\Column(2) = 159
MAPArray(6)\Column(3) = 151
MAPArray(6)\Column(4) = 127
MAPArray(6)\Column(5) = 127
MAPArray(6)\Column(6) = 127
MAPArray(6)\Column(7) = 127
MAPArray(6)\Column(8) = 127
MAPArray(6)\Column(9) = 134
MAPArray(6)\Column(10) = 100
MAPArray(6)\Column(11) = 174
MAPArray(6)\Column(12) = 160
MAPArray(6)\Column(13) = 161
MAPArray(6)\Column(14) = 169
MAPArray(6)\Column(15) = 63
MAPArray(6)\Column(16) = 127
MAPArray(6)\Column(17) = 61
MAPArray(6)\Column(18) = 143
MAPArray(6)\Column(19) = 140
MAPArray(6)\Column(20) = 61
MAPArray(6)\Column(21) = 143
MAPArray(6)\Column(22) = 142
MAPArray(6)\Column(23) = 143
MAPArray(6)\Column(24) = 143
MAPArray(6)\Column(25) = 62
MAPArray(6)\Column(26) = 127
MAPArray(6)\Column(27) = 127
MAPArray(6)\Column(28) = 127
MAPArray(6)\Column(29) = 177
MAPArray(6)\Column(30) = 127
MAPArray(6)\Column(31) = 127
MAPArray(6)\Column(32) = 177
MAPArray(7)\Column(1) = 159
MAPArray(7)\Column(2) = 154
MAPArray(7)\Column(3) = 152
MAPArray(7)\Column(4) = 127
MAPArray(7)\Column(5) = 127
MAPArray(7)\Column(6) = 127
MAPArray(7)\Column(7) = 127
MAPArray(7)\Column(8) = 127
MAPArray(7)\Column(9) = 131
MAPArray(7)\Column(10) = 175
MAPArray(7)\Column(11) = 167
MAPArray(7)\Column(12) = 162
MAPArray(7)\Column(13) = 163
MAPArray(7)\Column(14) = 164
MAPArray(7)\Column(15) = 143
MAPArray(7)\Column(16) = 142
MAPArray(7)\Column(17) = 143
MAPArray(7)\Column(18) = 139
MAPArray(7)\Column(19) = 143
MAPArray(7)\Column(20) = 143
MAPArray(7)\Column(21) = 139
MAPArray(7)\Column(22) = 143
MAPArray(7)\Column(23) = 137
MAPArray(7)\Column(24) = 129
MAPArray(7)\Column(25) = 127
MAPArray(7)\Column(26) = 127
MAPArray(7)\Column(27) = 147
MAPArray(7)\Column(28) = 149
MAPArray(7)\Column(29) = 149
MAPArray(7)\Column(30) = 149
MAPArray(7)\Column(31) = 127
MAPArray(7)\Column(32) = 127
MAPArray(8)\Column(1) = 154
MAPArray(8)\Column(2) = 155
MAPArray(8)\Column(3) = 127
MAPArray(8)\Column(4) = 127
MAPArray(8)\Column(5) = 127
MAPArray(8)\Column(6) = 127
MAPArray(8)\Column(7) = 127
MAPArray(8)\Column(8) = 127
MAPArray(8)\Column(9) = 128
MAPArray(8)\Column(10) = 129
MAPArray(8)\Column(11) = 60
MAPArray(8)\Column(12) = 165
MAPArray(8)\Column(13) = 166
MAPArray(8)\Column(14) = 167
MAPArray(8)\Column(15) = 139
MAPArray(8)\Column(16) = 143
MAPArray(8)\Column(17) = 62
MAPArray(8)\Column(18) = 61
MAPArray(8)\Column(19) = 143
MAPArray(8)\Column(20) = 141
MAPArray(8)\Column(21) = 132
MAPArray(8)\Column(22) = 129
MAPArray(8)\Column(23) = 127
MAPArray(8)\Column(24) = 127
MAPArray(8)\Column(25) = 127
MAPArray(8)\Column(26) = 144
MAPArray(8)\Column(27) = 150
MAPArray(8)\Column(28) = 158
MAPArray(8)\Column(29) = 159
MAPArray(8)\Column(30) = 158
MAPArray(8)\Column(31) = 157
MAPArray(8)\Column(32) = 149
MAPArray(9)\Column(1) = 155
MAPArray(9)\Column(2) = 127
MAPArray(9)\Column(3) = 127
MAPArray(9)\Column(4) = 180
MAPArray(9)\Column(5) = 180
MAPArray(9)\Column(6) = 176
MAPArray(9)\Column(7) = 182
MAPArray(9)\Column(8) = 67
MAPArray(9)\Column(9) = 127
MAPArray(9)\Column(10) = 127
MAPArray(9)\Column(11) = 127
MAPArray(9)\Column(12) = 129
MAPArray(9)\Column(13) = 135
MAPArray(9)\Column(14) = 143
MAPArray(9)\Column(15) = 63
MAPArray(9)\Column(16) = 133
MAPArray(9)\Column(17) = 134
MAPArray(9)\Column(18) = 173
MAPArray(9)\Column(19) = 174
MAPArray(9)\Column(20) = 143
MAPArray(9)\Column(21) = 137
MAPArray(9)\Column(22) = 128
MAPArray(9)\Column(23) = 127
MAPArray(9)\Column(24) = 127
MAPArray(9)\Column(25) = 127
MAPArray(9)\Column(26) = 88
MAPArray(9)\Column(27) = 146
MAPArray(9)\Column(28) = 159
MAPArray(9)\Column(29) = 159
MAPArray(9)\Column(30) = 159
MAPArray(9)\Column(31) = 159
MAPArray(9)\Column(32) = 159
MAPArray(10)\Column(1) = 127
MAPArray(10)\Column(2) = 127
MAPArray(10)\Column(3) = 182
MAPArray(10)\Column(4) = 191
MAPArray(10)\Column(5) = 191
MAPArray(10)\Column(6) = 190
MAPArray(10)\Column(7) = 191
MAPArray(10)\Column(8) = 191
MAPArray(10)\Column(9) = 188
MAPArray(10)\Column(10) = 127
MAPArray(10)\Column(11) = 127
MAPArray(10)\Column(12) = 127
MAPArray(10)\Column(13) = 131
MAPArray(10)\Column(14) = 143
MAPArray(10)\Column(15) = 139
MAPArray(10)\Column(16) = 137
MAPArray(10)\Column(17) = 131
MAPArray(10)\Column(18) = 175
MAPArray(10)\Column(19) = 167
MAPArray(10)\Column(20) = 62
MAPArray(10)\Column(21) = 127
MAPArray(10)\Column(22) = 127
MAPArray(10)\Column(23) = 132
MAPArray(10)\Column(24) = 127
MAPArray(10)\Column(25) = 127
MAPArray(10)\Column(26) = 127
MAPArray(10)\Column(27) = 88
MAPArray(10)\Column(28) = 146
MAPArray(10)\Column(29) = 158
MAPArray(10)\Column(30) = 159
MAPArray(10)\Column(31) = 159
MAPArray(10)\Column(32) = 159
MAPArray(11)\Column(1) = 127
MAPArray(11)\Column(2) = 127
MAPArray(11)\Column(3) = 179
MAPArray(11)\Column(4) = 191
MAPArray(11)\Column(5) = 191
MAPArray(11)\Column(6) = 191
MAPArray(11)\Column(7) = 191
MAPArray(11)\Column(8) = 191
MAPArray(11)\Column(9) = 191
MAPArray(11)\Column(10) = 184
MAPArray(11)\Column(11) = 127
MAPArray(11)\Column(12) = 128
MAPArray(11)\Column(13) = 127
MAPArray(11)\Column(14) = 129
MAPArray(11)\Column(15) = 180
MAPArray(11)\Column(16) = 127
MAPArray(11)\Column(17) = 180
MAPArray(11)\Column(18) = 129
MAPArray(11)\Column(19) = 129
MAPArray(11)\Column(20) = 127
MAPArray(11)\Column(21) = 127
MAPArray(11)\Column(22) = 61
MAPArray(11)\Column(23) = 141
MAPArray(11)\Column(24) = 128
MAPArray(11)\Column(25) = 127
MAPArray(11)\Column(26) = 127
MAPArray(11)\Column(27) = 127
MAPArray(11)\Column(28) = 88
MAPArray(11)\Column(29) = 89
MAPArray(11)\Column(30) = 146
MAPArray(11)\Column(31) = 158
MAPArray(11)\Column(32) = 159
MAPArray(12)\Column(1) = 127
MAPArray(12)\Column(2) = 127
MAPArray(12)\Column(3) = 178
MAPArray(12)\Column(4) = 191
MAPArray(12)\Column(5) = 187
MAPArray(12)\Column(6) = 187
MAPArray(12)\Column(7) = 191
MAPArray(12)\Column(8) = 191
MAPArray(12)\Column(9) = 191
MAPArray(12)\Column(10) = 184
MAPArray(12)\Column(11) = 127
MAPArray(12)\Column(12) = 127
MAPArray(12)\Column(13) = 127
MAPArray(12)\Column(14) = 182
MAPArray(12)\Column(15) = 196
MAPArray(12)\Column(16) = 190
MAPArray(12)\Column(17) = 196
MAPArray(12)\Column(18) = 190
MAPArray(12)\Column(19) = 188
MAPArray(12)\Column(20) = 176
MAPArray(12)\Column(21) = 134
MAPArray(12)\Column(22) = 139
MAPArray(12)\Column(23) = 143
MAPArray(12)\Column(24) = 63
MAPArray(12)\Column(25) = 127
MAPArray(12)\Column(26) = 127
MAPArray(12)\Column(27) = 127
MAPArray(12)\Column(28) = 127
MAPArray(12)\Column(29) = 127
MAPArray(12)\Column(30) = 88
MAPArray(12)\Column(31) = 146
MAPArray(12)\Column(32) = 159
MAPArray(13)\Column(1) = 127
MAPArray(13)\Column(2) = 127
MAPArray(13)\Column(3) = 176
MAPArray(13)\Column(4) = 177
MAPArray(13)\Column(5) = 127
MAPArray(13)\Column(6) = 65
MAPArray(13)\Column(7) = 191
MAPArray(13)\Column(8) = 192
MAPArray(13)\Column(9) = 189
MAPArray(13)\Column(10) = 127
MAPArray(13)\Column(11) = 127
MAPArray(13)\Column(12) = 127
MAPArray(13)\Column(13) = 178
MAPArray(13)\Column(14) = 191
MAPArray(13)\Column(15) = 199
MAPArray(13)\Column(16) = 202
MAPArray(13)\Column(17) = 207
MAPArray(13)\Column(18) = 206
MAPArray(13)\Column(19) = 200
MAPArray(13)\Column(20) = 184
MAPArray(13)\Column(21) = 129
MAPArray(13)\Column(22) = 128
MAPArray(13)\Column(23) = 135
MAPArray(13)\Column(24) = 143
MAPArray(13)\Column(25) = 142
MAPArray(13)\Column(26) = 136
MAPArray(13)\Column(27) = 127
MAPArray(13)\Column(28) = 127
MAPArray(13)\Column(29) = 127
MAPArray(13)\Column(30) = 127
MAPArray(13)\Column(31) = 88
MAPArray(13)\Column(32) = 89
MAPArray(14)\Column(1) = 127
MAPArray(14)\Column(2) = 127
MAPArray(14)\Column(3) = 127
MAPArray(14)\Column(4) = 180
MAPArray(14)\Column(5) = 182
MAPArray(14)\Column(6) = 69
MAPArray(14)\Column(7) = 206
MAPArray(14)\Column(8) = 200
MAPArray(14)\Column(9) = 191
MAPArray(14)\Column(10) = 184
MAPArray(14)\Column(11) = 127
MAPArray(14)\Column(12) = 127
MAPArray(14)\Column(13) = 176
MAPArray(14)\Column(14) = 179
MAPArray(14)\Column(15) = 193
MAPArray(14)\Column(16) = 187
MAPArray(14)\Column(17) = 193
MAPArray(14)\Column(18) = 193
MAPArray(14)\Column(19) = 185
MAPArray(14)\Column(20) = 127
MAPArray(14)\Column(21) = 127
MAPArray(14)\Column(22) = 130
MAPArray(14)\Column(23) = 139
MAPArray(14)\Column(24) = 137
MAPArray(14)\Column(25) = 129
MAPArray(14)\Column(26) = 127
MAPArray(14)\Column(27) = 127
MAPArray(14)\Column(28) = 127
MAPArray(14)\Column(29) = 127
MAPArray(14)\Column(30) = 127
MAPArray(14)\Column(31) = 127
MAPArray(14)\Column(32) = 127
MAPArray(15)\Column(1) = 67
MAPArray(15)\Column(2) = 127
MAPArray(15)\Column(3) = 182
MAPArray(15)\Column(4) = 191
MAPArray(15)\Column(5) = 198
MAPArray(15)\Column(6) = 207
MAPArray(15)\Column(7) = 205
MAPArray(15)\Column(8) = 191
MAPArray(15)\Column(9) = 66
MAPArray(15)\Column(10) = 127
MAPArray(15)\Column(11) = 127
MAPArray(15)\Column(12) = 127
MAPArray(15)\Column(13) = 127
MAPArray(15)\Column(14) = 127
MAPArray(15)\Column(15) = 177
MAPArray(15)\Column(16) = 127
MAPArray(15)\Column(17) = 177
MAPArray(15)\Column(18) = 177
MAPArray(15)\Column(19) = 147
MAPArray(15)\Column(20) = 148
MAPArray(15)\Column(21) = 86
MAPArray(15)\Column(22) = 147
MAPArray(15)\Column(23) = 148
MAPArray(15)\Column(24) = 128
MAPArray(15)\Column(25) = 127
MAPArray(15)\Column(26) = 127
MAPArray(15)\Column(27) = 127
MAPArray(15)\Column(28) = 127
MAPArray(15)\Column(29) = 127
MAPArray(15)\Column(30) = 127
MAPArray(15)\Column(31) = 127
MAPArray(15)\Column(32) = 127
MAPArray(16)\Column(1) = 187
MAPArray(16)\Column(2) = 186
MAPArray(16)\Column(3) = 191
MAPArray(16)\Column(4) = 192
MAPArray(16)\Column(5) = 199
MAPArray(16)\Column(6) = 201
MAPArray(16)\Column(7) = 193
MAPArray(16)\Column(8) = 185
MAPArray(16)\Column(9) = 176
MAPArray(16)\Column(10) = 127
MAPArray(16)\Column(11) = 134
MAPArray(16)\Column(12) = 140
MAPArray(16)\Column(13) = 132
MAPArray(16)\Column(14) = 127
MAPArray(16)\Column(15) = 127
MAPArray(16)\Column(16) = 86
MAPArray(16)\Column(17) = 147
MAPArray(16)\Column(18) = 98
MAPArray(16)\Column(19) = 150
MAPArray(16)\Column(20) = 157
MAPArray(16)\Column(21) = 90
MAPArray(16)\Column(22) = 150
MAPArray(16)\Column(23) = 157
MAPArray(16)\Column(24) = 148
MAPArray(16)\Column(25) = 86
MAPArray(16)\Column(26) = 127
MAPArray(16)\Column(27) = 127
MAPArray(16)\Column(28) = 127
MAPArray(16)\Column(29) = 127
MAPArray(16)\Column(30) = 127
MAPArray(16)\Column(31) = 127
MAPArray(16)\Column(32) = 127
MAPArray(17)\Column(1) = 148
MAPArray(17)\Column(2) = 176
MAPArray(17)\Column(3) = 179
MAPArray(17)\Column(4) = 187
MAPArray(17)\Column(5) = 193
MAPArray(17)\Column(6) = 192
MAPArray(17)\Column(7) = 189
MAPArray(17)\Column(8) = 127
MAPArray(17)\Column(9) = 130
MAPArray(17)\Column(10) = 142
MAPArray(17)\Column(11) = 139
MAPArray(17)\Column(12) = 143
MAPArray(17)\Column(13) = 143
MAPArray(17)\Column(14) = 140
MAPArray(17)\Column(15) = 128
MAPArray(17)\Column(16) = 144
MAPArray(17)\Column(17) = 150
MAPArray(17)\Column(18) = 159
MAPArray(17)\Column(19) = 159
MAPArray(17)\Column(20) = 159
MAPArray(17)\Column(21) = 159
MAPArray(17)\Column(22) = 159
MAPArray(17)\Column(23) = 159
MAPArray(17)\Column(24) = 157
MAPArray(17)\Column(25) = 148
MAPArray(17)\Column(26) = 127
MAPArray(17)\Column(27) = 127
MAPArray(17)\Column(28) = 127
MAPArray(17)\Column(29) = 127
MAPArray(17)\Column(30) = 127
MAPArray(17)\Column(31) = 127
MAPArray(17)\Column(32) = 127
MAPArray(18)\Column(1) = 157
MAPArray(18)\Column(2) = 127
MAPArray(18)\Column(3) = 86
MAPArray(18)\Column(4) = 127
MAPArray(18)\Column(5) = 64
MAPArray(18)\Column(6) = 187
MAPArray(18)\Column(7) = 185
MAPArray(18)\Column(8) = 128
MAPArray(18)\Column(9) = 132
MAPArray(18)\Column(10) = 133
MAPArray(18)\Column(11) = 61
MAPArray(18)\Column(12) = 143
MAPArray(18)\Column(13) = 143
MAPArray(18)\Column(14) = 143
MAPArray(18)\Column(15) = 63
MAPArray(18)\Column(16) = 88
MAPArray(18)\Column(17) = 146
MAPArray(18)\Column(18) = 158
MAPArray(18)\Column(19) = 159
MAPArray(18)\Column(20) = 159
MAPArray(18)\Column(21) = 159
MAPArray(18)\Column(22) = 159
MAPArray(18)\Column(23) = 159
MAPArray(18)\Column(24) = 158
MAPArray(18)\Column(25) = 157
MAPArray(18)\Column(26) = 148
MAPArray(18)\Column(27) = 127
MAPArray(18)\Column(28) = 127
MAPArray(18)\Column(29) = 127
MAPArray(18)\Column(30) = 127
MAPArray(18)\Column(31) = 127
MAPArray(18)\Column(32) = 127
MAPArray(19)\Column(1) = 158
MAPArray(19)\Column(2) = 157
MAPArray(19)\Column(3) = 148
MAPArray(19)\Column(4) = 127
MAPArray(19)\Column(5) = 127
MAPArray(19)\Column(6) = 127
MAPArray(19)\Column(7) = 132
MAPArray(19)\Column(8) = 134
MAPArray(19)\Column(9) = 143
MAPArray(19)\Column(10) = 143
MAPArray(19)\Column(11) = 143
MAPArray(19)\Column(12) = 143
MAPArray(19)\Column(13) = 143
MAPArray(19)\Column(14) = 143
MAPArray(19)\Column(15) = 143
MAPArray(19)\Column(16) = 136
MAPArray(19)\Column(17) = 88
MAPArray(19)\Column(18) = 89
MAPArray(19)\Column(19) = 146
MAPArray(19)\Column(20) = 158
MAPArray(19)\Column(21) = 159
MAPArray(19)\Column(22) = 159
MAPArray(19)\Column(23) = 159
MAPArray(19)\Column(24) = 159
MAPArray(19)\Column(25) = 159
MAPArray(19)\Column(26) = 157
MAPArray(19)\Column(27) = 148
MAPArray(19)\Column(28) = 127
MAPArray(19)\Column(29) = 127
MAPArray(19)\Column(30) = 127
MAPArray(19)\Column(31) = 127
MAPArray(19)\Column(32) = 127
MAPArray(20)\Column(1) = 159
MAPArray(20)\Column(2) = 159
MAPArray(20)\Column(3) = 151
MAPArray(20)\Column(4) = 86
MAPArray(20)\Column(5) = 127
MAPArray(20)\Column(6) = 134
MAPArray(20)\Column(7) = 143
MAPArray(20)\Column(8) = 143
MAPArray(20)\Column(9) = 143
MAPArray(20)\Column(10) = 143
MAPArray(20)\Column(11) = 143
MAPArray(20)\Column(12) = 143
MAPArray(20)\Column(13) = 143
MAPArray(20)\Column(14) = 143
MAPArray(20)\Column(15) = 141
MAPArray(20)\Column(16) = 127
MAPArray(20)\Column(17) = 132
MAPArray(20)\Column(18) = 127
MAPArray(20)\Column(19) = 88
MAPArray(20)\Column(20) = 89
MAPArray(20)\Column(21) = 89
MAPArray(20)\Column(22) = 89
MAPArray(20)\Column(23) = 146
MAPArray(20)\Column(24) = 158
MAPArray(20)\Column(25) = 159
MAPArray(20)\Column(26) = 154
MAPArray(20)\Column(27) = 155
MAPArray(20)\Column(28) = 127
MAPArray(20)\Column(29) = 127
MAPArray(20)\Column(30) = 127
MAPArray(20)\Column(31) = 127
MAPArray(20)\Column(32) = 127
MAPArray(21)\Column(1) = 159
MAPArray(21)\Column(2) = 159
MAPArray(21)\Column(3) = 157
MAPArray(21)\Column(4) = 148
MAPArray(21)\Column(5) = 130
MAPArray(21)\Column(6) = 143
MAPArray(21)\Column(7) = 143
MAPArray(21)\Column(8) = 143
MAPArray(21)\Column(9) = 143
MAPArray(21)\Column(10) = 143
MAPArray(21)\Column(11) = 143
MAPArray(21)\Column(12) = 143
MAPArray(21)\Column(13) = 143
MAPArray(21)\Column(14) = 143
MAPArray(21)\Column(15) = 143
MAPArray(21)\Column(16) = 138
MAPArray(21)\Column(17) = 143
MAPArray(21)\Column(18) = 140
MAPArray(21)\Column(19) = 127
MAPArray(21)\Column(20) = 86
MAPArray(21)\Column(21) = 127
MAPArray(21)\Column(22) = 127
MAPArray(21)\Column(23) = 88
MAPArray(21)\Column(24) = 146
MAPArray(21)\Column(25) = 154
MAPArray(21)\Column(26) = 155
MAPArray(21)\Column(27) = 127
MAPArray(21)\Column(28) = 127
MAPArray(21)\Column(29) = 127
MAPArray(21)\Column(30) = 127
MAPArray(21)\Column(31) = 127
MAPArray(21)\Column(32) = 127
MAPArray(22)\Column(1) = 159
MAPArray(22)\Column(2) = 159
MAPArray(22)\Column(3) = 154
MAPArray(22)\Column(4) = 152
MAPArray(22)\Column(5) = 127
MAPArray(22)\Column(6) = 135
MAPArray(22)\Column(7) = 143
MAPArray(22)\Column(8) = 143
MAPArray(22)\Column(9) = 143
MAPArray(22)\Column(10) = 143
MAPArray(22)\Column(11) = 143
MAPArray(22)\Column(12) = 143
MAPArray(22)\Column(13) = 143
MAPArray(22)\Column(14) = 143
MAPArray(22)\Column(15) = 143
MAPArray(22)\Column(16) = 140
MAPArray(22)\Column(17) = 135
MAPArray(22)\Column(18) = 143
MAPArray(22)\Column(19) = 136
MAPArray(22)\Column(20) = 127
MAPArray(22)\Column(21) = 127
MAPArray(22)\Column(22) = 127
MAPArray(22)\Column(23) = 86
MAPArray(22)\Column(24) = 88
MAPArray(22)\Column(25) = 87
MAPArray(22)\Column(26) = 127
MAPArray(22)\Column(27) = 127
MAPArray(22)\Column(28) = 127
MAPArray(22)\Column(29) = 127
MAPArray(22)\Column(30) = 127
MAPArray(22)\Column(31) = 127
MAPArray(22)\Column(32) = 127
MAPArray(23)\Column(1) = 158
MAPArray(23)\Column(2) = 154
MAPArray(23)\Column(3) = 155
MAPArray(23)\Column(4) = 127
MAPArray(23)\Column(5) = 127
MAPArray(23)\Column(6) = 131
MAPArray(23)\Column(7) = 143
MAPArray(23)\Column(8) = 143
MAPArray(23)\Column(9) = 143
MAPArray(23)\Column(10) = 143
MAPArray(23)\Column(11) = 143
MAPArray(23)\Column(12) = 143
MAPArray(23)\Column(13) = 143
MAPArray(23)\Column(14) = 143
MAPArray(23)\Column(15) = 143
MAPArray(23)\Column(16) = 139
MAPArray(23)\Column(17) = 143
MAPArray(23)\Column(18) = 137
MAPArray(23)\Column(19) = 128
MAPArray(23)\Column(20) = 134
MAPArray(23)\Column(21) = 140
MAPArray(23)\Column(22) = 127
MAPArray(23)\Column(23) = 132
MAPArray(23)\Column(24) = 127
MAPArray(23)\Column(25) = 127
MAPArray(23)\Column(26) = 127
MAPArray(23)\Column(27) = 127
MAPArray(23)\Column(28) = 127
MAPArray(23)\Column(29) = 127
MAPArray(23)\Column(30) = 127
MAPArray(23)\Column(31) = 127
MAPArray(23)\Column(32) = 127
MAPArray(24)\Column(1) = 89
MAPArray(24)\Column(2) = 87
MAPArray(24)\Column(3) = 127
MAPArray(24)\Column(4) = 127
MAPArray(24)\Column(5) = 127
MAPArray(24)\Column(6) = 128
MAPArray(24)\Column(7) = 60
MAPArray(24)\Column(8) = 143
MAPArray(24)\Column(9) = 139
MAPArray(24)\Column(10) = 143
MAPArray(24)\Column(11) = 143
MAPArray(24)\Column(12) = 143
MAPArray(24)\Column(13) = 143
MAPArray(24)\Column(14) = 143
MAPArray(24)\Column(15) = 141
MAPArray(24)\Column(16) = 127
MAPArray(24)\Column(17) = 129
MAPArray(24)\Column(18) = 127
MAPArray(24)\Column(19) = 61
MAPArray(24)\Column(20) = 143
MAPArray(24)\Column(21) = 143
MAPArray(24)\Column(22) = 138
MAPArray(24)\Column(23) = 143
MAPArray(24)\Column(24) = 142
MAPArray(24)\Column(25) = 142
MAPArray(24)\Column(26) = 136
MAPArray(24)\Column(27) = 127
MAPArray(24)\Column(28) = 180
MAPArray(24)\Column(29) = 176
MAPArray(24)\Column(30) = 182
MAPArray(24)\Column(31) = 188
MAPArray(24)\Column(32) = 127
MAPArray(25)\Column(1) = 127
MAPArray(25)\Column(2) = 127
MAPArray(25)\Column(3) = 127
MAPArray(25)\Column(4) = 127
MAPArray(25)\Column(5) = 127
MAPArray(25)\Column(6) = 127
MAPArray(25)\Column(7) = 127
MAPArray(25)\Column(8) = 131
MAPArray(25)\Column(9) = 136
MAPArray(25)\Column(10) = 129
MAPArray(25)\Column(11) = 60
MAPArray(25)\Column(12) = 143
MAPArray(25)\Column(13) = 100
MAPArray(25)\Column(14) = 174
MAPArray(25)\Column(15) = 137
MAPArray(25)\Column(16) = 127
MAPArray(25)\Column(17) = 127
MAPArray(25)\Column(18) = 134
MAPArray(25)\Column(19) = 143
MAPArray(25)\Column(20) = 137
MAPArray(25)\Column(21) = 135
MAPArray(25)\Column(22) = 136
MAPArray(25)\Column(23) = 60
MAPArray(25)\Column(24) = 143
MAPArray(25)\Column(25) = 62
MAPArray(25)\Column(26) = 178
MAPArray(25)\Column(27) = 186
MAPArray(25)\Column(28) = 191
MAPArray(25)\Column(29) = 190
MAPArray(25)\Column(30) = 196
MAPArray(25)\Column(31) = 191
MAPArray(25)\Column(32) = 184
MAPArray(26)\Column(1) = 127
MAPArray(26)\Column(2) = 127
MAPArray(26)\Column(3) = 127
MAPArray(26)\Column(4) = 127
MAPArray(26)\Column(5) = 127
MAPArray(26)\Column(6) = 127
MAPArray(26)\Column(7) = 127
MAPArray(26)\Column(8) = 127
MAPArray(26)\Column(9) = 127
MAPArray(26)\Column(10) = 127
MAPArray(26)\Column(11) = 128
MAPArray(26)\Column(12) = 135
MAPArray(26)\Column(13) = 175
MAPArray(26)\Column(14) = 167
MAPArray(26)\Column(15) = 136
MAPArray(26)\Column(16) = 127
MAPArray(26)\Column(17) = 127
MAPArray(26)\Column(18) = 131
MAPArray(26)\Column(19) = 143
MAPArray(26)\Column(20) = 138
MAPArray(26)\Column(21) = 143
MAPArray(26)\Column(22) = 63
MAPArray(26)\Column(23) = 127
MAPArray(26)\Column(24) = 129
MAPArray(26)\Column(25) = 127
MAPArray(26)\Column(26) = 182
MAPArray(26)\Column(27) = 190
MAPArray(26)\Column(28) = 191
MAPArray(26)\Column(29) = 198
MAPArray(26)\Column(30) = 205
MAPArray(26)\Column(31) = 189
MAPArray(26)\Column(32) = 127
MAPArray(27)\Column(1) = 128
MAPArray(27)\Column(2) = 132
MAPArray(27)\Column(3) = 127
MAPArray(27)\Column(4) = 127
MAPArray(27)\Column(5) = 127
MAPArray(27)\Column(6) = 127
MAPArray(27)\Column(7) = 127
MAPArray(27)\Column(8) = 127
MAPArray(27)\Column(9) = 127
MAPArray(27)\Column(10) = 127
MAPArray(27)\Column(11) = 127
MAPArray(27)\Column(12) = 131
MAPArray(27)\Column(13) = 141
MAPArray(27)\Column(14) = 129
MAPArray(27)\Column(15) = 128
MAPArray(27)\Column(16) = 127
MAPArray(27)\Column(17) = 127
MAPArray(27)\Column(18) = 127
MAPArray(27)\Column(19) = 129
MAPArray(27)\Column(20) = 130
MAPArray(27)\Column(21) = 143
MAPArray(27)\Column(22) = 137
MAPArray(27)\Column(23) = 127
MAPArray(27)\Column(24) = 176
MAPArray(27)\Column(25) = 182
MAPArray(27)\Column(26) = 196
MAPArray(27)\Column(27) = 191
MAPArray(27)\Column(28) = 198
MAPArray(27)\Column(29) = 207
MAPArray(27)\Column(30) = 201
MAPArray(27)\Column(31) = 191
MAPArray(27)\Column(32) = 184
MAPArray(28)\Column(1) = 142
MAPArray(28)\Column(2) = 139
MAPArray(28)\Column(3) = 140
MAPArray(28)\Column(4) = 127
MAPArray(28)\Column(5) = 127
MAPArray(28)\Column(6) = 127
MAPArray(28)\Column(7) = 127
MAPArray(28)\Column(8) = 127
MAPArray(28)\Column(9) = 127
MAPArray(28)\Column(10) = 127
MAPArray(28)\Column(11) = 127
MAPArray(28)\Column(12) = 127
MAPArray(28)\Column(13) = 129
MAPArray(28)\Column(14) = 127
MAPArray(28)\Column(15) = 127
MAPArray(28)\Column(16) = 127
MAPArray(28)\Column(17) = 127
MAPArray(28)\Column(18) = 127
MAPArray(28)\Column(19) = 127
MAPArray(28)\Column(20) = 127
MAPArray(28)\Column(21) = 129
MAPArray(28)\Column(22) = 127
MAPArray(28)\Column(23) = 127
MAPArray(28)\Column(24) = 178
MAPArray(28)\Column(25) = 194
MAPArray(28)\Column(26) = 207
MAPArray(28)\Column(27) = 202
MAPArray(28)\Column(28) = 203
MAPArray(28)\Column(29) = 201
MAPArray(28)\Column(30) = 187
MAPArray(28)\Column(31) = 66
MAPArray(28)\Column(32) = 127
MAPArray(29)\Column(1) = 141
MAPArray(29)\Column(2) = 127
MAPArray(29)\Column(3) = 133
MAPArray(29)\Column(4) = 132
MAPArray(29)\Column(5) = 127
MAPArray(29)\Column(6) = 127
MAPArray(29)\Column(7) = 127
MAPArray(29)\Column(8) = 127
MAPArray(29)\Column(9) = 127
MAPArray(29)\Column(10) = 127
MAPArray(29)\Column(11) = 127
MAPArray(29)\Column(12) = 180
MAPArray(29)\Column(13) = 180
MAPArray(29)\Column(14) = 180
MAPArray(29)\Column(15) = 127
MAPArray(29)\Column(16) = 180
MAPArray(29)\Column(17) = 127
MAPArray(29)\Column(18) = 127
MAPArray(29)\Column(19) = 127
MAPArray(29)\Column(20) = 127
MAPArray(29)\Column(21) = 127
MAPArray(29)\Column(22) = 127
MAPArray(29)\Column(23) = 127
MAPArray(29)\Column(24) = 127
MAPArray(29)\Column(25) = 179
MAPArray(29)\Column(26) = 193
MAPArray(29)\Column(27) = 191
MAPArray(29)\Column(28) = 187
MAPArray(29)\Column(29) = 185
MAPArray(29)\Column(30) = 176
MAPArray(29)\Column(31) = 127
MAPArray(29)\Column(32) = 127
MAPArray(30)\Column(1) = 143
MAPArray(30)\Column(2) = 142
MAPArray(30)\Column(3) = 143
MAPArray(30)\Column(4) = 141
MAPArray(30)\Column(5) = 128
MAPArray(30)\Column(6) = 127
MAPArray(30)\Column(7) = 127
MAPArray(30)\Column(8) = 127
MAPArray(30)\Column(9) = 127
MAPArray(30)\Column(10) = 176
MAPArray(30)\Column(11) = 65
MAPArray(30)\Column(12) = 191
MAPArray(30)\Column(13) = 191
MAPArray(30)\Column(14) = 196
MAPArray(30)\Column(15) = 190
MAPArray(30)\Column(16) = 191
MAPArray(30)\Column(17) = 184
MAPArray(30)\Column(18) = 127
MAPArray(30)\Column(19) = 127
MAPArray(30)\Column(20) = 127
MAPArray(30)\Column(21) = 127
MAPArray(30)\Column(22) = 127
MAPArray(30)\Column(23) = 127
MAPArray(30)\Column(24) = 127
MAPArray(30)\Column(25) = 127
MAPArray(30)\Column(26) = 177
MAPArray(30)\Column(27) = 177
MAPArray(30)\Column(28) = 127
MAPArray(30)\Column(29) = 127
MAPArray(30)\Column(30) = 127
MAPArray(30)\Column(31) = 127
MAPArray(30)\Column(32) = 127
MAPArray(31)\Column(1) = 143
MAPArray(31)\Column(2) = 143
MAPArray(31)\Column(3) = 143
MAPArray(31)\Column(4) = 143
MAPArray(31)\Column(5) = 63
MAPArray(31)\Column(6) = 134
MAPArray(31)\Column(7) = 63
MAPArray(31)\Column(8) = 127
MAPArray(31)\Column(9) = 127
MAPArray(31)\Column(10) = 178
MAPArray(31)\Column(11) = 191
MAPArray(31)\Column(12) = 187
MAPArray(31)\Column(13) = 187
MAPArray(31)\Column(14) = 193
MAPArray(31)\Column(15) = 192
MAPArray(31)\Column(16) = 185
MAPArray(31)\Column(17) = 127
MAPArray(31)\Column(18) = 127
MAPArray(31)\Column(19) = 127
MAPArray(31)\Column(20) = 127
MAPArray(31)\Column(21) = 127
MAPArray(31)\Column(22) = 127
MAPArray(31)\Column(23) = 127
MAPArray(31)\Column(24) = 127
MAPArray(31)\Column(25) = 127
MAPArray(31)\Column(26) = 127
MAPArray(31)\Column(27) = 127
MAPArray(31)\Column(28) = 127
MAPArray(31)\Column(29) = 127
MAPArray(31)\Column(30) = 147
MAPArray(31)\Column(31) = 149
MAPArray(31)\Column(32) = 149
MAPArray(32)\Column(1) = 160
MAPArray(32)\Column(2) = 161
MAPArray(32)\Column(3) = 169
MAPArray(32)\Column(4) = 173
MAPArray(32)\Column(5) = 174
MAPArray(32)\Column(6) = 143
MAPArray(32)\Column(7) = 141
MAPArray(32)\Column(8) = 127
MAPArray(32)\Column(9) = 127
MAPArray(32)\Column(10) = 127
MAPArray(32)\Column(11) = 177
MAPArray(32)\Column(12) = 127
MAPArray(32)\Column(13) = 127
MAPArray(32)\Column(14) = 177
MAPArray(32)\Column(15) = 177
MAPArray(32)\Column(16) = 176
MAPArray(32)\Column(17) = 127
MAPArray(32)\Column(18) = 127
MAPArray(32)\Column(19) = 127
MAPArray(32)\Column(20) = 127
MAPArray(32)\Column(21) = 127
MAPArray(32)\Column(22) = 127
MAPArray(32)\Column(23) = 127
MAPArray(32)\Column(24) = 127
MAPArray(32)\Column(25) = 127
MAPArray(32)\Column(26) = 127
MAPArray(32)\Column(27) = 127
MAPArray(32)\Column(28) = 147
MAPArray(32)\Column(29) = 90
MAPArray(32)\Column(30) = 150
MAPArray(32)\Column(31) = 158
MAPArray(32)\Column(32) = 159
;}

For x = 1 To MAPLength
  For y = 1 To MAPLength
    ; reset direction values
    MAPleft = 0 : MAPright = 0 : MAPup = 0 : MAPdown = 0
    
    ; set direction values
    If x > 1
      MAPleft  = MAPArray(y)\Column(x-1)
    EndIf
    If x < MAPLength
      MAPright = MAPArray(y)\Column(x+1)
    EndIf
    If y > 1
      MAPup    = MAPArray(y-1)\Column(x)
    EndIf
    If y < MAPLength
      MAPdown  = MAPArray(y+1)\Column(x)
    EndIf
    
    MAPArray(y)\Column(x) = MAPSofting(MAPArray(y)\Column(x), MAPleft, MAPright, MAPup, MAPdown)
    
  Next
Next


*****

later: was update MAPSofting(), and second item - i need to make not 360 existing cubs, but it need to be array with any cross cases. and probably it will be a very big array. and i thing collect all that cases of cross by reading originals maps and storage different cases in that maps. heh... probably problem solved :)
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

idea was good, but practice is sad. after parsing 18 maps and create array with any cases of cross - it is create almost 4 mb and 140k strings. IDE of PB now become slow motion :)
#NULL
Addict
Addict
Posts: 1499
Joined: Thu Aug 30, 2007 11:54 pm
Location: right here

Re: question about complicated compatibility checking

Post by #NULL »

Not sure what you are doing, but I just made your result somewhat visible. FWIW :)

Code: Select all


; [you previous code here]


;EnableExplicit
Define ww, wh, style, win, canvas, event, quit

ww=800
wh=600
style | #PB_Window_ScreenCentered
style | #PB_Window_SystemMenu
style | #PB_Window_MinimizeGadget

win = OpenWindow(#PB_Any, 50,100, ww,wh, "", style)
AddKeyboardShortcut(win, #PB_Shortcut_Escape, 10)
canvas = CanvasGadget(#PB_Any, 0, 0, ww, wh, #PB_Canvas_Keyboard)
SetActiveGadget(canvas)

;font = LoadFont(#PB_Any, "terminal", 5)
;font = LoadFont(#PB_Any, "terminal", 8)
;font = LoadFont(#PB_Any, "ms gothic", 8)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  font = LoadFont(#PB_Any, "courier new", 8)
CompilerElse
  font = LoadFont(#PB_Any, "monospace", 8)
CompilerEndIf


StartDrawing(CanvasOutput(canvas))
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, OutputWidth(), OutputHeight(), $00000000)
DrawingFont(FontID(font))
w = 25
For x = 1 To MAPLength
  For y = 1 To MAPLength
    DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Outlined | #PB_2DDrawing_Transparent)
    Box( (x * w), (y * w), (w), (w), $ff00ff00)
    DrawingMode(#PB_2DDrawing_AlphaBlend |                          #PB_2DDrawing_Transparent)
    Box( (x * w + 1), (y * w + 1), (w - 2), (w - 2), $ff000000 | MAPArray(y)\Column(x))
    DrawText( (x * w + 1), (y * w + 1), Str(MAPArray(y)\Column(x)))
    ;MAPArray(y)\Column(x) = MAPSofting(MAPArray(y)\Column(x), MAPleft, MAPright, MAPup, MAPdown)
  Next
Next
StopDrawing()

Repeat
  If IsWindow(win) ;{
    Repeat
      event   = WaitWindowEvent(100) ; (without a timeout 'Until Not event' won't happen!)
      Select event
        Case #PB_Event_CloseWindow
          quit = #True
        Case #PB_Event_Menu
          Select EventMenu()
            Case 10
              quit = #True
          EndSelect
      EndSelect
    Until Not event
    ;}
  EndIf
  
Until quit
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

idea is get all cases, what happen in existing, ready to use, without error, maps - i mean parse this maps like cross system with 5 values. starts from 2:2 and to 31:31 for 32 size map and to 63:63 for 64 maps. 128 maps is invalid. so i am not parse that 128.

so this parse create a 23 000 cases for compatibility boxes. it some kind when system study itself :)

Code: Select all

; cross data
MAPCross(1)\MAPCenter   = 159
MAPCross(1)\MAPleft  = 159
MAPCross(1)\MAPright = 159
MAPCross(1)\MAPup       = 159
MAPCross(1)\MAPdown     = 159
****
MAPCross(1566)\MAPCenter   = 143
MAPCross(1566)\MAPleft  = 139
MAPCross(1566)\MAPright = 136
MAPCross(1566)\MAPup       = 141
MAPCross(1566)\MAPdown     = 129
****
MAPCross(23097)\MAPCenter   = 182
MAPCross(23097)\MAPleft  = 176
MAPCross(23097)\MAPright = 198
MAPCross(23097)\MAPup       = 178
MAPCross(23097)\MAPdown     = 69


then idea is find 4 sides matching for any one from this 23k array. if i am found any of this 4 matching - compare fifth value - center. if that center same, as Array have - just miss this cross, and read next. if whole array no have this fifth value - i am take last one from that Array item, who have 4 sides matching and replace old one - by this value from array.

Image
User avatar
Olliv
Enthusiast
Enthusiast
Posts: 542
Joined: Tue Sep 22, 2009 10:41 pm

Re: question about complicated compatibility checking

Post by Olliv »

What is sure is the center data can not be in the same memory area as the 4 sides datas.

( = results and hypothesis can not be blended)
User avatar
Mijikai
Addict
Addict
Posts: 1520
Joined: Sun Sep 11, 2016 2:17 pm

Re: question about complicated compatibility checking

Post by Mijikai »

Have a 32x32 array with every element linked to the left,top,right,bottom neighbor element.
Every element has a tile id and knows how many neighbors it has.
A function will generates a code/hash that summarizes the tile id + every neighboring tile ids.
The tile ids -> 0 - 360 could be stored as a word -> wich could be used as simple 8byte (int) - (dw;dw;dw;dw) identifier.
#NULL
Addict
Addict
Posts: 1499
Joined: Thu Aug 30, 2007 11:54 pm
Location: right here

Re: question about complicated compatibility checking

Post by #NULL »

I don't know how restricted you are by the Dune map format or whatever. But maybe you should use a tile struct that has a flag for being 'sand' for example, regardless of which visual tile is used to draw it. Or as a beginning simply use a procedure that tells you if a given tile number is 'sand' or not.
then branch into the details:
- if center <> right
- then doRightTransition
...
- if doRightTranstion and doDownTransition
- use tile <whatever>

It depends on many details, like how your transitions are placed, how many edges you have (4, or 8 with diagonals), or if more than 2 tile types can transition into each other. and also if you combine the transition only when drawing or if you store them as separate tile type etc.
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

#NULL, you mean make some kind of groups?

360 it is all metatiles, what is exist. earth types + factorys. so without factory it is even less, than 360.

and this earth have a lot of variations:
Image

so groups can be - sand, earth, mounting, spice, bold spice, dune.

but i think my ugly slow system is works :) just need to add some special cases, wich one is correct, but just no comes from existing maps. second item - all 4 directions values can be same for a few cases. in my code - using last of them. that is why earth on demo image always same - i mean up is like line, down part like some one is bite that earth. if i will collect all same cases and use random for selecting one of them - final result will be more fine. third item - my system will not work with total coppupted case. for example - 128 maps is not exists. it just place holder, with 4 maps 64x64. so border in a middle is corrupted. my system cant fix that :)

this is a middle of 128 map:
Image
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

Mijikai, you mean make some more fasted code? compare only one value, not like my case now - 4 compares?
SeregaZ
Enthusiast
Enthusiast
Posts: 628
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: question about complicated compatibility checking

Post by SeregaZ »

heh... this cross system is dead end :) it need change not only center metatile, but another - directions too. becouse now it always will make same box. top and left will have stright line - bottom and right always will be shark bite.
Image
Post Reply