def compute_occupied_cells(keystring): occupied = set() for i in range(128): hashval = knot_hash('-'.join([keystring, str(i)])) binary = map(int, hextobinary(hashval)) occupied.update([(i, j) for j, bit in enumerate(binary) if bit]) return occupied
from knothash import knot_hash #from 10th day def count_setbits(n): count = 0 while (n): n &= (n - 1) count += 1 return count if __name__ == '__main__': key_string = 'oundnydw' #key_string = 'flqrgnkx' count = 0 for i in range(128): key = f'{key_string}-{i}' row = int(knot_hash(key), 16) count += count_setbits(row) print(count)
def generate_hex_grid(key, rows): return [knot.knot_hash(key + "-" + str(x)) for x in range(rows)]
#!/usr/bin/env python3 import binascii from knothash import knot_hash inp = "hfdlxzhv" rowstrings = ["%s-%u" % (inp, i) for i in range(128)] def hexchar_to_binstr(c): return bin(int(c, 16))[2:] hashes = [knot_hash(s) for s in rowstrings] bits = [[hexchar_to_binstr(c).zfill(4) for c in row] for row in hashes] bits = [[c for c in "".join(row)] for row in bits] print(sum(["".join(row).count('1') for row in bits])) next_k = 2 bits = [[int(c) for c in row] for row in bits] def neighbors(i, j): n = [] if i > 0: n.append(bits[i - 1][j]) if i < 127: n.append(bits[i + 1][j]) if j > 0: n.append(bits[i][j - 1]) if j < 127: