F=
#171
->w{s=[0]*8
w.chars.flat_map{|c|z=0..7
*m,i=z.map{|j|z.select{|k|s[k]!=z.map{|i|c.ord[i]}.rotate(j)[k]}<<j}.min_by &:size
m.map{|m|s[m]=1-s[m];"t #{7-m}"}+["p #{i}"]}*?\n}
require 'minitest/autorun'
describe F do
def test_case_1
assert_equal <<-EOS.chomp, F['?']
t 7
t 6
t 5
t 4
t 3
t 2
p 0
EOS
end
def test_case_2
assert_equal <<-EOS.chomp, F[':=']
t 6
t 4
t 3
t 2
p 0
t 1
p 7
EOS
end
def test_case_3
assert_equal <<-EOS.chomp, F['0123456789']
t 3
t 2
p 0
t 7
p 0
t 7
t 6
p 0
t 7
p 0
t 7
t 6
t 5
p 0
t 7
p 0
t 7
t 6
p 0
t 7
p 0
t 3
t 2
p 3
t 2
p 3
EOS
end
def test_case_4
assert_equal <<-EOS.chomp, F['9876543210']
t 7
t 4
t 3
t 2
p 0
t 7
p 0
t 7
t 0
p 5
t 4
p 5
t 5
t 0
p 0
t 7
p 0
t 7
t 6
t 5
p 0
t 7
p 0
t 7
t 6
p 0
t 7
p 0
EOS
end
def test_case_5
assert_equal <<-EOS.chomp, F['Hello, World!']
t 4
t 1
p 0
t 7
t 3
p 2
t 6
t 1
p 2
p 2
t 1
t 0
p 2
t 3
t 1
t 0
p 2
t 7
t 6
p 2
t 7
t 6
t 2
t 0
p 1
t 5
t 1
t 0
p 0
t 7
t 2
p 3
t 6
t 2
p 0
t 4
p 0
t 1
p 3
EOS
end
def test_case_6
assert_equal <<-EOS.chomp, F['The quick brown fox jumps over the lazy dog.']
t 5
t 3
t 1
p 0
t 2
t 1
p 1
t 7
t 3
t 1
p 0
t 7
t 5
t 1
p 0
t 7
t 3
t 1
p 0
t 5
p 0
t 5
t 4
t 3
p 0
t 6
t 4
p 0
t 4
p 0
t 7
t 6
t 4
t 1
p 0
t 6
t 1
p 0
t 3
p 0
t 5
t 0
p 4
t 7
t 0
p 0
t 1
p 1
t 7
t 6
t 5
t 3
p 0
t 6
t 5
t 1
p 0
t 7
t 4
p 0
t 2
t 1
p 3
t 7
t 6
t 5
p 2
t 6
t 2
t 1
p 0
t 0
p 7
t 7
t 0
p 5
t 7
t 6
t 4
t 3
p 0
t 7
t 6
p 0
t 7
t 6
t 3
t 1
p 0
t 7
t 6
t 5
t 4
t 1
p 0
t 4
p 4
t 6
p 0
t 6
t 1
p 4
t 7
t 6
t 5
p 0
t 5
t 3
t 1
p 0
t 1
p 1
t 7
t 3
t 1
p 0
t 7
t 5
t 1
p 0
t 5
t 4
t 1
p 0
t 1
p 3
t 7
t 3
p 1
t 5
t 1
p 0
t 7
t 4
t 3
t 1
p 0
t 5
t 1
p 0
t 7
t 6
t 4
p 0
t 4
p 0
t 7
t 4
t 1
p 0
EOS
end
end
Rj0KIzE3MQoKLT53e3M9WzBdKjgKdy5jaGFycy5mbGF0X21hcHt8Y3x6PTAuLjcKKm0saT16Lm1hcHt8anx6LnNlbGVjdHt8a3xzW2tdIT16Lm1hcHt8aXxjLm9yZFtpXX0ucm90YXRlKGopW2tdfTw8an0ubWluX2J5ICY6c2l6ZQptLm1hcHt8bXxzW21dPTEtc1ttXTsidCAjezctbX0ifStbInAgI3tpfSJdfSo/XG59CgpyZXF1aXJlICdtaW5pdGVzdC9hdXRvcnVuJwoKZGVzY3JpYmUgRiBkbwogIGRlZiB0ZXN0X2Nhc2VfMQogICAgYXNzZXJ0X2VxdWFsIDw8LUVPUy5jaG9tcCwgRlsnPyddCnQgNwp0IDYKdCA1CnQgNAp0IDMKdCAyCnAgMApFT1MKICBlbmQKCiAgZGVmIHRlc3RfY2FzZV8yCiAgICBhc3NlcnRfZXF1YWwgPDwtRU9TLmNob21wLCBGWyc6PSddCnQgNgp0IDQKdCAzCnQgMgpwIDAKdCAxCnAgNwpFT1MKICBlbmQKCiAgZGVmIHRlc3RfY2FzZV8zCiAgICBhc3NlcnRfZXF1YWwgPDwtRU9TLmNob21wLCBGWycwMTIzNDU2Nzg5J10KdCAzCnQgMgpwIDAKdCA3CnAgMAp0IDcKdCA2CnAgMAp0IDcKcCAwCnQgNwp0IDYKdCA1CnAgMAp0IDcKcCAwCnQgNwp0IDYKcCAwCnQgNwpwIDAKdCAzCnQgMgpwIDMKdCAyCnAgMwpFT1MKICBlbmQKCgogIGRlZiB0ZXN0X2Nhc2VfNAogICAgYXNzZXJ0X2VxdWFsIDw8LUVPUy5jaG9tcCwgRlsnOTg3NjU0MzIxMCddCnQgNwp0IDQKdCAzCnQgMgpwIDAKdCA3CnAgMAp0IDcKdCAwCnAgNQp0IDQKcCA1CnQgNQp0IDAKcCAwCnQgNwpwIDAKdCA3CnQgNgp0IDUKcCAwCnQgNwpwIDAKdCA3CnQgNgpwIDAKdCA3CnAgMApFT1MKICBlbmQKCiAgZGVmIHRlc3RfY2FzZV81CiAgICBhc3NlcnRfZXF1YWwgPDwtRU9TLmNob21wLCBGWydIZWxsbywgV29ybGQhJ10KdCA0CnQgMQpwIDAKdCA3CnQgMwpwIDIKdCA2CnQgMQpwIDIKcCAyCnQgMQp0IDAKcCAyCnQgMwp0IDEKdCAwCnAgMgp0IDcKdCA2CnAgMgp0IDcKdCA2CnQgMgp0IDAKcCAxCnQgNQp0IDEKdCAwCnAgMAp0IDcKdCAyCnAgMwp0IDYKdCAyCnAgMAp0IDQKcCAwCnQgMQpwIDMKRU9TCiAgZW5kCgogIGRlZiB0ZXN0X2Nhc2VfNgogICAgYXNzZXJ0X2VxdWFsIDw8LUVPUy5jaG9tcCwgRlsnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4nXQp0IDUKdCAzCnQgMQpwIDAKdCAyCnQgMQpwIDEKdCA3CnQgMwp0IDEKcCAwCnQgNwp0IDUKdCAxCnAgMAp0IDcKdCAzCnQgMQpwIDAKdCA1CnAgMAp0IDUKdCA0CnQgMwpwIDAKdCA2CnQgNApwIDAKdCA0CnAgMAp0IDcKdCA2CnQgNAp0IDEKcCAwCnQgNgp0IDEKcCAwCnQgMwpwIDAKdCA1CnQgMApwIDQKdCA3CnQgMApwIDAKdCAxCnAgMQp0IDcKdCA2CnQgNQp0IDMKcCAwCnQgNgp0IDUKdCAxCnAgMAp0IDcKdCA0CnAgMAp0IDIKdCAxCnAgMwp0IDcKdCA2CnQgNQpwIDIKdCA2CnQgMgp0IDEKcCAwCnQgMApwIDcKdCA3CnQgMApwIDUKdCA3CnQgNgp0IDQKdCAzCnAgMAp0IDcKdCA2CnAgMAp0IDcKdCA2CnQgMwp0IDEKcCAwCnQgNwp0IDYKdCA1CnQgNAp0IDEKcCAwCnQgNApwIDQKdCA2CnAgMAp0IDYKdCAxCnAgNAp0IDcKdCA2CnQgNQpwIDAKdCA1CnQgMwp0IDEKcCAwCnQgMQpwIDEKdCA3CnQgMwp0IDEKcCAwCnQgNwp0IDUKdCAxCnAgMAp0IDUKdCA0CnQgMQpwIDAKdCAxCnAgMwp0IDcKdCAzCnAgMQp0IDUKdCAxCnAgMAp0IDcKdCA0CnQgMwp0IDEKcCAwCnQgNQp0IDEKcCAwCnQgNwp0IDYKdCA0CnAgMAp0IDQKcCAwCnQgNwp0IDQKdCAxCnAgMApFT1MKICBlbmQKZW5kCg==