{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Generating mini-puzzles with random.choice()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dots-and-boxes & Connect the dots & ... ?\n",
    "\n",
    "![](https://upload.wikimedia.org/wikipedia/commons/b/b7/Dots-and-boxes-chains.png)\n",
    "\n",
    "![](https://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Connect_the_dots_puzzle_%28partially_solved%29.png/400px-Connect_the_dots_puzzle_%28partially_solved%29.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             .         .     .       .                      .         .                             \n",
      "     .             .              .                                    ..           .               \n",
      "          .       .             .               .                     .                .          . \n",
      "      . .    .    .  .         .             .                       .              ..              \n",
      "    .  .                      .     .                                   .  .    .       .        . .\n",
      "  .                            .  .      ..                 .      .         . .             .      \n",
      "                          .               .        .                          .                  .  \n",
      "           .                                  .  . .      .                    .                    \n",
      "            .   ..                    .               .  .                                          \n",
      "       .  .                      .     ..   .                                            .   .      \n",
      " .            .          .                             .      .             .         .             \n",
      ". .       .   .                              .        .       .                            .        \n",
      "    .                   .             .  .             ..               .. .    .       .           \n",
      "    .   .  . .      .                   .        .    .                     . .          .     . .  \n",
      "                    .        .        .    .                     .                            .     \n",
      "    .               ...      . .. .                  .         .     . .     .        .    . .   .. \n",
      "                 .      .            .   .         .         .          .            .            . \n",
      "  .   .       ...  ..     .      ..          .    .    .  .            .     .                      \n",
      "         .    .                 . .  ..                       .              .       ... .          \n",
      "                      .      .         .         .    .      .    .        .        .        .      \n",
      "         .        .   . . .     .     .                       ..              . .     .     ..      \n",
      "      .    .                                    .    .    .            . . .                        \n",
      ".   .   .     . .      .       .           .         ..   .  . .               .       .            \n",
      "                 .              .                     .        ..                                  .\n",
      "        .           .           ..       . .   .                 .          .  .  .                 \n"
     ]
    }
   ],
   "source": [
    "from random import choice\n",
    "\n",
    "characters = ['.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']\n",
    "width = 100\n",
    "height = 25\n",
    "\n",
    "for y in range(height):\n",
    "    for x in range(width):\n",
    "        print(choice(characters), end='')\n",
    "    print('')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generate a \"Connect the dots\" with jp2a"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](play.jpg)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "jp2a 1.0.6\n",
      "Copyright (C) 2006 Christian Stigen Larsen\n",
      "Distributed under the GNU General Public License (GPL) v2.\n",
      "\n",
      "Usage: jp2a [ options ] [ file(s) | URL(s) ]\n",
      "\n",
      "Convert files or URLs from JPEG format to ASCII.\n",
      "\n",
      "OPTIONS\n",
      "  -                 Read images from standard input.\n",
      "      --blue=N.N    Set RGB to grayscale conversion weight, default is 0.1145\n",
      "  -b, --border      Print a border around the output image.\n",
      "      --chars=...   Select character palette used to paint the image.\n",
      "                    Leftmost character corresponds to black pixel, right-\n",
      "                    most to white.  Minimum two characters must be specified.\n",
      "      --clear       Clears screen before drawing each output image.\n",
      "      --colors      Use ANSI colors in output.\n",
      "  -d, --debug       Print additional debug information.\n",
      "      --fill        When used with --color and/or --html, color each character's\n",
      "                    background color.\n",
      "  -x, --flipx       Flip image in X direction.\n",
      "  -y, --flipy       Flip image in Y direction.\n",
      "  -f, --term-fit    Use the largest image dimension that fits in your terminal\n",
      "                    display with correct aspect ratio.\n",
      "      --term-height Use terminal display height.\n",
      "      --term-width  Use terminal display width.\n",
      "  -z, --term-zoom   Use terminal display dimension for output.\n",
      "      --grayscale   Convert image to grayscale when using --html or --colors\n",
      "      --green=N.N   Set RGB to grayscale conversion weight, default is 0.5866\n",
      "      --height=N    Set output height, calculate width from aspect ratio.\n",
      "  -h, --help        Print program help.\n",
      "      --html        Produce strict XHTML 1.0 output.\n",
      "      --html-fill   Same as --fill (will be phased out)\n",
      "      --html-fontsize=N   Set fontsize to N pt, default is 4.\n",
      "      --html-no-bold      Do not use bold characters with HTML output\n",
      "      --html-raw    Output raw HTML codes, i.e. without the <head> section etc.\n",
      "      --html-title=...  Set HTML output title\n",
      "  -i, --invert      Invert output image.  Use if your display has a dark\n",
      "                    background.\n",
      "      --background=dark   These are just mnemonics whether to use --invert\n",
      "      --background=light  or not.  If your console has light characters on\n",
      "                    a dark background, use --background=dark.\n",
      "      --output=...  Write output to file.\n",
      "      --red=N.N     Set RGB to grayscale conversion weight, default 0.2989f.\n",
      "      --size=WxH    Set output width and height.\n",
      "  -v, --verbose     Verbose output.\n",
      "  -V, --version     Print program version.\n",
      "      --width=N     Set output width, calculate height from ratio.\n",
      "\n",
      "  The default mode is `jp2a --term-fit --background=dark'.\n",
      "  See the man-page for jp2a for more detailed help text.\n",
      "\n",
      "Project homepage on http://jp2a.sf.net\n",
      "Report bugs to <csl@sublevel3.org>\n"
     ]
    }
   ],
   "source": [
    "! jp2a --help"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
      "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
      "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
      "MMMMMMWMMMMMMMMMMMMMMMMMMMMWNMMNNWMMMMNWNNMMMMMMMMMMMMMMMMWMMMMMMMMWMMMMMMMMKNNWMMMMMMMMMMMMMMMMMMMM\n",
      "MMKdWWNXMMMxNWNNWNNONNNWNNNNWokWMNNXNNNMMWNXMMMMMMMMM0NNNNXNNNNoXWWKMMMMMMMdKMMNXMMM00NXWMMM00NNNMMM\n",
      "MM0oMMMNMMM;NMMMMMM;KXWMMMMXXKcMMxkMMMNXkkXMMMMMMMMMMcMMMMXNMMW:XMMNMMMMMMOkMMMMNXXONMMMNNNkXMMMXNMM\n",
      "MMXlMMMNMMMcXMX00KXNXkxMMMWXMM00KKoOXMWNNNNNMMMMMMMMMcMMMXNxxMW:0MMNMMMMMXdMMKlMMNox0MMMMMXMMMWXWMMM\n",
      "MMNcMMMNWWN,0MMXXNMMM0xMMMXWMMMMMMMKK00oWMMWNMMMMMMMMcMMMWWXWNXx0MMWWWWNXoWMMKcKMMNXKxxKMMMMMNNMMMMM\n",
      "MMMlMMMMMMM,0MMWWWNNM0kMMMXMMMMMMWdNNNNXMMMMXMMMMMMMMcMMMMXXNMMkkMMMMMMMcXMMMMMMMMMNNMMcMMMMMNMMMMMM\n",
      "MMMcMMWWWXN:kNXXXXXWMKd0KWXMMMMMMoOMMMMMMWNXMMMMMMMMMcMMMMXMMMMOxMWWWNXNlKMMNXXcXMNNNMMcNWWWMNMMMMMM\n",
      "MMMKXXKXXXNNXNMMMMMMMMMMX0WMMMMMMMKO0KKXNWMMMMMMMMMMMXKKKKNMMMMWKXXKXXXWMKk0NMMWONWMMMMNXKKXKWMMMMMM\n",
      "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
      "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
      "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n"
     ]
    }
   ],
   "source": [
    "! jp2a play.jpg --width=100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                    \n",
      "                                                                                                    \n",
      "                                                                                                    \n",
      "      .                    ..  ...    ....                .        .        ....                    \n",
      "  ......   ..................... ......  ...         ...............       ..  ..   .....   .....   \n",
      "  ..   .   ..      ....    ....  ..   .....          .    ..  ...  .      ..    .....   .....   ..  \n",
      "  ..   .   .. .........   ..  ....... ......         .   .... ...  .     ..  ..  ....     .   ...   \n",
      "  ..   ......  ...   ..   ..       ......  ..        .   ........  ........  ...  ......     ..     \n",
      "   .       ..  ..... ..   .      .......    .        .    ...  ..       ..         ..  .     .      \n",
      "   .  .............. ......      ..      ...         .    .    .. ........  ..... ...  ..... .      \n",
      "   ...........          ...       ........           ......    ......... ....  ....    .......      \n",
      "                                                                                                    \n",
      "                                                                                                    \n",
      "                                                                                                    \n"
     ]
    }
   ],
   "source": [
    "img = '''MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
    "MMMMMMWMMMMMMMMMMMMMMMMMMMMWNMMNNWMMMMNWNNMMMMMMMMMMMMMMMMWMMMMMMMMWMMMMMMMMKNNWMMMMMMMMMMMMMMMMMMMM\n",
    "MMKdWWNXMMMxNWNNWNNONNNWNNNNWokWMNNXNNNMMWNXMMMMMMMMM0NNNNXNNNNoXWWKMMMMMMMdKMMNXMMM00NXWMMM00NNNMMM\n",
    "MM0oMMMNMMM;NMMMMMM;KXWMMMMXXKcMMxkMMMNXkkXMMMMMMMMMMcMMMMXNMMW:XMMNMMMMMMOkMMMMNXXONMMMNNNkXMMMXNMM\n",
    "MMXlMMMNMMMcXMX00KXNXkxMMMWXMM00KKoOXMWNNNNNMMMMMMMMMcMMMXNxxMW:0MMNMMMMMXdMMKlMMNox0MMMMMXMMMWXWMMM\n",
    "MMNcMMMNWWN,0MMXXNMMM0xMMMXWMMMMMMMKK00oWMMWNMMMMMMMMcMMMWWXWNXx0MMWWWWNXoWMMKcKMMNXKxxKMMMMMNNMMMMM\n",
    "MMMlMMMMMMM,0MMWWWNNM0kMMMXMMMMMMWdNNNNXMMMMXMMMMMMMMcMMMMXXNMMkkMMMMMMMcXMMMMMMMMMNNMMcMMMMMNMMMMMM\n",
    "MMMcMMWWWXN:kNXXXXXWMKd0KWXMMMMMMoOMMMMMMWNXMMMMMMMMMcMMMMXMMMMOxMWWWNXNlKMMNXXcXMNNNMMcNWWWMNMMMMMM\n",
    "MMMKXXKXXXNNXNMMMMMMMMMMX0WMMMMMMMKO0KKXNWMMMMMMMMMMMXKKKKNMMMMWKXXKXXXWMKk0NMMWONWMMMMNXKKXKWMMMMMM\n",
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n",
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM'''\n",
    "\n",
    "for line in img.split(\"\\n\"):\n",
    "    for letter in line:\n",
    "        if letter == \"M\":\n",
    "            img = img.replace(letter, \" \")\n",
    "        else:\n",
    "            img = img.replace(letter, \".\")\n",
    "    \n",
    "print(img)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## World Wheel but different\n",
    "\n",
    "![](https://literacystarter.files.wordpress.com/2014/11/word-wheel.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " a      a                n             i      i      i   o  a f  i     fi       i                   \n",
      "                     a                  cm i                                    i  a                \n",
      "      c          ti     n a     c        ii   a        n                                 n          \n",
      "                   a        f           i  g   n                    a              i        i     c \n",
      "                    nt   i        c i            n                 c               o                \n",
      "       a                    a             m o       m            fg        a      cm     g      m   \n",
      "  i                a           i                n  ia      a     a           o  g i                t\n",
      "nm   g   n  i            a       f           i      i     i   i   a    i   n     o   i  if     t    \n",
      "o                    c i    a             i  gt  o    g          a  a        i             i        \n",
      "                 g o  o       i                o        f  c                a  c    a      i       i\n",
      "  o    g f    i                    i       a              t   c     i  an        t     a   i i  f  n\n",
      "                                                         i             i           o a gm  g f i    \n",
      "      i    g           f c          a a         ca  i       t               c          a   t        \n",
      "               i                   a to       a n  o       n     o    c                       io    \n",
      "     f        o                 f                  iam           c   i              i      a        \n",
      " g                    g        a     a    m   g       a      n          a    n           i   g      \n",
      "       c         f           o      o    t               n     o                  g     n m  t    c \n",
      "  f        i  g      ng            o      m       i     i          im                               \n",
      "                 a iim  a                       i     i               t  i                i       n \n",
      "       c    oa       m    a c  g    a     n                   g      ig           i   naag          \n",
      " f  i   o    a  f               o   a    a    o  t                       o                  g     m \n",
      "                  t  t i    a            i     a        a              fa        c         c  n     \n",
      "     o  g m i       a        i i  n             g m m       i              f       n  i         i   \n",
      "          n  g  a                                m     i i   o                  ft  i    f i       f\n",
      "          t                                  m    ia           g  i         i                       \n"
     ]
    }
   ],
   "source": [
    "from random import choice\n",
    "\n",
    "character_set = 'gamification                                                                                 '\n",
    "characters = [character for character in character_set]\n",
    "width = 100\n",
    "height = 25\n",
    "\n",
    "for y in range(height):\n",
    "    for x in range(width):\n",
    "        print(choice(characters), end='')\n",
    "    print('')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# More games plz!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What other mini-games can we make?\n",
    "\n",
    "You can restrict yourself to using **ASCII characters only** (see https://en.wikipedia.org/wiki/ASCII) and stay in touch with early computer graphics ASCII art...\n",
    "\n",
    "Or you can extend your pallete with **Unicode characters**. This is a nice website that highlights specific character sets: http://xahlee.info/comp/unicode_index.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
