たつをの ChangeLog : 2012-01-24

問題設定:
複数の要素をそれぞれが持つある値(val)の降順でソートする。
当り前だが同じ値を持つ要素があれば隣同士になる。
で、トップに同じ値を持つ要素が複数ある場合にその中からランダムで一つだけピックアップしたい。

解法:
ソート後に「ファイルから行をランダムに取り出す手法」[2004-11-30-5]を適用する。
リスト末にたどりつくか値が変わったらループ終了。

■サンプルコード(randomtop.pl):
#!/usr/bin/perl
use strict;
use warnings;

my @list =  (1,2,1,3,3,2,2,1,3,1,3,2);

my @a0 = map {{rank => chr(65+int(rand(6))), val => $_}} @list;
my @a1 = sort {$b->{val} <=> $a->{val}} @a0;
my @a2 = sort {$b->{val} <=> $a->{val} or $a->{rank} cmp $b->{rank}} @a0;

print "DEFAULT:     ".join(" ", map {"$_->{val}:$_->{rank}"} @a0)."\n";
print "SORT_BY_VAL: ".join(" ", map {"$_->{val}:$_->{rank}"} @a1)."\n";
print "BY_VAL_RANK: ".join(" ", map {"$_->{val}:$_->{rank}"} @a2)."\n";

my $sel = $a2[0];
for (my $i = 1; $i <@a2 and $a2[$i-1]{val} == $a2[$i]{val}; $i++) {
  rand($i+1) < 1 && ($sel = $a2[$i]);
}
print "RANDOM_TOP: $sel->{val}:$sel->{rank}\n";

■実行例:
% ./randomtop.pl                                  
DEFAULT:     1:B 2:F 1:B 3:D 3:D 2:E 2:B 1:B 3:B 1:B 3:E 2:A
SORT_BY_VAL: 3:D 3:D 3:B 3:E 2:F 2:E 2:B 2:A 1:B 1:B 1:B 1:B
BY_VAL_RANK: 3:B 3:D 3:D 3:E 2:A 2:B 2:E 2:F 1:B 1:B 1:B 1:B
RANDOM_TOP: 3:D

% ./randomtop.pl
DEFAULT:     1:A 2:B 1:A 3:C 3:A 2:E 2:D 1:E 3:E 1:A 3:D 2:F
SORT_BY_VAL: 3:C 3:A 3:E 3:D 2:B 2:E 2:D 2:F 1:A 1:A 1:E 1:A
BY_VAL_RANK: 3:A 3:C 3:D 3:E 2:B 2:D 2:E 2:F 1:A 1:A 1:A 1:E
RANDOM_TOP: 3:A

% ./randomtop.pl
DEFAULT:     1:A 2:B 1:E 3:F 3:C 2:B 2:D 1:C 3:D 1:D 3:E 2:C
SORT_BY_VAL: 3:F 3:C 3:D 3:E 2:B 2:B 2:D 2:C 1:A 1:E 1:C 1:D
BY_VAL_RANK: 3:C 3:D 3:E 3:F 2:B 2:B 2:C 2:D 1:A 1:C 1:D 1:E
RANDOM_TOP: 3:F

SORT_BY_VAL は val の値の降順でソート。
BY_VAL_RANK は val の値でのソートなんだけど同じ値のときは rank の昇順でソート。
RANDAM_TOP は最大 val 値を持つ中からランダムで一つ選択したもの。

100円ショップで買った「どこでもフック」。
鴨居や棚や机に挟んで固定するフックです。
38mm まで。1.5kg まで。
さっそく活用中。

どこでもフック

2月23日の深夜から朝にかけて、東京に雪が降りました。
溶けずに積もりましたよ。
積雪は一年ぶり。

夜22時台の様子。しんしんと降り積もっています。

積雪 積雪 積雪

翌朝7時台の様子。すべって転んでいる人もいました。気をつけないとね。

積雪 積雪 積雪

というわけで、クロックスの長靴[2011-10-03-1]で出勤しました。

クロックスの長靴で出勤です!

crocs GEORGIE 2


2011年の雪メモ

- 朝、雪が降ってました[2011-02-09-4]
- 2011年2月11日の雪[2011-02-11-2]
- 2011年2月14日の深夜から翌朝にかけての雪[2011-02-15-2]

photos by :

Canon デジタル一眼レフカメラ EOS Kiss X2


TAMRON SP AF 17-50mm F2.8 Di II


1年半以上あいてしまいましたが、恵比寿ITエンジニア飲み会9回目です。

今回の幹事はあきやん(@akiyan)、場所は「中国茶房8 恵比寿店」、参加者は6人。

エイト

中国茶房8 恵比寿店
http://www.8-duck.jp/jp-stoar.html
http://r.gnavi.co.jp/a979800/
場所:渋谷区恵比寿南1-16-12 ABC・MAMIESビル3F

ここは4年ぶりですね[2008-01-11-1]。相変わらずのコストパフォーマンス。そこそこの料理ながら激安な料金で、お金のことを気にせずにすむのが嬉しいです。餃子などをつまみながら、ビールをじゃんじゃん飲みながら、わいわいがやがやと楽しむのには最適のお店です。

なお、私は家庭の事情により当面飲み会は不参加の方針なのですが、自宅から徒歩5分圏内ということもあり、ちらりと参加してきました。地元飲み会は安心だわー。

そうそうい、あきやんが Facebook にページを作ったので今後はそちらに情報が流れるようになるかと。今回は急遽復活回だったので声掛けが不十分でしたが、次回は以降はいろいろやってく!

恵比寿ITエンジニア飲み会の歴史


- 第0回 071118 ぼった屋さん [2007-11-18-4]
- 第1回 080111 中国茶房8 恵比寿店 [2008-01-11-1]
- 第2回 080314 ZEST [2008-03-14-3]
- 第3回 080423 ビヤステーション [2008-04-23-1]
- 第4回 080730 広東料理「海栄」[2008-07-30-2]
- 第5回 081205 沖縄料理「ラ・ティーダ」[2008-12-05-2]
- 第6回 090127 恵比寿餃子 大豊記 恵比寿弐號房 [2009-01-27-1]
- 第7回 090528 唐子炉(CALAKORO) [2009-05-28-3]
- 第8回 100609 馬喰ろう(ばくろう) [2010-06-09-2]

たつをの ChangeLog
Powered by chalow