Advertisement
Guest User

AnagrammDecker

a guest
Jul 24th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.33 KB | None | 0 0
  1. <?php
  2. /*
  3. (c) Decker, 2012
  4. */
  5.  
  6. Error_Reporting(E_ALL & ~E_NOTICE);
  7. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
  8.  
  9. function sort_array($arr) {
  10.     sort($arr);
  11.     return $arr;       }
  12.  
  13. $string = file_get_contents('H:\war.cp1251.txt', true);
  14. //$string = preg_replace('#(\\|\.|\||\(|\)|\[|\]|\{|\}|\?|\*|\+|\?|\/|\#|\!|-|,|;|:|>|<)#', '', $string);
  15. $string = preg_replace('#[[:punct:]]+#', '', $string);
  16. $string = str_replace(chr(0x0A0),' ',$string);
  17.  
  18. $tok = strtok($string, " \n\t");
  19. while ($tok !== false) {
  20.     // $text = strtoupper(iconv("UTF-8","CP1251",trim($tok)));
  21.     $text = strtoupper(trim($tok));
  22.     $data[trim($text)] = join(sort_array(str_split($text),SORT_LOCALE_STRING));
  23.     //$tok = strtok(" \n\t");
  24.     $tok = strtok("\t\ \r\f\n");
  25. }
  26. ksort($data); $count = array_count_values($data);
  27.  
  28. //echo "Слова:\n";
  29. //print_r($data);
  30. //echo "Количество:\n";
  31. //print_r($count);
  32.  
  33. $sum = 0;
  34. foreach($count as $k => $cnt)
  35.     if (($cnt > 1) && (strlen($k) >= 3))
  36.        if (preg_match("/^[".chr(0x7F)."-".chr(0xff)."_-]+$/",$k))
  37.         { $sum+=$cnt;
  38.           // echo $k . "(" . strlen($k) . ")\n";
  39.           // Раскомментировать для вывода "ключей" и количества в CSV
  40.           // echo $k . ";" . $cnt . "\r\n";
  41.             }
  42.  
  43. echo "Total: " . $sum;
  44.  
  45. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement