fork download
  1. use strict;
  2. use warnings;
  3. use v5.20;
  4. use Data::Dumper;
  5. use utf8;
  6.  
  7. binmode STDOUT, ":encoding(utf8)";
  8. binmode STDERR, ":encoding(utf8)";
  9.  
  10. my $SEATS = 100;
  11.  
  12. sub getKey($) {
  13. my ($i) = @_;
  14. return "HUMAN_${i}";
  15. }
  16.  
  17. sub test {
  18. my @SEAT_SET = sort { rand() < 0.5 } ( 1 .. ${SEATS} );
  19.  
  20. my %TICKETS = ();
  21.  
  22. for my $i ( 1 .. $SEATS ) {
  23. $TICKETS{ getKey($i) } = $SEAT_SET[ $i - 1 ];
  24. }
  25.  
  26. my @ENTER_ORDER = sort { rand() < 0.5 } keys %TICKETS;
  27.  
  28. my %TICKETS_REST = %TICKETS;
  29.  
  30. my @humanOrder = sort { rand() < 0.5 } ( 1 .. $SEATS );
  31. my $order = 0;
  32.  
  33. my $lastResult;
  34. for my $i (@humanOrder) {
  35. $order++;
  36.  
  37. my $name = getKey($i);
  38. my $answerSeat = $TICKETS{$name};
  39.  
  40. my $choiseSeat;
  41. if ( $order == 1 ) {
  42. my $falseName = ( sort { rand() < 0.5 } keys(%TICKETS_REST) )[0];
  43. $choiseSeat = $TICKETS_REST{$falseName};
  44. delete $TICKETS_REST{$falseName};
  45. if ( $name eq $falseName ) {
  46. say "[OK] ${name} は 自分 の席に座りました";
  47. $lastResult = 1;
  48. }
  49. else {
  50. say "[NG] ${name} は ${falseName} の席に座りました";
  51. $lastResult = 0;
  52. }
  53. }
  54. else {
  55. if ( exists $TICKETS_REST{$name} ) {
  56. $choiseSeat = $TICKETS_REST{$name};
  57. delete $TICKETS_REST{$name};
  58.  
  59. say "[OK] ${name} は 自分 の席に座りました";
  60. $lastResult = 1;
  61. }
  62. else {
  63. # 席がない
  64. my $falseName =
  65. ( sort { rand() < 0.5 } keys(%TICKETS_REST) )[0];
  66. $choiseSeat = $TICKETS_REST{$falseName};
  67. delete $TICKETS_REST{$falseName};
  68.  
  69. say "[NG] ${name} は ${falseName} の席に座りました";
  70. $lastResult = 0;
  71. }
  72. }
  73. }
  74.  
  75. return $lastResult;
  76. }
  77.  
  78. my $TRIES = 1;
  79. my $count = 0;
  80. for(1..$TRIES) {
  81. my $result = test();
  82. $count += $result;
  83. }
  84. say "-"x50;
  85. say sprintf("%d回試行した結果は%fでした", $TRIES, $count / $TRIES);
Success #stdin #stdout 0.04s 8196KB
stdin
Standard input is empty
stdout
[NG] HUMAN_70 は HUMAN_77 の席に座りました
[OK] HUMAN_17 は 自分 の席に座りました
[OK] HUMAN_62 は 自分 の席に座りました
[OK] HUMAN_18 は 自分 の席に座りました
[OK] HUMAN_69 は 自分 の席に座りました
[OK] HUMAN_16 は 自分 の席に座りました
[OK] HUMAN_15 は 自分 の席に座りました
[OK] HUMAN_19 は 自分 の席に座りました
[OK] HUMAN_5 は 自分 の席に座りました
[OK] HUMAN_20 は 自分 の席に座りました
[OK] HUMAN_26 は 自分 の席に座りました
[OK] HUMAN_21 は 自分 の席に座りました
[OK] HUMAN_25 は 自分 の席に座りました
[OK] HUMAN_6 は 自分 の席に座りました
[OK] HUMAN_7 は 自分 の席に座りました
[OK] HUMAN_4 は 自分 の席に座りました
[OK] HUMAN_8 は 自分 の席に座りました
[OK] HUMAN_3 は 自分 の席に座りました
[OK] HUMAN_1 は 自分 の席に座りました
[OK] HUMAN_2 は 自分 の席に座りました
[OK] HUMAN_10 は 自分 の席に座りました
[OK] HUMAN_9 は 自分 の席に座りました
[OK] HUMAN_12 は 自分 の席に座りました
[OK] HUMAN_11 は 自分 の席に座りました
[OK] HUMAN_13 は 自分 の席に座りました
[OK] HUMAN_14 は 自分 の席に座りました
[OK] HUMAN_22 は 自分 の席に座りました
[OK] HUMAN_24 は 自分 の席に座りました
[OK] HUMAN_23 は 自分 の席に座りました
[OK] HUMAN_41 は 自分 の席に座りました
[OK] HUMAN_40 は 自分 の席に座りました
[OK] HUMAN_28 は 自分 の席に座りました
[OK] HUMAN_39 は 自分 の席に座りました
[OK] HUMAN_42 は 自分 の席に座りました
[OK] HUMAN_43 は 自分 の席に座りました
[OK] HUMAN_44 は 自分 の席に座りました
[OK] HUMAN_27 は 自分 の席に座りました
[OK] HUMAN_48 は 自分 の席に座りました
[OK] HUMAN_46 は 自分 の席に座りました
[OK] HUMAN_45 は 自分 の席に座りました
[OK] HUMAN_47 は 自分 の席に座りました
[OK] HUMAN_49 は 自分 の席に座りました
[OK] HUMAN_50 は 自分 の席に座りました
[OK] HUMAN_30 は 自分 の席に座りました
[OK] HUMAN_29 は 自分 の席に座りました
[OK] HUMAN_31 は 自分 の席に座りました
[OK] HUMAN_32 は 自分 の席に座りました
[OK] HUMAN_35 は 自分 の席に座りました
[OK] HUMAN_36 は 自分 の席に座りました
[OK] HUMAN_33 は 自分 の席に座りました
[OK] HUMAN_34 は 自分 の席に座りました
[OK] HUMAN_37 は 自分 の席に座りました
[OK] HUMAN_38 は 自分 の席に座りました
[OK] HUMAN_52 は 自分 の席に座りました
[OK] HUMAN_66 は 自分 の席に座りました
[OK] HUMAN_61 は 自分 の席に座りました
[OK] HUMAN_65 は 自分 の席に座りました
[OK] HUMAN_59 は 自分 の席に座りました
[OK] HUMAN_51 は 自分 の席に座りました
[OK] HUMAN_60 は 自分 の席に座りました
[OK] HUMAN_63 は 自分 の席に座りました
[OK] HUMAN_53 は 自分 の席に座りました
[OK] HUMAN_54 は 自分 の席に座りました
[OK] HUMAN_58 は 自分 の席に座りました
[OK] HUMAN_57 は 自分 の席に座りました
[OK] HUMAN_55 は 自分 の席に座りました
[OK] HUMAN_56 は 自分 の席に座りました
[OK] HUMAN_64 は 自分 の席に座りました
[OK] HUMAN_68 は 自分 の席に座りました
[OK] HUMAN_67 は 自分 の席に座りました
[OK] HUMAN_74 は 自分 の席に座りました
[OK] HUMAN_73 は 自分 の席に座りました
[OK] HUMAN_71 は 自分 の席に座りました
[OK] HUMAN_72 は 自分 の席に座りました
[OK] HUMAN_76 は 自分 の席に座りました
[OK] HUMAN_75 は 自分 の席に座りました
[OK] HUMAN_81 は 自分 の席に座りました
[OK] HUMAN_82 は 自分 の席に座りました
[NG] HUMAN_77 は HUMAN_99 の席に座りました
[OK] HUMAN_78 は 自分 の席に座りました
[OK] HUMAN_79 は 自分 の席に座りました
[OK] HUMAN_80 は 自分 の席に座りました
[OK] HUMAN_88 は 自分 の席に座りました
[OK] HUMAN_84 は 自分 の席に座りました
[OK] HUMAN_87 は 自分 の席に座りました
[OK] HUMAN_83 は 自分 の席に座りました
[OK] HUMAN_85 は 自分 の席に座りました
[OK] HUMAN_86 は 自分 の席に座りました
[OK] HUMAN_97 は 自分 の席に座りました
[OK] HUMAN_92 は 自分 の席に座りました
[OK] HUMAN_91 は 自分 の席に座りました
[OK] HUMAN_90 は 自分 の席に座りました
[OK] HUMAN_89 は 自分 の席に座りました
[OK] HUMAN_93 は 自分 の席に座りました
[OK] HUMAN_94 は 自分 の席に座りました
[OK] HUMAN_98 は 自分 の席に座りました
[OK] HUMAN_96 は 自分 の席に座りました
[OK] HUMAN_95 は 自分 の席に座りました
[NG] HUMAN_99 は HUMAN_100 の席に座りました
[NG] HUMAN_100 は HUMAN_70 の席に座りました
--------------------------------------------------
1回試行した結果は0.000000でした