[過去ログ] プログラミングのお題スレ Part20 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
634: 96 2022/08/05(金)22:43 ID:Rv34IsoP(2/2) AAS
>>632
しまった、これだとsortの計算量 N・log N に応じた回数、比較のための文字列逆転 sub f の呼出しが起き、
データの行数が多いと遅いな
635(1): 96 2022/08/06(土)00:54 ID:pYJx8bVL(1/3) AAS
>>630 Perl5、計算量の抑制に配慮したバージョンと実行例
$ cat 20_630_isort2.pl
print $_->[0] for sort{$a->[1] cmp $b->[1]} map{[$_, scalar reverse $_]} <>;
$ cat input.txt
aaaaCB
bbbBA
cccccDB
$ perl 20_630_isort2.pl input.txt > output.txt
$ cat output.txt
bbbBA
省2
636: 96 2022/08/06(土)01:06 ID:pYJx8bVL(2/3) AAS
>>635
これ各行の行末の改行まで含めてreverseしてsortキーとするので、
もし入力ファイルの最後の行に改行が欠けていて無かったらsort結果がおかしくなる。
そのような万が一の場合に対してもrubstさも持たすならこうか
chomp(@a = <>);
print "$$_[0]\n" for sort{$$a[1] cmp $$b[1]} map{[$_, scalar reverse]} @a;
637: 2022/08/06(土)05:59 ID:UcInr7RU(1/2) AAS
>>630
Kotlin
外部リンク:paiza.io
ただ処理を連結しただけだな。コマンドラインでパイプ使ったみたいな感じ。
638(1): 2022/08/06(土)06:11 ID:UcInr7RU(2/2) AAS
>>630
Linux 等の UNIX 系 OS で rev コマンドと sort コマンドが使える環境ならシェルのコマンドラインからこう入力するとできる。
(入力文字列は input.txt に入っているとして)。
rev input.txt | sort | rev
Windows の環境でやる場合は互換性のあるコマンドを利用するか、または Cygwin や WSL や WSL2 等の UNIX 互換環境の中でコマンドラインから実行できる。
639: 96 2022/08/06(土)08:20 ID:pYJx8bVL(3/3) AAS
>>610 Perl5
use Bit::Vector;
$v = Bit::Vector->new(101);
for (<DATA>) {
($h, $s, $e) = /0x(\S+) (\S+) (\S+)/;
$v->from_Hex("$h");
$v->Interval_Reverse($e, $s);
($r) = $v->to_Hex() =~ /0+(\w+)/;
print "$_ => 0x$r\n";
}
省13
640(1): 2022/08/06(土)10:15 ID:8a3zeEyr(1/2) AAS
>>638
Linux環境ではrevというのがあるのですね
gnuWin32は全部揃ってないのですね。なんだかなあ
rev以外でもLinuxにあってgnuWin32にはないのがあるのかな
rev、自分で作ろうかな
641: 2022/08/06(土)11:17 ID:y9e1BfKB(1) AAS
>>630 ocaml
外部リンク:ideone.com
let rev s = String.init (String.length s) (fun i -> s.[String.length s - 1 - i])
let (<<) f g x = f (g x)
let f = List.map (fun (r, s) -> s) << List.sort compare << List.map (fun s -> (rev s, s))
let () = List.iter print_endline @@ f ["aaaaCB"; "bbbBA"; "cccccDB"];
642(3): 96 2022/08/06(土)15:02 ID:ddLJv/Kp(1/2) AAS
>>640
gnuWin32 用の rev.exe が欲しいなら、書き起こさなくともutil-linux-ng パッケージに入っていると思うが…
util-linux-ng for Windows
外部リンク[htm]:gnuwin32.sourceforge.net
Util-Linux contains miscellaneous utilities:
col: filter reverse line feeds from input
colcrt: filter nroff output for CRT previewing
colrm: remove columns from a file
ddate: converts Gregorian dates to Discordian dates
getopt: parse command options (enhanced)
省14
643: 96 2022/08/06(土)15:16 ID:ddLJv/Kp(2/2) AAS
Cygwin などに使われている util-linux パッケージのオリジナルな現行のソースは
GitHub - util-linux/util-linux
外部リンク:github.com
かな。そのうち rev.c のソースは
util-linux/rev.c at master ・ util-linux/util-linux ・ GitHub
外部リンク[c]:github.com
ちな util-linux パッケージは2006年に fork したとき名前に -ng をつけて util-linux-ng になったが
2010年に util-linux に名前を戻している。
cf.)
util-linux - Wikipedia
省2
644: 2022/08/06(土)17:24 ID:8a3zeEyr(2/2) AAS
>>642
ありがとう。そんなとこにあったのか
645(1): 2022/08/07(日)09:51 ID:UY2OKMya(1/2) AAS
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHK
646: 2022/08/07(日)09:52 ID:UY2OKMya(2/2) AAS
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHKで自作で作ってみました
rev input.txt | sort | rev
で問題なく動きました
647: 2022/08/07(日)16:26 ID:BSSIjy3s(1) AAS
>>645
環境変数 LANG の設定の問題とか?
こっちでは日本語での rev できたよ。
CentOS 7 で bash で LANG=ja_JP.UTF-8 の状態。そこに Windows から TeraTerm で ssh ログインして試したらできた。
$ echo $LANG
ja_JP.UTF-8
$ ( echo 見城徹 ; echo 箕輪厚介 ; echo ガーシー ; echo 木原誠二官房副長官 ) | rev
徹城見
介厚輪箕
ーシーガ
省2
648(12): 2022/08/07(日)18:30 ID:C65TbvUb(1) AAS
お題
0~2がランダムに8個入力されます
8個の数字を:で結合して出力してください
0が連続する場合は連続する0を::に置換してください
0の連続を::に置換できるのは1回のみです
0の連続が複数存在する場合は長い方を置換してください
長さが同じ場合は先頭の方を置換してください
1個の0は置換してはいけません
例
0, 0, 0, 1, 2, 1, 2, 2 → ::1:2:1:2:2
省5
649: 2022/08/07(日)19:28 ID:MpscsJR5(1/2) AAS
>>648 Ruby
f = -> s { x = s.gsub(', ', ?:); y = x.scan(/0(?::0)+/).max&.count(?0) || 0; x.sub(/:?0(:0){#{y - 1}}+:?/, '::') }
[
'0, 0, 0, 1, 2, 1, 2, 2',
'2, 1, 2, 0, 0, 0, 1, 1',
省12
650: 2022/08/07(日)19:57 ID:xO94aiKw(1/3) AAS
>>648
perl5
外部リンク:paiza.io
651: 2022/08/07(日)20:01 ID:H+tq1Ypt(1) AAS
正規表現のreplace一個で行けそうと思ったけど最長マッチみたいなの無理なのか
652: 2022/08/07(日)20:16 ID:MpscsJR5(2/2) AAS
拡張正規表現の中にはチューリング完全なものもあるけどね
653(1): 2022/08/07(日)20:17 ID:xO94aiKw(2/3) AAS
そうか
単純に s/0{$n}/::/;
を連射して増やしていくだけでいいんだな
最後に成功したのを返す感じで
上下前次1-新書関写板覧索設栞歴
あと 349 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.206s*