{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "054915e4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%HTML\n", "" ] }, { "cell_type": "code", "execution_count": 2, "id": "62243eff", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 0, 0, 0, 1, 1, 0, 1]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def id2bit(ls:list):\n", " if(len(ls)==0):\n", " return [0,0,0,0, 0,0,0,0]\n", " aa = [0 for i in range(max(ls)+1)]\n", " for i in ls:\n", " aa[i]=1\n", " return aa[::-1]\n", "def bit2id(ls:list,log=False):\n", " ls = ls[::-1]\n", " aa =[]\n", " \n", " for i in range(len(ls)):\n", " if(ls[i]==1):\n", " aa.append(i)\n", " return aa[::-1]\n", "\n", "def bit2mul(a,b,log=False):\n", " \n", " ai = bit2id(a)\n", " bi = bit2id(b)\n", " a,b = a[::-1],b[::-1]\n", " \n", " if(ai==[]):\n", " return a\n", " elif(bi==[]):\n", " return b\n", " \n", " addn = [ [ ai[i]+bi[j] for j in range(len(bi)) ][::-1] for i in range(len(ai)) ][::-1]\n", " addn = [id2bit(i) for i in addn]\n", " \n", " maxsiz = max([len(i) for i in addn])\n", " for i in range(len(addn)):\n", " if(len(addn[i])=0)):\n", " ml = max(dnt)-max(dsr)\n", " qtnt.append(ml)\n", " plus = id2bit(dnt)\n", " minus = id2bit([ml+i for i in dsr])\n", " rem = bit2add(plus,minus)\n", " dnt = bit2id(rem)\n", " return id2bit(dnt),id2bit(qtnt)\n", "\n", "\n", "\n", "\n", "\n", "\n", "# import numpy as np\n", "def ext_eucld(a,b,log=False):\n", " ai,bi = bit2id(a),bit2id(b)\n", " if((len(ai)!=0 and len(bi)!=0)):\n", " if(max(max(ai),max(bi))==max(bi)):\n", " a,b=b,a\n", " elif(len(ai)==0 and len(bi)!=0):\n", " a,b=b,a\n", " def eucld(a,b,log=False):\n", " \n", " a,b = a[::-1],b[::-1]\n", " if(set(b)==set([0]) or (b[0]==1 and (set(b[1:])==set([0])))):\n", " return []\n", " ls = []\n", " \n", " while not (b[0]==1 and (set(b[1:])==set([0]))):\n", " \n", " r,idx = modgf(b[::-1],dnt=a[::-1])\n", " r,idx = r[::-1],idx[::-1]\n", " \n", " if(set(r)==set([0])):\n", " return ls\n", " \n", " ls.append(idx[::-1])\n", " a = b\n", " b = r\n", " return ls\n", " \n", " row = [[[0,0,0,0, 0,0,0,1],[0,0,0,0, 0,0,0,0]],\n", " [[0,0,0,0, 0,0,0,0],[0,0,0,0, 0,0,0,1]]]\n", " ls = eucld(a,b)\n", " for i in ls:\n", " r10,r11 = row[-1][0], row[-1][1]\n", " r20,r21 = row[-2][0], row[-2][1]\n", " r0 = bit2add(r20,bit2mul(r10,i))\n", " r1 = bit2add(r21,bit2mul(r11,i))\n", " rowl = [r0,r1]\n", " row.append(rowl)\n", " return row[-1]\n", "def Gfinv(bit,irrpoly = [1, 0, 0, 0, 1, 1, 0, 1, 1]):\n", " if(set(bit)==set('0')):\n", " return '--'\n", " ans = ext_eucld(irrpoly,bit)\n", " ans = ans[-1][-len(bit):]\n", " return ans\n", "\n", "\n", "Gfinv([0,0,0,0,0,1,0,0],irrpoly=[0,0,0,1, 0,0,1,1])" ] }, { "cell_type": "code", "execution_count": null, "id": "2b8ce266", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "38ba4051", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0c2b9aab", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9410bfdf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 3, "id": "edb53805", "metadata": {}, "outputs": [], "source": [ "def genmapping(n:int,irrpoly):\n", " gf = [str(bin(i))[2:] for i in range(2**n)]\n", " for i in range(len(gf)):\n", " if(len(gf[i])