[過去ログ]
プログラミングのお題スレ Part21 (1002レス)
プログラミングのお題スレ Part21 http://mevius.5ch.net/test/read.cgi/tech/1668333636/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
898: 638 [sage] 2023/07/08(土) 18:46:12.49 ID:fDz284w7 >>884 Perl5、見易くするためインデントは全角スペースに置換してあります。 use feature qw{signatures}; no warnings 'experimental'; use Parse::RecDescent; sub ope($valp, @args) { my $val = $valp->(); while (@args) { my ($op, $parm) = splice @args, 0, 2; $op->($val, $parm->()); } $val } %d = map{$_ => $i++} 0..9,'A'..'Z','a'..'z'; %e = map{$d{$_} => $_} keys %d; use List::Util 'reduce'; sub dec($d62) { reduce {$a*62 + $b} map{$d{$_}} split '', $d62 } my $parse = new Parse::RecDescent <<'End'; expr: <leftop:term addsub term> {sub { ::ope @{$item[1]} }} addsub: '+' {sub { $_[0] += $_[1] }} | '-' {sub { $_[0] -= $_[1] }} term: <leftop:factor muldiv factor> { sub {::ope @{$item[1]} }} muldiv: '*' {sub { $_[0] *= $_[1] }} | '/' {sub { $_[0] /= $_[1] }} factor: dig62 | '(' expr ')' { $item[2] } dig62: /[0-9A-Za-z]+/ {sub { ::dec $item[1] }} End sub enc($d) { my $r = $d % 62; $d = int(($d - $r) / 62); $d ? (enc($d) . $e{$r}) : $e{$r}; } for (<DATA>) { $n = $parse->expr($_)->(); $n = $n < 0 ? '-' . enc(-$n) : enc($n); print "$_ = $n\n"; } __DATA__ 123 + ABC 4 - K 2023-7-4 printf - (Hello + world) Windows * 11 The - quick - brown * fox + jumped - over + the - lazy * dog ABCDEFG + HIJKLMNOP + QRSTUV + WXYZ http://mevius.5ch.net/test/read.cgi/tech/1668333636/898
899: 638 [sage] 2023/07/08(土) 18:47:35.93 ID:fDz284w7 >>898 の実行結果: $ perl 21_884_calc_dig26.pl 123 + ABC = BDF 4 - K = -G 2023-7-4 = 201s printf - (Hello + world) = odFAME Windows * 11 = XFWRSlos The - quick - brown * fox + jumped - over + the - lazy * dog = -Q1YGAW2x ABCDEFG + HIJKLMNOP + QRSTUV + WXYZ = HITvzYcgj ※ Parse::RecDescentという再帰降下型Parser generatorのperl moduleを使用したので、 動作させるにはそのインストールされている必要がありますが、ideonなどのオンライン プログラムサービスには多分インストールされていなくて動作しないんじゃないかなともいます http://mevius.5ch.net/test/read.cgi/tech/1668333636/899
901: 884 [] 2023/07/08(土) 21:40:41.86 ID:CSKg1TdC >>898 ならば出題者からもeval任せでない自前の実装プログラムをどうぞ。 C www.ideone.com/erwpI4 「C言語による最新アルゴリズム事典」に載っている10進小数の四則演算式評価プログラムを ちょっと改変したらサッと作れた。 C++ www.ideone.com/MFEuc6 Cプログラムのグローバル変数と下請け関数をクラスに入れて隠蔽した。readch関数のかわりに、 空白を読み飛ばすようにオーバーライドした++演算子を使ってすっきり書いた。 http://mevius.5ch.net/test/read.cgi/tech/1668333636/901
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.045s