Skip to content

Instantly share code, notes, and snippets.

@joker1007
Created October 13, 2012 11:38
Show Gist options
  • Save joker1007/3884262 to your computer and use it in GitHub Desktop.
Save joker1007/3884262 to your computer and use it in GitHub Desktop.
import System.Environment
import Data.List
data Shape = L | I | T | O | S | Unknown deriving Show
testData = [
[55,55,55,55],
[07,17,06,05],
[21,41,31,40],
[62,74,73,72],
[84,94,74,75],
[48,49,57,47],
[69,89,79,68],
[90,82,91,92],
[13,23,03,24],
[24,22,25,23],
[51,41,21,31],
[64,63,62,65],
[49,69,59,79],
[12,10,21,11],
[89,99,79,88],
[32,41,43,42],
[27,16,36,26],
[68,57,58,67],
[72,62,61,71],
[25,24,15,14],
[43,54,53,42],
[95,86,76,85],
[72,73,84,83],
[42,33,32,23],
[66,57,67,58],
[63,73,52,62],
[76,68,77,67],
[12,11,22,01],
[05,26,06,25],
[03,11,13,01],
[11,20,00,21],
[84,95,94,86],
[36,56,45,35],
[41,33,32,43],
[75,94,84,95],
[27,39,28,37],
[45,34,54,35],
[24,36,35,26],
[27,27,27,27],
[55,44,44,45],
[70,73,71,71],
[67,37,47,47],
[43,45,41,42],
[87,57,97,67],
[49,45,46,48],
[63,63,52,72],
[84,86,84,95],
[61,60,62,73],
[59,79,69,48],
[55,57,77,75]
]
checkShape :: [Int] -> Shape
checkShape = checkShape' . sort
checkShape' (p1:p2:p3:p4:[])
| ((p1 == p2 - 1) && (p2 == p3 - 10) && (p3 == p4 - 10)) = L
| ((p1 == p2 - 1) && (p2 == p3 - 1) && (p3 == p4 - 8)) = L
| ((p1 == p2 - 10) && (p2 == p3 - 10) && (p3 == p4 - 1)) = L
| ((p1 == p2 - 8) && (p2 == p3 - 1) && (p3 == p4 - 1)) = L
| ((p1 == p2 - 1) && (p2 == p3 - 1) && (p3 == p4 - 10)) = L
| ((p1 == p2 - 1) && (p2 == p3 - 9) && (p3 == p4 - 10)) = L
| ((p1 == p2 - 10) && (p2 == p3 - 1) && (p3 == p4 - 1)) = L
| ((p1 == p2 - 10) && (p2 == p3 - 9) && (p3 == p4 - 1)) = L
| ((p1 == p2 - 10) && (p2 == p3 - 10) && (p3 == p4 - 10)) = I
| ((p1 == p2 - 1) && (p2 == p3 - 1) && (p3 == p4 - 1)) = I
| ((p1 == p2 - 10) && (p2 == p3 - 1) && (p3 == p4 - 9)) = T
| ((p1 == p2 - 1) && (p2 == p3 - 1) && (p3 == p4 - 9)) = T
| ((p1 == p2 - 9) && (p2 == p3 - 1) && (p3 == p4 - 10)) = T
| ((p1 == p2 - 9) && (p2 == p3 - 1) && (p3 == p4 - 1)) = T
| ((p1 == p2 - 1) && (p2 == p3 - 9) && (p3 == p4 - 1)) = O
| ((p1 == p2 - 1) && (p2 == p3 - 10) && (p3 == p4 - 1)) = S
| ((p1 == p2 - 9) && (p2 == p3 - 1) && (p3 == p4 - 9)) = S
| ((p1 == p2 - 1) && (p2 == p3 - 8) && (p3 == p4 - 1)) = S
| ((p1 == p2 - 10) && (p2 == p3 - 1) && (p3 == p4 - 10)) = S
| otherwise = Unknown
main :: IO ()
main = do let ts = testData
mapM_ (print . checkShape) ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment