{ "cells": [ { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [], "source": [ "with open('testinput','r') as infile:\n", " data=[list(line.strip()) for line in infile.readlines()]" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy.ndimage import label\n", "\n", "def find_clusters_matrix(grid):\n", " grid = np.array(grid)\n", " unique_types = np.unique(grid)\n", " clusters = []\n", " \n", " for char in unique_types:\n", " # Binary mask for current character\n", " binary_map = (grid == char)\n", " \n", " # Label connected components\n", " labeled_map, num_features = label(binary_map)\n", " \n", " for cluster_id in range(1, num_features + 1):\n", " # Cluster size\n", " cluster_mask = (labeled_map == cluster_id)\n", " size = cluster_mask.sum()\n", " \n", " # Border length\n", " border_length = 0\n", " for x, y in zip(*np.where(cluster_mask)):\n", " for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:\n", " nx, ny = x + dx, y + dy\n", " if nx < 0 or nx >= grid.shape[0] or ny < 0 or ny >= grid.shape[1] or grid[nx, ny] != char:\n", " border_length += 1\n", " \n", " clusters.append({\"type\": char, \"size\": size, \"border_length\": border_length})\n", " \n", " return clusters\n", "\n" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{'type': 'C', 'size': 14, 'border_length': 28}, {'type': 'C', 'size': 1, 'border_length': 4}, {'type': 'E', 'size': 13, 'border_length': 18}, {'type': 'F', 'size': 10, 'border_length': 18}, {'type': 'I', 'size': 4, 'border_length': 8}, {'type': 'I', 'size': 14, 'border_length': 22}, {'type': 'J', 'size': 11, 'border_length': 20}, {'type': 'M', 'size': 5, 'border_length': 12}, {'type': 'R', 'size': 12, 'border_length': 18}, {'type': 'S', 'size': 3, 'border_length': 8}, {'type': 'V', 'size': 13, 'border_length': 20}]\n" ] } ], "source": [ "clusters = find_clusters_matrix(data)\n", "print(clusters)" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1930" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(cluster['size']*cluster['border_length'] for cluster in clusters)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Part 2" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [], "source": [ "directions = [\n", " (1, -1, 0),\n", " (2, 1, 0),\n", " (4, 0, -1),\n", " (8, 0, 1),\n", "]\n" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy.ndimage import label\n", "\n", "def find_clusters_matrix(grid):\n", " grid = np.array(grid)\n", " unique_types = np.unique(grid)\n", " clusters = []\n", " \n", " for char in unique_types:\n", " # Binary mask for current character\n", " binary_map = (grid == char)\n", " \n", " # Label connected components\n", " labeled_map, num_features = label(binary_map)\n", " \n", " for cluster_id in range(1, num_features + 1):\n", " # Cluster size\n", " cluster_mask = (labeled_map == cluster_id)\n", " size = cluster_mask.sum()\n", " bordermaps = np.zeros(grid.shape,dtype=int)\n", "\n", " # Border length\n", " for x, y in zip(*np.where(cluster_mask)):\n", " for direction, dx, dy in directions:\n", " nx, ny = x + dx, y + dy\n", " if nx < 0 or nx >= grid.shape[0] or ny < 0 or ny >= grid.shape[1] or grid[nx, ny] != char:\n", " bordermaps[x][y] |= direction\n", " print(bordermaps)\n", " border_length = 0\n", " border_sides = 0\n", " for direction,dx,dy in directions:\n", " map = (bordermaps & direction) != 0\n", " border_length += np.sum(map)\n", " map2, sides = label(binary_map)\n", " print(map2)\n", " border_sides += sides\n", "\n", " clusters.append({\"type\": char, \"size\": size, \"border_length\": border_length, \"border_sides\":border_sides})\n", " \n", " return clusters\n" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0 0 0 0 0 0 5 9 0 0]\n", " [ 0 0 0 0 0 0 4 2 11 0]\n", " [ 0 0 0 0 0 5 10 0 0 0]\n", " [ 0 0 0 7 1 10 0 0 0 0]\n", " [ 0 0 0 0 12 0 0 0 0 0]\n", " [ 0 0 0 0 6 9 0 0 0 0]\n", " [ 0 0 0 0 0 14 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 15 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 1 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 1 1 1 0 0 0 0]\n", " [0 0 0 0 1 0 0 2 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 13]\n", " [ 0 0 0 0 0 0 0 0 5 8]\n", " [ 0 0 0 0 0 0 0 0 4 8]\n", " [ 0 0 0 0 0 0 0 0 4 8]\n", " [ 0 0 0 0 0 0 0 5 0 8]\n", " [ 0 0 0 0 0 0 0 6 2 10]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]]\n", "[[ 0 0 0 0 0 0 0 0 7 9]\n", " [ 0 0 0 0 0 0 0 0 0 12]\n", " [ 0 0 0 0 0 0 0 5 1 8]\n", " [ 0 0 0 0 0 0 0 6 0 10]\n", " [ 0 0 0 0 0 0 0 0 14 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 0 1 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 0 1 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 0 1 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 1 1]\n", " [0 0 0 0 0 0 0 0 0 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 1 1 1]\n", " [0 0 0 0 0 0 0 0 1 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[ 0 0 0 0 5 9 0 0 0 0]\n", " [ 0 0 0 0 6 10 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 13 0 0 0 0 0 0 0]\n", " [ 0 0 4 1 9 0 0 0 0 0]\n", " [ 0 5 0 0 2 9 0 0 0 0]\n", " [ 0 6 2 8 0 14 0 0 0 0]\n", " [ 0 0 0 14 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 2 0 0 0 0 0 0 0]\n", " [0 0 2 2 2 0 0 0 0 0]\n", " [0 2 2 2 2 2 0 0 0 0]\n", " [0 2 2 2 0 2 0 0 0 0]\n", " [0 0 0 2 0 0 0 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 13 0 0 0]\n", " [ 0 0 0 0 0 7 8 0 0 0]\n", " [ 0 0 0 0 0 0 4 9 0 0]\n", " [ 0 0 0 0 0 0 4 8 0 0]\n", " [ 0 0 0 0 0 0 4 10 0 0]\n", " [ 0 0 0 0 0 0 12 0 0 0]\n", " [ 0 0 0 0 0 0 14 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 1 1 0 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 1 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]\n", " [0 0 0 0 0 0 1 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [13 0 0 0 0 0 0 0 0 0]\n", " [12 0 0 0 0 0 0 0 0 0]\n", " [ 6 3 11 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 1 1 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 1 1 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 1 1 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 0 0 0 0 0 0 0 0 0]\n", " [1 1 1 0 0 0 0 0 0 0]]\n", "[[ 5 1 1 9 0 0 0 0 0 0]\n", " [ 6 2 0 8 0 0 0 0 0 0]\n", " [ 0 0 4 2 11 0 0 0 0 0]\n", " [ 0 0 14 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]]\n", "[[1 1 1 1 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [0 0 1 1 1 0 0 0 0 0]\n", " [0 0 1 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[1 1 1 1 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [0 0 1 1 1 0 0 0 0 0]\n", " [0 0 1 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[1 1 1 1 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [0 0 1 1 1 0 0 0 0 0]\n", " [0 0 1 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[1 1 1 1 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [0 0 1 1 1 0 0 0 0 0]\n", " [0 0 1 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 13 0 0 0 0 0]\n", " [ 0 0 0 0 6 11 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 1 0 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 1 0 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 1 0 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 1 0 0 0 0 0]\n", " [0 0 0 0 1 1 0 0 0 0]]\n", "[[ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 5 9 0 0 0 0 0 0 0 0]\n", " [ 4 8 0 0 0 0 0 0 0 0]\n", " [ 4 0 3 9 0 0 0 0 0 0]\n", " [ 4 8 0 14 0 0 0 0 0 0]\n", " [ 6 10 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [1 1 0 1 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [1 1 0 1 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [1 1 0 1 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[[0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [1 1 1 1 0 0 0 0 0 0]\n", " [1 1 0 1 0 0 0 0 0 0]\n", " [1 1 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]\n", " [0 0 0 0 0 0 0 0 0 0]]\n", "[{'type': 'C', 'size': 14, 'border_length': 28, 'border_sides': 8}, {'type': 'C', 'size': 1, 'border_length': 4, 'border_sides': 8}, {'type': 'E', 'size': 13, 'border_length': 18, 'border_sides': 4}, {'type': 'F', 'size': 10, 'border_length': 18, 'border_sides': 4}, {'type': 'I', 'size': 4, 'border_length': 8, 'border_sides': 8}, {'type': 'I', 'size': 14, 'border_length': 22, 'border_sides': 8}, {'type': 'J', 'size': 11, 'border_length': 20, 'border_sides': 4}, {'type': 'M', 'size': 5, 'border_length': 12, 'border_sides': 4}, {'type': 'R', 'size': 12, 'border_length': 18, 'border_sides': 4}, {'type': 'S', 'size': 3, 'border_length': 8, 'border_sides': 4}, {'type': 'V', 'size': 13, 'border_length': 20, 'border_sides': 4}]\n" ] } ], "source": [ "clusters = find_clusters_matrix(data)\n", "print(clusters)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "532" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(cluster['size']*cluster['border_sides'] for cluster in clusters)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'type': 'C', 'size': 14, 'border_length': 28, 'border_sides': 8},\n", " {'type': 'C', 'size': 1, 'border_length': 4, 'border_sides': 8},\n", " {'type': 'E', 'size': 13, 'border_length': 18, 'border_sides': 4},\n", " {'type': 'F', 'size': 10, 'border_length': 18, 'border_sides': 4},\n", " {'type': 'I', 'size': 4, 'border_length': 8, 'border_sides': 8},\n", " {'type': 'I', 'size': 14, 'border_length': 22, 'border_sides': 8},\n", " {'type': 'J', 'size': 11, 'border_length': 20, 'border_sides': 4},\n", " {'type': 'M', 'size': 5, 'border_length': 12, 'border_sides': 4},\n", " {'type': 'R', 'size': 12, 'border_length': 18, 'border_sides': 4},\n", " {'type': 'S', 'size': 3, 'border_length': 8, 'border_sides': 4},\n", " {'type': 'V', 'size': 13, 'border_length': 20, 'border_sides': 4}]" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clusters" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = np.full((3,3),'',dtype=object)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([['', '', ''],\n", " ['', '', ''],\n", " ['', '', '']], dtype=object)" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a[:] = 'up'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a[1][2]='down'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([['up', 'up', 'up'],\n", " ['up', 'up', 'down'],\n", " ['up', 'up', 'up']], dtype=object)" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ True, True, True],\n", " [ True, True, False],\n", " [ True, True, True]])" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a=='up'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([['up', 'up', 'up'],\n", " ['up', 'up', 'down'],\n", " ['up', 'up', 'up']], dtype=object)" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "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.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }