- 1 名前:デフォルトの名無しさん [02/04/15 12:09]
- 7行×79文字なら言語は問いません。
過去作品は>>2-5を参照。 ■前スレ pc.2ch.net/test/read.cgi/tech/984182993/
- 52 名前:デフォルトの名無しさん mailto:sage [02/04/17 01:19]
- >>50
宣言部分以外では、>>44 の方が大分短いやんけ
- 53 名前:S ◆Q14CxNhI mailto:sage [02/04/17 01:24]
- かきこいっぱいですねぇ。
>>52 そんなに短くはないかと。Java は難しいですね。 import java.awt.*;import java.io.*;public class P extends Frame{byte[]s;int m,w ,h,S=12,c,v,M,Q=0,q[];Image I;public static void main(String[]_){(new P(new File(_[0]))).show();}P(File f){try{(new FileInputStream(f)).read(s=new byte[( int)f.length()]);}catch(Exception e){}w=L(4);h=L(4);S=32;for(q=new int[w*h];Q<w *h;)for(m=s[S++],M=0;M<8&&Q<w*h;){if((m<<M++&128)>0)q[Q++]=255<<24|L(3);else{ for(c=s[S]&15;c-->=0;)q[Q]=q[Q++-(s[S+1]&255)*16-(s[S]>>4&15)-1];S+=2;}}setSize (w+80,h+80);I=createImage(new java.awt.image.MemoryImageSource(w,h,q,0,w));} public void paint(Graphics g){g.drawImage(I,40,40,this);}int L(int l){for(v=c=0 ;c<l;v+=(s[S++]&255)<<c++*8);return v;}}
- 54 名前: ◆Air.TtTk mailto:sage [02/04/17 01:44]
- >51
あらまっ。ボクのPC(Win98)では JDK1.2.2_007 動作。 JDK1.3.1_01 動作。 JDK1.4.0 エラー。 となりました。 >52 何かをimportしなかったので、何かが増えたわけですね。
- 55 名前:デフォルトの名無しさん mailto:sage [02/04/17 09:56]
- >>36
小手先よりもまずアルゴリズムの見直しからスタートするから 結構役に立つと思うよ。 組み込み系用にいくつかここからパクったアイデアあるし。
- 56 名前:前スレ843 [02/04/17 12:55]
- トリッキーの1氏は見てないの?
もう一度舞い降りれ!
- 57 名前: ◆Air.TtTk mailto:sage [02/04/17 15:49]
- PDT びゅーわ(8行)
import java.awt.*;import java.io.*;public class P extends Frame{Image I;int w,h, S=12,c,v,m,M=0,Q=0,q[];public static void main(String[]_){new P(new File(_[0])); }P(File f){try{(new FileInputStream(f)).read(s=new byte[(int)f.length()]);}catch (Exception e){}w=L(4);h=L(4);S=32;for(q=new int[w*h];Q<w*h;){if(--M<0){M=7;m=L(1 );}if((m>>M&1)>0)q[Q++]=255<<24|L(3);else for(v=L(1)>>4|L(1)<<4,c=s[S-2]&15;c-- >=0;)q[Q]=q[Q++-v-1];}I=createImage(new java.awt.image.MemoryImageSource(w,h,q,0 ,w));setSize(w+80,h+80);show();}int L(int l){for(v=c=0;c<l;)v+=(s[S++]&255)<<c++ *8;return v;}byte[]s;public void paint(Graphics g){g.drawImage(I,40,40,this);}} プログラムというよりパズルですわ。 さすがに7行は無理な気がする。
- 58 名前:デフォルトの名無しさん mailto:sage [02/04/17 16:03]
- まあ、何度も絶対不可能が縮まったわけだからがんばれ
一念発起してVisualC++をアンインストールしちまったけどな うらやましいだろ、みなさん また来週に入れなきゃいけなさそうなんであれですけど
- 59 名前:S ◆Q14CxNhI mailto:sage [02/04/17 19:21]
- テトリスだけど、JavaScript で現在11行でできています。
バグバグでまだとても公開できないですが、近日中に必ずアプします。 アルゴリズムの最適化もほとんどしていない状態で11行なので、 最終的には7行になるのではないかと、期待しています。
- 60 名前:デフォルトの名無しさん [02/04/17 22:31]
- >>59
見せてアゲ
- 61 名前:S ◆Q14CxNhI [02/04/17 23:46]
- テトリス。現在10行。
カーソルキーの左右で移動、スペースキーで回転。 ゲームバランス悪いし、もっと縮めてからとも思ったのですが、 明日はネットに接続できないので、今日アプしておきます。 左右移動と落下、ライン消去の部分をもっと削ることができるかと思います。 <body onKeyDown=K=event.keyCode><pre><script>function Y(){Z[11]=P;f=0;E=B[t];if (K)if(K-32){d=[-1,0,1,0][K-37];for(i=4;--i;)Z[h+E[i]+d]==S?f=1:0;f?0:h+=d}else{ C=[];for(i=0;i<4;Z[h+(C[i++]=p*12-v*145)]==S?f=1:0)p=E[i],v=Math.round(p/12);!f &&t?E=B[t]=C:0}f=K=0;for(i=W;i--;Z[W+i]=Z[i]);for(i=4;i--;Z[W+p]=S)if(Z[12+(p=h +E[i])]==S)f=1;if(f==1){for(i=4;i--;)Z[h+E[i]]=S;t=(t+1)%7;h=5}h+=12;for(f=1,i= 19;i--;){for(j=11;--j&&Z[i*12+j]==S;);if(!j)for(P+=f++,j=i++;j>=1;j--)for(k=1;k <11;k++)Z[l=j*12+k]=Z[l-12]}for(i=W;i--;D.all(6+i).innerHTML=Z[W+i]);if(Z[5]!=S )setTimeout(Y,99)}S="□";W=240;D=document;Z=[];B=[[-11],[-24],[2],[13],[-13],[- 1],[2,-1]];for(K=t=P=i=0;i<W;){if(i<7)B[i].push(0,1,-12);Z[i]=(i+1)%12<2||i>228 ?S:" ";D.write(i++%12?"":"\n","<b></b>")}h=17;Y()</script>
- 62 名前:デフォルトの名無しさん mailto:sage [02/04/18 00:21]
- >>61
良くできているけれど、結構バグがあるね。 とりあえずテトリス棒が壁とかにめり込む事が頻繁にあるみたいです。 あと、回転するとめり込むこともありました。
- 63 名前:デフォルトの名無しさん mailto:sage [02/04/18 00:25]
- >>61
ライフゲームの時は良かったが、 テトリスみたいな真っ当なゲームだとキーの反応がどうしてもね…… でも結構いいんじゃない?ブロックをどのような構造で管理してる?
- 64 名前:S ◆Q14CxNhI mailto:sage [02/04/18 00:36]
- >>62 >>63
どもです。 キー入力は、ループ中に2回判定させようかと思ってます。文字数増えるけど。 ブロックは中心と上と右を固定し、それ+1個で形を決定します。 テトリス棒だけは直線にするために、+2個を配列の最初に確保 [2,-1]し、 はみ出す上を無視するようにしました。 バグは・・・何とかします、しましょう、してください・・・
- 65 名前:デフォルトの名無しさん mailto:sage [02/04/18 11:40]
- このスレの問題点として、縮める前のコードがないために
他の人がいっしょに縮めることが難しくなってる。 前スレのトリッキー1、60、あたりが良く一緒に縮めていたけれど、 あれは特殊な例だと思う。 (それとも彼らレベルになれば、縮んでいても普通に読めるのかも) かといってみんなが縮める前のコードをウプしたら、 かなり鬱陶しいだろうし、難しい問題だよな。 このスレを七行になったもの専門にして、 別に七行作業スレッドとかを作ってそっちで議論するとか・・・
- 66 名前:デフォルトの名無しさん mailto:sage [02/04/18 12:00]
- むしろ7行モード・インデントして読みやすいモードを変換するフィルタを7行で書く。
- 67 名前:前スレ [02/04/18 12:31]
- >>66
perlのインデントツールは現在製作中ですが何か?
- 68 名前:デフォルトの名無しさん mailto:sage [02/04/18 12:38]
- >>66-67
65とちょっとずれてないか?
- 69 名前:perl16 [02/04/18 13:26]
- >>67
訂正 s/前スレ/前スレ843/;
- 70 名前:デフォルトの名無しさん mailto:sage [02/04/18 14:20]
- 57◆Air.TtTk氏のPDT びゅーわを詰めてみました。7行。
import java.awt.image.*;public class P{public static void main(String[]_){new java.awt.Frame(){int w,h,c,v,m,M,Q,q[],r,i;BufferedImage I;{L(12);w=L(4);h=L(4 );L(12);for(q=new int[w*h];Q<w*h;){if(--M<0){M=7;m=L(1);}if((m>>M&1)>0)q[Q++]= L(3);else for(v=(c=L(1))>>4|L(1)<<4,c=c&15;c-->=0;)q[Q]=q[Q++-v-1];}setSize(w+ 80,h+80);(I=new BufferedImage(w,h,1)).setRGB(0,0,w,h,q,0,w);}public void paint (java.awt.Graphics g){g.drawImage(I,40,40,this);}int L(int l){try{for(r=i=0;i< l;)r+=System.in.read()<<8*i++;}catch(Exception e){}return r;}}.show();}}
- 71 名前:デフォルトの名無しさん mailto:sage [02/04/18 18:16]
- >>66
■インデント揃え pc.2ch.net/test/read.cgi/tech/984182993/116 (pc.2ch.net/test/read.cgi/tech/984182993/126 pc.2ch.net/test/read.cgi/tech/984182993/138) pc.2ch.net/test/read.cgi/tech/984182993/688 ノーマル→7行のフィルタは…どうだろう。俺は、手で縮めるときは 79文字を効率的に使えるように色々並べ替えたりするので、 そこまで考えてくれるのが7行で作れたら面白いかもシレン。
- 72 名前:perl16 mailto:sage [02/04/18 22:38]
- >>71
インデントツール完成したら、作ってみるYO!(・∀・) だけど、インデントツール作るのにも相当苦労してるから、 ノーマル→7行は難しそうだ。 関数なんかも考慮しないかんし・・・ Perlだけど。
- 73 名前:デフォルトの名無しさん mailto:sage [02/04/18 22:56]
- >>72
関数なんか関係ない。 デリミタを識別して、その前後の空白文字を詰める。 他の場所は空白文字が2個以上続いたら1つに正規化するだけ。
- 74 名前:デフォルトの名無しさん [02/04/19 09:11]
- 超高速素数列挙
#include<stdio.h> #include<stdlib.h> #include<math.h> void main(int argc, char *argv[]){unsigned long max, q, r; if(argc!=2){return;}else{max=atoi(argv[1]);}char *P=new char[max]; for(q=3; q<sqrt(max); q+=2){if(P[q]!=1){for(r=q*q; r<max; r+=q+q){P[r]=1;}}} printf("2\n");for(q=3; q<max; q+=2){if(P[q]!=1){printf("%u\n", q);}}} 誰でもできるか…しかもちょっとズルしてるし
- 75 名前:クレジャパン mailto:??? [02/04/19 09:12]
- 10 cls
20 'ぎゃはははははははは 30 a=100 40 print"ハァ(;´Д`)ハァ(;´Д`)ハァ(;´Д`)ハァ(;´Д`)" 50 if a<1 then goto 10000 60 a=a-1 70 goto 40
- 76 名前:クレジャパン mailto:??? [02/04/19 09:32]
- int main(int argc,char *argv[]) {
int loop00=0; /* Cプログラマ死んでくれ */ for (loop00 = 0;loop00<10000;loop00++) { printf("Cが出来るからってエバるなや\n"); } return 0; }
- 77 名前:クレジャパン mailto:??? [02/04/19 09:36]
- c ** 頼むから死んでくれ **
do 5 loop00=0,(10000-1) write(*, 600 ) 600 format('Cが出来るからってエバるなや') 5 continue stop end
- 78 名前:クレジャパン mailto:??? [02/04/19 09:52]
- /* タウンページたら「パソコン教えます」ってかいてあったんだよ */
/* んでなそこに行って「C言語教えて下さい」って言ったら */ /* 「アナタには無理だ、私でも一人前になるのに12年もかかった」 */ /* って言われたんだよ */ /* Cプログラマーって種族は人の顔見ただけでそう言う事判断するのかよ */ /* アアン?何にか言って見ろゴルァ(゚Д゚メ) */ /* そんなに偉いのかよ?C使えたら */
- 79 名前:デフォルトの名無しさん mailto:sage [02/04/19 11:29]
- >>73
有る程度の構文解析は必要かと……
- 80 名前:デフォルトの名無しさん mailto:sage [02/04/19 11:31]
- >>74
短くしようという気迫に欠けすぎているので却下。 ・void main? ・変数名が2文字以上?? ・#include <Math.h>???
- 81 名前:デフォルトの名無しさん mailto:sage [02/04/19 11:56]
- センセー、>>74を縮めてみましたぁ〜
extern "C"{int printf(const char*,...);long atoi(const char*);} main(int c,char *v[]){unsigned long m,q,r;if(c>1){m=atoi(v[1]); char*P=new char[m];for(q=3;q<sqrt(m);q+=2){if(P[q]!=1){for(r=q*q;r<m;r+=q+q){ P[r]=1;}}}printf("2\n");for(q=3;q<m;q+=2){if(P[q]!=1){printf("%u\n",q);}}}}
- 82 名前:ヽ(´ー`)ノ [02/04/19 13:50]
- >>75-78
のヒッキー君、スルーされてます
- 83 名前:ヽ(´ー`)ノ [02/04/19 13:52]
- >>75-78
上からn88、Cまたはジャバ、フォートランですかね? ヽ(´ー`)ノヽ(´ー`)ノヽ(´ー`)ノ ヽ(´ー`)ノヽ(´ー`)ノヽ(´ー`)ノ
- 84 名前:デフォルトの名無しさん [02/04/19 13:56]
- HTMLでenterキーやbackspaceで画面遷移しないようにするにはどうしたらいいでしょう
- 85 名前:ヽ(´ー`)ノ [02/04/19 13:57]
- 遷移←日本語に訳して
- 86 名前:デフォルトの名無しさん [02/04/19 13:58]
- submitしないようにしたいのです
- 87 名前:ヽ(´ー`)ノ [02/04/19 14:00]
- osなんやねん?
- 88 名前:デフォルトの名無しさん [02/04/19 14:02]
- windows2000です
- 89 名前:ヽ(´ー`)ノ [02/04/19 14:06]
- ブラウザなんやねん
- 90 名前:デフォルトの名無しさん [02/04/19 14:07]
- IE5.5です
- 91 名前:デフォルトの名無しさん [02/04/19 14:09]
- JavaScriptかなんかで制御できたらと思っているのですが
- 92 名前:ヽ(´ー`)ノ [02/04/19 14:12]
- ワカランナー(・∀・)
- 93 名前:ビッダーズ向上委員長 [02/04/19 14:16]
-
ヤフーは、どこをどうとっても最悪。 ビッダーズが一番!!!↓ www.bidders.co.jp/bpu/1072049 皆、左上の会員登録をクリックして、 入会しよう。
- 94 名前:デフォルトの名無しさん mailto:sage [02/04/19 15:11]
- >>85
辞書くらい(略 dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%C1%AB%B0%DC&sw=2
- 95 名前:デフォルトの名無しさん mailto:sage [02/04/19 15:26]
- >>81
最後にreturn 0;を忘れずに
- 96 名前:デフォルトの名無しさん mailto:sage [02/04/19 15:40]
- をを、良スレ。しらなかった。
- 97 名前:S ◆Q14CxNhI mailto:sage [02/04/19 18:07]
- プログラムの概念がわかれば、言語を知らなくても参加できるぞぃ。
たとえばおいらは JavaScript をほとんど全くしらなかったが、 蛇にはまり、ライフゲームを改造し、ついには自分でスロットやテトリスを書けるようになった。 今だ JavaScript はよくわかっていないが、7行そのままで読解もできるようになった。 これは Java についても同じ。
- 98 名前:S ◆Q14CxNhI [02/04/19 18:25]
- for文ひとつ減らせた
<body onKeyDown=K=event.keyCode><pre><script>B=[[-11],[-24],[2],[13],[-13],[-1] ,[2,-1]];function Y(){Z[11]=P;f=0;E=B[t];if(K)if(K-32){d=K-37?1:-1;for(i=4;--i; )Z[h+E[i]+d]==S?f=1:0;f?0:h+=d}else{C=[];for(i=0;i<4;Z[h+(C[i++]=p*A-v*145)]==S ?f=1:0)p=E[i],v=Math.round(p/A);t&&!f?E=B[t]=C:0}f=K=0;for(i=W;i--;Z[W+i]=Z[i]) ;for(i=4;i--;Z[W+p]=S)if(Z[A+(p=h+E[i])]==S)f=1;if(f==1){for(i=4;i--;)Z[h+E[i]] =S;t=(t+1)%7;h=5}h+=A;for(f=1,i=19;i--;){for(j=11;--j&&Z[i*A+j]==S;);if(!j)for( P+=f++,j=++i*A;j>A*2;)Z[j]=Z[j---A]}for(i=W;i--;D.all(6+i).innerHTML=Z[W+i]);if (Z[5]!=S)setTimeout(Y,99)}S="□";h=17;W=240;A=12;D=document;Z=[];for(K=t=P=i=0; i<W;){if(i<7)B[i].push(0,1,-A);Z[i]=(i+1)%A<2||i>228?S:" ";D.write(i++%A?"": "\n","<b></b>")}Y()</script>
- 99 名前:74 [02/04/19 18:40]
- >>80
すんません。自分でちょっと前に書いたコードを適当に縮めただけだったので… あと?の意味がわかりません。何故なんでしょうか? C歴1ヶ月未満の厨房です。スマソ
- 100 名前:74 [02/04/19 18:44]
- あと>>81は
#include <Math.h> しないと動かないんですが… 100get。
- 101 名前:デフォルトの名無しさん mailto:sage [02/04/19 18:59]
- >>99
7行プログラミングとは言っているが、やはり縮められるだけ縮めたいもの。 そのため、変数・関数名は最初に1文字にしておくのが、チヂマー(縮める人?)の基本。 7行達成したからといって、無駄(に見える)をなくすべし! ということを >>80 は言おうとしているんだろうよ。 それから void main() と main 関数の返値に void を指定するのは間違いというのがCの基本(と言われている)。 もちろん縮める上で有効ならば、皆それ(Warning)くらいは無視するよ。
- 102 名前:S ◆Q14CxNhI [02/04/19 19:21]
- ほぼ9行。このままでも、もう少し縮みそう。
<body onKeyDown=K=event.keyCode><pre><script>B=[[-11],[-24],[2],[13],[-13],[-1] ,[2,-1]];function Y(){Z[11]=P;f=0;E=B[t];if(K)if(K-13){d=K-37?1:-1;for(i=4;--i; )f+=Z[h+E[i]+d]==S;f?0:h+=d}else{C=[];for(i=0;i<4;f+=Z[h+(C[i++]=p*A-Math.round (p/A)*145)]==S)p=E[i];t&&!f?E=B[t]=C:0}f=K=0;for(i=4;i--;Z[W+p]=S)f+=Z[A+(p=h+E [i])]==S;if(f){for(i=4;i--;)Z[h+E[i]]=S;t=(t+1)%7;h=5}h+=A;for(k=1,i=19;i--;){ for(j=11;--j&&Z[i*A+j]==S;);if(!j)for(P+=k++,j=++i*A;j>2*A;)Z[j]=Z[j---A]}for(i =W;i--;Z[W+i]=Z[i])D.all(6+i).innerHTML=Z[W+i];if(Z[5]!=S)setTimeout(Y,99)}h=17 S="□";W=240;A=12;D=document;Z=[];for(K=t=P=i=0;i<W;){if(i<7)B[i].push(0,1,-A); Z[W+i]=Z[i]=(i+1)%A<2||i>228?S:" ";D.write(i++%A?"":"\n","<b></b>")}Y() </script>
- 103 名前:デフォルトの名無しさん [02/04/19 19:23]
- age
- 104 名前:74 [02/04/19 19:43]
- >>101
丁寧にありがとうございました。 出直してきます。 皆さんがんばってください。
- 105 名前:perl16 mailto:sage [02/04/19 20:25]
- 口先だけか、といわれるのは嫌なので、
とりあえずperlのインデントツール。 1行オーバー。 しかも完璧じゃないし。鬱。 #--- indent.pl ---# chop($f=<>);open(F,"<$f")||die$!;while(<F>){s/\s?\n$//;$_.=" "if/sub$/;$d.=$_; }close(F);$d=~s/(;|\{|\})/$1\n/g;$d=~s/\\\//\&\&\&/g;$d=~s/\\"/\@\@\@/g;while( $d=~/(q|qq|=~m|=~)\/.*?\//s){&g;}&ad;while($d=~/=~(s|tr|y)\/.*?\/.*?\//s){&g;} &ad;while($d=~/\(.*?\)/s){&g;}&ad;while($d=~/('|").*?\1.*?;/s){&g;}&ad;$d=~ s/\&\&\&/\\\//g;$d=~s/\@\@\@/\\"/g;$d=~s/\$\$\$/"/g;$d=~s/\%\%\%/'/g;$f.=".bak ";open(F,">$f");print F$d;close(F);sub g{$o[$c]=$`;$j[$c++]=$&;$d=$';}sub ad{ $c=0;for(@j){s/\n//g;s/"/\$\$\$/g;s/'/\%\%\%/g;$t.="$o[$c++]$_";}$d="$t$d";$t= "";$c=0;$#o=$#j=-1;} ↑のインデントバージョン www2.freejpn.com/~az1028/indent/indent.txt ↑のツールを使って自分自身を実行した結果。 www2.freejpn.com/~az1028/indent/indent2.txt
- 106 名前:デフォルトの名無しさん mailto:sage [02/04/19 20:52]
- >>101
>>95は無視してないようだが(w
- 107 名前:C_sugar [02/04/19 21:07]
- テトリスは結構すごいね。
普通にJavaScriptでテトリスを作ろうとすると数百行になるからね。
- 108 名前:SYN ◆mMJ0UaoA mailto:sage [02/04/19 21:28]
- // 引数に0-999(50-950辺りが面白い?)を与えると、自己平方フラクタル画像を出力。
// 言語はVC++ #include <string> char*p,d[786486]={66,77,54};main(int c,char**g){FILE*f=fopen("f.bmp","wb");d[10 ]=54;d[36]=d[4]=12;d[14]=40;d[26]=1;d[23]=d[19]=2;d[28]=24;d[42]=d[38]=196;d[43 ]=d[39]=14;int x,y,n,w=512;double r=1,i,u,v,e=1.5/w,b,a=(atoi(g[1])/999.0)*2.0- 1.0,s=-0.75;u=1-a*a;do{i=r;r=(u/r+r)/2;}while(r<i);b=i*0.85;a=-0.62*a-0.13;p=d+ 54;for(y=0;y<w;y++){for(x=0;x<w;x++){r=s+x*e;i=s+y*e;for(n=0;n<63;n++){u=r*r;v= i*i;i=2*r*i+b;r=u-v+a;if(u+v>4)break;}p[y*w*3+x*3]=n*4;}}fwrite(d,1,786486,f);}
- 109 名前:デフォルトの名無しさん mailto:sage [02/04/19 21:41]
- あんたGCAの作者か?
- 110 名前:デフォルトの名無しさん mailto:sage [02/04/19 21:42]
- なんつーか、惰性で続いてる感が拭えない。
前スレ500前後で終わるべきだったかと。 range corderはオモロかったけどね。
- 111 名前:デフォルトの名無しさん mailto:sage [02/04/19 21:43]
- >>109
SもSYNも某圧縮アルゴリズム掲示板の住人 前スレのRange corder作ったのも縮めたのもSだっか。
- 112 名前:SYN ◆mMJ0UaoA mailto:sage [02/04/19 21:59]
- >>110
pc.2ch.net/test/read.cgi/tech/984182993/775 を見て何か描けたらいいなって思ったけど、ショボくてスマソ。
- 113 名前:110 mailto:sage [02/04/19 22:08]
- >>112
いや、誰がショボイとかそういう話じゃなく。 「これを縮めるぞ」みたいなやる気の出る作品が出てこないなぁって話
- 114 名前:デフォルトの名無しさん mailto:sage [02/04/19 23:06]
- >>111
別に誰だろうとあんま関係ないよ。 まぁ、面白いかつまらないかはあるけどな。
- 115 名前:S ◆Q14CxNhI [02/04/20 00:18]
- 9行。
アルゴリズムか仕様を今以上に工夫しないと、8行も難しいかもしれません。 <body onKeyDown=K=event.keyCode><pre><script>B=[[-11],[-24],[2],[13],[-13],[-1] ,[2,-1]];function Y(){Z[11]=P;f=0;E=B[t];i=4;if(K)if(K-13){for(d=K-37?1:-1;i--; )f+=Z[h+E[i]+d]==S;f?0:h+=d;}else{for(C=[];i--;f+=Z[h+(C[i]=p*A-Math.round(p/A) *145)]==S)p=E[i];t*!f?E=B[t]=C:0;}for(f=K=i=0;i<4;Z[W+p]=S)f+=Z[A+(p=h+E[i++])] ==S;if(f){for(t=++t%7;i--;)Z[h+E[i]]=S;h=5}h+=A;for(k=1,i=19;i--;){for(j=11;--j &&Z[i*A+j]==S;);if(!j)for(P+=k++,j=++i*A;j>2*A;)Z[j]=Z[j---A]}for(i=W;i--;Z[W+i ]=Z[i])D.all(6+i).innerHTML=Z[W+i];Z[5]!=S?setTimeout(Y,99):0;}D=document;W=240 A=12;h=17;Z=[];for(K=t=P=i=0;i<W;D.write(i%A?"":"\n","<b></b>"),Z[W+i]=Z[i]=++i %A<2||i>228?S="□":" ")i<7?B[i].push(0,1,-A):0;Y()</script>
- 116 名前:デフォルトの名無しさん mailto:sage [02/04/20 01:15]
- >>100
math使わなくても、二乗したのを比較すればいいのでは?? >>115 読めないのだよ…… 過去スレの354みたいに書いてくれると嬉しい…… pc.2ch.net/test/read.cgi/tech/984182993/354
- 117 名前:S ◆Q14CxNhI [02/04/20 02:06]
- <body onKeyDown=K=event.keyCode><pre><script>function Y(){
Z[11]=P; // 得点を表示バッファに書き込み E=B[t]; // 現在落下中のブロック f=0; // 移動・回転決定用フラグ if(K) // キーが押されているか if(K!=32){ // 横移動 d=K-37?1:-1 // d:x方向の差分 for(i=0;i<4;i++) // 横移動判定 f+=Z[h+E[i]+d]==S; // 移動先が空白かどうか f?0:h+=d; // すべて空白なので移動決定 }else{ // 回転 C=[]; // 回転先の座標保持用 for(i=0;i<4;i++){ // 回転判定 p=E[i]; // ブロックの各位置 v=Math.round(p/12); // 回転先の x 座標 w=p-v*12; // 回転先の y 座標 C[i]=w*12-v; // 回転先の座標計算 if(Z[h+C[i]]==S)f=1; // 回転先が空白かどうか } t*!f?E=B[t]=C:0; // すべて空白なので回転決定 } K=0; // キー入力キャンセル for(f=i=0;i<4;i++){ // 落下判定 f+=Z[12+(p=h+E[i])]==S; // 落下先が空白かどうか Z[240+p]=S // ブロック表示のために表示バッファへコピー } if(f){ // 落下できない for(i=0;i<4;i++)Z[h+E[i]]=S; // ブロック停止 t=++t%7; // 次のブロック決定(現在順送り) h=17 // 位置初期化 }else h+=12; // 一段落下 for(k=1,i=19;i--;){ // ラインがそろったか判定 for(j=11;--j&&Z[i*12+j]==S;); // そろったラインを検索 if(!j){ // そろった P+=k++; // 得点 1ライン 1点, ..., テトリス 10点 になる for(j=++i*12;j>2*12;)Z[j]=Z[j---12] // 全体を一段下げる }} for(i=240;i--;){ D.all(6+i).innerHTML=Z[240+i]; // 表示用バッファを表示 Z[240+i]=Z[i] // 表示バッファのクリア } Z[5]!=S?setTimeout(Y,99):0; // 入り口にブロックがあったら終了 } // ブロックの作成 // 中心からの差分で配置する。棒を除くすべてのブロックはL字にブロックがあり、 B=[[-11],[-24],[2],[13],[-13],[-1],[2,-1]]; // それ以外の1個だけを別にする for(i=0;i<7;i++)B[i].push(0,1,-12); // ブロック共通部分追加 D=document; // 位置は、縦方向1マスは 12 単位となる 座標(x,y) なら h=x+y*12 h=17; // ブロックの中心位置初期化 Z=[]; // バッファ [0-239]:固定したブロック用 [240-479]:表示用バッファ for(K=t=P=i=0;i<240;){ D.write(i%12?"":"\n","<b></b>"); // HTML表示領域の描画 Z[240+i]=Z[i]=++i%12<2||i>228?S="□":" "; // 床と壁の設定、番兵にもなる } Y() </script>
- 118 名前:デフォルトの名無しさん mailto:sage [02/04/20 02:06]
- >>117
いやそれはsageてくれ
- 119 名前:S ◆Q14CxNhI mailto:sage [02/04/20 02:19]
- >>118
スマソ。改行エラーがでてばかりなので sage 忘れてしまった
- 120 名前:116 mailto:sage [02/04/20 02:26]
- >>119
thx。可能なら縮めるのに協力します
- 121 名前:デフォルトの名無しさん mailto:sage [02/04/20 03:05]
- >>116
速度に違いは? いや、短くするのが趣旨なのはわかってるんだけど
- 122 名前:デフォルトの名無しさん mailto:sage [02/04/20 03:34]
- >>121 q < sqrt(m) より q*q < mのほうが速いに決まってるだろ
- 123 名前:デフォルトの名無しさん mailto:sage [02/04/20 03:52]
- >>122
ウチで動かしたらq*q<mの方が平均0.2〜3秒遅くなったのだが。 …逝ってくる VBなら間違いなく前者の方が早いな(関係無い)
- 124 名前:S ◆Q14CxNhI [02/04/20 04:12]
- テトリス8行31文字。プログラム全体を見直しました。
<body onKeyDown=K=event.keyCode><pre><script>B=[[-11],[-24],[2],[13],[-13],[-1] ,[2,-1]];W=240;Z=[];h=17;function Y(){f=0;E=B[t];i=4;if(K)if(K-13){for(d=K-37?1 :-1;i--;)f+=Z[h+E[i]+d];h+=d*!f;}else{for(C=[];i--;f+=Z[h+(C[i]=p*A-Math.round( p/A)*145)])p=E[i];t*!f?E=B[t]=C:0;}for(f=K=i=0;i<4;Z[W+p]=1)f+=Z[A+(p=h+E[i++]) ];if(f){for(t=++t%7;i--;)Z[h+E[i]]=1;h=5}h+=A;for(k=1,i=W-A;i--;)if(i%A)Z[i]?0: i-=i%A;else for(P+=k++,j=i+=A;--j>A*2;)Z[j]=Z[j-A];for(i=W;i--;Z[W+i]=Z[i])D. all(6+i).innerHTML=i-11?Z[W+i]?"□":" ":P;Z[5]?0:setTimeout(Y,99);}D=document; A=12;for(K=t=P=i=0;i<W*2;D.write(i%A?"":"\n","<b></b>"),Z[i]=++i%A<2||i>228?1:0 )B[i%7].push(0,1,-A);Y()</script> >>120 ありがとうございます。
- 125 名前:S ◆Q14CxNhI mailto:sage [02/04/20 04:16]
- >>124
画面がスクロールする恐れがあるため、回転は「リターンキー」にしました。
- 126 名前:デフォルトの名無しさん [02/04/20 04:40]
- CかC++でオセロかインベーダ作ってください。
おながいします
- 127 名前:デフォルトの名無しさん mailto:sage [02/04/20 08:25]
- >>126
前スレに6行オセロ(コンピュータ対戦可能)という神の作品はあったぞ。
- 128 名前:前スレ853 mailto:sage [02/04/20 08:28]
- >>105
ん? Perl4 対応を考えてる?
- 129 名前:perl16 [02/04/20 11:51]
- >>128
あっ、考えてない。 perl5だけしか… >>105 を改良、7行になったけどバグあり。 #--- indent.pl ---# chop($f=<>);open(F,"<$f")||die$!;while(<F>){s/\s?\n$//;$_.=" "if/sub$/;$d.=$_; }close(F);$d=~s/(;|\{|\})/$1\n/g;$d=~s/\\\//\&\&\&/g;$d=~s/\\"/\@\@\@/g;@p=( '(q|qq|=~m|=~)\/.*?\/','(s|tr|y)\/.*?\/.*?\/','\(.*?\)','(\'|").*?\1.*?;');for (@p){while($d=~/$_/s){$o[$c]=$`;$j[$c++]=$&;$d=$';}$c=0;for(@j){s/\n//g; s/"/\$\$\$/g;s/'/\%\%\%/g;$t.="$o[$c++]$_";}$d="$t$d";$t="";$c=0;$#o=$#j=-1;} $d=~s/\&\&\&/\\\//g;$d=~s/\@\@\@/\\"/g;$d=~s/\$\$\$/"/g;$d=~s/\%\%\%/'/g;$f.= ".bak";open(F,">$f");print F$d;close(F); ↑のインデントバージョン www2.freejpn.com/~az1028/indent/indent.txt ↑のツールを使って自分自身を実行した結果。 www2.freejpn.com/~az1028/indent/indent2.txt
- 130 名前:perl16 mailto:sage [02/04/20 11:55]
- バグって言うか、ちゃんと改行されない。
- 131 名前:775 mailto:sage [02/04/20 12:09]
- #include <stdio.h> /* BMPGEN - 2 ムリダ・・*/
#define P(A,N,B,M) for(i=0;i<N;i++) putc(A, f); for(i=0;i<M;i++) fputc(B, f); enum{L=320,N=240};int k,i,j,m[L],n[L];main(){FILE *f=fopen("c.bmp","wb");P(66, 1,77,1)P(54,1,132,1)P(3,1,0,5)P(54,1,0,3)P(40,1,0,3)P(64,1,1,1)P(0,2,N,1)P(0,3 ,1,1)P(0,1,24,1)P(0,6,132,1)P(3,1,0,1)P(196,1,14,1)P(0,2,196,1)P(14,1,0,10)for (i=0;i++<L;)m[i]=0;for(i=j=1;i++<99;)m[j=(i*99+j)%L]=N;for(i=0;i++<N;){for(j=0 ;j++<L;)for(k=0;k++<3;)fputc(m[j],f);for(j=1;j++<319;n[j]=(m[j-1]+m[j+1])/2); for(j=0;j++<L;m[j]=n[j]);}} それにしてもすごいスレだ・・。
- 132 名前:デフォルトの名無しさん mailto:sage [02/04/20 12:35]
- >>126
6行オセロは必見だぞ。 あの短さ、バグなし、コンピュータ対戦、あれは間違いなく芸術
- 133 名前:775 mailto:sage [02/04/20 12:54]
- ああ、>>108にもっと頭良いのが出てましたね・・・。
すいませんでした、逝ってきます。
- 134 名前:デフォルトの名無しさん [02/04/20 13:05]
- >>131
すげーbmpを吐いたぞ
- 135 名前:前スレ853 mailto:sage [02/04/20 15:24]
- >>129
ファイルの入出力方法が冗長に感じたんで indent.pl srcfile > dstfile てな使い方に変えてみて 5 行。 sub l{('(qq?|=~m?)\/.*?\/','(s|tr|y)\/.*?\/.*?\/','\(.*?\)','(\'|").*?\1.*?;')} $_=join'',map{s/\s+$//;s/\w$/$& /;$_}<>;s/[;{}]/$&\n/g;$a='@@@';$m='&&&';$p= '%%%';s|\\/|$m|g;s|\\"|$a|g;$d=$_;for(l){1while$d=~s/\G$_/$o[$c]=$`;$j[$c++]=$& ;''/egs;$c=0;for(@j){s/\n//g;s/"/\$\$\$/g;s/'/$p/g;$t.="$o[$c++]$_"}($d,$t,$c, @o,@j)=("$t$d")}$_=$d;s|$m|\\/|g;s/$a/\\"/g;s/\$\$\$/"/g;s/$p/'/g;print でもコレ、ハッシュとかまで改行しちゃうよね(汗)。 トークナイザ作って括弧の対応調べて地道に改行しないと綺麗にはならないと思う。
- 136 名前:デフォルトの名無しさん [02/04/20 17:15]
- >>102のやつ、回転できなかったけど、直ってるかな?ドキドキ。
- 137 名前:デフォルトの名無しさん mailto:sage [02/04/20 17:17]
- sage忘れた、
アナログ回線切って、オフラインでコーヒーブレークしてから、CPU頭に載せて自冊・・・
- 138 名前:S ◆Q14CxNhI [02/04/20 17:31]
- >>136
>>102 から回転がリターンキーになってます。 書き忘れちゃったんです、宇都。 8行達成が、ぎりぎりかも・・・ <body onKeyDown=K=event.keyCode><pre><script>B=[[-11],[-24],[2],[13],[-13],[-1] ,[2,-1]];W=240;function Y(){E=B[t];i=4;if(K)if(K-13){for(d=K-37?1:-1;i--;)d*=!Z [h+E[i]+d];h+=d}else{for(C=[];i--&&!Z[h+(C[i]=E[i]*A-Math.round(E[i]/A)*145)];) ;t*i<0?E=B[t]=C:0}for(f=K=i=0;i<4;Z[W+p]=1)f+=Z[A+(p=h+E[i++])];if(f){for(t=++t %7;i--;)Z[h+E[i]]=1;h=5}h+=A;for(k=1,i=W-A;i--;)if(i%A)Z[i]?0:i-=i%A;else for(P +=k++,j=i+=A;--j>A;)Z[j]=Z[j-A];for(i=W;i--;Z[W+i]=Z[i])D.all(6+i).innerHTML=i- 11?Z[W+i]?"□":" ":P;Z[5]?0:setTimeout(Y,99)}h=17;A=12;Z=[];D=document;for(K=t =P=i=0;i<W*2;D.write(i%13?"<b></b>":"\n"),Z[i]=++i%A<2||i>228?1:0)B[i%7].push(0 ,1,-A);Y()</script>
- 139 名前:S ◆Q14CxNhI mailto:sage [02/04/20 18:19]
- あまり減らなかったので、sage 進行
<body onKeyDown=K=event.keyCode><pre><script>function Y(){E=B[t];i=4;if(K)if(K- 13){for(d=K-37?1:-1;i--;)d*=!Z[h+E[i]+d];h+=d}else{for(C=[];i--&&!Z[h+(C[i]=E[i ]*A-Math.round(E[i]/A)*145)];);t*i<0?B[t]=C:0}for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+E [i++]]=1;if(f){for(t=++t%7;i--;)Z[h+E[i]]=1;h=5}h+=A;for(k=1,i=228;i--;)if(i%A) Z[i]?0:i-=i%A;else for(P+=k++,j=i+=A;--j>A;)Z[j]=Z[j-A];for(i=240;i--;X[i]=Z[i] )D.all(6+i).innerHTML=i-11?X[i]?"□":" ":P;Z[5]?0:setTimeout(Y,99)}B=[[-11],[- 24],[2],[13],[-13],[-1],[2,-1]];D=document;A=12;Z=[];h=17;X=[];for(K=t=P=i=0;i< 480;D.write(i%13?"<b></b>":"\n"),X[i]=Z[i]=++i%A<2||i>228?1:0)B[i%7].push(0,1,- A);Y()</script>
- 140 名前:デフォルトの名無しさん mailto:sage [02/04/20 20:03]
- >>138
>>117はスペース回転だったけど? >>117ベースで機能を追加すると死んでしまった・・・ 所詮折れのスキルはこんなものなのか?と、悔しいから奮闘中。 Sタン、更新ハヤイヨー(スゴイナ-。 7行の壁を破りたい・・・
- 141 名前:デフォルトの名無しさん mailto:sage [02/04/20 20:13]
- >>139
本題じゃないけどこのテトリス、ゲームとしてシビアすぎない?。
- 142 名前:デフォルトの名無しさん mailto:sage [02/04/20 21:06]
- >>141
ちょっと、ね。キーが鈍いし、ブロックは早いし。 まぁ、自分で調節すればいいんだけど。
- 143 名前:S ◆Q14CxNhI mailto:sage [02/04/20 21:06]
- >>140
わかりやすさを優先するために >>117 は少し以前のものをベースに、その時点での最新版と融合させました。 >>141 1段落下に対して、横移動あるいは回転のどちらか1つしかできませんので。 2〜3回操作可能にすると、バランスが良くなるでしょう。 落下を任意(カーソル下)、得点に応じて速くなるとすることもできるでしょう。 ただ、どちらにしろ、文字数が・・・
- 144 名前:デフォルトの名無しさん mailto:sage [02/04/20 21:13]
- ちょうどテトリスつくりたかったこともあって、参戦。
dめおえj、JavaScriptやったことないんだよね。 そうか、ブロックのデータはそうやって考えると小さくなるのか。 パパ、がんばっちゃうぞー
- 145 名前:デフォルトの名無しさん mailto:sage [02/04/20 23:20]
- 凄いのかもしれないけれど、ちょっといまいちの印象が抜けきらないな。
とりあえず、長くなってもいいからゲームとして成り立つソースを 是非アップして貰いたいと思いますがどうでしょう。 自分で作ってもいないのに生意気ですか?逝ってきます。
- 146 名前:S ◆Q14CxNhI mailto:sage [02/04/20 23:31]
- 多少遊びやすいバージョン
>>145 こんなもんで、どうでしょう? <body onKeyDown=K=event.keyCode><pre><script>function Y(){E=B[t];i=4;if(K)if(K- b){for(d=K-37?1:-1;i--;)d*=!Z[h+E[i]+d];h+=d}else{for(C=[];i--*!Z[h+(C[i]=E[i]* A-Math.round(E[i]/A)*145)];);t*i<0?B[t]=C:0}for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+E[ i++]]=1;if(e){if(f){for(t=++t%7;i--;)Z[h+E[i]]=1;h=5}h+=A;for(k=1,i=228;i--;)if (i%A)Z[i]?0:i-=i%A;else for(P+=k++,j=i+=A;--j>A;)Z[j]=Z[j-A];}e=1-e;for(i=240; i--;X[i]=Z[i])D.all(6+i).innerHTML=i-11?X[i]?"□":" ":P;Z[5]?0:setTimeout(Y,9) }B=[[-11],[-24],[2],[b=13],[-b],[-1],[2,-1]];D=document;A=12;Z=[];h=17;X=[];for (e=K=t=P=i=0;i<480;D.write(i%b?"<b></b>":"\n"),X[i]=Z[i]=++i%A<2||i>228?1:0)B[i %7].push(0,1,-A);Y()</script>
- 147 名前:145 mailto:sage [02/04/20 23:53]
- >>146
キー操作が辛くてなんとも… その部分を改良しないと、テトリスとしてはダメかなと、 僭越ながら思いました。とりあえずソース読んでみます
- 148 名前:デフォルトの名無しさん mailto:sage [02/04/21 00:01]
- なんかテトリス不評だな。俺は7行ネタとしては面白いと思うけど、
ゲームとして見たら……うーん。 やっぱJSだからきついな
- 149 名前:デフォルトの名無しさん mailto:sage [02/04/21 00:17]
- >>147
そうか?おれには簡単すぎていつまでも終わらない ゲーム性はこれくらいでいい これで7行したら紙
- 150 名前:デフォルトの名無しさん mailto:sage [02/04/21 00:21]
- >>149
先人達に比べると、完成度をもう少し上げて欲しいと思わないか? 前スレのマインスイーパとかの完成度と比べてしまうと、どうも…… でもとりあえず7行にするのはそれでいいかもしれないけど、 S氏には期待しているので、もう少し頑張って欲しい、と無責任なことを言うテスト
- 151 名前:デフォルトの名無しさん mailto:sage [02/04/21 00:37]
- >>150
先人達と比べるのは辛すぎるのではない? Sさんもかなり頑張って縮めてると思うし、なによりこのやる気はいいと思う。 しかし、前スレの初期にいた人、来ないね。
- 152 名前:S ◆Q14CxNhI mailto:sage [02/04/21 02:48]
- 多少遊びやすい版でようやく >>138 に追いつく。今晩はここまでにします。
<body onKeyDown=K=event.keyCode><pre><script>X=[];function Y(){E=B[t];i=4;if(K) if(K-b){for(d=K-37?1:-1;i--;)d*=!Z[h+E[i]+d];h+=d}else{for(C=[];i--*!Z[h+(C[i]= E[i]*A-Math.round(E[i]/A)*145)];);t*i<0?B[t]=C:0}for(f=K=i=0;i<4;f+=Z[A+p])X[p= h+E[i++]]=1;if(e=!e){if(f){for(t=++t%7;i--;)Z[h+E[i]]=k=1;for(i=228;i--;h=5)if( i%A)i-=i%A*!Z[i];else for(P+=k++,j=i+=A;--j>A;)Z[j]=Z[j-A]}h+=A}for(i=240;i--;X [i]=Z[i])D.all(6+i).innerHTML=i-11?X[i]?"□":" ":P;Z[5]?0:setTimeout(Y,9)}B=[[ -11],[-24],[2],[b=13],[-b],[-1],[2,-1]];D=document;A=12;Z=[];h=17;for(e=K=t=P=i =0;i<480;D.write(i%b?"<b></b>":"\n"),X[i]=Z[i]=++i%A<2||i>228?1:0)B[i%7].push(0 ,1,-A);Y()</script>
|

|