プログラミングのお題スレ Part17at TECHプログラミングのお題スレ Part17 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト150:デフォルトの名無しさん 20/04/15 12:23:24 229B67vy.net >>131 js let input = [[2, 3], [3, 4], [7, 10]]; let result = input.reduce((merged, range) => { let under = range.map(n => merged.filter(mrange => mrange[0] <= n && n <= mrange[1])[0]||[]); let extended = [under[0][0] || range[0], under[1][1] || range[1]]; let bored = merged.filter(mrange => !(extended[0] <= mrange[0] && mrange[1] <= extended[1])); return [...bored, extended]; }, []); console.log(result); 151:デフォルトの名無しさん 20/04/15 12:57:38 qoEmvMwd.net >>135 F# https://ideone.com/7RMvKQ 152:デフォルトの名無しさん 20/04/15 15:02:35.67 3oL83xUj.net >>145 Perl5、再帰降下parser generator使わせてもらいました sub evalop { my (@list) = @{$_[0]}; my $val = shift(@list)->(); while (@list) { my ($op, $arg2) = splice @list, 0, 2; $op->($val,$arg2->()); } $val } use Parse::RecDescent; $parse = new Parse::RecDescent(<<'EOG'); formula: expr /\s*\Z/ {$item[1]->()} | <error> expr: <leftop:muldiv add_op muldiv> {sub {::evalop $item[1]}} add_op: '+' {sub {$_[0] += $_[1]}} | '-' {sub{ $_[0] -= $_[1]}} muldiv: <leftop:factor mult_op factor> {sub {::evalop $item[1]}} mult_op: '*' {sub {$_[0] *= $_[1]}} | '/' {sub {$_[0] /= $_[1]}} factor: number | '(' expr ')' {$item[2]} number: /\d+/ {sub {$item[1]}} EOG for (<DATA>) { chomp; $ret = defined ($iret = $parse->formula($_)) ? sprintf('%d', $iret) : 'Error'; printf "$_ = %s\n", $ret; } __DATA__ 1+2*((3-4*5)/6+7)*8-9 100/2(3+4) 100/2*(3+4) *10 1/3*3 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch