トップページ⇒tech
202コメント58KB

切符の数字で10を作れ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
誰でも子どものころやったことがあるだろう。
切符に印字された4桁の数字。
4つの数字と四則演算を使って10を作るという遊び。

あれをいかにCOOLな方法で実装するかを競うのがこのスレの遊び。
4桁の数字の入力を受けて10が作れるか検討するプログラムもよし。
全件のリストをはきだすもよし。

言語は問わない。
lispでさくっと実装するもよし。
COBOLやBASICで実装するもよし。
0002デフォルトの名無しさんNGNG
2σ・∀・)σゲッツ!!
0003デフォルトの名無しさんNGNG
lispだとサクっと作れるの?
0004デフォルトの名無しさんNGNG
糞スレ
0005デフォルトの名無しさんNGNG
つーか、レスすんなよ
0006JavaScriptNGNG
<html>
<head>
<title>
kippu no suuji de 10 wo tsukuru script
</title>
</head>
<body>
<script language = "JavaScript">

<!--

document.numbers.hyouji.value = "";

function k(a1,op,a2){ //keisan suru kansuu
if(op == 0) {return parseFloat(a1)+parseFloat(a2);}
if(op == 1) {return parseFloat(a1)-parseFloat(a2);}
if(op == 2) {return parseFloat(a1)*parseFloat(a2);}
if(op == 3 && a2 != 0) {return parseFloat(a1)/parseFloat(a2);}
return "err";
}

function check(a0, a1, a2, a3) {
opst = new Array();
opst[0] = "+";
opst[1] = "-";
opst[2] = "*";
opst[3] = "/";

for (o0 = 0; o0 < 4; o0++){
for(o1 = 0; o1 < 4; o1++){
0007JavaScriptNGNG
for(o2 = 0; o2 < 4; o2++){
// ((a0 o0 a1) o1 a2) o2 a3
result = k(k(k(a0,o0,a1),o1,a2),o2,a3);
if(9.99 <= result && result <= 10.01){
document.numbers.hyouji.value = document.numbers.hyouji.value+
"(("+a0+opst[o0]+a1+")"+opst[o1]+a2+")"+opst[o2]+a3+"="+result+"\n";
}

// (a0 o0 (a1 o1 a2) o2 a3
result = k(k(a0, o0, k(a1, o1, a2)), o2, a3);
if(9.99 <= result && result <= 10.01){
document.numbers.hyouji.value = document.numbers.hyouji.value+
"("+a0+opst[o0]+"("+a1+opst[o1]+a2+"))"+opst[o2]+a3+"="+result+"\n";
}

// (a0 o0 a1) o1 (a2 o2 a3)
result = k(k(a0, o0, a1), o1, k(a2, o2, a3));
if(9.99 <= result && result <= 10.01){
document.numbers.hyouji.value = document.numbers.hyouji.value+
"("+a0+opst[o0]+a1+")"+opst[o1]+"("+a2+opst[o2]+a3+")"+"="+result+"\n";
}

// a0 o0 ((a1 o1 a2) o2 a3)
result = k(a0, o0, k(k(a1, o1, a2), o2, a3));
if(9.99 <= result && result <= 10.01){
document.numbers.hyouji.value = document.numbers.hyouji.value+
a0+opst[o0]+"(("+a1+opst[o1]+a2+")"+opst[o2]+a3+")"+"="+result+"\n";
}

// a0 o0 (a1 o1 (a2 o2 a3))
0008JavaScriptNGNG
result = k(a0, o0, k(a1, o1, k(a2, o2, a3)));
if(9.99 <= result && result <= 10.01){
document.numbers.hyouji.value = document.numbers.hyouji.value+
a0+opst[o0]+"("+a1+opst[o1]+"("+a2+opst[o2]+a3+"))"+"="+result+"\n";
}

}
}
}
}

function calcAndPrint() {
document.numbers.hyouji.value = "";

num1 = document.numbers.n1.options[document.numbers.n1.selectedIndex].value;
num2 = document.numbers.n2.options[document.numbers.n2.selectedIndex].value;
num3 = document.numbers.n3.options[document.numbers.n3.selectedIndex].value;
num4 = document.numbers.n4.options[document.numbers.n4.selectedIndex].value;

check(num1, num2, num3, num4);
check(num1, num2, num4, num3);
check(num1, num3, num2, num4);
check(num1, num3, num4, num2);
check(num1, num4, num2, num3);
check(num1, num4, num3, num2);

check(num2, num1, num3, num4);
check(num2, num1, num4, num3);
check(num2, num3, num1, num4);
check(num2, num3, num4, num1);
0009JavaScriptNGNG
check(num2, num4, num1, num3);
check(num2, num4, num3, num1);

check(num3, num1, num2, num4);
check(num3, num1, num4, num2);
check(num3, num2, num1, num4);
check(num3, num2, num4, num1);
check(num3, num4, num1, num2);
check(num3, num4, num2, num1);

check(num4, num1, num2, num3);
check(num4, num1, num3, num2);
check(num4, num2, num1, num3);
check(num4, num2, num3, num1);
check(num4, num3, num1, num2);
check(num4, num3, num2, num1);

}


//-->
</script>

<form name="numbers">
<select name="n1">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
0010JavaScriptNGNG
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<select name="n2">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<select name="n3">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
0011JavaScriptNGNG
<option value = 9>9
</select>

<select name="n4">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<input type="button" value = "計算" onClick = "calcAndPrint();">

<br>
<textarea name="hyouji" rows = 10 cols = 50 >
</textarea>

</form>
<br>

</body>
</html>

0012JavaScript NGNG
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<select name="n2">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<select name="n3">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
0013JavaScriptNGNG
check(num2, num4, num1, num3);
check(num2, num4, num3, num1);

check(num3, num1, num2, num4);
check(num3, num1, num4, num2);
check(num3, num2, num1, num4);
check(num3, num2, num4, num1);
check(num3, num4, num1, num2);
check(num3, num4, num2, num1);

check(num4, num1, num2, num3);
check(num4, num1, num3, num2);
check(num4, num2, num1, num3);
check(num4, num2, num3, num1);
check(num4, num3, num1, num2);
check(num4, num3, num2, num1);

}


//-->
</script>

<form name="numbers">
<select name="n1">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
0014JavaScriptNGNG
result = k(a0, o0, k(a1, o1, k(a2, o2, a3)));
if(9.99 <= result && result <= 10.01){
document.numbers.hyouji.value = document.numbers.hyouji.value+
a0+opst[o0]+"("+a1+opst[o1]+"("+a2+opst[o2]+a3+"))"+"="+result+"\n";
}

}
}
}
}

function calcAndPrint() {
document.numbers.hyouji.value = "";

num1 = document.numbers.n1.options[document.numbers.n1.selectedIndex].value;
num2 = document.numbers.n2.options[document.numbers.n2.selectedIndex].value;
num3 = document.numbers.n3.options[document.numbers.n3.selectedIndex].value;
num4 = document.numbers.n4.options[document.numbers.n4.selectedIndex].value;

check(num1, num2, num3, num4);
check(num1, num2, num4, num3);
check(num1, num3, num2, num4);
check(num1, num3, num4, num2);
check(num1, num4, num2, num3);
check(num1, num4, num3, num2);

check(num2, num1, num3, num4);
check(num2, num1, num4, num3);
check(num2, num3, num1, num4);
check(num2, num3, num4, num1);
0015JavaScriptNGNG
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<select name="n2">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
<option value = 9>9
</select>

<select name="n3">
<option selected value = 0>0
<option value = 1>1
<option value = 2>2
<option value = 3>3
<option value = 4>4
<option value = 5>5
<option value = 6>6
<option value = 7>7
<option value = 8>8
0016デフォルトの名無しさんNGNG
8*(3-(7/4))=10
0017デフォルトの名無しさんNGNG
数字の中に0は有りなのか?
0018デフォルトの名無しさんNGNG
>>17
0001
だったりしたら「つくれない」が答えだと思われ。
0019デフォルトの名無しさんNGNG
>>18
10 + 0 + 0
0020デフォルトの名無しさんNGNG
>>19
ローカルルールがありそうだね…
0021デフォルトの名無しさんNGNG
>>1 括弧は使っていいんですか?
0022デフォルトの名無しさんNGNG
『1919』

はりきってどうぞ。
0023デフォルトの名無しさんNGNG
イクイクぱっくん
0024デフォルトの名無しさんNGNG
これって、なんかうまいアルゴリズムってあるんですか?
0025デフォルトの名無しさんNGNG
>>24
総当り
0026デフォルトの名無しさんNGNG
C数行で書けそう
0027デフォルトの名無しさんNGNG
>>22
√9 * √9 * 1 + 1
0028デフォルトの名無しさんNGNG
>>27
ルート無しの場合も考えてみて
002927NGNG
19 * 1 - 9とか
( 91 - 1 ) / 9とか






マジレス
( 1 / 9 + 1 ) * 9
0030デフォルトの名無しさんNGNG
evalが使える系だとちょろそう。
0031デフォルトの名無しさんNGNG
>>30
じゃあつくれ
0032デフォルトの名無しさんNGNG
>>31
他力本願はやめろ。
0033デフォルトの名無しさんNGNG
int get(int a1,int a2,int o){
switch(o){
case 0:
a1+=a2;
break;
case 1:
a1-=a2;
break;
case 2:
a1*=a2;
break;
case 3:
(a2==0) ?(0) :(a1/=a2);
break;
}return a1;}
char* getO(int n){
switch(n){
case 0:
return "+";
case 1:
return "-";
case 2:
return "*";
case 3:
return "/";
}}
0034デフォルトの名無しさんNGNG
int main(){
int res;
while(true){
int r;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
for(int k=0;k<10;k++){
for(int n=0;n<10;n++){

for(int o1=0;o1<4;o1++){
int A=get(i,j,o1);
for(int o2=0;o2<4;o2++){
int B=get(A,k,o2);
for(int o3=0;o3<4;o3++){
if(B==10)
break;
int C=get(B,n,o3);
if(C==10)
{
printf("%d %s %d %s %d %s %d",i,getO(o1),j,getO(o2),k,getO(o3),n);
printf("\n");
}
}}}//for
}}}}
}
return 0;
}

0035デフォルトの名無しさんNGNG
あら、これじゃ抜けれないか。まぁどっかにbreakでも入れておいて>>1
0036デフォルトの名無しさんNGNG
>>33
演算子は優先順位無しで左結合扱いっていうルールか。

かっこの有無とか、並べて2桁の数字にしていいかとかでめんどくささが変わりそうね
0037デフォルトの名無しさんNGNG
>>4つの数字と四則演算を使って
>>4桁の数字の入力を受けて

2桁の数字もありなのか?どうなんだ?
0038デフォルトの名無しさんNGNG
1919 → (1+9) | (1+9) = 10 とかビット演算もアリにすると、もっと幅が広がりそうだな。
0039デフォルトの名無しさんNGNG
>>36
左右の数字をくっつける演算子を増やせばいいだけ。
0040デフォルトの名無しさんNGNG
基本: 演算は +(加算) -(減算) *(乗算) と商が整数になる /(除算) だけ。
追加1: %(剰余) を追加。
追加2: 結果が整数になる √(平方根) を追加(1, 4, 9)。
追加3: &(論理積)、|(論理和)、^(排他的論理和) を追加。
追加4: 2進数8桁の ~(ビット反転) を追加。
追加4': 10進数での ~(ビット反転) を追加。

とかなー
0041デフォルトの名無しさんNGNG
>>40
商は整数にならなくても最後につじつまが合えばよいのでは?
0042デフォルトの名無しさんNGNG
ものすげー適当。対応予定は括弧と平方根まで。
母者から教わったルールは2桁以上はなしで順番の入れ替えはありだよん

ival=inputbox("4桁の数字入れれ")
if len(ival)<>4 then wscript.quit
for q=0 to 4*4*4-1
op=q
oval=clng(mid(ival,1,1))
for r=2 to 4
select case op mod 4
case 0:oval=oval+clng(mid(ival,r,1))
case 1:oval=oval-clng(mid(ival,r,1))
case 2:oval=oval*clng(mid(ival,r,1))
case 3:oval=oval/clng(mid(ival,r,1))
end select
op=op\4
next
0043デフォルトの名無しさんNGNG
if oval=10 then
op=q
out=mid(ival,1,1)
for r=2 to 4
select case op mod 4
case 0:out=out&"+"&mid(ival,r,1)
case 1:out=out&"-"&mid(ival,r,1)
case 2:out=out&"*"&mid(ival,r,1)
case 3:out=out&"/"&mid(ival,r,1)
end select
op=op\4
next
msgbox out,4096,"でけた"
exit for
end if
next
0044C言語 ひたすら表示NGNG
#include <stdio.h>
int Count(int num1,int num2,int enzansi){
if(enzansi==3&&num2==0)return -32768;
return enzansi==0?num1+num2:enzansi==1?num1-num2:enzansi==2?num1*num2:num1/num2;}
char E(int enzansi){return enzansi==0?'+':enzansi==1?'-':enzansi==2?'*':'/';}
int main(void){
int num[4]={0};int enzansi[3];int a,n,c=0;
for(;num[3]<=9;){
for(a=0;a<=2;a++)enzansi[a]=0;
for(;enzansi[2]<=3;){
for(a=0,n=num[0];a<=2;a++)
n=Count(n,num[a+1],enzansi[a]);
if(n==10){printf("%d%c%d%c%d%c%d ",num[0],E(enzansi[0]),num[1],E(enzansi[1]),num[2],E(enzansi[2]),num[3],n);c++;
if(c%200==0){printf("続きを表示します 改行を押してください");getchar();}}
enzansi[0]++;for(a=0;a<=1;a++)if(enzansi[a]==4)
{enzansi[a]=0;enzansi[a+1]++;}}
num[0]++;for(a=0;a<=2;a++)if(num[a]==10){
num[a]=0;num[a+1]++;}}
printf("\n終了します 改行を押してください");getchar();return 0;}
0045デフォルトの名無しさんNGNG
あれだ、プログラムのっける人は、およその仕様をつけることにしようや。

かっこ有りとか無しとか。
使ってる演算子の種類とか。
0046デフォルトの名無しさんNGNG
せめて言語名と動作確認コンパイラ&実行環境を書いてほしい。
004744NGNG
>>45-46
>>44
言語:C(標準Cのみ) 動作:Cコンパイラ全般
○□○□○□○ (○==数値(0~9) □==演算子(+-*/))の組み合わせの
パターン(640000通り)の演算を行い、10に成るもののみ表示する。
演算は左から順番に行う。割り算は切り捨てる。
0048デフォルトの名無しさんNGNG

int add(int a,int b){ return a+b; }
int sub(int a,int b){ return a-b; }
int mul(int a,int b){ return a*b; }
int div(int a,int b){ return b ? a/b : 0x7fffffff; }
int mod(int a,int b){ return b ? a%b : 0x7fffffff; }
int and(int a,int b){ return a&b; }
int or(int a,int b){ return a|b; }
int xor(int a,int b){ return a^b; }

main()
{
  const int num=10;
  const int opn=8;
  int (*op[])(int,int)={add,sub,mul,div,mod,and,or,xor};
  char ops[]={'+','-','*','/','%','&','|','^'};

  for(int i=0; i<num; i++)
    for(int j=0; j<num; j++)
      for(int k=0; k<num; k++)
        for(int n=0; n<num; n++)
          for(int a=0; a<opn; a++)
            for(int b=0; b<opn; b++)
              for(int c=0; c<opn; c++)
                if(op[c](op[b](op[a](i,j),k),n)==10)
                  printf("((%d%c%d)%c%d)%c%d\n",i,ops[a],j,ops[b],k,ops[c],n);
}

c言語 
演算子は{'+','-','*','/','%','&','|','^'}; 2項演算子系なら簡単に追加可能
演算は左から順番
10と等しかったら表示する
0049デフォルトの名無しさんNGNG
>>48
ひさしぶりに気持ち良いプログラムをみた
0050デフォルトの名無しさんNGNG
>>49
かっこいい。int (*op[])(int,int)={add,sub,mul,div,mod,and,or,xor};は
関数のポインタと言うやつ?初めて見ますた。
005150NGNG
>>50 >>48でした。すいません。
0052デフォルトの名無しさんNGNG
与えられた4つの数字で10作れるか考えるプログラムも作ろうよ
0053デフォルトの名無しさんNGNG
除算は実数って気がするんだけど・・・
(3-7/4)*8
とか
(1/9+1)*9
とか認めたいし。
0054デフォルトの名無しさんNGNG
>53
それが 9.999... だったり 10.000... だったりにならなければな。

分子と分母(ともに整数)で分けて扱うとかな。
0055デフォルトの名無しさんNGNG
>>54
>6は9.99<10<10.01で判定しているようだが。
0056デフォルトの名無しさんNGNG
全件表示の仕様(演算子の種類とか整数か実数かとか)決めといて
実行速度競うってのどうよ?
0057デフォルトの名無しさんNGNG
>>56
表示速度争いは極度の不公平。
バックトラックだろうとこの程度の計算量では話にならん。

--------------------------終了------------------------
0058デフォルトの名無しさんNGNG
HSP厨にも是非参加して欲しい。
0059akiNGNG
http://f1.aaacafe.ne.jp/~pointc/log302.html
006048NGNG
>>59
うげ! 
自分が書いたのと怖いぐらいそっくりなモノがある・・・
関数名まで一緒だ・・・
0061デフォルトの名無しさんNGNG
累乗はだめ?
「2334」だと、2^4-3-3 しか答えがないような気がする。

あと、立方根とか。
「3448なら」3√8(8の立方根) +4+4
0062デフォルトの名無しさんNGNG
もうそのへんになると切符の数字組み合わせなんてホノボノしたものじゃなくなるんだが・・・
0063デフォルトの名無しさんNGNG
そういえば、√って1/2乗だからなー、別の数字使ってる気がして、
なんか√使うの反則な気もする
0064デフォルトの名無しさんNGNG
>>62
そだねーw

あと、「2258」lを、「log2(底)の8」+2+5とか・・・w
0065デフォルトの名無しさんNGNG
>>61
「2334」
( 4 / 3 + 2 ) * 3
「3448」
( 3 * 4 ) - ( 8 / 4 )

0066デフォルトの名無しさんNGNG
関数型ヲタが参戦してないな。
Cで足りるということか。
0067デフォルトの名無しさんNGNG
6789は?
0068デフォルトの名無しさんNGNG
>>67
(6*(7+8))/9
0069デフォルトの名無しさんNGNG
>>67-68
のようなやりとりをプログラムで実現しろというのが>>1の主張なのでは?
007042=68NGNG
>>69
今作ったトコなんだけど3448で>>65の答えが出てこなかったからやり直し中。
面倒くさいから環境はWSH。
007142=68NGNG
と思ったけど計算は3484だったか。

dim ival()
istr=inputbox("4桁の数字入れれ")
if len(istr)=4 then
redim ival(3)
for i=0 to 3
ival(i)=cint(mid(istr,i+1,1))
next

for i=0 to 3
for j=0 to 3
for k=0 to 3
for l=0 to 1
if l=1 then ival(0)=-ival(0)
for x=0 to 2
for y=0 to 1
ans=val(ival(x),i,ival(x+1))
out=val2(ival(x),i,ival(x+1))
select case x
case 0
select case y
case 0
ans=val(val(ans,j,ival(2)),k,ival(3))
out=val2(val2(out,j,ival(2)),k,ival(3))
case 1
ans=val(ans,k,val(ival(2),j,ival(3)))
out=val2(out,k,val2(ival(2),j,ival(3)))
end select
007242=68NGNG
case 1
select case y
case 0
ans=val(val(ival(0),j,ans),k,ival(3))
out=val2(val2(ival(0),j,out),k,ival(3))
case 1
ans=val(ival(0),k,val(ans,j,ival(3)))
out=val2(ival(0),k,val2(out,j,ival(3)))
end select
case 2
select case y
case 0
'やらない
case 1
ans=val(ival(0),k,val(ival(1),j,ans))
out=val2(ival(0),k,val2(ival(1),j,out))
end select
end select
if ans=10 then
if instr(replace(replace(out2,"(",""),")",""),replace(

replace(out,"(",""),")",""))=0 then
out2=out2&vbcrlf&" |"&out
end if
end if
out=""
007342=68NGNG
next
next
next
next
next
next
if len(out2)<>0 then
msgbox "  / ̄ ̄ ̄ ̄"&vbcrlf&"< でけた"&out2&vbcrlf&"  \____",vbcritical+4096,"10作る"
else
msgbox "  / ̄ ̄ ̄ ̄"&vbcrlf&"< できない"&vbcrlf&"  \____",vbcritical+4096,"10作る"
end if
end if
function val(a,op,b)
select case op
case 0:val=a+b
case 1:val=a-b
case 2:val=a*b
case 3:if b=0 then val=-100 else val=a/b
end select
end function
function val2(a,op,b)
select case op
case 0:val2=a&"+"&b
case 1:val2=a&"-"&b
case 2:val2=a&"*"&b
case 3:val2=a&"/"&b
end select
val2="("&val2&")"
end function

既出判定が汚い。
0074デフォルトの名無しさんNGNG
↑追記:小学生でもできる四則と括弧まで。では名無しに戻ります
0075デフォルトの名無しさんNGNG
Cで4桁の数字を引数にとるヤシ誰か書けよ
0076デフォルトの名無しさんNGNG
>>75
自分で書いて晒せ
0077デフォルトの名無しさんNGNG
a+b+c+d==10
a+b+c*d==10
a+b+c/d==10
...
a+b+c-d==10
...
いっぱいやってく?
0078デフォルトの名無しさんNGNG
0000〜9999の全てに場合の解答を用意する。高速。
0079デフォルトの名無しさんNGNG
まずはどれくらいの速さを高速とするか定義せよ。
0080デフォルトの名無しさんNGNG
じゃあ、最速
0081デフォルトの名無しさんNGNG
CPUは?
0082デフォルトの名無しさんNGNG
>>78
解答を用意する時間が掛かる。
0083デフォルトの名無しさんNGNG
四則演算で不可能な組合せは1101個
0084デフォルトの名無しさんNGNG
>>83
可能か不可能かだけじゃなくてカッコと演算子と数字の並びを全件書き出すべきだと思う。
>>6でそれができてるっぽいけど、ダブりが大杉
0085デフォルトの名無しさんNGNG
>>84
4-(9-(3*5))
4-(9-(5*3))
こういうのもダブり?
0086デフォルトの名無しさんNGNG
>85
だぶりだろうな。
0087デフォルトの名無しさんNGNG
項書き換え系の話題になってまいりました
0088デフォルトの名無しさんNGNG
この手のネタ、「C言語による最新アルゴリズム事典」に載ってなかった?
小町算とかいう江戸時代の・・・・・
0089デフォルトの名無しさんNGNG
全体に-かけた
4-(9-3*5)
3*5-9+4
これもだぶりだよね?
0090デフォルトの名無しさんNGNG
あ、違った。忘れて……
0091デフォルトの名無しさんNGNG
でもだぶりには違いないよね。
0092デフォルトの名無しさんNGNG
>>89-90

4-(9-3*5)と
4+(3*5-9)
っていうのがいいたかったんしょ
009392NGNG
っていうか、
4+(3*5-9)と
4+3*5-9 はだぶりなんだろうか・・・
0094デフォルトの名無しさんNGNG
5/(2/(7-3))と5*(7-3)/2もだぶり
0095デフォルトの名無しさんNGNG
漏れの中では括弧をとっても同じ式になるものをダブりだと思ってたが
随分減るな
0096デフォルトの名無しさんNGNG
(2/1)/(1/5)
(5/1)/(1/2)
(2*1)/(1/5)
(5*1)/(1/2)

こういうのは?
0097デフォルトの名無しさんNGNG
1+2+3+4
(1+2+3+4)
((1+2+3+4))
(((1+2+3+4)))
0098デフォルトの名無しさんNGNG
((((;゚Д゚))))ガタガタブルブル
0099デフォルトの名無しさんNGNG
(;゚Д゚)ガタ

((;゚Д゚))ガタガタ

(((;゚Д゚)))ガタガタブル

((((;゚Д゚))))ガタガタブルブル
0100デフォルトの名無しさんNGNG
つーか、あれだ。
標準的な記述方法を決めて、ある式が与えられた時それを標準化する方法を決めて、
標準形式になったヤシを同値類とかんがえればよいのだ。
0101デフォルトの名無しさんNGNG
>>100
その標準方法を決めるのが、大変そう
0102デフォルトの名無しさんNGNG
>101
数字が昇順に並んでいるものから列挙していって先に出た方が標準でいいのではないか
0103デフォルトの名無しさんNGNG
タームリライティングシステム得意なヤシ募集
0104デフォルトの名無しさんNGNG
おまいら、よくかんがえろや。
4つの数字の演算パターンは次の二つしかないんだよ。

(A op B) op (C op D)
((A op B) op C) op D
0105デフォルトの名無しさんNGNG
8/(1-1/5)
0106デフォルトの名無しさんNGNG
(A op (B op C)) op D
A op ((B op C) op D)
A op (B op (C op D))
0107デフォルトの名無しさんNGNG
A op1 B op2 C op3 D
(A op1 B) op2 C op3 D
A op1 (B op2 C) op3 D
A op1 B op2 (C op3 D)
(A op1 B) op2 (C op3 D)
(A op1 B op2 C) op3 D
(A op1 (B op2 C)) op3 D
((A op1 B) op2 C) op3 D
A op1 (B op2 C op3 D)
A op1 (B op2 (C op3 D))
A op1 ((B op2 C) op3 D)
0108デフォルトの名無しさんNGNG
全件探索力技形
言語は意味もなくJava

public class TenFinder {
public static final String OP_ADD = "+";
public static final String OP_SUB = "-";
public static final String OP_MUL = "*";
public static final String OP_DIV = "/";
public static final String[] OPS = {OP_ADD, OP_SUB, OP_MUL, OP_DIV};

public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
int a = i / 1000;
int b = (i - (a * 1000)) / 100;
int c = (i - (a * 1000) - (b * 100)) / 10;
int d = (i - (a * 1000) - (b * 100) - (c * 10)) / 1;
System.out.println(a + " " + b + " " + c + " " + d + "------------------------");
search(a, b, c, d);
}
}

private static void search(int a, int b, int c, int d) {
for (int x = 0; x < OPS.length; x++)
for (int y = 0; y < OPS.length; y++)
for (int z = 0; z < OPS.length; z++)
calculate(a, OPS[x], b, OPS[y], c, OPS[z], d);
}
0109デフォルトの名無しさんNGNG
>>107
( ゚Д゚)ポカーン…
0110デフォルトの名無しさんNGNG
private static void calculate(int a, String x, int b, String y, int c, String z, int d) {
calculateWithPatern1(a, x, b, y, c, z, d);
calculateWithPatern2(a, x, b, y, c, z, d);
calculateWithPatern3(a, x, b, y, c, z, d);
calculateWithPatern4(a, x, b, y, c, z, d);
calculateWithPatern5(a, x, b, y, c, z, d);
}

//(A op B) op (C op D)
private static void calculateWithPatern1(int a, String x, int b, String y, int c, String z, int d) {
try {
int result = simpleCalc(simpleCalc(a, x, b), y, simpleCalc(c, z, d));
if (result == 10) System.out.println("(" + a + x + b + ")" + y + "(" + c + z + d + ") = 10");
} catch (ArithmeticException ex) { return; }
}

//((A op B) op C) op D
private static void calculateWithPatern2(int a, String x, int b, String y, int c, String z, int d) {
try {
int result = simpleCalc(simpleCalc(simpleCalc(a, x, b), y, c), z, d);
if (result == 10) System.out.println("((" + a + x + b + ")" + y + c + ")" + z + d + " = 10");
} catch (ArithmeticException ex) { return; }
}
0111デフォルトの名無しさんNGNG
//(A op (B op C)) op D
private static void calculateWithPatern3(int a, String x, int b, String y, int c, String z, int d) {
try {
int result = simpleCalc(simpleCalc(a, x, simpleCalc(b, y, c)), z, d);
if (result == 10) System.out.println("(" + a + x + "(" + b + y + c + "))" + z + d + " = 10");
} catch (ArithmeticException ex) { return; }
}

//A op ((B op C) op D)
private static void calculateWithPatern4(int a, String x, int b, String y, int c, String z, int d) {
try {
int result = simpleCalc(a, x, simpleCalc(simpleCalc(b, y, c), z, d));
if (result == 10) System.out.println(a + x + "((" + b + y + c + ")" + z + d + ") = 10");
} catch (ArithmeticException ex) { return; }
}
0112デフォルトの名無しさんNGNG
//A op (B op (C op D))
private static void calculateWithPatern5(int a, String x, int b, String y, int c, String z, int d) {
try {
int result = simpleCalc(a, x, simpleCalc(b, y, simpleCalc(c, z, d)));
if (result == 10) System.out.println(a + x + "(" + b + y + "(" + c + z + d + ")) = 10");
} catch (ArithmeticException ex) { return; }
}

private static int simpleCalc(int m, String op, int n) throws ArithmeticException {
if (op.equals(OP_ADD)) return m + n;
else if (op.equals(OP_SUB)) return m - n;
else if (op.equals(OP_MUL)) return m * n;
else {
if (n == 0) throw new ArithmeticException();
if ((m % n) != 0) throw new ArithmeticException();
return m / n;
}
}
}
0113デフォルトの名無しさんNGNG
+と*が可換なのを考慮して標準化するルールを考えれ
0114デフォルトの名無しさんNGNG
>>113
それだけだと簡単だけど、
A-(B-C)=A+(C-B)
A/(B/C)=A*(C/B)
みたいなのも考慮する必要がある。
0115デフォルトの名無しさんNGNG
えーと「会社を辞めようと思ったソースコード」スレはここではないのですが…。
0116デフォルトの名無しさんNGNG
(A/B)/(C/D) (A/B)*(D/C) (D/C)*(A/B) (A*D)/(B*C) (A*D)/(C*B)
(D*A)/(B*C) (D*A)/(C*B) A*(D/(B*C)) A*(D/(C*B)) D*(A/(B*C))
D*(A/(C*B)) A/((B*C)/D) A/((C*B)/D) D/((B*C)/A) D/((C*B)/A)

これみんな一緒ってことでOK?
0117デフォルトの名無しさんNGNG
まだあった
(A/(B*C))*D (A/(C*B))*D
(D/(B*C))*A (D/(C*B))*A
0118デフォルトの名無しさんNGNG
除算がはいると分母が0の時は扱いが別だろ?
0119デフォルトの名無しさんNGNG
>>116-117
まだある。60とおり。
0120デフォルトの名無しさんNGNG
この課題で標準化することに何か意味があるの?
10が作れればOKってことなら、1234で10がつくれたら
1243...4321をすっ飛ばすというのが速そうだが。
0121デフォルトの名無しさんNGNG
>>120
>>84の言葉に従ってるだけ。
四則演算で作れる組合せを知るだけなら、>>59にあるので十分。
あそこのは何故かすっ飛ばす処理を入れてないけどな。

四則演算でできない組合せについて方法を探す方が楽しいかも。
0122デフォルトの名無しさんNGNG
> この課題で標準化することに何か意味があるの?
((1+2)+3)+4 と (1+(2+3))+4 と (1+2)+(3+4) と … と似たような式を大量に列挙するのはカコワルイなぁ、という意味が。
-----------------------

正しさも列挙しやすさも全く保証しないが標準形を考えてみた。
以下の文法から生成できる式を「準々標準形」とする
 expr ::= addsub_expr | muldiv_expr
 addsub_expr ::= (expr + int) | (expr - int) | int
 muldiv_expr ::= (expr * addsub_expr) | (expr / addsub_expr)
※ 要は、 a op1 (B op2 C) の形が許されるのはop1が乗除算でop2が加減算の時のみ。a-(b-c) はダメで (a-b)+c はOK、などなど。

準々標準形の式のうち、次をみたすものを「準標準形」とする
 ・ □-△ の形の部分式では、△≠0
 ・ □/△ の形の部分式では、△≠1
 ・(□-△)+○ の形の部分式が存在しない
 ・(□/△)*○ の形の部分式が存在しない
※ 3/(2-1) はダメで 3*(2-1) はOK。((1-2)+3)-4 はダメで ((1+3)-2)-4 はOK、などなど。足し算掛け算が先。

準標準形の式のうち、次を満たす物を「標準形」とする。
  ・(((A1+A2)+A3)+...+An)
  ・(((A1*A2)*A3)*...*An)
  ・(((□-A1)-A2)-...-An)
  ・(((□/A1)/A2)/.../An)
 の形の部分式では、Ai は Ai+1 より「簡単な式」になっている。ただし、
  ・"数a < 数a+数b < 数a-数b < 数a*数b < 数a/数b < それ以外" の順で左の方が簡単
  ・↑の基準で同じ簡単さだったら、数aが小さい方が簡単
  ・↑それでも同じ簡単さだったら、AiとAi+1は同じ簡単さなので順序はどっちでもよし。
 と定義する。数字4つならこれで大丈夫なつもり
※ (4-2)/2*2 はダメで 2*(4-2)/2 はOKなどなど。
0123デフォルトの名無しさんNGNG
標準形に直した時の数字の順番が今の順番以下なら既出なのですっ飛ばす。

ex)
abcd
a + b + c + d
↓
d + c + b + a

if (dcba <= abcd) nop;
0124デフォルトの名無しさんNGNG
>>123
っていうか、abcd < dcbaだったとして、それはdcbaのところで
やればいいんちゃう?

標準形にならない数字順はやらない。つまり、
if (abcd != dbcd) nop;
でいいのでは?
0125デフォルトの名無しさんNGNG
ふむ、そうするとある式が標準形でないことを証明する方が
簡単そうだね。
標準形でなければ、処理せずに飛ばせばいいんだから。
0126デフォルトの名無しさんNGNG
#include <stdio.h>

main(){
 int i0,i1,i2,i3;

 for(i0=0; i0<=9; i0++)
  for(i1=i0; i1<=9; i1++)
   for(i2=i1; i2<=9; i2++)
    for(i3=i2; i3<=9; i3++)
    {
     if(i0+i1+i2+i3==10 || i0+i1+i2-i3==10
     || i0+i1-i2+i3==10 || i0+i1-i2-i3==10
     || i0-i1+i2+i3==10 || i0-i1+i2-i3==10
     || i0-i1-i2+i3==10 || -i0+i1+i2+i3==10
     || -i0+i1+i2-i3==10 || -i0+i1-i2+i3==10
     || -i0-i1+i2+i3==10)
      printf("%d%d%d%d ",i0,i1,i2,i3);
     if(i0+i1+i2*i3==10 || i0+i1-i2*i3==10 || i0-i1+i2*i3==10 || -i0+i1+i2*i3==10 || -i0-i1+i2*i3==10
     || i1+i2+i3*i0==10 || i1+i2-i3*i0==10 || i1-i2+i3*i0==10 || -i1+i2+i3*i0==10 || -i1-i2+i3*i0==10
     || i2+i3+i0*i1==10 || i2+i3-i0*i1==10 || i2-i3+i0*i1==10 || -i2+i3+i0*i1==10 || -i2-i3+i0*i1==10
     || i3+i0+i1*i2==10 || i3+i0-i1*i2==10 || i3-i0+i1*i2==10 || -i3+i0+i1*i2==10 || -i3-i0+i1*i2==10 )
      printf("%d%d%d%d ",i0,i1,i2,i3);


    }
}
ぶっちゃけこんなんでも良いと思うが。
ちょっと式が多いけど。割り算などまだ足りないし。
表示する時に並び替えた物を一緒に表示するなり、全体をソートしながら表示したり。
式を関数の中で処理して引数の順を入れ替えたり。いろいろできるよ。ってかやらなきゃならんのか
0127デフォルトの名無しさんNGNG
+か*の時carとcdrを入れ換えたものは同一視
0128デフォルトの名無しさんNGNG
カッコをできるだけはずした段階で第一標準形
+と*の可換性を考慮して昇順にして第二標準形
A+(a-b)とA-(b-a)を同一視して第三標準形
・・・・
・・・
0129かおりん祭りNGNG
〜oノハヽo〜  http://togoshi.ginza.st/kaorin/
  ( ^▽^) < こンなのかございまーす♪ 
http://togoshi.ginza.st/kaorin/kaorin05.html
http://www.togoshi.ginza.st/kaorin/kaorin02.html
http://togoshi.ginza.st/kaorin/kaorin06.html
http://www.togoshi.ginza.st/kaorin/kaorin08.html
http://togoshi.ginza.st/kaorin/kaorin01.html
http://www.togoshi.ginza.st/kaorin/kaorin10.html
http://togoshi.ginza.st/kaorin/kaorin04.html
http://www.togoshi.ginza.st/kaorin/kaorin03.html
http://togoshi.ginza.st/kaorin/kaorin09.html
http://www.togoshi.ginza.st/kaorin/kaorin07.html
0130rNGNG
関数型言語大好きさん!
関数型言語の威力を見せつけるチャンスですよ!
0131デフォルトの名無しさんNGNG
eval
0132デフォルトの名無しさんNGNG
でけた
2263とおりでファイナルアンサー?
0133デフォルトの名無しさんNGNG
>>132
2263通りをここに晒せ

多分違うと思う(勘)
0134デフォルトの名無しさんNGNG
>>132
少ないような気がする。
0135デフォルトの名無しさんNGNG
>>133
無理。

>>134
多いことはあっても少ないことはない。
できない組合せの数は1853。これは>>59と合ってる。
0136132NGNG
>多いことはあっても少ないことはない。
「多いことはあっても少ないことはないと思う」に訂正します。
言い切る自信はない。
0137デフォルトの名無しさんNGNG
順列で 5,836件、組合せで 552通りある。
http://www.amy.hi-ho.ne.jp/odasan/com/programs/number4/number4.html
間違ってたら恥ずかしいな。
0138デフォルトの名無しさんNGNG
>>137
順列は5878個。↓足りない分
1,1,4,8 (1+(1/4))*8 1,1,9,9 (1+(1/9))*9
1,2,3,6 (1+(2/3))*6 1,2,8,8 (1+(2/8))*8
1,3,3,5 (1+(3/3))*5 1,3,7,7 (1+(3/7))*7
1,4,4,5 (1+(4/4))*5 1,4,6,6 (1+(4/6))*6
1,5,5,5 (1+(5/5))*5 1,6,4,4 (1+(6/4))*4
1,6,6,5 (1+(6/6))*5 1,7,3,3 (1+(7/3))*3
1,8,8,5 (1+(8/8))*5 1,9,6,4 (1+(9/6))*4
1,9,9,5 (1+(9/9))*5 2,2,9,2 (2+(2*9))/2
2,6,8,5 (2+(6*8))/5 3,4,4,5 (3-(4/4))*5
3,5,5,5 (3-(5/5))*5 3,7,4,8 (3-(7/4))*8
3,7,7,5 (3-(7/7))*5 3,8,8,5 (3-(8/8))*5
3,9,9,5 (3-(9/9))*5 4,2,3,3 (4-(2/3))*3
4,3,3,2 (4+(3/3))*2 4,4,9,4 (4+(4*9))/4
4,6,6,4 (4+(6*6))/4 4,7,7,2 (4+(7/7))*2
4,9,9,2 (4+(9/9))*2 5,5,2,4 (5-(5/2))*4
5,5,9,5 (5+(5*9))/5 6,6,4,3 (6+(6*4))/3
6,6,6,2 (6-(6/6))*2 6,7,2,2 (6+(7*2))/2
6,8,8,7 (6+(8*8))/7 6,9,9,2 (6-(9/9))*2
7,6,3,2 (7-(6/3))*2 7,7,9,7 (7+(7*9))/7
7,8,4,2 (7-(8/4))*2 8,3,2,5 (8-(3*2))*5
8,8,9,8 (8+(8*9))/8 9,8,2,2 (9-(8/2))*2
0139137NGNG
>>138
あ、ほんとうだ。
あしたチェックしてみます。
THANKS.
0140デフォルトの名無しさんNGNG
 +と−、×と÷
は入れ換えられる
0141137=139NGNG
式の中のカッコをひとつ忘れておりました。
こっそり直しました。順列で 5,878個ありました。
http://www.amy.hi-ho.ne.jp/odasan/com/programs/number4/number4.html
0142132NGNG
正しいかどうかチェックお願い。
http://airh.zapto.org/n4/
0143デフォルトの名無しさんNGNG
>>142
9991が重複しているの?
0144デフォルトの名無しさんNGNG
後置記法だよね?
0145デフォルトの名無しさんNGNG
0146デフォルトの名無しさんNGNG
>>143
どういう意味でしょうか?
((9*9)/9)+1
((9/9)+9)*1
この二つは同じではないと思いますが…

>>144
そうです。
0147132NGNG
(3-1)*(6-1) (1-6)*(1-3) のようなダブリを許していました。
修正した結果、2230とおりになりました。
http://airh.zapto.org/n4/
0148132NGNG
2235でした。
0149デフォルトの名無しさんNGNG
>>146
読んで無いので知らんが同じ並びだからこれで一通りじゃ?
0000〜9999のうちの9991というもの(一万分の一)
((9*9)/9)+1
((9/9)+9)*1

計算の違いで別にカウントするの?
0150132NGNG
>>149
この↓ルールで何とおりの式を作れるか?

4個の数字と3個の四則演算子で計算結果を10にする。
ただし, 式を変形して同じになるものと、
以下の2つの形のものは取り除いておく。
○/△ △=1 例) (2*5)/(9-8) ((2*5)*(9-8)と同等なので)
○-△ △=0 例) (3+7)-(0*2) ((3+7)+(0*2)と同等なので)

答: 2235とおり(http://airh.zapto.org/n4/)

>>132に何も書いてなかったですね。すんません。
0151132NGNG
> 以下の2つの形のものは取り除いておく。
> ○/△ △=1 例) (2*5)/(9-8) ((2*5)*(9-8)と同等なので)
> ○-△ △=0 例) (3+7)-(0*2) ((3+7)+(0*2)と同等なので)

ちなみに↑をしなければ 3278とおりです。
0152デフォルトの名無しさんNGNG
微妙に違うけどこれもおもろい

4つの4で遊ぼうよ
http://www.faireal.net/articles/5/27/#d20527
0153デフォルトの名無しさんNGNG
遺伝的切符の数字
0154132NGNG
>>150
((9+9)-7)-1 ((9+9)-1)-7のようなダブリを許してました。
修正した結果、2174(>>151 3161)とおりになりました。
http://airh.zapto.org/n4/
まだまだ完璧じゃないと思うので、誰かチェックしてください。
つか>>84-130あたり話してた人は誰一人やってないの?
0155デフォルトの名無しさんNGNG
昔ポケコンでやったときは全体の7割+αくらいの回答率が出たと記憶している。

あってるかどうかわからんけど。
0156山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0157デフォルトの名無しさんNGNG
((((;゚Д゚))))ガタガタブルブル
0158デフォルトの名無しさんNGNG
3466ってできる?たぶんうらわざ使わないとできないと想うんだけど
0159デフォルトの名無しさんNGNG
四則演算のみ
並びを変えない
というルールなら無理
0160158NGNG
64のトリプルート(3乗根)+6
スマソ
0161デフォルトの名無しさんNGNG
並びを変えてよいのなら、そんなことしなくても出来る。
(4*6+6)/3
0162デフォルトの名無しさんNGNG
2桁の数を許すなら、
4+36/6
46-36
0163158NGNG
>>161-162
まけますた
0164デフォルトの名無しさんNGNG
>>158
プログラム板なんだからプログラム組んで確かめろ
0165158NGNG
>>164
あう、そうでした
0166デフォルトの名無しさんNGNG
CPUは?
0167デフォルトの名無しさんNGNG
286?
0168デフォルトの名無しさんNGNG
>>167
V30
0169デフォルトの名無しさんNGNG
lispは無いの?
0170デフォルトの名無しさんNGNG
>>1
なつかしー
リアル厨房の頃やったよ
0171デフォルトの名無しさんNGNG
>>169
さくっと実装してくれ
0172デフォルトの名無しさんNGNG
1113 並びを入れ替えずに、どうぞ
0173デフォルトの名無しさんNGNG
四則混合と乗算だけじゃ無理ぽ
0174172NGNG
>>173
反応してくれてありがとう、正解は
1+1+(1<<3)
0175デフォルトの名無しさんNGNG
>>172
二進数(111) + 十進数(3) = 10
0176デフォルトの名無しさんNGNG
>>174
3ビットシフト・・・?
0177789NGNG
>>174
(1<<1)+(1<<3)
でもいいんでないか?
0178デフォルトの名無しさんNGNG
>>154
2162とおりというのがでてる
http://www.geocities.co.jp/SiliconValley-Oakland/4477/misc/
0179デフォルトの名無しさんNGNG
0+0=8
とかもアリですか?
0180デフォルトの名無しさんNGNG
>>179
「とか」って、他に何が並ぶ?
0181デフォルトの名無しさんNGNG
0+0=∞
とか
0182デフォルトの名無しさんNGNG
3+3=8
とか
0183デフォルトの名無しさんNGNG
1+1=田
とか
0184デフォルトの名無しさんNGNG
1+1=1
   1
0185デフォルトの名無しさんNGNG
1÷1=母
0186デフォルトの名無しさんNGNG
1-1=日
0187デフォルトの名無しさんNGNG
1+5=苺
0188デフォルトの名無しさんNGNG
100-1=白
0189 NGNG
いきなり消防のなぞなぞスレになりさがたな、、、。
0190デフォルトの名無しさんNGNG
なぞなぞはガキのものだと思ってやがる(笑)
0191デフォルトの名無しさんNGNG
犯人は*15
0192デフォルトの名無しさんNGNG
1+1=想い出
0193デフォルトの名無しさんNGNG
ちょっとかんがえたけどさ・・・
「0000」とか入力されたらどうする?
0194デフォルトの名無しさんNGNG
何を考えたの?
何をどうするの?
0195デフォルトの名無しさんNGNG
s
0196デフォルトの名無しさんNGNG
>>193
例外データとして登録しておく。
0197山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0198デフォルトの名無しさんNGNG
保守
0199デフォルトの名無しさんNGNG
3,4,7,8 ・・・・
0200_NGNG
http://homepage.mac.com/hiroyuki44/jaz09.html
0201山崎 渉NGNG
(^^)
0202山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
■ このスレッドは過去ログ倉庫に格納されています