{ "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 }