You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

51 lines
826 B

package main
const blockSize = 20
const dot = '.'
const hashTag = '#'
const newLine = '\n'
func isValidBlock(data []byte) bool {
numDots, numHashtags := 0, 0
for i, v := range data {
switch v {
case dot:
numDots++
case hashTag:
numHashtags++
case newLine:
if i%5 != 4 {
return false
}
default:
return false
}
}
return numDots == 12 && numHashtags == 4
}
func validateFile(data []byte) (ok bool, result []tetrimino) {
for i := 0; i < len(data); {
if i+blockSize > len(data) {
break
}
if !isValidBlock(data[i : i+blockSize]) {
break
}
t := blockToTetrimino(data[i : i+blockSize])
if !t.isValid() {
break
}
result = append(result, t)
i += blockSize
if i == len(data) {
ok = true
break
}
if data[i] != '\n' {
break
}
i++
}
return ok, result
}