07/08/30 22:37:31
ちげーよ。
前総理大臣のDr.マシリトの事だよ。
77:仕様書無しさん
07/08/31 07:05:35
>>76
お前までぼけるなwww
78:仕様書無しさん
07/08/31 07:07:51
>>80
マ板に相応しい課題を何か。
79:仕様書無しさん
07/08/31 11:58:29
/^o^\踏み台
80:仕様書無しさん
07/09/01 21:13:29
>>81-
下を満たす関数を作成せよ。出来た人は提出をして欲しい。
・言語は、C、C++、Javaから選択する。
・引数は二つで、共に32bit符号無し整数型
・戻り値は、二つの値の和(オーバーフローは無視)
・この関数内で別の関数を一切呼ばない。再起も認めない。
・ローカル変数は、「32bit符号無し整数型」に属するもののみとする。
・ローカル変数の個数は7個まで。
・使用可能な演算子は、not演算子(!)、or演算子(|)、シフト演算子(<<,>>)、代入演算子(=のみ)、比較演算子(==のみ)とする。
・C系の言語でのgoto文の利用は認める。
・ループは、条件部分が無限ループになっているもののみを認める。(ループ内で条件判断し、breakを行うことは認める。)
・開始関数からの呼び出しも含め、80文字×100行以内に記述できること。
・例外処理は記述しなくてもよい。
俺が昔先輩にやらされた問題を思い出して書いたが、実際にはまだ縛りがいくつかあった気がする^^;
C言語で解いたが。
81:80
07/09/01 21:18:38
>>80に追加
・インラインアセンブリの使用は認めない。
82:仕様書無しさん
07/09/01 21:25:21
>>80
何この暇つぶすのに丁度いい素材は。
83:仕様書無しさん
07/09/02 07:05:51
加算器を手間隙かけて書いただけ
/*
C言語選択
a & b = !(!a | !b)
a ^ b = (!a & b) | (a & !b) = !(a | !b) | !(!a | b)
加算器n桁目(n>=1,c1[0]=0)
c0[n] = a[n] ^ b[n] ^ c1[n-1]
c1[n] = ( a[n] ^ b[n] & c1[n-1] ) | ( a[n] & b[n] )
*/
unsigned long addULong(unsigned long x, unsigned long y)
{
unsigned long s=1,a,b,c0,c1,c1d=0,z=0;
LOOP:
a = x << 31;
b = y << 31;
c0 = !(a | !b) | !(!a | b);
c0 = !(c0 | !c1d) | !(!c0 | c1d);
c1 = !(a | !b) | !(!a | b);
c1 = !(!c1 | !c1d);
c1d = !(!a | !b);
c1d = c1 | c1d;
if(c0)
z = z | s;
if( s == (unsigned long)1<<31 )
return z;
s = s << 1;
x = x >> 1;
y = y >> 1;
goto LOOP;
}
84:83
07/09/02 07:18:30
#include <stdio.h>
int main()
{
int i;
unsigned long tv[][2] = {
{0,0},{0,1},{1,0},{1,1},{3,1},{3,3},{-1,0},{-1,1},{-1,2},{-1,-1}
};
for(i=0;i<sizeof(tv)/sizeof(tv[0][0])/2;i++) {
if(tv[i][0] + tv[i][1] != addULong(tv[i][0], tv[i][1])) {
printf("\nerror : %u + %u != %u\n",
tv[i][0], tv[i][1], addULong(tv[i][0], tv[i][1]));
return 1;
}
printf(".");
}
printf("\ncompleted.\n");
return 0;
}
85:80
07/09/02 13:55:34
10時間で解かれたorz
それにしても乙なんだぜ。>>83
制限を自分でどんどん上げていくと限界点はどこら辺に来る?
7行で書くとか、ローカル変数の使用可能個数を3個くらいまで減らしてみるとか。
86:仕様書無しさん
07/09/27 23:31:29
wktk>>100
87:仕様書無しさん
07/09/29 20:51:19
ksk
88:仕様書無しさん
07/10/07 12:19:06
>>89
ここでマ板に相応しい課題を
89:仕様書無しさん
07/11/25 10:34:57
>>90どうぞ
90:仕様書無しさん
08/01/02 18:37:03
>>91-
次のような関数"eval"をできるだけ短い行数で実装せよ。言語は、C,C++,VB,Javaから1つ選択する事。また、1行あたりの最大文字数は80文字とする。
・この関数の引数は、文字列一つである。
・この関数の戻り値は、文字列をC言語のプログラム式として処理した場合の値を返す。
例
int ret = eval("return 1+2;"); //ここでret=3になる
・この関数に投げられる式中(以下、関数内)では、1文字の英文字変数名及び1文字のアンダーバー(_)が使える。大文字と小文字は区別し、変数宣言は必須ではない。
例
int ret = eval("a=3;b=4;return a+b;"); //ここでret=7になる
・この関数中の変数の型は、32bit符号あり整数型とする。
・この関数内での演算子は、=,+,-,*,/,%のみとする。演算順位は、=が最低、+と-がその次で、残り3つが最高とする。
・演算子/は、実数型を返す必要はない。
・括弧による演算順位の補正機能は、使えなくても良い。
・この関数内では、特殊な式として、goto,for,break,continue,returnが使える。
・その他の仕様は、任意に追加しても良い。
・この関数を実装する際に、言語から提供されているeval関数(Eval関数、又は似たような効果をもたらす関数)を使用することは認めない。
91:仕様書無しさん
08/01/02 18:48:56
90に追加
この関数内では、if文も使える。
92:仕様書無しさん
08/04/29 16:25:11
保守
93:仕様書無しさん
08/06/19 20:47:24
保守
94:仕様書無しさん
09/03/08 18:03:35
保守
95:仕様書無しさん
09/03/09 10:27:26
保守
96:仕様書無しさん
09/07/25 22:43:33
なにこのmixiみたいなスレw