{"id":453,"date":"2009-06-08T20:24:00","date_gmt":"2009-06-08T12:24:00","guid":{"rendered":""},"modified":"2013-11-17T17:32:59","modified_gmt":"2013-11-17T09:32:59","slug":"%e6%b0%b4%e5%87%86%e7%82%b9%e5%b9%b3%e5%b7%ae%e7%ae%97%e6%b3%95%e5%8d%95%e5%85%83shuizhun-pas","status":"publish","type":"post","link":"https:\/\/kyle.ai\/blog\/453.html","title":{"rendered":"\u6c34\u51c6\u70b9\u5e73\u5dee\u7b97\u6cd5\u5355\u5143ShuiZhun.pas"},"content":{"rendered":"<pre class=\"brush: delphi; title: ; notranslate\" title=\"\">\r\nunit ShuiZhun;\r\n{-------------------------------------------------\r\n                    \u6c34\u51c6\u70b9\u5e73\u5dee\u7b97\u6cd5\u5355\u5143\r\n          == \u25ce\u25ce\u25ce   \u4f5c\u8005\uff1a\u9648\u660e  \u25ce\u25ce\u25ce ==\r\n--------------------------------------------------}\r\n\r\ninterface\r\n\r\nuses SysUtils,Dialogs,PerlRegEx,classes,matrice;\r\n\r\ntype SZPoint=record               \/\/\u6c34\u51c6\u70b9\u8bb0\u5f55\u7c7b\u578b\r\n  isKnown:boolean;                \/\/\u662f\u5426\u4e3a\u5df2\u77e5\u70b9\r\n  name:string;                    \/\/\u70b9\u540d\r\n  High:extended;                    \/\/\u70b9\u7684(\u8fd1\u4f3c)\u9ad8\u7a0b\u503c\r\n  Unkown_ID:integer;              \/\/\u5982\u679c\u4e3a\u672a\u77e5\u70b9\uff0c\u5219\u5176\u5e8f\u53f7\r\n  HasH:boolean;                   \/\/\u662f\u5426\u5df2\u6c42\u51fa\u8fd1\u4f3c\u503c\r\nend;\r\n\r\nvar num_known,num_unknown,num_ce,rows:integer;\r\nvar pList: array of SZPoint;\r\nvar splitStr:string=' *';           \/\/\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u5206\u9694\u7b26\r\n\/\/Q&#x5B;num_Ce,num_Ce]  B&#x5B;num_ce,num_unknown]  L&#x5B;num_Ce,1]\r\nvar B,L,Q:RCOMat;\r\n\r\n\/\/************************************\u5b8c\u5584PList\u4fe1\u606f\uff0c\u521d\u59cb\u5316\u77e9\u9635\u7ef4\u6570*************\r\nprocedure PointFromText(filename:string);\r\n\/\/************************************\u83b7\u53d6\u6587\u672c\u5171\u6709\u591a\u5c11\u884c************************\r\n\/\/function GetRows(filename:String):integer;\r\n\/\/************************************\u83b7\u53d6\u6240\u6709\u70b9\u7684(\u8fd1\u4f3c)\u9ad8\u7a0b********************\r\nprocedure GetAllH(filename:string);\r\n\/\/function isAllHasH:boolean; ********\u662f\u4e0d\u662f\u6240\u6709\u7684\u90fd\u6709\u9ad8\u7a0b\u503c\u4e86\r\n\/\/************************************\u5224\u65ad\u662f\u4e0d\u662f\u5df2\u77e5\u7684\u70b9************************\r\nfunction isKnownP(pname:string):boolean;\r\n\/\/************************************\u83b7\u53d6\u672a\u77e5\u70b9\u5728\u6240\u6709\u672a\u77e5\u70b9\u4e2d\u7684\u70b9\u5e8f\u53f7 \uff0c\u4ece0\u5f00\u59cb\r\nfunction GetUnknownID(pname:string):integer;\r\n\/\/************************************\u83b7\u53d6\u70b9\u5728\u6240\u6709\u70b9\u4e2d\u7684\u5e8f\u53f7\uff0c\u4ece0\u5f00\u59cb***********\r\nfunction GetPID(pname:string):integer;\r\n\/\/************************************\u83b7\u53d6\u77e9\u9635B\u548cQ******************************\r\nprocedure GetBAndQ(filename:String);\r\n\/\/************************************\u5224\u65ad\u70b9\u662f\u5426\u6709(\u8fd1\u4f3c)\u9ad8\u7a0b\u503c******************\r\nfunction IsPHasH(pname:string):boolean;\r\n\/\/************************************\u83b7\u53d6\u77e9\u9635L*********************************\r\nprocedure GetL(filename:string);\r\n\r\n{=====\u987a\u5e8f\uff0c\u5148PointFromText,\u518dGetBAndQ\uff0cGetAllH\uff0cGetL\u7b49=====}\r\n\r\nimplementation\r\n\/\/************************************\u83b7\u53d6\u77e9\u9635L*********************************\r\nprocedure GetL(filename:string);\r\nvar i,j,temp,temp1:integer;\r\n    f:textfile;\r\n    Reg:TPerlRegEx;\r\n    s:string;\r\n    List:TStrings;\r\nbegin\r\n  setlength(L,num_Ce,1);\r\n  for I := 0 to num_Ce - 1 do\r\n    for j := 0 to 0 do\r\n      L&#x5B;i,j]:=0;\r\n  Reg:=TPerlRegEx.Create(nil);\r\n  List:=TStringList.Create;\r\n  temp:=0;\r\n  assignfile(f,filename);\r\n  reset(f);\r\n  while  temp&lt;&gt;3 do        \/\/\u5411\u4e0b\u8bfb\u4e09\u884c(\u975e\u7a7a\u884c)\r\n  begin\r\n    readln(f,s); s:=trim(s); if s&lt;&gt;'' then temp:=temp+1;\r\n  end;                    \/\/\u4ece\u7b2c\u56db\u884c\u5f00\u59cb\u8bfb\u4e86\r\n  for temp1 := 0 to num_ce - 1 do\r\n  begin\r\n    readln(f,s); s:=trim(s);\r\n    while s='' do begin readln(f,s); s:=trim(s); end;  \/\/\u5982\u679c\u884c\u4e3a\u7a7a\u5219\u4e00\u76f4\u5411\u4e0b\u8bfb\u5230\u4e0d\u4e3a\u7a7a\u4e3a\u6b62\r\n    if not (s='') then                                  \/\/\u8be5\u884c\u4e0d\u4e3a\u7a7a\r\n    begin\r\n      reg.Subject:=UTF8string(s);  reg.RegEx:=UTF8string(splitStr);\r\n      reg.Split(list,maxint);\r\n      L&#x5B;temp1,0]:=pList&#x5B;GetPID(list&#x5B;1])].High-pList&#x5B;GetPID(list&#x5B;0])].High-strtofloat(list&#x5B;2]);\r\n    end;\r\n    list.Clear;\r\n  end;\r\nend;\r\n\r\n\/\/************************************\u5224\u65ad\u70b9\u662f\u5426\u6709(\u8fd1\u4f3c)\u9ad8\u7a0b\u503c******************\r\nfunction IsPHasH(pname:string):boolean;\r\nvar i:integer;\r\nbegin\r\n    result:=false;\r\n    for I := 0 to num_known+num_unknown - 1 do\r\n      if pList&#x5B;i].name=pname  then               \/\/\u662f\u8981\u627e\u7684\u70b9\r\n      if plist&#x5B;i].HasH then\r\n      result:=true;\r\nend;\r\n\r\n\/\/************************************\u83b7\u53d6\u70b9\u5728\u6240\u6709\u70b9\u4e2d\u7684\u5e8f\u53f7\uff0c\u4ece0\u5f00\u59cb***********\r\nfunction GetPID(pname:string):integer;\r\nvar i:integer;\r\nbegin\r\n    result:=0;\r\n    for I := 0 to num_known+num_unknown - 1 do\r\n      if pList&#x5B;i].name=pname then\r\n        begin   result:=i;   exit; end;\r\nend;\r\n\r\n\/\/************************************\u83b7\u53d6\u6240\u6709\u70b9\u7684(\u8fd1\u4f3c)\u9ad8\u7a0b********************\r\nprocedure GetAllH(filename:string);\r\nvar f:textfile;\r\n    Reg:TPerlRegEx;\r\n    s:string;\r\n    List:TStrings;\r\n    temp,temp1,i,j:integer;\r\nbegin\r\nfor I := 0 to 0 do                       \/\/\u5148\u6839\u636e\u5df2\u77e5\u70b9\u7b97\u4e00\u4e9b\u8fd1\u4f3c\u9ad8\u7a0b\uff0c\u518d\u7b97\u90a3\u4e9b\u4e0d\u80fd\u6839\u636e\u5df2\u77e5\u70b9\u7b97\u7684\u90a3\u4e9b\u70b9\r\nbegin\r\n  Reg:=TPerlRegEx.Create(nil);\r\n  List:=TStringList.Create;\r\n  temp:=0;\r\n  assignfile(f,filename);\r\n  reset(f);\r\n  while  temp&lt;&gt;3 do        \/\/\u5411\u4e0b\u8bfb\u4e09\u884c(\u975e\u7a7a\u884c)\r\n  begin\r\n    readln(f,s); s:=trim(s); if s&lt;&gt;'' then temp:=temp+1;\r\n  end;                    \/\/\u4ece\u7b2c\u56db\u884c\u5f00\u59cb\u8bfb\u4e86\r\n  for temp1 := 0 to num_ce - 1 do\r\n  begin\r\n    readln(f,s); s:=trim(s);\r\n    while s='' do begin readln(f,s); s:=trim(s); end;  \/\/\u5982\u679c\u884c\u4e3a\u7a7a\u5219\u4e00\u76f4\u5411\u4e0b\u8bfb\u5230\u4e0d\u4e3a\u7a7a\u4e3a\u6b62\r\n    if not (s='') then                                  \/\/\u8be5\u884c\u4e0d\u4e3a\u7a7a\r\n    begin\r\n      \/\/showmessage(s);\r\n      reg.Subject:=UTF8string(s);  reg.RegEx:=UTF8string(splitStr);\r\n      reg.Split(list,maxint);\r\n      if IsKnownP(list&#x5B;0]) then\r\n      begin\r\n      if (not IsKnownP(list&#x5B;1])) and (not isPHasH(list&#x5B;1])) then            \/\/\u524d\u77e5\u540e\u4e0d\u77e5\r\n      begin\r\n        pList&#x5B;GetPID(list&#x5B;1])].High:=pList&#x5B;GetPID(list&#x5B;0])].High+strtofloat(list&#x5B;2]);\r\n        pList&#x5B;GetPID(list&#x5B;1])].HasH:=true;\r\n        \/\/showmessage('\u6c42\u5f97'+list&#x5B;1]+'\u7684\u9ad8\u7a0b\uff1a'+floattostr(pList&#x5B;GetPID(list&#x5B;1])].High));\r\n        if pList&#x5B;GetPID(list&#x5B;1])].HasH then\r\n        \/\/showmessage(list&#x5B;1]+'\u9ad8\u7a0b'+'\u5df2\u77e5');\r\n      end\r\n      end else\r\n      if IsKnownP(list&#x5B;1]) then\r\n      begin\r\n      if (not IsKnownP(list&#x5B;0])) and (not isPHasH(list&#x5B;0])) then            \/\/\u540e\u77e5\u524d\u4e0d\u77e5\r\n      begin\r\n        pList&#x5B;GetPID(list&#x5B;0])].High:=pList&#x5B;GetPID(list&#x5B;1])].High-strtofloat(list&#x5B;2]);\r\n        pList&#x5B;GetPID(list&#x5B;0])].HasH:=true;\r\n        \/\/showmessage('\u6c42\u5f97'+list&#x5B;0]+'\u7684\u9ad8\u7a0b\uff1a'+floattostr(pList&#x5B;GetPID(list&#x5B;0])].High));\r\n      end;\r\n      end;\r\n      list.Clear;\r\n    end;\r\n   end;\r\n   list.Free;\r\n   closefile(f);\r\nend;\r\n\r\nfor I := 0 to num_unknown - 1 do\r\nfor j := 0 to num_known+num_unknown - 1 do\r\nbegin\r\n  Reg:=TPerlRegEx.Create(nil);\r\n  List:=TStringList.Create;\r\n  temp:=0;\r\n  assignfile(f,filename);\r\n  reset(f);\r\n  while  temp&lt;&gt;3 do        \/\/\u5411\u4e0b\u8bfb\u4e09\u884c(\u975e\u7a7a\u884c)\r\n  begin\r\n    readln(f,s); s:=trim(s); if s&lt;&gt;'' then temp:=temp+1;\r\n  end;                    \/\/\u4ece\u7b2c\u56db\u884c\u5f00\u59cb\u8bfb\u4e86\r\n  for temp1 := 0 to num_ce - 1 do\r\n  begin\r\n    readln(f,s); s:=trim(s);\r\n    while s='' do begin readln(f,s); s:=trim(s); end;  \/\/\u5982\u679c\u884c\u4e3a\u7a7a\u5219\u4e00\u76f4\u5411\u4e0b\u8bfb\u5230\u4e0d\u4e3a\u7a7a\u4e3a\u6b62\r\n    if not (s='') then                                  \/\/\u8be5\u884c\u4e0d\u4e3a\u7a7a\r\n    begin\r\n      \/\/showmessage(s);\r\n      reg.Subject:=UTF8string(s);  reg.RegEx:=UTF8string(splitStr);\r\n      reg.Split(list,maxint);\r\n      if IsPHasH(list&#x5B;0]) then\r\n      begin\r\n      if not IsPHasH(list&#x5B;1]) then            \/\/\u524d\u77e5\u540e\u4e0d\u77e5\r\n      begin\r\n        pList&#x5B;GetPID(list&#x5B;1])].High:=pList&#x5B;GetPID(list&#x5B;0])].High+strtofloat(list&#x5B;2]);\r\n        pList&#x5B;GetPID(list&#x5B;1])].HasH:=true;\r\n        \/\/showmessage('\u6c42\u5f97'+list&#x5B;1]+'\u7684\u9ad8\u7a0b\uff1a'+floattostr(pList&#x5B;GetPID(list&#x5B;1])].High));\r\n        if pList&#x5B;GetPID(list&#x5B;1])].HasH then\r\n        \/\/showmessage(list&#x5B;1]+'\u9ad8\u7a0b'+'\u5df2\u77e5');\r\n      end\r\n      end else\r\n      if IsPHasH(list&#x5B;1]) then\r\n      begin\r\n      if not IsPHasH(list&#x5B;0]) then            \/\/\u540e\u77e5\u524d\u4e0d\u77e5\r\n      begin\r\n        pList&#x5B;GetPID(list&#x5B;0])].High:=pList&#x5B;GetPID(list&#x5B;1])].High-strtofloat(list&#x5B;2]);\r\n        pList&#x5B;GetPID(list&#x5B;0])].HasH:=true;\r\n        \/\/showmessage('\u6c42\u5f97'+list&#x5B;0]+'\u7684\u9ad8\u7a0b\uff1a'+floattostr(pList&#x5B;GetPID(list&#x5B;0])].High));\r\n      end;\r\n      end;\r\n      list.Clear;\r\n    end;\r\n   end;\r\n   list.Free;\r\n   closefile(f);\r\nend;\r\n\r\nend;\r\n\r\n\/\/************************************\u83b7\u53d6\u77e9\u9635B\u548cQ******************************\r\nprocedure GetBAndQ(filename:String);\r\nvar f:textfile;\r\n    Reg:TPerlRegEx;\r\n    s:string;\r\n    List:TStrings;\r\n    temp,temp1,i,j:integer;\r\nbegin\r\n  setlength(Q,num_Ce,num_Ce);        \/\/\u521d\u59cbQ\r\n  for I := 0 to num_Ce - 1 do\r\n    for j := 0 to num_ce - 1 do\r\n      Q&#x5B;i,j]:=0;\r\n  setlength(B,num_ce,num_unknown);   \/\/\u521d\u59cbB\r\n  for I := 0 to num_Ce - 1 do\r\n    for j := 0 to num_unknown - 1 do\r\n      B&#x5B;i,j]:=0;\r\n  Reg:=TPerlRegEx.Create(nil);\r\n  List:=TStringList.Create;\r\n  temp:=0;\r\n  assignfile(f,filename);\r\n  reset(f);\r\n  while  temp&lt;&gt;3 do        \/\/\u5411\u4e0b\u8bfb\u4e09\u884c(\u975e\u7a7a\u884c)\r\n  begin\r\n    readln(f,s); s:=trim(s); if s&lt;&gt;'' then temp:=temp+1;\r\n  end;                    \/\/\u4ece\u7b2c\u56db\u884c\u5f00\u59cb\u8bfb\u4e86\r\n  for temp1 := 0 to num_Ce - 1 do\r\n  begin\r\n    readln(f,s); s:=trim(s);\r\n    \/\/showmessage(s);\r\n    while s='' do begin readln(f,s); s:=trim(s); end;  \/\/\u5982\u679c\u884c\u4e3a\u7a7a\u5219\u4e00\u76f4\u5411\u4e0b\u8bfb\u5230\u4e0d\u4e3a\u7a7a\u4e3a\u6b62\r\n    if not (s='') then                                  \/\/\u8be5\u884c\u4e0d\u4e3a\u7a7a\r\n    begin\r\n       reg.Subject:=UTF8string(s);  reg.RegEx:=UTF8string(splitStr);\r\n       reg.Split(list,maxint);\r\n       if not isKnownP(list&#x5B;0]) then B&#x5B;temp1,GetUnknownID(list&#x5B;0])]:=-1;\r\n       \/\/showmessage(list&#x5B;0]+' '+inttostr(temp1)+','+inttostr(GetUnknownID(list&#x5B;0])));\r\n       if not isKnownP(list&#x5B;1]) then B&#x5B;temp1,GetUnknownID(list&#x5B;1])]:=1;\r\n       \/\/showmessage(list&#x5B;1]+' '+inttostr(temp1)+','+inttostr(GetUnknownID(list&#x5B;1])));\r\n       Q&#x5B;temp1,temp1]:=strtofloat(list&#x5B;3]);\r\n       \/\/showmessage(floattostr(Q&#x5B;temp1,temp1]));\r\n    end;\r\n    list.Clear;\r\n    \/\/showmessage('for');\r\n  end;\r\n  \/\/showmessage('OK');\r\n  list.Free;\r\n  \/\/showmessage('ListOK');\r\n  closefile(f);\r\nend;\r\n{=====================================\u662f\u4e0d\u662f\u6240\u6709\u7684\u90fd\u6709\u9ad8\u7a0b\u503c\u4e86\r\nfunction isAllHasH:boolean;\r\nvar i:integer;\r\nbegin\r\n  result:=true;\r\n   for I := 0 to num_known+num_unknown - 1 do\r\n     if not pList&#x5B;i].HasH then  begin result:=false; exit;end;\r\nend;\r\n=================================================}\r\n\r\n\/\/************************************\u83b7\u53d6\u672a\u77e5\u70b9\u5728\u6240\u6709\u672a\u77e5\u70b9\u4e2d\u7684\u70b9\u5e8f\u53f7 \uff0c\u4ece0\u5f00\u59cb\r\nfunction GetUnknownID(pname:string):integer;\r\nvar j:integer;\r\nbegin\r\n    result:=0;\r\n    for j := num_known to num_known+num_unknown - 1 do\r\n      if pList&#x5B;j].name=pname then\r\n      begin result:=pList&#x5B;j].Unkown_ID;     exit;end;\r\nend;\r\n\r\nfunction isKnownP(pname:string):boolean;\r\nvar i:integer;\r\nbegin\r\n    result:=false;\r\n    for I := 0 to num_known - 1 do\r\n      if pList&#x5B;i].name=pname then\r\n      begin result:=true; exit; end;\r\nend;\r\n\r\n\/\/************************************\u83b7\u53d6\u6587\u672c\u5171\u6709\u591a\u5c11\u884c************************\r\n{\r\nfunction GetRows(filename:String):integer;\r\nvar f:TextFile;\r\n    i:integer;\r\n    s:string;\r\nbegin\r\n  i:= 0;\r\n  assignfile(f,filename);\r\n  reset(f);\r\n  while not eof(f) do\r\n  begin\r\n    readln(f,s);\r\n    if not (trim(s)='') then      \/\/\u7a7a\u884c\u60c5\u51b5\u7684\u5904\u7406\r\n    i:=i+1;\r\n  end;\r\n  closefile(f);\r\n  result:=i;\r\nend;   }\r\n\r\n\/\/************************************\u5b8c\u5584PList\u4fe1\u606f\uff0c\u521d\u59cb\u5316\u77e9\u9635\u7ef4\u6570*************\r\nprocedure PointFromText(filename:string);\r\nvar f:TextFile;\r\n    Reg:TPerlRegEx;\r\n    s:string;\r\n    List:TStrings;\r\n    m:integer;\r\nbegin\r\n  Reg:=TPerlRegEx.Create(nil);\r\n  List:=TStringList.Create;\r\n  \/\/showmessage(inttostr(rows));\r\n  assignfile(f,filename);\r\n  reset(f);\r\n  s:='';\r\n\r\n  Readln(f,s); s:=trim(s);                    \/\/\u7b2c\u4e00\u884c\r\n  while s='' do begin readln(f,s); s:=trim(s); end;\r\n  if not (s='') then                          \/\/\u7a7a\u884c\u60c5\u51b5\u7684\u5904\u7406\r\n    begin\r\n      reg.Subject := UTF8string(s);\r\n      reg.RegEx :=UTF8string(splitStr);       \/\/\u4ee5\u7a7a\u683c\u4e3a\u5206\u9694\u7b26\uff08\u7a7a\u683c\u4e2a\u6570\u4e0d\u9650\uff09\r\n      reg.Split(list,MaxInt);\r\n      num_known:=strtoint(list&#x5B;0]);\r\n      num_unknown:=strtoint(list&#x5B;1]);\r\n      num_ce:=strtoint(list&#x5B;2]);\r\n    end;\r\n  Setlength(pList,num_known+num_unknown);      \/\/\u6784\u9009\u70b9\u8bb0\u5f55\u7ec4\u957f\u5ea6\r\n  list.Clear;\r\n\r\n  Readln(f,s); s:=trim(s);                     \/\/\u7b2c\u4e8c\u884c\r\n  while s='' do begin readln(f,s); s:=trim(s); end;\r\n  if not (s='') then                           \/\/\u7a7a\u884c\u60c5\u51b5\u7684\u5904\u7406\r\n    begin\r\n      reg.Subject := UTF8string(s);\r\n      reg.RegEx := UTF8string(splitStr);       \/\/\u4ee5\u7a7a\u683c\u4e3a\u5206\u9694\u7b26\uff08\u7a7a\u683c\u4e2a\u6570\u4e0d\u9650\uff09\r\n      reg.Split(list,MaxInt);\r\n      for m := 0 to num_known - 1 do           \/\/\u5df2\u77e5\u70b9\r\n      begin\r\n        pList&#x5B;m].isKnown:=true;\r\n        pList&#x5B;m].name:=list&#x5B;m];\r\n        pList&#x5B;m].HasH:=true;\r\n      end;\r\n      for m := num_known to num_known+num_unknown - 1 do  \/\/\u672a\u77e5\u70b9\r\n      begin\r\n        pList&#x5B;m].isKnown:=false;\r\n        pList&#x5B;m].name:=list&#x5B;m];\r\n        pList&#x5B;m].Unkown_ID:=m-num_known;                    \/\/\u672a\u77e5\u70b9\u7684\u5e8f\u53f7\uff0c\u4ece0\u5f00\u59cb\r\n        pList&#x5B;m].HasH:=false;\r\n      end;\r\n    list.Clear;\r\n\r\n    Readln(f,s); s:=trim(s);                            \/\/\u7b2c\u4e09\u884c\r\n    while s='' do begin readln(f,s); s:=trim(s); end;\r\n  if not (s='') then                                    \/\/\u7a7a\u884c\u60c5\u51b5\u7684\u5904\u7406\r\n    begin\r\n      reg.Subject := UTF8string(s);\r\n      reg.RegEx := UTF8string(splitStr);                 \/\/\u4ee5\u7a7a\u683c\u4e3a\u5206\u9694\u7b26\uff08\u7a7a\u683c\u4e2a\u6570\u4e0d\u9650\uff09\r\n      reg.Split(list,MaxInt);\r\n      for m := 0 to num_known - 1 do\r\n        pList&#x5B;m].High:=strtofloat(list&#x5B;m]);\r\n    end;\r\n  list.Clear;\r\n\r\n  end;\r\n  list.Free;\r\n  closefile(f);\r\nend;\r\n\r\nend.\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>unit ShuiZhun; {&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-453","post","type-post","status-publish","format-standard","hentry","category-code_related"],"_links":{"self":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/comments?post=453"}],"version-history":[{"count":1,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/453\/revisions"}],"predecessor-version":[{"id":4748,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/453\/revisions\/4748"}],"wp:attachment":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/media?parent=453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/categories?post=453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/tags?post=453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}