--- /dev/null
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from PIL import Image\n",
+ "import itertools"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "im = Image.open(\"Aquilae-Clue-6.jpg\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "('JPEG', 'RGB', (2580, 564))"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "im.format, im.mode, im.size"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "columns, rows = im.size"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "px = im.load()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(177, 11, 11)"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "px[1, 1]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[(252, 120, 116),\n",
+ " (168, 25, 21),\n",
+ " (185, 16, 11),\n",
+ " (187, 12, 7),\n",
+ " (182, 16, 18),\n",
+ " (200, 77, 80),\n",
+ " (255, 229, 229),\n",
+ " (255, 253, 253),\n",
+ " (255, 254, 255),\n",
+ " (255, 249, 251),\n",
+ " (255, 222, 217),\n",
+ " (166, 59, 51),\n",
+ " (175, 16, 12),\n",
+ " (195, 13, 10),\n",
+ " (189, 11, 9),\n",
+ " (160, 25, 22),\n",
+ " (250, 192, 190),\n",
+ " (255, 251, 250),\n",
+ " (255, 254, 255),\n",
+ " (255, 250, 251),\n",
+ " (255, 245, 243),\n",
+ " (215, 140, 137),\n",
+ " (164, 22, 18),\n",
+ " (187, 12, 7),\n",
+ " (186, 13, 7),\n",
+ " (171, 22, 18),\n",
+ " (162, 59, 62),\n",
+ " (255, 224, 230),\n",
+ " (255, 250, 253),\n",
+ " (254, 255, 255),\n",
+ " (255, 252, 249),\n",
+ " (255, 230, 228),\n",
+ " (176, 52, 50),\n",
+ " (185, 17, 16),\n",
+ " (190, 12, 10),\n",
+ " (182, 17, 15),\n",
+ " (161, 27, 26),\n",
+ " (255, 181, 180),\n",
+ " (255, 244, 245),\n",
+ " (255, 254, 255),\n",
+ " (255, 254, 255),\n",
+ " (255, 244, 245),\n",
+ " (255, 181, 180),\n",
+ " (161, 27, 26),\n",
+ " (182, 17, 15),\n",
+ " (190, 12, 10),\n",
+ " (185, 17, 16),\n",
+ " (176, 52, 50),\n",
+ " (255, 231, 230),\n",
+ " (255, 251, 249)]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[px[2, c] for c in range(50)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[(255, 255, 250),\n",
+ " (255, 254, 250),\n",
+ " (253, 253, 253),\n",
+ " (255, 255, 255),\n",
+ " (250, 250, 252),\n",
+ " (255, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (252, 252, 250),\n",
+ " (253, 253, 251),\n",
+ " (255, 255, 253),\n",
+ " (255, 255, 255),\n",
+ " (253, 253, 253),\n",
+ " (255, 253, 254),\n",
+ " (255, 254, 255),\n",
+ " (255, 255, 253),\n",
+ " (253, 253, 251),\n",
+ " (255, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (252, 255, 255),\n",
+ " (252, 255, 253),\n",
+ " (252, 255, 251),\n",
+ " (252, 255, 253),\n",
+ " (252, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (253, 255, 254),\n",
+ " (253, 255, 252),\n",
+ " (254, 255, 251),\n",
+ " (198, 200, 197),\n",
+ " (27, 27, 27),\n",
+ " (27, 27, 29),\n",
+ " (30, 31, 33),\n",
+ " (25, 30, 26),\n",
+ " (26, 31, 27),\n",
+ " (28, 30, 29),\n",
+ " (29, 29, 31),\n",
+ " (30, 28, 31),\n",
+ " (29, 27, 30),\n",
+ " (30, 28, 29),\n",
+ " (32, 28, 27),\n",
+ " (62, 58, 57),\n",
+ " (241, 239, 240),\n",
+ " (255, 254, 255),\n",
+ " (255, 254, 255),\n",
+ " (254, 254, 255),\n",
+ " (254, 255, 255),\n",
+ " (252, 255, 253),\n",
+ " (252, 255, 253),\n",
+ " (254, 255, 255),\n",
+ " (200, 201, 203)]"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[px[34, c] for c in range(50)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[(185, 12, 6),\n",
+ " (201, 7, 5),\n",
+ " (200, 42, 41),\n",
+ " (255, 210, 214),\n",
+ " (255, 250, 253),\n",
+ " (255, 250, 250),\n",
+ " (255, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (254, 255, 255),\n",
+ " (255, 245, 240),\n",
+ " (255, 178, 174),\n",
+ " (176, 18, 15),\n",
+ " (199, 6, 9),\n",
+ " (191, 28, 33),\n",
+ " (255, 185, 186),\n",
+ " (255, 249, 250),\n",
+ " (255, 249, 255),\n",
+ " (255, 253, 255),\n",
+ " (255, 254, 249),\n",
+ " (255, 255, 248),\n",
+ " (255, 255, 255),\n",
+ " (255, 245, 247),\n",
+ " (255, 205, 209),\n",
+ " (188, 45, 47),\n",
+ " (196, 10, 11),\n",
+ " (185, 15, 15),\n",
+ " (225, 134, 131),\n",
+ " (255, 239, 237),\n",
+ " (255, 250, 250),\n",
+ " (255, 254, 253),\n",
+ " (255, 255, 250),\n",
+ " (255, 255, 250),\n",
+ " (252, 253, 255),\n",
+ " (255, 249, 251),\n",
+ " (255, 225, 226),\n",
+ " (198, 74, 72),\n",
+ " (199, 9, 9),\n",
+ " (200, 12, 11),\n",
+ " (189, 77, 75),\n",
+ " (255, 238, 236),\n",
+ " (255, 244, 244),\n",
+ " (255, 254, 251),\n",
+ " (255, 253, 250),\n",
+ " (255, 254, 253),\n",
+ " (254, 253, 255),\n",
+ " (255, 249, 253),\n",
+ " (255, 244, 241),\n",
+ " (221, 132, 126),\n",
+ " (184, 16, 15)]"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[px[r + 25, 23] for r in range(50)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "is_red = {}\n",
+ "for r in range(rows):\n",
+ " for c in range(columns):\n",
+ " rgb = px[c, r]\n",
+ " if rgb[0] > 100 and rgb[1] < 100 and rgb[2] < 100:\n",
+ " is_red[r, c] = True\n",
+ " else:\n",
+ " is_red[r, c] = False"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "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",
+ "###.........####.........###.........###.........###.........####.........###.........###.........##\n",
+ "###..........##..........###.........###.........###..........##..........###.........###.........##\n",
+ "....................................................................................................\n",
+ "....................................................................................................\n",
+ "....................................................................................................\n",
+ "....................................................................................................\n",
+ "....................................................................................................\n",
+ "###.........####........####.........###.........###.........####.........###.........###.........##\n",
+ "###.........####........####........####.........####........####........####.........####........##\n",
+ "###.........####........####........####.........####........####........####.........####........##\n",
+ "###.........####........####........####.........####........####........####.........###.........##\n",
+ "###.........####........####.........###.........###.........####.........###.........###.........##\n",
+ ".............##...........#...........#...........#....................................#...........#\n",
+ "....................................................................................................\n",
+ "....................................................................................................\n"
+ ]
+ }
+ ],
+ "source": [
+ "for r in range(40):\n",
+ " line = ''.join(\"#\" if is_red[r, c] else \".\" for c in range(100))\n",
+ " print(line)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "211"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len([k for k, g in itertools.groupby(is_red[2, c] for c in range(columns)) if k])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "47"
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len([k for k, g in itertools.groupby(is_red[2, r] for r in range(rows)) if k])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "9917"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "47 * 211"
+ ]
+ },
+ {
+ "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.5.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}