Advertisement
Lusien_Lashans

Hafman

Mar 20th, 2017
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function node(name, fr, par, used, code){
  2.     this.name = name;
  3.     this.fr = fr;
  4.     this.par = par;
  5.     this.used = used;
  6.     this.code = code;
  7. }
  8.  alf = new Array();
  9. WSH.echo('Type string in cosole');
  10.  str = WSH.StdIn.ReadLine();
  11.  tree = new Array();
  12. for ( i = 0; i < str.length; i++){
  13. alf[str.charAt(i)] = 0;
  14. }
  15. for ( i = 0; i < str.length; i++){
  16. alf[str.charAt(i)]++;
  17. }
  18. for (i in alf){
  19.      n = new node(i, alf[i], 0, 0, 0);
  20.     tree.push(n);
  21. }
  22. for ( i = 0; i<tree.length; i++){
  23.     for( j=0; j<tree.length - 1; j++){
  24.         if (tree[j].fr<tree[j+1].fr){
  25.          x = tree[j];
  26.         tree[j] = tree[j+1];
  27.         tree[j+1] = x;
  28.         }
  29.     }
  30. }
  31.   m = tree.length;
  32.  
  33.     if (m > 1){
  34.         for( j = 0; j < m - 1; j++){
  35.              fr1 = str.length;
  36.              num1 = 0;
  37.    
  38.             for( i = 0; i < tree.length; i++){
  39.                 if(tree[i].fr < fr1 && tree[i].used != 1){
  40.                     fr1 = tree[i].fr;
  41.                     num1 = i;
  42.                 }
  43.             }
  44.  
  45.             tree[num1].used = 1;
  46.             tree[num1].code = 0;
  47.             tree[num1].par = tree.length;
  48.    
  49.              fr2 = str.length;
  50.              num2 = 0;
  51.    
  52.             for( i = 0; i < tree.length; i++){
  53.                 if(tree[i].fr < fr2 && tree[i].used != 1){
  54.                     fr2 = tree[i].fr;
  55.                     num2 = i;
  56.                 }
  57.             }
  58.  
  59.             tree[num2].used = 1;
  60.             tree[num2].code = 1;
  61.             tree[num2].par = tree.length;
  62.    
  63.             tree.push(new node(tree[num1].name + tree[num2].name, tree[num1].fr + tree[num2].fr, 0, null, ''));
  64.         }
  65.     }
  66.     else{
  67.         tree[0].code = 0;
  68.         tree[0].par = tree.length;
  69.         tree.push(new node(tree[0].name, tree[0].fr, 0, null, ''));
  70.     }
  71.  
  72.  
  73. WSH.echo('name \t freq \t code \t par');
  74. for(i=0;i<tree.length;i++)
  75.     WSH.echo(tree[i].name, '\t',tree[i].fr, '\t', tree[i].code, '\t',tree[i].par);
  76. WSH.echo('==========');
  77. code_tab = new Array();
  78. for(i=0;i<m;i++){
  79.     j = i;
  80.     code_tab[tree[j].name] = '';
  81.     while(tree[j].par){
  82.         code_tab[tree[i].name] = tree[j].code + code_tab[tree[i].name];
  83.         j = tree[j].par;
  84.     }
  85. }
  86. if (tree.length == 1)
  87.     WSH.echo(tree[0].name,' ',"0");
  88. else
  89. for(i in code_tab)
  90.     WSH.echo(i,' ',code_tab[i]);
  91.  
  92.  code = '';
  93.    
  94.     for( i = 0; i < str.length; i++){
  95.         code += code_tab[str.charAt(i)];
  96.     }
  97.  
  98. WSH.echo("Coded string " + code);
  99.  
  100.  codeSymbol = '';
  101.      decode = '';
  102.    
  103.     for ( i = 0; i < code.length; i++){
  104.         codeSymbol += code.charAt(i);
  105.  
  106.         for ( j in code_tab){
  107.             if (code_tab[j] == codeSymbol){
  108.                 decode += j;
  109.                 codeSymbol = '';
  110.                 break;
  111.             }
  112.         }
  113. }
  114. WSH.echo("Decoded string " + decode);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement