{ "metadata": { "language": "haskell", "name": "", "signature": "sha256:d3903a8bf1d0cc71c024d88777d7a39da001586a55681e8e24409f5c12e0b13f" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ ":ext NoMonomorphismRestriction\n", "import Diagrams.Prelude\n", "import Data.Colour.SRGB\n", "import Data.List.Split (chunksOf)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "-- Generate a board of size `size`\n", "board :: Int -> ((Int, Int) -> Diagram b R2) -> Diagram b R2\n", "board size sq = vcat rows\n", " where rows = map hcat $ chunksOf size diagrams\n", " diagrams = map (sq . tuple) indices\n", " indices = sequence [[0..size-1], [0..size-1]]\n", " tuple [a, b] = (a, b)\n", "\n", "-- Change visibility\n", "visible 0 diagram = diagram # opacity 0\n", "visible _ diagram = diagram\n", "\n", "-- Board square\n", "tile board (row, col) = visible value diagram\n", " where diagram = roundedRect size size 0.05 # fc color\n", " # pad padding\n", " padding = 1.15\n", " size = 1 / padding\n", " color = if value == 0\n", " then white\n", " else sRGB c c (c/3)\n", " c = (20.0 - value) / 20.0\n", " value = fromIntegral $ board !! row !! col \n", " \n", "-- Labels\n", "labels board (row, col) = visible value $ number `atop` sq\n", " where number = text (show $ 2 ^ value) # fontSize 0.5\n", " value = board !! row !! col\n", " sq = square 1 # opacity 0\n", " \n", "values = [[1, 2, 0], [0, 5, 6], [7, 0, 9]]\n", "\n", "diagram $ board 3 (labels values) \n", " `atop` board 3 (const $ square 1)\n", " `atop` board 3 (tile values)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "display_data", "png": "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" } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }