Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 27th, 2012  |  syntax: C++  |  size: 2.92 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include "implementation.h"
  2.  
  3. Implementation::Implementation()
  4. {
  5. }
  6.  
  7. QVector<QPair<QString,double> > Implementation::build_freq_char(QString word){
  8. QVector<QPair<QString,double> > returnie(26);
  9. for(int i=0;i<word.length();i++){
  10. int tmp=(int) word.at(i).toAscii()-'a';
  11. returnie[tmp].first=tmp+'a';
  12. returnie[tmp].second=returnie[tmp].second+1;
  13. }
  14. return returnie;
  15. }
  16.  
  17. QVector<QPair<QString,double> > Implementation::build_freq_char2x(QString word){
  18. QVector<QPair<QString,double> > returnie(26*26);
  19. for(int i=0;i<word.length()/2-1;i++){
  20. int tmp=((int) word.at(2*i).toAscii()-'a')*26+((int) word.at(2*i+1).toAscii()-'a');
  21. returnie[tmp].first=QString(tmp/26+'a')+QString(tmp%26+'a');
  22. returnie[tmp].second=returnie[tmp].second+1;
  23. }
  24. return returnie;
  25. }
  26. QVector<QPair<QString,double> > Implementation::build_freq_char3x(QString word){
  27. QVector<QPair<QString,double> > returnie(26*26*26);
  28. for(int i=0;i<word.length()/3-1;i++){
  29. int tmp=((int) word.at(3*i).toAscii()-'a')*26*26+((int) word.at(3*i+1).toAscii()-'a')*26+((int) word.at(3*i+2).toAscii()-'a');;
  30. returnie[tmp].first=QString(tmp/26/26+'a')+QString(tmp/26%26+'a')+QString(tmp%26+'a');
  31. returnie[tmp].second=returnie[tmp].second+1;
  32. }
  33. return returnie;
  34. }
  35.  
  36. void Implementation::sum(QVector<QPair<QString,double> > testing,QVector<QPair<QString,double> > &etalon){
  37. for( int i=0;i<testing.size();i++){
  38. etalon[i].second+=testing[i].second;
  39. }
  40. }
  41.  
  42. bool Implementation::test(QVector <QPair<QString, double> > testing,QVector <QPair<QString, double> > etalon){
  43. QVector<QPair<QString,double> >normalize_etalon;
  44. double cnt=0;
  45. double cnt_tst=0;
  46. for(int j=0;j<etalon.size();j++){
  47. cnt+=etalon[j].second;
  48. cnt_tst+=testing[j].second;
  49. }
  50. normalize_etalon.resize(etalon.size());
  51. for (int i=0;i<etalon.size ();i++){
  52. normalize_etalon[i].first=etalon[i].first;
  53. normalize_etalon[i].second=etalon[i].second/cnt;
  54. testing[i].second/=cnt_tst;
  55. }
  56.  
  57. for(int i=0;i<testing.size();i++){
  58. if((std::min(testing[i].second,normalize_etalon[i].second)/std::max(testing[i].second,normalize_etalon[i].second))<0.5){
  59. return false;
  60. }
  61. }
  62. return true;
  63. }
  64.  
  65. QString Implementation::partial_decrypt (QString text,QString cypher, long offset){
  66. QString alphabet="abcdefghijklmnopqrstuvwxyz";
  67. QString returnie;
  68. for (long i=offset;i<text.length ();i++){
  69. int tmp=(int) text.at(i).toAscii()-'a';
  70. int k=(int) cypher.at(i-offset).toAscii()-'a';
  71. returnie.append (alphabet.at((tmp-k+26)%26));
  72. }
  73. return returnie;
  74. }
  75.  
  76. QString Implementation::decrypt (QString text,QString cypher, QString pwd){
  77. QString alphabet="abcdefghijklmnopqrstuvwxyz";
  78. QString returnie;
  79. for (long i=0;i<pwd.length ();i++){
  80. int tmp=(int) text.at(i).toAscii()-'a';
  81. int k=(int) pwd.at(i).toAscii()-'a';
  82. returnie.append (alphabet.at((tmp-k+26)%26));
  83. }
  84. for (long i=pwd.length ();i<text.length ();i++){
  85. int tmp=(int) text.at(i).toAscii()-'a';
  86. int k=(int) cypher.at(i-pwd.length ()).toAscii()-'a';
  87. returnie.append (alphabet.at((tmp-k+26)%26));
  88. }
  89. return returnie;
  90. }