跳转到内容

User:ColorfulGalaxy/Programs:修订间差异

此后如竟没有炬火,我便是唯一的光。
ColorfulGalaxy留言 | 贡献
The link is no longer available, and the source code may change in the future.
ColorfulGalaxy留言 | 贡献
Implemented movement
第1行: 第1行:
{{Dup|Talk:聊天字母}}
Chart generator (current version)


; Chat to [[PUA]]
<pre>import sys
import os.path
import pypinyin
import xdi8string # all the characters spaced out translated into shidinn
f=open("wikifile.txt","w",encoding="utf-8")


This adaptable C++ code converts [[聊天字母|ASCII-based alphabet]] to ampersand-encoded [[PUA]].
characters=[chr(i) for i in range(0x4e00,0xa000)]
There may be bugs. You can copy this code into [http://tio.run/#cpp-clang this website], which uses UTF-8.
plaintext=' '.join(chr(n) for n in range(0x4e00,0xa000))
ciphertext=xdi8string.output


<pre class="mw-collapsible">#define PROGRAM
b1i45=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#include <cstdio>
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#include <cstring>
      0,(0),0,0,0,0,0,0,0,0,0,0,0,0,0,0,
#define elif else if
      0,44,39,42,22,23,38,26,41,0,0,0,0,0,0,0,
// Input ends in newline
      0,35,27,0,11,34,25,0,14,0,0,0,37,0,15,0,
unsigned char c=0; //input
      0,0,0,0,40,0,43,0,0,36,0,0,0,0,0,0,
unsigned char iq[8]; //input queue
      0,31,1,28,17,33,29,19,21,45,5,20,16,3,9,32,
int iql=0; //input queue length
      2,6,13,12,18,30,24,4,7,8,10,0,0,0,0,0,0]
const int lev[256]={
b1i90000=[(((i-1)%9+1) * (10**((i-1)//9))if i!=0 else 0) for i in b1i45]
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //16
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //32
000040,000041,000042,000000, 000044,000000,000000,000047, 000050,000051,000052,000053, 000054,000055,000056,000057, //48
+57543,0xe09c,0xe097,0xe09a, 0xe066,0xe067,0xe096,0xe06a, 0xe099,+57503,000072,000073, 000074,000075,000076,000077, //64
000000,0xe093,0xe06b,+57550, 0xe03b,0xe092,0xe069,+57546, 0xe03e,+57547,+57538,+57544, 0xe095,+57549,0xe03f,+57542, //80
+57537,+57545,+57540,+57548, 0xe098,+57539,0xe09b,+57536, +57502,0xe094,+57541,000000, 000000,000000,000000,000002, //96
000003,0xe06f,0xe021,0xe06c, 0xe061,0xe091,0xe06d,0xe063, 0xe065,0xe09d,0xe035,0xe054, 0xe060,0xe033,0xe039,0xe090, //112
0xe032,0xe036,0xe03d,0xe03c, 0xe062,0xe06e,0xe068,0xe034, 0xe037,0xe038,0xe03a,000000, 000000,000000,000007
};//ASCII to PUA (Level)
const int gra[256]={
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //16
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //32
000000,0xe030,000000,000000, +57637,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //48
000000,000000,000000,000000, 000000,+57590,+57636,000000, +57589,000000,000000,000000, 000000,000000,000000,000000, //64
000000,000000,+57598,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, +57634,000000,+57595,+57597, //80
+57585,+57587,+57586,000000, 000000,000000,000000,+57639, 000000,+57593,000000,000000, 000000,000000,000000,000000, //96
000000,+57594,000000,000000, 000000,000000,000000,+57632, 000000,000000,000000,+57588, 000000,+57591,+57640,000000, //112
+57635,+57599,+57584,+57551, 000000,000000,+57633,+57592, +57596,+57638
};//ASCII to PUA (Grave)
const int cen[256]={
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //16
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //32
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,0xe00c,000000, //48
0xe00a,0xe001,0xe002,0xe003, 0xe004,0xe005,0xe006,0xe007, 0xe008,0xe009,000000,000000, 000000,000000,000000,000000, //64
000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //80
000000,000000,000000,000000, 0xe00b
};


void push(char c1){
def b1i45encode(word):
if(iql>sizeof(iq)){
    return ' '.join((str(b1i45[ord(q)]) if len(str(b1i45[ord(q)]))>=2 else '0'+str(b1i45[ord(q)])) for q in word)
  throw("e001 queue overflow");
}
iq[iql]=c1;
iql+=1;
}


void clear(char c1=0){
def b1i90000sum(word):
memset(iq,0,sizeof(iq));
    return sum([b1i90000[ord(q)] for q in word])
iq[0]=c1;
iql=!!c1;
}


void print(char c1=0){
plain=plaintext.split()
if(iql==0){
cipher=ciphertext.split()
  ;
} elif(iq[0]==226 && iq[1]==135 && iq[2]==167){
  if(iq[4]==96){
  if(gra[iq[3]]<129){
    throw("e002 space and punctuation can not be capitalized");
  }
  printf("%c%c%d;",38,35,gra[iq[3]]-16);
  }
  if(iql==4){
  if(lev[iq[3]]<129){
    throw("e003 space and punctuation can not be capitalized");
  }
  printf("%c%c%d;",38,35,lev[iq[3]]-16);
  }
} elif(iq[0]==94){
  if(iq[2]==96){
  if(gra[iq[1]]<129){
    throw("e004 space and punctuation can not be capitalized");
  }
  printf("%c%c%d;",38,35,gra[iq[1]]-16);
  }
  if(iql==2){
  if(lev[iq[1]]<129){
    throw("e005 space and punctuation can not be capitalized");
  }
  printf("%c%c%d;",38,35,lev[iq[1]]-16);
  }
} elif(iq[0]==126){
  if(iq[2]==96){
  if(gra[iq[1]]<129){
    throw("e006 space and punctuation can not be made middle case");
  }
  printf("%c%c%d;",38,35,gra[iq[1]]+16);
  }
  if(iql==2){
  if(lev[iq[1]]<129){
    throw("e007 space and punctuation can not be made middle case");
  }
  printf("%c%c%d;",38,35,lev[iq[1]]+16);
  }
} elif(iq[0]==37){
  if(iq[2]==37){
  printf("%c%c%d;",38,35,cen[iq[1]]);
  } else {
  printf("%s",iq);
  }
} elif(iq[1]==96){
  if(gra[iq[0]]<10){
  throw("e010 unidentified character");
  } elif(gra[iq[0]]<127){
  printf("%s",iq);
  } else {
  printf("%c%c%d;",38,35,gra[iq[0]]);
  }
} elif(iql==1){
  if(lev[iq[0]]<10){
  throw("e011 unidentified character");
  } elif(lev[iq[0]]<127){
  printf("%s",iq);
  } else {
  printf("%c%c%d;",38,35,lev[iq[0]]);
  }
} else {
  throw("e03f unknown error");
}
clear(c1);
}


int main() {
maxlength=0
try{
maxlench=[]
  while(c!=255){
  c=getchar();
  if(c==10){
    print();
    puts("");
  } elif(c==13){
    ;
  } elif(iql==0){
    push(c);
  } elif(c==226){
    print(c); //Capital sign
  } elif(iql==1&&c==135){
    push(c);
  } elif(iql==2&&c==167){
    push(c);
  } elif(31<c&&c<126&&c!=96){
    if(iq[0]==226 && iq[1]==135 && iq[2]==167 && iql==3){
    push(c);
    } elif(iq[0]==94 && iql==1){
    push(c);
    } elif(iq[0]==126 && iql==1){
    push(c);
    } elif(iql>1&&iq[iql-1]==96){
    print(c);
    } elif(31<iq[iql-1]&&iq[iql-1]<126){
    print(c);
    } else {
    push(c);
    }
  } elif(c==96){
    push(c);
  } elif(c==94){
    print(c);
  } elif(c==126){
    print(c);
  } else {
    push(c);
  }
  }
  print();
}catch(const char message[]){
  fputs(message,stderr); //Swap the two arguments if not working
}
return 0;
}</pre>


;[[PUA]] to Chat (Python)
f.write("Do not simply rely on this chart to translate, as this chart did not handle [[talk:希顶日本语#注意多音字|homograph]] properly. The calculation may be incorrect. If so, please fix it.")


<pre class="mw-collapsible">#Python
f.write("{| class=\"wikitable sortable\"\n");
import sys
f.write("! Character !! Unicode decimal !! Stroke count !! han4 yu3 pin1 yin1 !! xdi8 aho !! [[b1i45密码|b1i45]] !! xdi8 aho letter count !! [[希顶解经|Numeral sum]] !! Stress pattern !! Notes\n")
for p in range(len(plain)):
    if(plain[p]!=cipher[p]):
        f.write("|-\n");
        f.write("| "+plain[p]+" || ")
        f.write(str(ord(plain[p])))
        f.write(" || || ")
        f.write(pypinyin.pinyin(characters[p],style=pypinyin.Style.TONE3,neutral_tone_with_five=True)[0][0])
        f.write(" || "+cipher[p])
        f.write(" || "+b1i45encode(cipher[p]))
        f.write(" || "+str(len(cipher[p])))
        f.write(" || "+str(b1i90000sum(cipher[p])) + "\n")
        if(maxlength<len(cipher[p])):
            maxlench=[p]
            maxlength=len(cipher[p])
        elif(maxlength<=len(cipher[p])):
            maxlench+=[p]
f.write("|}")
print(maxlench,maxlength,len(maxlench))


def alax():
f.close();
ay=[]
</pre>
for g in ax:
  ay+=['^'+d for d in g]+g+['~'+d for d in g]
return ay.copy()
 
ax=[['!`']+list('bpmwjqxynzDsrHN'),list('ldtgkh45vF7Bcfua'),list('oeEAYL62T83V1iX9')]
 
 
a=57345*['']+['%'+d+'%' for d in list('1234567890T.')]+['N_','iu_','ui_']+16*['']+alax()
 
 
a[10]='\n'
a[32]=' '
 
 
while(1):
c=sys.stdin.read(1)
print(a[ord(c)],end='')</pre>

2025年4月1日 (二) 21:18的版本

Chart generator (current version)

import sys
import os.path
import pypinyin
import xdi8string # all the characters spaced out translated into shidinn
f=open("wikifile.txt","w",encoding="utf-8")

characters=[chr(i) for i in range(0x4e00,0xa000)]
plaintext=' '.join(chr(n) for n in range(0x4e00,0xa000))
ciphertext=xdi8string.output

b1i45=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,(0),0,0,0,0,0,0,0,0,0,0,0,0,0,0,
       0,44,39,42,22,23,38,26,41,0,0,0,0,0,0,0,
       0,35,27,0,11,34,25,0,14,0,0,0,37,0,15,0,
       0,0,0,0,40,0,43,0,0,36,0,0,0,0,0,0,
       0,31,1,28,17,33,29,19,21,45,5,20,16,3,9,32,
       2,6,13,12,18,30,24,4,7,8,10,0,0,0,0,0,0]
b1i90000=[(((i-1)%9+1) * (10**((i-1)//9))if i!=0 else 0) for i in b1i45]

def b1i45encode(word):
    return ' '.join((str(b1i45[ord(q)]) if len(str(b1i45[ord(q)]))>=2 else '0'+str(b1i45[ord(q)])) for q in word)

def b1i90000sum(word):
    return sum([b1i90000[ord(q)] for q in word])

plain=plaintext.split()
cipher=ciphertext.split()

maxlength=0
maxlench=[]

f.write("Do not simply rely on this chart to translate, as this chart did not handle [[talk:希顶日本语#注意多音字|homograph]] properly. The calculation may be incorrect. If so, please fix it.")

f.write("{| class=\"wikitable sortable\"\n");
f.write("! Character !! Unicode decimal !! Stroke count !! han4 yu3 pin1 yin1 !! xdi8 aho !! [[b1i45密码|b1i45]] !! xdi8 aho letter count !! [[希顶解经|Numeral sum]] !! Stress pattern !! Notes\n")
for p in range(len(plain)):
    if(plain[p]!=cipher[p]):
        f.write("|-\n");
        f.write("| "+plain[p]+" || ")
        f.write(str(ord(plain[p])))
        f.write(" || || ")
        f.write(pypinyin.pinyin(characters[p],style=pypinyin.Style.TONE3,neutral_tone_with_five=True)[0][0])
        f.write(" || "+cipher[p])
        f.write(" || "+b1i45encode(cipher[p]))
        f.write(" || "+str(len(cipher[p])))
        f.write(" || "+str(b1i90000sum(cipher[p])) + "\n")
        if(maxlength<len(cipher[p])):
            maxlench=[p]
            maxlength=len(cipher[p])
        elif(maxlength<=len(cipher[p])):
            maxlench+=[p]
f.write("|}")
print(maxlench,maxlength,len(maxlench))

f.close();