[過去ログ] Perlについての質問箱 64箱目 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
853: 2020/12/09(水)19:43 ID:LWKBPFtb(6/7) AAS
>>848
おまえ、ハードな処理を実装したことがないやろ?w

慣れたPerl使いはわざわざ>>851みたいなコードは書かない。
遅いし、くどくて逆に読みにくいからな。
854: 2020/12/09(水)19:45 ID:LWKBPFtb(7/7) AAS
>>850
C#でも、タプルが使えるようになったので、似たようなコードは書く。
LINQなぶんだけPerlより読みやすいけど。
855: 2020/12/09(水)22:17 ID:rsuX7ND7(1) AAS
ハッシュテーブルにs1($val)の戻り値を保存して、そのハッシュテーブルを使って比較関数を呼び出すとかするのが普通でしょ。
856
(1): 849 2020/12/10(木)06:03 ID:+FxPMgzN(1) AAS
読みやすい優れたコードが >>851 か。
自分のコードを出してくれた点は評価するが
$1 * 100 + $2
って何?
857
(1): 2020/12/10(木)16:08 ID:smJEm1Fb(1) AAS
2桁前提なんだろうな
858: 2020/12/10(木)19:59 ID:g17Qy/zb(1) AAS
>>857
>>834なら4桁までイケる。w
859: 2020/12/11(金)03:24 ID:lklp228q(1) AAS
考え方は同じだけど最初からソート用の値をデータに持たせてみる。
my %x = (
'3-1' => ['e', 301],
'1-2' => ['b', 102],
.... ,
);

sort { $x{$a}[1] <=> $x{$b}[1] } keys %x;
860
(1): 2020/12/11(金)03:42 ID:Hz2bdcAQ(1/6) AAS
複数キーでのソートに帰着させるべきなんだろうな
1-1-1 も許容する、とかになった瞬間に破綻する
861: 2020/12/11(金)04:01 ID:Hz2bdcAQ(2/6) AAS
sub s1 {
my @a = split /\-/, $a;
my @b = split /\-/, $b;
my $dim = @a > @b ? @a : @b;
for my $i (0 .. $dim) {
my $cmp = $a[$i] <=> $b[$i];
return $cmp if $cmp;
}
return 0;
}
862
(2): 856 2020/12/11(金)06:10 ID:LwDR4/oY(1) AAS
>> 833 には数値の値域については何も書かれてないんだから
勝手に想定しない方がいいと想うよ。
どうしても比較を簡略化したいなら pack 関数で数値を全部
ビッグエンディアンで並べればいいんじゃないかな。
863: 2020/12/11(金)10:41 ID:vQm1aiEb(1/4) AAS
>>860
最初から想定されてるのでなければ、ひどい仕様変更なんだから、実装変更もやむなしやろ。
数字じゃなくてアルファベットにします、と言われただけでパーやし。w
864
(1): 2020/12/11(金)10:50 ID:vQm1aiEb(2/4) AAS
>>862
勝手に想定するのもあたりまえ。
じゃないと、なんにも例示できなくなるで?

値域がどうこうなんか、自分でなんとでもすればいいだけ。
本題のソートには関係ない。
865: 2020/12/11(金)11:20 ID:Hz2bdcAQ(3/6) AAS
1-1があるなら1-1-1もあると予測するのは自然な拡張
1-1-1-... に無限に対応できるように作っておいて、
その特殊ケースとして要件を満たす、で十分

アルファベットにも対応するのは次元が違う
866
(1): 2020/12/11(金)19:40 ID:V1LdBVWq(1) AAS
>>864
こういうひとがコーディングすると
バッブァオーバーランとか起こしてセキュリティに穴を開けるんだな
867
(1): 2020/12/11(金)20:46 ID:vQm1aiEb(3/4) AAS
>>866
アホなの?
他人のコードのバッファオーバーランなんか知らんわ。
自分で責任を持て。
868: 2020/12/11(金)21:01 ID:jm3zE7RU(1) AAS
普段は過疎ってるのに少し書き込みがあるとクソ雑魚が湧いてきてグズグズ文句たれる
頭の中どうなってんだろうな
869: 2020/12/11(金)22:34 ID:Hz2bdcAQ(4/6) AAS
んでんでんで
870
(1): 2020/12/11(金)22:41 ID:pFqzegRi(1) AAS
>>837 だが、実は、このコードは、オレが実際に、数字とかアルファベットとかが
複雑に絡んだ文字列を、ある規則に従ってソートするために作ったものを
流用したんだ。だから、応用範囲が広いという点では、これがいいと思うけどな。
871: 2020/12/11(金)22:48 ID:Hz2bdcAQ(5/6) AAS
sortの関数って@_で受けれるの?
872: 2020/12/11(金)23:30 ID:vQm1aiEb(4/4) AAS
>>870
にしたって、超激遅やで?
要素数が充分に少なきゃええけど。
873: 2020/12/11(金)23:38 ID:Hz2bdcAQ(6/6) AAS
どう見ても章のタイトルとかそんなんなので、1000も無いよ
高速化の工夫は遅くて困ってから
874
(1): 532 2020/12/12(土)00:28 ID:tTwN9OuS(1/3) AAS
>>833
perlのsort()アルゴリズムは5,8以降マージソートになってsort結果は安定なアルゴリズムなので
手短にコードを書くなら右の数字でsortしてから左の数字でsortすれば所望の結果が得られる。以下サンプル実装

use List::Util 'shuffle';
%h = map{$_ => $i++} shuffle qw{1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3};
use feature qw{say signatures}; no warnings experimental;

@k1 = keys %h;
say "@k1";
sub f($s) { [$s =~ /(\d+)/g, $s]};
@k2 = map{$$_[2]} sort{$a->[0] <=> $b->[0]} sort{$a->[1] <=> $b->[1]} map{f $_} @k1;
say "@k2";

実行結果
~ $ perl 64_833_n-n_sort_1.pl
1-1 2-3 3-3 1-2 3-1 2-2 2-1 1-3 3-2
1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3

言語処理系内部のsort()関数のアルゴリズムに依存しない書き方がしたいなら
左と右の数値で二段階のソートをするか、右の数字と左の数値で順位に一貫性のあるキーを作って
一段階のソートで済ませる方法もあると思う。

そういったサンプル実装を見たいのであれば、時間があればくけれども…
875: 532 2020/12/12(土)00:42 ID:tTwN9OuS(2/3) AAS
つか、実は Tie::IxHash を使ってhashに登録したデータの順番を維持して取り出せれば
いいだけの話だったりしてな。しらんけど
876
(1): 2020/12/12(土)00:47 ID:iq4I9JA8(1) AAS
>>867
アホだなあ
877: 532 2020/12/12(土)00:48 ID:tTwN9OuS(3/3) AAS
>>849
おっとここに十分な解答があったわw
878: 2020/12/12(土)01:06 ID:4UtPcEnB(1/3) AAS
>>876
Perlでバッファオーバーランを実装する方法を教えてください。w
879
(1): 2020/12/12(土)02:31 ID:gfhxsiY6(1) AAS
バッファオーバーランつまり out of range なんてすぐ起こせるでしょ。
880: 2020/12/12(土)03:38 ID:4UtPcEnB(2/3) AAS
>>879
具体的に詳しく!
Perlでな?
881
(1): 862 2020/12/12(土)09:07 ID:K38oRjDr(1) AAS
pack に誰も食いついてこないのはちょっと寂しいな。
正しくやれば C でさえ 1 回の memcmp で比較が済むのだが。
ましてや、Perl の pack/unpack は Perl4 の時代からある超便利関数なのだが。
まあ、「ひょっとして比較をシンプルにしたいのかな?」と思ったから書いただけだし
今回のニーズには合ってても万能というわけではないし
自分が良いと思う方法でやればいいと思うよ。
882: 2020/12/12(土)09:26 ID:kEr/Zqiv(1) AAS
数1つあたりのbit数が決められないがな
何とかしてmap使いたいから無理筋言ってるだけとしか
1-
あと 120 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.015s