作者: Yさ
日時: 2002/5/15(03:17)
Naomasa Numajiri writes:

> お題:
>     任意の値の異なる1桁の数値4つが与えられたとき、
>     四則演算(+、−、×、÷)を使用して計算結果を
>     10にする。


...やや、気がついたらもうこんな時間だ(;^^ゞ
...なんだかちっとも初心者向けでは無い気がしますが。

ロジックは sugiさん作 [TSabc:153] ticket.rb をパクってます。

--^ ticket1.awk
BEGIN{
  split("4 2 1", num); num[0]="8";
  split("- * /", op); op[0]="+";
  ans=10;

  limit=4^3;
  for(i=0; i<limit; ++i){
    s=num[0] op[int(i/4/4)%4] num[1] op[int(i/4)%4] num[2] op[i%4] num[3];
    if(eval(s)==ans) print s,"=",eval(s);
} }

function eval(s,  v,command){
  command = sprintf("%s \"BEGIN{ print %s }\"", ARGV[0], s);
  command | getline v;
  close(command);
  return v;
}
--$


■実行例

 >jgawk -f ticket1.awk[ENTER]
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-----
8+4-2*1 = 10
8+4-2/1 = 10
8+4/2*1 = 10
8+4/2/1 = 10
-----

以上