亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4609 | 回復: 2
打印 上一主題 下一主題

perl排序,按照頻數(shù)由大到小排序 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-10-11 20:26 |只看該作者 |倒序瀏覽
各位大大能不能給我這個統(tǒng)計排序的perl腳本 ?
各位大大好:

一個字符串, 是由字符 A, B, C, D 字符組成的。如:
ABDCDCDC

1: 按照 輸入值 K值 進行分割,分割成每 K個字符 一組。如:

K = 1   A B D C D C D C 共8組
K = 2   AB DC DC DC     共4組
K = 3   ABD CDC DC      共3組

2: 統(tǒng)計每組字符的數(shù)值:
字符的值 A = 0, B = 1, C = 2, D = 3

每組字符數(shù)值計算公式如:
DC  值 3, 2                 => (3 * 4**1) + (2 * 4**0) = 14
ABC 值 0, 1, 2 => (0 * 4**2) + (1 * 4**1) + (2 * 4**0) = 6


3: 結(jié)果按照頻數(shù)由大到小排序, 如:

字符串: ABDCDCDC
K = 2, 共4組字符, AB DC DC DC 輸出為:
字符組  頻數(shù)  每組字符的數(shù)值



DC  3   14
AB  1   1


各位大大能不能給我這個統(tǒng)計排序的perl腳本 ?

字符串: ABDCDCDCAABBCDCCABBB
K值: 輸入
輸出為: ?

論壇徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17處女座
日期:2014-09-01 09:25:1115-16賽季CBA聯(lián)賽之吉林
日期:2015-12-22 14:01:5215-16賽季CBA聯(lián)賽之廣東
日期:2016-03-08 18:49:422016科比退役紀念章
日期:2016-07-06 12:19:55
2 [報告]
發(fā)表于 2013-10-12 11:04 |只看該作者
本帖最后由 stanley_tam 于 2013-10-12 11:10 編輯

偶試試{:3_195:}
  1. #!perl
  2. use strict;
  3. use v5.10;
  4. use Readonly;
  5. use English;

  6. ##############################################################################
  7. # claim subs and vars
  8. ##############################################################################
  9. Readonly::Hash our %numeric_value_of => (
  10.     A => 0,
  11.     B => 1,
  12.     C => 2,
  13.     D => 3,
  14. );


  15. sub main;
  16. sub get_input;
  17. sub my_split;
  18. sub calc;
  19. sub format_write;

  20. ##############################################################################
  21. # main
  22. ##############################################################################
  23. main();

  24. ##############################################################################
  25. # subs
  26. ##############################################################################
  27. sub main {
  28.     my ($string_from_input, $K) = get_input();
  29.     my @letter_groups    = my_split($string_from_input, $K);
  30.     my %occurrences_of   = ();
  31.     my %values_of        = ();


  32.     # get occurrences
  33.     $occurrences_of{$_}++ for @letter_groups;

  34.     # sort by occurrences value   
  35.     my @sorted_keys = sort {
  36.         $occurrences_of{$b} <=> $occurrences_of{$a}
  37.         } keys %occurrences_of;

  38.     # calculate values for letter
  39.     $values_of{$_} = calc($_) for keys %occurrences_of;

  40.     # output
  41.     say 'Output: ';
  42.     say 'Letters  Occurrences  Values';
  43.     for my $key (@sorted_keys){
  44.         format_write($key, $occurrences_of{$key}, $values_of{$key});
  45.     }

  46. }


  47. sub get_input {
  48.     my $string_from_input = q{};
  49.     my $K = 0;
  50.     while ($string_from_input !~ m{^ [ABCD]+ $}mx) {
  51.         print 'String: ';
  52.         chomp ($string_from_input = <STDIN>);
  53.     }

  54.     while ($K !~ m{^ [1-9] \d*$}mx) {
  55.         print 'K: ';
  56.         chomp ($K = <STDIN>);
  57.     }

  58.     while ($K > length $string_from_input) {
  59.         print 'K: ';
  60.         chomp ($K = <STDIN>);
  61.     }
  62.     return $string_from_input, $K;
  63. }

  64. sub my_split {
  65.     my ($string_from_input, $K) = @_;
  66.     my @letter_groups = $string_from_input =~ m{ (:? \w{$K}) }gx;
  67.     push @letter_groups, $POSTMATCH if $POSTMATCH;

  68.     return @letter_groups;
  69. }

  70. sub calc {
  71.     my $string = shift;
  72.     my $result = 0;
  73.     my @values = reverse map {$numeric_value_of{$_}} split //, $string;

  74.     for my $i (0 .. $#values){
  75.         my $value = $values[$i];
  76.         $result += $value * 4 ** $i;
  77.     }
  78.     return $result;
  79. }

  80. sub format_write {
  81.     my ($letter, $occurrence, $value) = @_;
  82. format WRITELETTER =
  83. @<<<<<<<<   @||||   @>>>>>>
  84. $letter, $occurrence, $value
  85. .
  86.     $FORMAT_NAME = 'WRITELETTER';
  87.     write;
  88. }

  89. __END__
復制代碼

論壇徽章:
0
3 [報告]
發(fā)表于 2013-10-13 16:22 |只看該作者
好厲害!謝謝大大了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP