Example #1
0
    def test_init(self):
        kh = KnotHash(5)
        lst = kh.circular_list

        self.assertEqual(5, len(lst))
        self.assertEqual([0, 1, 2, 3, 4], lst)
        self.assertEqual(0, kh.current_position)
        self.assertEqual(0, kh.skip_size)
class KnotTest(unittest.TestCase):
    def setUp(self):
        self.knot_hash = KnotHash()
        self.knot_hash.ring = Ring(range(5))

    def test_individual_example_knots(self):
        self.knot_hash.tie_knot(position=0, length=3)
        self.assertEqual(self.knot_hash.ring._ring, [2, 1, 0, 3, 4])
        self.knot_hash.tie_knot(position=3, length=4)
        self.assertEqual(self.knot_hash.ring._ring, [4, 3, 0, 1, 2])
        self.knot_hash.tie_knot(position=3, length=1)
        self.assertEqual(self.knot_hash.ring._ring, [4, 3, 0, 1, 2])
        self.knot_hash.tie_knot(position=1, length=5)
        self.assertEqual(self.knot_hash.ring._ring, [3, 4, 2, 1, 0])

    def test_tie_all_knots(self):
        self.knot_hash.tie_all_knots(lengths=[3, 4, 1, 5])
        self.assertEqual(self.knot_hash.ring._ring, [3, 4, 2, 1, 0])
Example #3
0
    def test_processing(self):
        kh = KnotHash(5)
        kh.process(3)
        self.assertEqual([2, 1, 0, 3, 4], kh.circular_list)
        self.assertEqual(3, kh.current_position)
        self.assertEqual(1, kh.skip_size)

        kh.process(4)
        self.assertEqual([4, 3, 0, 1, 2], kh.circular_list)
        self.assertEqual(3, kh.current_position)
        self.assertEqual(2, kh.skip_size)

        kh.process(1)
        self.assertEqual([4, 3, 0, 1, 2], kh.circular_list)
        self.assertEqual(1, kh.current_position)
        self.assertEqual(3, kh.skip_size)

        kh.process(5)
        self.assertEqual([3, 4, 2, 1, 0], kh.circular_list)
        self.assertEqual(4, kh.current_position)
        self.assertEqual(4, kh.skip_size)
class KnotHashTest(unittest.TestCase):
    def setUp(self):
        self.knot_hash = KnotHash()

    def test_get_lengths_from_string(self):
        lengths = self.knot_hash.get_lengths_from_string('1,2,3')
        self.assertEqual(lengths, [49, 44, 50, 44, 51, 17, 31, 73, 47, 23])

    def test_preserve_skip_and_position(self):
        self.assertEqual(self.knot_hash.position, 0)
        self.assertEqual(self.knot_hash.skip, 0)
        self.knot_hash.tie_all_knots(lengths=[3, 4])
        self.assertEqual(self.knot_hash.position, 3 + 4 + 1)
        self.assertEqual(self.knot_hash.skip, 2)

    def test_reduce_sparse_hash(self):
        # Change single value, otherwise the result will be zero
        self.knot_hash.ring[47] = 1
        hash_values = self.knot_hash.reduce_sparse_hash()
        # Calculated manually
        self.assertEqual(hash_values[2], 46)

    def test_example_hashes(self):
        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('')
        self.assertEqual(h, 'a2582a3a0e66e6e86e3812dcb672a272')

        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('AoC 2017')
        self.assertEqual(h, '33efeb34ea91902bb2f59c9920caa6cd')

        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('1,2,3')
        self.assertEqual(h, '3efbe78a8d82f29979031a4aa0b16a9d')

        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('1,2,4')
        self.assertEqual(h, '63960835bcdc130f0b66d7ff4f6a5a8e')
Example #5
0
    def test_bitwise_xor(self):
        result = 65 ^ 27 ^ 9 ^ 1 ^ 4 ^ 3 ^ 40 ^ 50 ^ 91 ^ 7 ^ 6 ^ 0 ^ 2 ^ 5 ^ 68 ^ 22
        self.assertEqual(64, result)

        input = [65, 27, 9, 1, 4, 3, 40, 50, 91, 7, 6, 0, 2, 5, 68, 22]
        self.assertEqual(64, KnotHash.bitwise_xor(input))
Example #6
0
 def x_test_multiple_runs(self):
     kh = KnotHash(10)
     for length in [49, 44, 50, 44, 51, 17, 31, 73, 47, 23]:
         kh.process(length)
     self.assertEqual([3, 4, 1, 5, 17, 31, 73, 47, 23], kh.circular_list)
Example #7
0
 def test_hex_conversion(self):
     self.assertEqual('40', KnotHash.conver_to_hex(64))
     self.assertEqual('07', KnotHash.conver_to_hex(7))
     self.assertEqual('ff', KnotHash.conver_to_hex(255))
Example #8
0
 def test_ascii_conversion(self):
     self.assertEqual(49, KnotHash.convert_to_ascii('1'))
     self.assertEqual(44, KnotHash.convert_to_ascii(','))
     self.assertEqual(50, KnotHash.convert_to_ascii('2'))
     self.assertEqual(51, KnotHash.convert_to_ascii('3'))
Example #9
0
 def test_whole(self):
     kh = KnotHash(5)
     for length in [3, 4, 1, 5]:
         kh.process(length)
     result = kh.circular_list[0] * kh.circular_list[1]
     self.assertEqual(12, result)
Example #10
0
 def test_raises_exception_if_length_to_long(self):
     kh = KnotHash(5)
     self.assertRaises(Exception, kh.process, 6)
 def setUp(self):
     self.knot_hash = KnotHash()
 def setUp(self):
     self.knot_hash = KnotHash()
     self.knot_hash.ring = Ring(range(5))
    def test_example_hashes(self):
        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('')
        self.assertEqual(h, 'a2582a3a0e66e6e86e3812dcb672a272')

        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('AoC 2017')
        self.assertEqual(h, '33efeb34ea91902bb2f59c9920caa6cd')

        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('1,2,3')
        self.assertEqual(h, '3efbe78a8d82f29979031a4aa0b16a9d')

        knot_hash = KnotHash()
        h = knot_hash.calculate_hash('1,2,4')
        self.assertEqual(h, '63960835bcdc130f0b66d7ff4f6a5a8e')