[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 20:03 / Filesize : 140 KB / Number-of Response : 601
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

七行プログラミング part5



1 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 09:02:39 ]
7行×79文字なら言語は問いません。
過去作品は、もしかしたら>>2-20あたりに。

前スレ
pc8.2ch.net/test/read.cgi/tech/1051703369/
part 3
pc2.2ch.net/tech/kako/1033/10331/1033143528.html
part 2
pc3.2ch.net/tech/kako/1018/10188/1018840143.html
part 1
pc.2ch.net/tech/kako/984/984182993.html


24 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 02:22:01 ]
お前頭いいな

25 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 02:50:24 ]
ではどうやって2つ目の歩を置いたんだね。

26 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 02:59:55 ]
お前頭いいな

27 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 03:03:44 ]
初期配置

28 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 03:04:43 ]
二歩と聞くと、豊川六段(前原代表)がNHK杯でにふった時の
千葉女流のあーってさけぶやつを思い出すw。

29 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 11:37:20 ]
二歩の判定に==使うコードが悪いな
俺なら>=使う

30 名前:デフォルトの名無しさん mailto:sage [2006/03/30(木) 11:55:00 ]
>=を使ったらルールが変わってるよ。

31 名前:デフォルトの名無しさん [2006/03/31(金) 22:27:06 ]
7分以内に答えられたらIPA認定
oshiete1.goo.ne.jp/kotaeru.php3?q=2063991
#include <iostream.h>
main(){
char *(*pp)[3];
printf("%lu", sizeof(char*));
printf(" pp%lu", pp);
printf(", ++pp%lu", ++pp);
}

32 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 22:30:32 ]
匕行プログラミング



33 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 23:41:25 ]
pointer to array of pointer to charかね
 sizeof(char*  )== 4
 sizeof(char*[3])== 12
だから12増えるのが正解だろ。


34 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 00:18:13 ]
>>33
ありがとうございました。やっと分かりました。
あとで、20ポイントつけておきますね。

35 名前:デフォルトの名無しさん mailto:sage [2006/03/32(土) 01:41:12 ]
や、俺gooに登録してへんから('ω`)

36 名前:デフォルトの名無しさん [2006/03/32(土) 23:59:38 ]
最も偏差値の高いスレはここですね?

37 名前:せっ☆マ ◆wwwwWwWWWw mailto:トリップくれた職人さん、ありがとう! [2006/04/05(水) 15:15:35 ]
とうとうVIPから来てしまいました

38 名前:デフォルトの名無しさん mailto:sage [2006/04/05(水) 22:39:45 ]
安南将棋って知らないの?

39 名前:デフォルトの名無しさん [2006/04/08(土) 19:25:54 ]
過去スレみれねえ
まとめサイト欲しい

40 名前:デフォルトの名無しさん mailto:sage [2006/04/08(土) 19:32:57 ]
>>39
ttp://cm.xrea.cc/

41 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 00:07:50 ]
>>40
じつに素晴らしい

42 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 00:19:28 ]
#include <windows.h>
double sin();char b[99];long*h,w[]={65537,8000,8000,524289,20},d[]={b,99,0,0,0,
1,0,0};WINAPI f(t,u,x,y,z){waveOutReset(h);waveOutWrite(h,d,32);}main(c,v)char
**v;{if(c>1){for(c=99;c--;b[c]=sin(c*0.7854)*64);if((c=atoi(v[1]))>0){waveOutO\
pen(&h,-1,w,0,0,0);waveOutPrepareHeader(h,d,32);for(c=timeSetEvent(60000/c,1,f,
timeBeginPeriod(1),1);!kbhit();Sleep(1));timeKillEvent(c);waveOutReset(h);wave\
OutUnprepareHeader(h,d,32);waveOutClose(h);}}}

Win32用簡易メトロノーム。コマンドライン引数でBPMを指定。何かキーを押せば終了します。
マルチメディアタイマーを利用しているのでwinmm.libとのリンクが必要。



43 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 23:47:28 ]
#include <stdio.h>
int a[81];s(n){int i=80,c[10];if(a[n])s(n+1);else if(n>80)for(;~i;i--)printf("\
%d%c",a[i],i%9?0:10);else{for(i=9;i;)c[i--]=0;for(i=8;i--;)c[a[n/9*9+i]]=c[a[n%
9+i*9]]=c[a[n/27*27+n%9/3*3+i%3+i/3*9]]=1;for(i=1;i<=9;i++)c[i]||(a[n]=i,s(n+1)
,a[n]=0);}}main(i){i=80;for(;~i;)scanf("%d",&a[i--]);s(0);}
数独を解くプログラムのつもり。あと2行あるからなんかしたいけど何をしようか思いつかん。
標準入力として↓みたいなファイルを食わせると答えを出す。
0 0 6 0 0 0 0 0 1
0 7 0 0 6 0 0 5 0
8 0 0 1 0 3 2 0 0
0 0 5 0 4 0 8 0 0
0 4 0 7 0 2 0 9 0
0 0 8 0 1 0 7 0 0
0 0 1 2 0 5 0 0 3
0 6 0 0 7 0 0 8 0
2 0 0 0 0 0 4 0 0

ぶっちゃけ七行やったこと殆どないんで無駄が多そう。
ちなみにあほ再帰なんで表出が減るとあほみたいに遅くなります。
将来は数々の人々みたいに立派な七行erになりたい。

44 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 11:38:48 ]
>>43
4 0 0 0 0 0 8 0 2
0 0 0 0 1 8 0 0 9
2 0 0 3 0 5 0 0 0
0 5 0 0 6 0 2 0 0
0 0 0 7 0 4 0 9 0
0 7 0 0 2 0 0 3 6
0 0 0 9 0 0 7 0 0
8 0 6 0 7 0 0 0 0
0 0 5 0 0 0 6 0 4
の問題で誤答が出ました。


45 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 18:15:37 ]
>>40
GJ!

46 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 19:11:53 ]
>>44単純なミスだった。あほだなあ自分。他にもバグめっさあるかも。
#include <stdio.h>
int a[81];s(n){int i=80,c[10];if(a[n])s(n+1);else if(n>80)for(;~i;i--)printf("\
%d%c",a[i],i%9?0:10);else{for(i=9;i;)c[i--]=0;for(i=9;i--;)c[a[n/9*9+i]]=c[a[n%
9+i*9]]=c[a[n/27*27+n%9/3*3+i%3+i/3*9]]=1;for(i=1;i<=9;i++)c[i]||(a[n]=i,s(n+1)
,a[n]=0);}}main(i){i=80;for(;~i;)scanf("%d",&a[i--]);s(0);}


47 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 22:23:27 ]
>>43
入力が正規な問題かどうかを判定するルーチンいれられません?
現状だと1を81個でも(そのまんまになるが)解答として出力されるので。

48 名前:デフォルトの名無しさん mailto:sage [2006/04/12(水) 16:36:52 ]
>>46
解答をリダイレクトすると 0x00 が出力されてるので
printf("%d%c",a[i],i%9?32:10);
の方がいいかも。
複数解答があるときは行をあけて欲しいなぁとか。
すでに7行以下だと最適化するのもむなしいなー。

49 名前:デフォルトの名無しさん mailto:sage [2006/04/13(木) 23:15:08 ]
#include <stdio.h>
int a[81],c[10],j,k;o(){for(j=80;~j;j--)for(k=80;k>j;k--)if((j/9==k/9||j%9==k%9
||(j/27==k/27&&j%9/3==k%9/3))&&a[j]==a[k]&&a[j])return 0;return 1;}s(n){int i=
80;if(a[n])s(n+1);else if(n>80){for(;~i;i--)printf("%d%c",a[i],i%9?32:10);puts(
"\n");}else{for(i=1;i<=9;i++)(a[n]=i,o()?s(n+1):0,a[n]=0);}}main(i){i=80;for(;~
i;)scanf("%d",&a[i--]);o()?s(0):puts("問題おかしい");}
あちこち無駄っぽい。むう。
どのみちもう7行きってて微妙だからなんか別のものを組もうかなぁ。

50 名前:デフォルトの名無しさん mailto:sage [2006/04/14(金) 10:39:22 ]
逆に問題を生成してみるとか。
あ、生成と解答をまとめると結構ハードル高くなるかな?

51 名前:デフォルトの名無しさん mailto:sage [2006/04/15(土) 02:15:07 ]
初代スレ読んできたけどレベル高いなぁ。トリッキーの1と60がすさまじい。
初代スレのWindows関連は面白かったから、ああいうのでなんかお題プリーズ。

52 名前:デフォルトの名無しさん [2006/05/07(日) 16:27:06 ]
保守&新しい息吹待ちage



53 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:45:47 ]
Java script アイコンエディタ おそらくIE6専用(Mozilla 1.7は不可)

大きい■をクリックで、下のボックスに入力した色が塗られる(各色0-255)。
左上のアイコンをクリックすると、別ウィンドウで ppm 形式のデータを表示するので、
表示>ソース>メモ帳などが開いたら名前をつけて保存>何とか.ppm
大きさの変更は、1行目のA=16を適当にいじる

機能も不十分だが、最大の問題点は8行だということ。誰か頼む。

<body><script>Z=[A=16];B=document.all;s=S="<br>";function Y(D){(D?self:open()).
document.writeln(S)}function X(p){for(c="#",i=0;i<3;S="P3\n"+A+" "+A+"\n255")c
+=(0+(Z[p*3+i]=B.tags("input")(i++).value-0).toString(16)).slice(-2);B(P=7+p*2+
p/A|0).style.color=B(++P).style.background=c;for(i=0;i<A*A*3;S+=Z[i++]+" ")i%(3
*A)?0:S+="\n"}for(i=0;i<A*A;i%A?0:S+=s,S+="<b style=color:#AAA onClick=X("+i+
")>■</b><p style=background:#AAA;position:absolute;top:"+(i/A|0)*2+";left:"+(
i++%A)*2+";overflow:hidden;width:2;height:2 onClick=Y()></p>")for(j=3;j--;)Z[i*
3+j]=176;Y(S+=s)</script>R<input>G<input>B<input>


54 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 04:01:31 ]
>>53の改良
少しインターフェースが違っているが7行化+Firefoxでも動くように。
多分Operaでも動くと思う。

<div style="width:256px"><script>A=16;function X(p){for(c=[],i=0;i<3;i++)c[i]=Z
[3*p+i]=+D.T("input")[i].value;D.T("b")[p].style.background="rgb("+c.join(",")+
")";}Z=[];D=document;for(i=0;i<A*A;D.write("<b style='background:#aaa;float:l"+
"eft;overflow:hidden;width:16px;height:16px;' onclick='X("+i+")'></b>"),i++)for
(j=3;j--;)Z[i*3+j]=176;D.T=D.getElementsByTagName;</script></div>R<input>G
<input>B<input><button onclick="s='P3\n'+A+' '+A+'\n255';for(i=0;i<A*A*3;s+=Z[
i++]+' ')i%(3*A)?0:s+='\n';with(self.open().document){writeln(s);close()}">出力


55 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 00:06:33 ]
昔、お遊びでここにBASIC書いてみた者(何本か前の448)ですが、久々にここに
来てあれ書いてた頃が懐かしくなったですよ。
・・いまだに7行は達成できないんだけどorz
#それどころか、会社入ってから書かされるプログラムは肥大化して行くばかり

56 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 01:45:24 ]
複数人での開発には、ワンライナーや7行みたいな
詰め込みコードは向かないし、他の人がコード見る場合があれば迷惑だよ
だから、行数が増えるのは別に悪い事じゃない。

#短く分かり易く書けるのに、無意味に長く難しく書くのも迷惑ダガナー

57 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 22:54:48 ]
でも7行書きは楽しいよ?
大学の課題提出とか無意味に七行化しちゃうよ

58 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 23:46:08 ]
迷惑かどうかを考えるスレじゃないしね。

59 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 00:15:40 ]
>>56>>55最終行へのレスだろう。

60 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 15:46:12 ]
ttp://kihira.jp/index.php?Joke%20Programs
これ、トリッキーの1本人?それとも壮大なパクリ?

61 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 17:55:35 ]
>>60
2chって文字が・・・
多分パクリ

62 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 18:30:46 ]
>>61
Part1の32で

> (関東など一部の地域での)テレビの2ちゃんねるシミュレータ、
> すなわち砂嵐シミュレータを作ってみました。ざーっていうあれです。音は鳴らないけど。

とあるから、パクリの証拠ではないんじゃない?



63 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:54:35 ]
パクリなら他の人の作品もパクるだろうから、
トリッキーの1さんっぽい気はする。
経歴みても頭良さそうだし。

64 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 03:16:25 ]
どうせ外人がパクったんだろ、と思ったら、日本ドメインじゃねーかw
確かに、1さんかもしれんな

65 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 23:24:04 ]
>>7
イミフWWWウハWWWWオkWWWW
ウェウェWWWWWWW

66 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 17:49:30 ]
>>65
コピーしてテキストエディタに貼付けて拡張子.comで保存

但し2chビューア等には、ご丁寧にも
半角スペースみたいな記号を
コピー時に&表記に変換したりする機能があったりするので
出来れば普通のブラウザからコピーを推奨

67 名前:デフォルトの名無しさん [2006/05/19(金) 18:56:48 ]
>>66
>>7の2行目と5行目のことじゃね?

68 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 21:30:54 ]
>67
空白行?

69 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 22:14:04 ]
つーかcomファイルなんて実行できねえよ

70 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 22:39:38 ]
>>68
二行目
> フフフフフフフフフフフフケタタイ カ サョo3レS]サ」J3レセ -ク$$Pクヘハ3チP_SXイミフWWWウハWWWWオkWWWWイ オタP[%
五行目                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ーA3チエ^PUSVRRーハ3チエ PウェウェWWWWWWW3ター"ムネヘミT]ク&&2タムネ3ノア。3メ3ロSSヘミ^_ク@QムタPPヌ゚%
                  ~~~~~~~~~~~~~~~~~

71 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 23:24:49 ]
>>70
作者乙

72 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 23:55:08 ]
>>69
死ね



73 名前:デフォルトの名無しさん [2006/05/23(火) 08:28:49 ]
comファイルはバイナリそのもので、
プログラムングとは言えないんじゃね?

74 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 08:41:54 ]
貴様ヘッドアセンブルを否定したな!

75 名前:デフォルトの名無しさん [2006/05/23(火) 10:20:29 ]
この類のは散々既出かもしれませんが、PHPで1行掲示板を書いてみました。
連投対策(同IPから60秒間連投を制限)も一応施してあります。なんかまだまだ
短くできそうな悪寒がします。

<?$ip=$_SERVER['REMOTE_ADDR'];$d=time();$n=htmlspecialchars($_POST['n']);
$m=htmlspecialchars($_POST['m']);$p="log.txt";if($n&&$m){$l=@file($p);
$s=explode("<>",$l[0]);if(($ip!=$s[0])||($d-$s[3]>60)){$fp=fopen($p,"w+");fputs
($fp,$ip."<>".$n."<>".$m."<>".$d."<>\n");for($i=0;$i<20;$i++)fputs($fp,$l[$i]);
fclose($fp);}}?><form method=POST><input name=n>:<input name=m><input type=
submit><?$l=@file($p);foreach($l as $arr){$s=explode("<>",$arr);print("<hr>[".
$s[1]."] ".$s[2]." (".date("Y/m/d h:i:s", $s[3]).")");}?>

76 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 18:25:51 ]
確かにプログラムングとは言えないな

77 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 18:31:57 ]
>>75
PHPは関数名が長いね…

縮め、改行入力阻止、0のみ入力許可
<?$f=array('n','m');foreach($f as&$v){$v=strtr(htmlspecialchars($_POST[$v]),
"\n",' ');}$p='log.txt';if($f[0]!=''&&$f[1]!=''){$l=@file($p);$s=explode('<>',
$l[0]);if(($ip=$_SERVER['REMOTE_ADDR'])!=$s[0]||($d=time())-$s[3]>60){$l[20]=''
;file_put_contents($p,"$ip<>$f[0]<>$f[1]<>$d<>\n".implode('',$l));}}?><form
method=POST><input name=n>:<input name=m><input type=submit><?$l=@file($p);
foreach($l as$arr){$s=explode('<>',$arr);echo"<hr>[$s[1]] $s[2] (".date(
'Y/m/d h:i:s',$s[3]).')';}?>

78 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 14:59:10 ]
保守

79 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 21:50:29 ]
ホッシュ

80 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 02:37:10 ]
シェルピンスキーのギャスケット

#include <stdio.h>
main()
{
    int x, y;
    for (y = 0; y < 32; y++){ for (x = 0; x < 32; x++)
    printf(x & y? "..": "■"); printf("\n"); }
}

81 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 15:58:18 ]
JavaScript 弾避け。マウスカーソルを四角にぶつけないように動かす
互換性のないように作ってあるので、IE専用

<body id=B onMouseMove=y=event.y;x=event.x><script>h=B.clientHeight-20;a=[b=[q=
[D=document]]];for(U=x=99;x--;C=F=q[x]=P=y=0)D.write("<b style=background:red;"
+"width=16;height=16;position:absolute;top:-20></b>");function T(){for(i=C;i--*
!F;J=D.all(5+i).style,l=q[i]/U,m=J.left=a[i]*(c=1-l)+a[d=i+U]*l,n=J.top=b[i]*c+
b[d]*l,F=m-15<x&x<m+16&n-15<y&y<n+16)if(!q[s=i]--)for(j=2;j--;s+=R%3+1)R=Math.
random(q[i]=U)*w*h|0,a[c=j?i:i+U]=s%2?s%4>1?0:w:R%w,b[c]=s%2?R%h:s%4?h:0;P++-C*
9||C-U&&C++;if(F)alert(P);else setTimeout(T,U-C)}T(w=B.clientWidth-20)</script>


82 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 16:15:30 ]
GJ!
だんだん多く速くなるあたり職人芸だな



83 名前:デフォルトの名無しさん [2006/08/28(月) 21:02:17 ]
保守age

84 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 15:58:31 ]
保守

85 名前:デフォルトの名無しさん [2006/10/09(月) 16:07:24 ]
hosyu

86 名前:デフォルトの名無しさん [2006/10/10(火) 20:06:29 ]
俺には無理だったお題
perlでモジュールを使わずに7行でRSSリーダー(RSS to html)を作れ

LWP::Simpleも使わずに7行はやっぱり無理か??


87 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 20:13:20 ]
RSSリーダーの定義による

88 名前:86 [2006/10/10(火) 20:24:20 ]
定義はRSSをgetして、htmlに変換するってもの
LWP::Simpleと、XML::RSSで作れたんだがモジュール無しは俺にはむりぽ


89 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 23:22:55 ]
Socketも使えんがな

90 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 23:32:32 ]
curlで取得

91 名前:デフォルトの名無しさん [2006/10/10(火) 23:33:19 ]
一先ずLWP::Simpleだけで作れないかやってみるお

92 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 00:28:14 ]
XSLT使えば2〜3行で書けるんじゃない?あほらしくてやる気しないけど



93 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 14:02:19 ]
じゃあ俺も無理だったお題。
Cで7行正規表現。どうやっても7行は無理だったw 腕に覚えのある奴がいたら、是非挑戦してみてくれ。

94 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 14:07:44 ]
>>93
正規表現って何をサポートすればいいんだ?

95 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 22:49:52 ]
#include "regexp.h"

96 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 22:53:17 ]
#include <boost/regex.h>

97 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 02:02:18 ]
catコマンドってC言語で7行で作れる?
どこまでの機能を詰め込めるかの問題になりそうだけど。

98 名前:97 mailto:sage [2006/10/14(土) 02:04:30 ]
作れる?ってのはおかしいか。
作るだけなら余裕だろうし。
どれだけ機能を削ったり詰め込めるかって感じ。

99 名前:トリッキーの1 mailto:sage [2006/10/14(土) 05:40:11 ]
お久しぶりです。part1でお世話になったトリッキーの1です。
>>60-64で晒されていますが、そのサイトは私のサイトです。
正規表現が面白そうだったので久々に作ってみましたが、9行になりました。
縮めるテクニックなどを完全に忘れてしまっていますが、頑張れば7行は可能そうです。
仕事の合間に7行目指して頑張ってみようと思います。

使える記号は()*|のみです。とりあえずこれだけあれば他のも表現できると思います。
文脈自由文法は、
R ::= T | T "|" R
T ::= ε | FT
F ::= P | P*
P ::= char | "(" R ")"
となっています。gcc2.91でのみコンパイル確認しました。
使い方は、"a.exe regexp"とすれば、標準入力から読んだ内容をregexpで走査します。
見つかればmatchと表示して終了します

#include <stdio.h>
int n[999][99],z=2,i;char*s,c[999][99],v[9999];h(f,t,k){for(i=0;c[f][i]!=0;i++)
;c[f][i]=k;n[f][i]=t;}p(int o,int f,int t,char*l){int x;if(l){for(x=0;(f=c[o][x
])!=0;x++)if((f==1||*l==f)&&(n[o][x]==1||p(n[o][x],0,0,(f==1)?l:l+1)))return 1;
}else{(o==0)?p(1,f,t,0),(*s=='|')?s++,p(0,f,t,0):0:(o==1)?(*s==')'||*s=='|'||*s
==0)?h(f,t,1):(x=z++,p(2,f,x,0),p(1,x,t,0)):(o==2)?(x=z++,c[x][0]=1,n[x][0]=t,p
(3,f,x,0),(*s=='*')?h(f,t,1),s++,n[x][0]=f:0):(*s)?(*s=='(')?(s++,p(0,f,t,0),++
s,0):h(f,t,*s++):0;}}main(int x, char**o){s=o[1];p(0,0,1,0);while(gets(v)){s=v;
while(*s){if(p(0,0,0,s++))return printf("match");}}}

100 名前:トリッキーの1 mailto:sage [2006/10/14(土) 05:47:13 ]
多分大体のコンパイラで動くバージョンはこちらです。連投失礼しました。

#include <stdio.h>
int n[999][99],z=2,i;char*s,c[999][99],v[9999];p(int o,int f,int t,char*l){int
x;if(l){for(x=0;(f=c[o][x])!=0;x++)if((f==1||*l==f)&&(n[o][x]==1||p(n[o][x],0,
0,(f==1)?l:l+1)))return 1;}else{(o==0)?p(1,f,t,0),(*s=='|')?s++,p(0,f,t,0):0:(
o==1)?(*s==')'||*s=='|'||*s==0)?c[f][c[f][98]]=1,n[f][c[f][98]++]=t:(x=z++,p(2
,f,x,0),p(1,x,t,0)):(o==2)?(x=z++,c[x][0]=1,n[x][0]=t,p(3,f,x,0),(*s=='*')?c[f
][c[f][98]]=1,n[f][c[f][98]++]=t,s++,n[x][0]=f:0):(*s)?(*s=='(')?(s++,p(0,f,t,
0),s++,0):(c[f][c[f][98]]=*s++,n[f][c[f][98]++]=t):0;}return 0;}main(int x,char
**o){s=o[1];p(0,0,1,0);while(gets(v)){s=v;while(*s){if(p(0,0,0,s++))return
printf("match");}}return 0;}

101 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 10:22:42 ]
キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!

102 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 11:17:28 ]
凄すぎます。



103 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 14:51:06 ]
天 才 現 る

104 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 14:53:22 ]
何て恐ろしい子!

105 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 15:15:59 ]
BNFの自前パース+NFA検索ってところかな?
10行でもありえないくらい凄いよ…本当に7行なんて出来るんだろうか

106 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 01:37:57 ]
よく読んでないんだけどa==bを使ってるところをうまくa-bにするとかで数文字減れないかな

107 名前:トリッキーの1 mailto:sage [2006/10/15(日) 02:06:53 ]
>>105
おお、その通りです。あのコードからよくわかりましたね!
DFAにすべきなんでしょうが、動けばいいやってことでNFAにしました。
でも現状では最初に適当に作りすぎたためにどんなに頑張っても9行なので、
行数を減らすことを前提に少し構造を変えないといけないかも…
等価なBNFで状態数の小さいものを書くことが出来ればなんとかなるのかな?

>>106
ヒントありがとうございます。
まだ小細工は全然していないのですが、数文字が重要になってきたら試してみます。

7行達成したらお披露目にきますね ノシ

108 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 12:12:36 ]
int x;if(l){for(x=0;

int x=0;if(l){for(;

こういう積み重ねが大事なんだろうな。 人間ってすごいな。

109 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 13:28:33 ]
for(int x=0; はC言語では駄目なんだっけ
C++で出来るようになったのか

110 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 14:07:28 ]
>>109
C99なら可。

111 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 19:01:41 ]
(o==0)?(A):(B) → (o)?(B):(A)
とかあるけど……まぁそれでも7行には入りそうにないな。
もっと根本的な対策がいる。


112 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 01:50:15 ]
'|' とかの即値を数字で書くと一字減る



113 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 06:58:49 ]
>>112
それは限りなく最後の手段。ASCII文字配列でないコンピュータで動かなくなる。

114 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 07:58:30 ]
いつの時代のコンピューだよw

115 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 15:10:16 ]
いや、それは気にすべきだろ。

116 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 15:48:13 ]
こういう基本的なことは重要

117 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 17:02:54 ]
それよりもコンピューという略し方のほうが異常だと僕は思うね。

118 名前:デフォルトの名無しさん mailto:sage [2006/10/17(火) 00:14:52 ]
>>117
ついに「ぴゅー太」と呼ぶ時代が来たようだな。 時代が追いついてきたな。

119 名前:デフォルトの名無しさん mailto:sage [2006/10/17(火) 00:20:38 ]
マイコンと呼ぶ日も近そうだ。ベーマガスペシャル復刊とかね

120 名前:デフォルトの名無しさん mailto:sage [2006/10/17(火) 01:03:25 ]
1chipMSX買っちゃったしね。

121 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 23:58:59 ]
BCELを使った Java難読化プログラムです.
現在,9行.あと少し.キャストがうぜぇ.groovy なら問題なくできるだろう.

import org.apache.bcel.classfile.*;class O{public static void main(String[]s)
throws Exception{new O(new ClassParser(s[0]).parse());}int n=0;void u(Constant
c){ConstantUtf8 u=(ConstantUtf8)c;if(u.getBytes().charAt(0)!='<')u.setBytes(""+
++n);}O(JavaClass j)throws Exception{ConstantPool p=j.getConstantPool();
Constant[]c=p.getConstantPool();for(int i=0;i<c.length;i++){if(c[i]!=null){int
t=c[i].getTag();if(t>8&&t<12){ConstantCP q=(ConstantCP)c[i];if(j.getClassName()
.equals(q.getClass(p)))u(c[((ConstantNameAndType)c[q.getNameAndTypeIndex()]).
getNameIndex()]);}}}u(c[((ConstantClass)c[j.getClassNameIndex()]).getNameIndex(
)]);j.dump(n+".class");}}

BCELじゃなく,ASMとか,javassist を使ったほうがいいのかな?

java -cp .:bcel.jar O <target classfile>

122 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 01:02:08 ]
>>121
純粋な疑問なんだけど、importが許されるなら、そこで全部書けばいいんじゃない?



123 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 15:16:15 ]
>>122
「BCELを使った」が前提なだけだから、BECL以外をimportしちゃダメだろう。

もちろん他所で書いてimportして「1行で書きました! 7行以下だからいいよね!」
って主張するのは各人の勝手だとは思うけど、スルーされるか叩かれるだけじゃね?

124 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 16:08:23 ]
うーん、公式ライブラリ以外を使っているのは微妙な気もするけどな。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<140KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef