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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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使いたいから無理筋言ってるだけとしか
883: 532 2020/12/12(土)10:42 ID:+ekv//0b(1/2) AAS
>>833 >>874に書いた左の数字と右の数値両方で順位に一貫性のあるキーを作って一回でsortするサンプル
数値は4桁以下であることを仮定してます。

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};

@k1 = keys %h;
print "@k1\n";

@kk = map{[sprintf("%4d%4d", /(\d+)/g), $_]} @k1;
@k2 = map{$$_[1]} sort{$$a[0] cmp $$b[0]} @kk;

print "@k2\n";
884: 532 2020/12/12(土)10:47 ID:+ekv//0b(2/2) AAS
こうやって幾つかコード書いてみて…>>849かTie::IxHashで十分な気がしたわw
885: 2020/12/12(土)13:20 ID:4UtPcEnB(3/3) AAS
>>881
慣れたヤツには最適解過ぎ、慣れてないヤツには意義がわからん、ということで、そんなに食いつきようがないやろ。w
886
(1): 2020/12/16(水)23:33 ID:qMOR0fCG(1) AAS
>>833
もしそれが桁数固定で、例えばその例のように一桁の数、ハイフン、一桁の数という文字列ならば、何も考えずにそのまま文字列として比較して sort すればいい。つまりただ sort するだけ。
887
(1): 2020/12/17(木)05:05 ID:fz9fvgi4(1) AAS
そんなもんは9で終わる訳がなくて10も100もある筈、と自然に拡張して考える
それと同様に、枝番号ならサブサブセクション以降もある筈、という拡張は
自然なのに、そっちには思い至らないんだよな
888: 2020/12/17(木)09:44 ID:RUflbAwb(1) AAS
>>887
外野が考えることじゃない。
>>886は、簡単なケースの例を言ってるだけだから、それでええやろ。
889: 2020/12/18(金)08:38 ID:1Xc4Ax1A(1/2) AAS
「数値でソートしたい」って最初から書いてあるだろ……
890: 2020/12/18(金)08:53 ID:lJHaaS7Y(1/2) AAS
今だけはいいけどすぐに駄目になりそうな設計を、
裏技見つけたみたいにやりたがる奴がいるんだよな
ユーザは予想を超えた無茶をしてくるものなのに
891: 2020/12/18(金)09:55 ID:Kz3E+lfW(1) AAS
Keep It Simple, Stupid
1-
あと 111 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.018s