+ √(1/8)|U+0200D>|1> + √(1/8)|U+1F469>|2> + √(1/8)|U+0200D>|3> + √(1/8)|U+1F467>|4> + √(1/8)|U+0200D>|5> + √(1/8)|U+1F466>|6> + √(1/8)|U+00000>|7> 回路を測定すると確率的にビット列(コード +アドレス)が取得できる (右端は出現回数 ) {'U+00000 7': 141, 'U+1F466 6': 114, 'U+0200D 5': 124, 'U+1F469 2': 121, 'U+1F467 4': 130, U+0200D 3': 122, 'U+0200D 1': 115, 'U+1F468 0': 133} 文字数ぶん、アドレスの順に Unicodeで出力する U+1F468, U+0200D, U+1F469, U+0200D, U+1F467, U+0200D, U+1F466 # => 古典:ビット数:コードポイント 20 x 7文字 = 140ビット サイズ:140bit 量子:ビット数:コードポイント 20 + アドレス 3 = 23量子ビット シミュレーションサイズ:基底 2^23 x 振幅 16byte = 134MB 家族の絵文字 qr_addr = QuantumRegister(3, 'address') qr_code = QuantumRegister(20, 'code') qc = QuantumCircuit(qr_addr, qr_code) # Unicodeコードポイントの配列を量子回路にエンコード codepoints = [0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466] print([format(code, 'X') for code in codepoints]) # => ['1F468', '200D', '1F469', '200D', '1F467', '200D', '1F466'] encodeToCircuit(qc, codepoints) # qc.draw('mpl', scale=0.2) # 量子回路を測定 counts = measureCircuit(qc) print(counts) # => {'00000000000000000000111': 141, '00011111010001100110110': 114, '00000010000000001101101': 124, '00011111010001101001010': 121, '00011111010001100111100': 130, '00000010000000001101011': 122, '00000010000000001101001': 115, '00011111010001101000000': 133} # 測定結果をユニコード文字列にデコード unicode = decodeToUnicode(len(codepoints), qr_code.size, qr_addr.size, counts) print(unicode) # =>