{ "cells": [ { "cell_type": "code", "execution_count": 65, "id": "amino-traveler", "metadata": {}, "outputs": [], "source": [ "from enum import Enum, auto\n", "class State(Enum):\n", " StartString = auto()\n", " ParseString = auto()\n", " EscapeCharacter = auto()\n", " EscapeHexadecimal = auto()\n", " \n", "\n", "def count_characters(s):\n", " cc = 0\n", " cm = 0\n", " ce = 0\n", " state = State.StartString\n", " \n", " hexadecimal_count = 0\n", " \n", " for i in range(len(s)):\n", " if s[i].isspace():\n", " continue\n", " \n", " cc += 1\n", " ce += 1\n", " \n", " if s[i] in ('\"', '\\\\'):\n", " ce += 1\n", " \n", " if state is State.StartString:\n", " if s[i] != '\"':\n", " raise Exception('expecting \"')\n", " \n", " ce += 2\n", " state = State.ParseString\n", " continue\n", " \n", " if state is State.ParseString:\n", " if s[i] == '\\\\':\n", " state = State.EscapeCharacter\n", " continue\n", " if s[i] == '\"':\n", " state = State.StartString\n", " continue\n", " cm += 1\n", " \n", " if state is State.EscapeCharacter:\n", " if s[i] == 'x':\n", " state = State.EscapeHexadecimal\n", " hexadecimal_count = 0\n", " continue\n", " else:\n", " state = State.ParseString\n", " cm += 1\n", " \n", " if state is State.EscapeHexadecimal:\n", " hexadecimal_count += 1\n", " \n", " if hexadecimal_count == 2:\n", " state = State.ParseString\n", " cm += 1\n", " \n", " return cc, cm, ce" ] }, { "cell_type": "code", "execution_count": 66, "id": "selective-label", "metadata": {}, "outputs": [], "source": [ "import import_ipynb\n", "import helper\n", "s = helper.read_file('2015_8.txt')" ] }, { "cell_type": "code", "execution_count": 67, "id": "documented-silence", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1371\n", "2117\n" ] } ], "source": [ "cc, cm, ce = count_characters(s)\n", "print(cc - cm)\n", "print(ce - cc)" ] }, { "cell_type": "code", "execution_count": null, "id": "published-incident", "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.9.2" }, "title": "Matchsticks" }, "nbformat": 4, "nbformat_minor": 5 }