七行プログラミング part2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
7行×79文字なら言語は問いません。
過去作品は>>2-5を参照。

■前スレ
http://pc.2ch.net/test/read.cgi/tech/984182993/
2デフォルトの名無しさん:02/04/15 12:09
3デフォルトの名無しさん:02/04/15 12:09
■pac-man
http://pc.2ch.net/test/read.cgi/tech/984182993/849
http://pc.2ch.net/test/read.cgi/tech/984182993/852
http://pc.2ch.net/test/read.cgi/tech/984182993/853
http://pc.2ch.net/test/read.cgi/tech/984182993/856
http://pc.2ch.net/test/read.cgi/tech/984182993/866
http://pc.2ch.net/test/read.cgi/tech/984182993/869
http://pc.2ch.net/test/read.cgi/tech/984182993/870
http://pc.2ch.net/test/read.cgi/tech/984182993/879
http://pc.2ch.net/test/read.cgi/tech/984182993/885
http://pc.2ch.net/test/read.cgi/tech/984182993/905
■calendar
http://pc.2ch.net/test/read.cgi/tech/984182993/904
■再帰アフォ
http://pc.2ch.net/test/read.cgi/tech/984182993/646
■BASIC
http://pc.2ch.net/test/read.cgi/tech/984182993/448
http://pc.2ch.net/test/read.cgi/tech/984182993/497
http://pc.2ch.net/test/read.cgi/tech/984182993/498
http://pc.2ch.net/test/read.cgi/tech/984182993/510
http://pc.2ch.net/test/read.cgi/tech/984182993/511
http://pc.2ch.net/test/read.cgi/tech/984182993/514
■砂嵐
http://pc.2ch.net/test/read.cgi/tech/984182993/52
http://pc.2ch.net/test/read.cgi/tech/984182993/75
http://pc.2ch.net/test/read.cgi/tech/984182993/76
http://pc.2ch.net/test/read.cgi/tech/984182993/78
http://pc.2ch.net/test/read.cgi/tech/984182993/89
■ラスタスクロール
http://pc.2ch.net/test/read.cgi/tech/984182993/105
http://pc.2ch.net/test/read.cgi/tech/984182993/125
http://pc.2ch.net/test/read.cgi/tech/984182993/129
■インデント揃え
http://pc.2ch.net/test/read.cgi/tech/984182993/116(http://pc.2ch.net/test/read.cgi/tech/984182993/126
http://pc.2ch.net/test/read.cgi/tech/984182993/138)
http://pc.2ch.net/test/read.cgi/tech/984182993/688
4デフォルトの名無しさん:02/04/15 12:10
■圧縮
http://pc.2ch.net/test/read.cgi/tech/984182993/101
http://pc.2ch.net/test/read.cgi/tech/984182993/135
http://pc.2ch.net/test/read.cgi/tech/984182993/146
http://pc.2ch.net/test/read.cgi/tech/984182993/153(http://pc.2ch.net/test/read.cgi/tech/984182993/154)
http://pc.2ch.net/test/read.cgi/tech/984182993/696
http://pc.2ch.net/test/read.cgi/tech/984182993/737
http://pc.2ch.net/test/read.cgi/tech/984182993/740
http://pc.2ch.net/test/read.cgi/tech/984182993/744
■倉庫番
http://pc.2ch.net/test/read.cgi/tech/984182993/118(http://pc.2ch.net/test/read.cgi/tech/984182993/120)
http://pc.2ch.net/test/read.cgi/tech/984182993/150(http://pc.2ch.net/test/read.cgi/tech/984182993/148)
http://pc.2ch.net/test/read.cgi/tech/984182993/179(http://pc.2ch.net/test/read.cgi/tech/984182993/180)
http://pc.2ch.net/test/read.cgi/tech/984182993/774
■HTTPクライアント
http://pc.2ch.net/test/read.cgi/tech/984182993/161
■動画再生?
http://pc.2ch.net/test/read.cgi/tech/984182993/205
■レイトレ
http://pc.2ch.net/test/read.cgi/tech/984182993/170
http://pc.2ch.net/test/read.cgi/tech/984182993/209
■迷路(模様?)
http://pc.2ch.net/test/read.cgi/tech/984182993/283
http://pc.2ch.net/test/read.cgi/tech/984182993/285
(http://pc.2ch.net/test/read.cgi/tech/984182993/287)
http://pc.2ch.net/test/read.cgi/tech/984182993/305
■ツール
http://pc.2ch.net/test/read.cgi/tech/984182993/319
■ライフゲェム
http://pc.2ch.net/test/read.cgi/tech/984182993/320
http://pc.2ch.net/test/read.cgi/tech/984182993/812
http://pc.2ch.net/test/read.cgi/tech/984182993/815
http://pc.2ch.net/test/read.cgi/tech/984182993/817
http://pc.2ch.net/test/read.cgi/tech/984182993/818
http://pc.2ch.net/test/read.cgi/tech/984182993/822
5デフォルトの名無しさん:02/04/15 12:10
■オセロ
http://pc.2ch.net/test/read.cgi/tech/984182993/336
http://pc.2ch.net/test/read.cgi/tech/984182993/337
http://pc.2ch.net/test/read.cgi/tech/984182993/352
http://pc.2ch.net/test/read.cgi/tech/984182993/372
■四則演算
http://pc.2ch.net/test/read.cgi/tech/984182993/396
http://pc.2ch.net/test/read.cgi/tech/984182993/397
http://pc.2ch.net/test/read.cgi/tech/984182993/402
http://pc.2ch.net/test/read.cgi/tech/984182993/424
http://pc.2ch.net/test/read.cgi/tech/984182993/430
■nCr(重複組み合わせ)
http://pc.2ch.net/test/read.cgi/tech/984182993/486
■BASE64
http://pc.2ch.net/test/read.cgi/tech/984182993/488
http://pc.2ch.net/test/read.cgi/tech/984182993/493
http://pc.2ch.net/test/read.cgi/tech/984182993/494
■マインスイーパ
http://pc.2ch.net/test/read.cgi/tech/984182993/385
http://pc.2ch.net/test/read.cgi/tech/984182993/537
http://pc.2ch.net/test/read.cgi/tech/984182993/540
■tic-tac-toe
http://pc.2ch.net/test/read.cgi/tech/984182993/336
>519
http://pc.2ch.net/test/read.cgi/tech/984182993/526
■high&low
http://pc.2ch.net/test/read.cgi/tech/984182993/530
■printf
http://pc.2ch.net/test/read.cgi/tech/984182993/425
http://pc.2ch.net/test/read.cgi/tech/984182993/428
■素因数分解
http://pc.2ch.net/test/read.cgi/tech/984182993/573
http://pc.2ch.net/test/read.cgi/tech/984182993/574
■dump
http://pc.2ch.net/test/read.cgi/tech/984182993/609
http://pc.2ch.net/test/read.cgi/tech/984182993/612
■起動時間表示
http://pc.2ch.net/test/read.cgi/tech/984182993/623
http://pc.2ch.net/test/read.cgi/tech/984182993/624
http://pc.2ch.net/test/read.cgi/tech/984182993/625
http://pc.2ch.net/test/read.cgi/tech/984182993/627
http://pc.2ch.net/test/read.cgi/tech/984182993/630
http://pc.2ch.net/test/read.cgi/tech/984182993/631
■MIDIピアノ
http://pc.2ch.net/test/read.cgi/tech/984182993/687
おつ
71:02/04/15 12:19
前スレの909-911に貼れば良かった…
前スレの909-911さんお疲れ様です。
欝だ…逝ってくる…
part1より下なのでage。
9前スレ909-911:02/04/15 21:12
見落としとか、結構あると思うんですが、ご勘弁を。

個人的には、BASICがすげえ好きなんだよなあ
神様が集うスレはここですか?
昔、マシン語にして数百バイトで動くBASICがあったそうな。
12デフォルトの名無しさん:02/04/15 22:52
BASICってのは、
>>448 >>497 >>498 >>510 >>511 >>514
の奴ね
13デフォルトの名無しさん:02/04/15 23:11
Windowプログラムをもっとやってほしい。
砂嵐のやつみたいな。
14宗男くさい?:02/04/15 23:13
じゃぁ、誰か、日本語の簡単なプログラミング言語つくって!!?
初心者向けの!
CYGWINかBorlandのbccでコンパイルできるのだと嬉しいな。
16S ◆Q14CxNhI :02/04/15 23:51
新スレ初作品ズザー

前スレ 901 のスロットゲームです。
ついに7行になったのですが、もうわけわかめ、あまりにもトリッキーになってしまいました。

<body onKeyDown=K=1><pre><script>R=7;D=document;function Y(){D.all(7).innerHTML
=P;if(K){R>>=1;if(!R){o=A[0]&56;if(o-(A[1]&56)||o-(A[2]&56)){alert("残念");if(P
<5)return alert("END")}else alert(g=T[o/=8]),P+=g;P-=5;R=7}}for(K=i=0;i<9;C[i++
%3]/=8)j=A[i],C[i]=A[i]=R&4>>i?j=j%(1<<27)*8|j>>27:j,D.all[9+i].innerHTML=S[C[i
%3]&7];setTimeout(Y,99)}S="7□=○∴|¥$".split("");T=[100,5,10,15,20,30,P=
45,60];A=[0x16E29519,0x1DCC2E65,0x384CD988];C=[];a="<b></b><b></b><b></b>\n";D.
write(a,a,a,a);for(i=8;i--;K=0)D.write("\n\t",S[i]," ",T[i]);Y()</script>
17デフォルトの名無しさん:02/04/16 01:29
>>5
オセロは神
18デフォルトの名無しさん:02/04/16 01:37
スゲー(゚Д゚)

>>2-5
無知で申し訳無いんだけど、元ネタの7行プログラムって
セミコロンのところで改行入れてなかったの?
だとしたら7行なんてインチキだよねぇ。
横幅一万バイトまで書けるエディタ使えば誰でも7行で組めるじゃん。。
20デフォルトの名無しさん:02/04/16 01:59
四則演算スバラシイ
21102:02/04/16 02:41
>>19
1をしっかりよみませぅ。
22デフォルトの名無しさん:02/04/16 07:21
実は大したことないんだよ、このスレの作品って。
みんなすげーすげー逝ってるけど、自分で組んでみたら簡単に出来る奴も多い。
例えばラスタースクロールなんて無茶苦茶簡単だし、スライド辞書圧縮も楽勝。
四則演算もなんでこいつらが苦労してたのかわからないくらいあっさり達成できるぞ。
まあ、中には凄い奴もあるけどな。純粋にオセロ(6行)は度肝を抜かれたし、
砂嵐とかは別の意味で凄いと思ったが。
とにかく、盲目的にマンセー言う前に、本当に難しいかどうか自分で作ってみろ。
>>21
すいませんでした。。
ところで元ネタでアメリカの大学生が作ったと言う七行プログラムは
セミコロンで改行してたんでしょうか?誰か知りません。
>>23
大いなる勘違い野郎ですね。
前スレ読んで出直してきなさい
2523:02/04/16 09:44
出直して参りましたw。
なんだやっぱりただ横幅80バイトで7行に収まったてだけなんですね。
それはインチキですよ!w
きっちりインデントして、7行だったら僕は感動で涙を流すでしょうね。まじで。
まあそれでもすごいことは確かですけど。しかも高校生だし。
>>25
若さ溢れる発言おおいに結構。
君が言うのは「今風」のプログラミングスタイルだね。
はるか昔、「N88-Basic」の頃は1行に2つ以上の命令を書くことはザラだったのだよ。
感動する/しないは個人の感覚だから、君が感動しようがしまいが知ったことではないが。
>>23
してないと思われ。
大体、セミコロンで改行って概念があるプログラミング言語で作られたかどうかも怪しい…
>>25
厨房だから仕方ないが、そういうことは自分で出来るようになってから
言ってくれ。読んでて恥ずかしい。
291:02/04/16 12:47
>>2-5
よく見てみたらカッコとかもあるし…
鬱出し脳…
出だしからこれじゃ(>>19=>>23=>>25 >>22)糞スレ街道まっしぐらなんで、放置キボンヌ
>>22はどうやら すごい・すごくない が判定できるようだから、
これができたらすごいという例を挙げてくれ。
>>30
BMP→JPEG
絶対無理だけどできたら紙
>>31
あんた22?
絶対不可能な例を出してどうするんだよ。
jpegの方はステートマシンで楽に書けるが、BMPは処理の本質ではない
ファイルフォーマットのハンドリングだけでかなりの文字数を要する。
固定長ででかいヘッダを抱えてるから処理を省略できないからな。

こういうとうてい無理な例を挙げるなら誰にでもできるだろ
7行でoffice作れって言うのと同じだ。

改めて言う、7行でできなさそうでできるぎりぎりの例を挙げてくれ。
つか>>22に7行ぎりぎりなんて判定できるとも思えないから
20行くらいに収まりそうなのにしてくれ
折角のスレが、荒れるといやだね。
どんな作品が7行プログラムに相応しいかは、旧スレでした方が良いのでは?
まだ90近く残っているし。

大したことの無い作品を認めないようになると、
もしかすると将来神となるかも知れない人(or 作品)の芽をつむことになる。
それに、傑作でなくとも、縮めのテクニックを磨く格好の材料ではないか!
>>34
そうそう、作品が対したことなくても、
その中で使ってる縮めのテクニックがおもしろいことも多々ある
なんつーか、この縮めのテクニックって
アセンブラでの最適化に通じるところがあると思う。
最適化と違って、こっちは役に立たないが(藁
37 ◆Air.TtTk :02/04/16 19:21
PDT びゅーわ(10行)
某社ゲームの、PDT形式画像ビューワ。
>java P filename

PDT10 のみ対応。
透明度、PDT11、アーカイブ 未対応。

import java.awt.*;import java.awt.image.*;import java.io.*;public class P
extends Frame{byte[]s;int[]q;int m,w,h,S=12,c,v,M,Q=0;Image I;public static void
main(String[]_){(new P(new File(_[0]))).show();}public P(File f){s=new byte[(int
)f.length()];try{InputStream R=new FileInputStream(f);R.read(s);R.close();}catch
(Exception e){}w=L(4);h=L(4);S=32;q=new int[w*h];while(Q<q.length){m=s[S++];for(
M=0;M<8&&Q<q.length;M++){if((m<<M&128)!=0)q[Q++]=255<<24|L(3);else{v=(s[S+1]&255
)<<4;v+=((s[S]>>4)&15)+1;for(c=s[S]&15;c>=0;c--){q[Q]=q[Q++-v];}S+=2;}}}setSize(
w+80,h+80);I=createImage(new MemoryImageSource(w,h,q,0,w));}public void paint(
Graphics g){g.drawImage(I,40,40,this);}int L(int l){v=c=0;while(c<l)v+=(s[S++]&
255)<<(c++)*8;return v;}}

自分の言語知識の無さを感じたよ…。
加えて、最近Swingばっかりやってたので、Frameの挙動がよく分からなかった…。

…、つか、なんでインクリメントにカッコつけてんだ俺…。
>>31
using System.Drawing;
class a{
 static void Main(string[] args){
  Image b = Image.FromFile( args[0] );
  b.Save( args[1], System.Drawing.Imaging.ImageFormat.Jpeg );
 }
}

>>38
つまらねー
この企画、Javaしか使えねー俺にとってはかなり不利な内容だな。
インポートとメインメソッドを書くだけで1行終わっちゃうぜ。
>>40
あん?
c/c++だと#includeで1行終わるが、なにか?
>>41
そうだったんだー。なんせ全然、他の言語知らないもんでスマソw。
でも何かJavaって何かにつけて長文になっちゃうような気がするんだよね。
隣のなんとやらは良く見える
ってやつかなw
44S ◆Q14CxNhI :02/04/16 23:39
Java を知らないから全然縮まらない〜、と言ってみるテスト

import java.awt.*;import java.awt.image.*;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();}public 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;){m=s[S++];for(M=0;M<8&&Q<w*h;){if((m<<
M++&128)>0)q[Q++]=255<<24|L(3);else{v=(s[S+1]&255)<<4;v+=s[S]>>4&15;for(c=s[S]&
15;c-->=0;q[Q]=q[Q++-v-1]);S+=2;}}}setSize(w+80,h+80);I=createImage(new
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;}}
4522:02/04/16 23:59
すまぬ、荒らすつもりは無かったんだが、言い方が悪かったな。
なんだか前スレで、いい作品が評価されず、いまいちの作品が
よく話題に挙がっているのが勿体なく感じてしまって。
それでも本当にいい作品はちゃんと評価されているんだけれどね。

ま、>>34に同意というわけで、前言撤回します。スマヌ。
ついでにネタを振ると、Windowsでテトリスを作ってくだされ>>特にトリッキーの1氏
46前スレ904:02/04/17 00:25
GCCで警告が出ない範囲でさらに縮めてみました。

#include <stdio.h>
#include <stdlib.h>
int y,m=-1,s,d;int main(int h,char**v){printf("%9s%5d\nSu Mo Tu We Th Fr Sa\n",
"Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec"+(m+=atoi(v[1]))*4,
y=atoi(v[2]));d="&#&%&%&&%&%&"[m]-6+(m-1&&(y%400?(y%100&&(y%4?0:1)):1));if(m<2)
y--;y=s=(y+y/4-y/100+y/400+"#&%(#&($')%'"[m]-34)%7;while(y--)printf(" ");for(
;-y<d;y--)printf("%2d%c",-y,(s-y)%7?0:'\n');puts("");return 0;}
Windowsでテトリスは不可能だっつーの
内容のないスケルトン(砂嵐)でさえぎりぎりだったんだから。
Excel VBA でテトリスとかできないかね。
4922:02/04/17 00:33
>>47
C++とは言っていないがダメかな?
50 ◆Air.TtTk :02/04/17 00:56
PDT びゅーわ(9行)

import java.awt.*;import java.io.*;public class P extends Frame{byte m,s[];int w
,h,S=12,c,v,M,Q=0,q[],n;Image I;static void main(String[]_){(new P(new File(_[0]
))).show();}P(File f){s=new byte[(int)f.length()];try{(new FileInputStream(f)).
read(s);}catch(Exception e){}w=L(4);h=L(4);S=32;q=new int[n=w*h];while(Q<n){m=s[
S++];for(M=0;M<8&&Q<n;M++){if((m<<M&128)>0)q[Q++]=255<<24|L(3);else{v=(s[S+1]&
255)<<4;v+=(s[S]>>4&15)+1;for(c=s[S]&15;c>=0;c--)q[Q]=q[Q++-v];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){v=c=0;while(c<l)v
+=(s[S++]&255)<<c++*8;return v;}}

InputStreamを close() していません。(ぉ
>>50
> java P xxx.pdt
Main method not public.
といわれました(報告)
>>50
宣言部分以外では、>>44 の方が大分短いやんけ
53S ◆Q14CxNhI :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 :02/04/17 01:44
>51
あらまっ。ボクのPC(Win98)では
JDK1.2.2_007 動作。
JDK1.3.1_01 動作。
JDK1.4.0 エラー。
となりました。

>52
何かをimportしなかったので、何かが増えたわけですね。
>>36
小手先よりもまずアルゴリズムの見直しからスタートするから
結構役に立つと思うよ。
組み込み系用にいくつかここからパクったアイデアあるし。
56前スレ843:02/04/17 12:55
トリッキーの1氏は見てないの?
もう一度舞い降りれ!
57 ◆Air.TtTk :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行は無理な気がする。
まあ、何度も絶対不可能が縮まったわけだからがんばれ
一念発起してVisualC++をアンインストールしちまったけどな
うらやましいだろ、みなさん
また来週に入れなきゃいけなさそうなんであれですけど
59S ◆Q14CxNhI :02/04/17 19:21
テトリスだけど、JavaScript で現在11行でできています。
バグバグでまだとても公開できないですが、近日中に必ずアプします。
アルゴリズムの最適化もほとんどしていない状態で11行なので、
最終的には7行になるのではないかと、期待しています。
60デフォルトの名無しさん:02/04/17 22:31
>>59
見せてアゲ
61S ◆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>
>>61
良くできているけれど、結構バグがあるね。
とりあえずテトリス棒が壁とかにめり込む事が頻繁にあるみたいです。
あと、回転するとめり込むこともありました。
>>61
ライフゲームの時は良かったが、
テトリスみたいな真っ当なゲームだとキーの反応がどうしてもね……
でも結構いいんじゃない?ブロックをどのような構造で管理してる?
64S ◆Q14CxNhI :02/04/18 00:36
>>62 >>63
どもです。

キー入力は、ループ中に2回判定させようかと思ってます。文字数増えるけど。

ブロックは中心と上と右を固定し、それ+1個で形を決定します。
テトリス棒だけは直線にするために、+2個を配列の最初に確保 [2,-1]し、
はみ出す上を無視するようにしました。

バグは・・・何とかします、しましょう、してください・・・
このスレの問題点として、縮める前のコードがないために
他の人がいっしょに縮めることが難しくなってる。
前スレのトリッキー1、60、あたりが良く一緒に縮めていたけれど、
あれは特殊な例だと思う。
(それとも彼らレベルになれば、縮んでいても普通に読めるのかも)

かといってみんなが縮める前のコードをウプしたら、
かなり鬱陶しいだろうし、難しい問題だよな。
このスレを七行になったもの専門にして、
別に七行作業スレッドとかを作ってそっちで議論するとか・・・
むしろ7行モード・インデントして読みやすいモードを変換するフィルタを7行で書く。
67前スレ:02/04/18 12:31
>>66
perlのインデントツールは現在製作中ですが何か?
>>66-67
65とちょっとずれてないか?
69perl16:02/04/18 13:26
>>67
訂正
s/前スレ/前スレ843/;
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();}}
>>66
■インデント揃え
http://pc.2ch.net/test/read.cgi/tech/984182993/116
(http://pc.2ch.net/test/read.cgi/tech/984182993/126
http://pc.2ch.net/test/read.cgi/tech/984182993/138)
http://pc.2ch.net/test/read.cgi/tech/984182993/688

ノーマル→7行のフィルタは…どうだろう。俺は、手で縮めるときは
79文字を効率的に使えるように色々並べ替えたりするので、
そこまで考えてくれるのが7行で作れたら面白いかもシレン。
72perl16:02/04/18 22:38
>>71
インデントツール完成したら、作ってみるYO!(・∀・)
だけど、インデントツール作るのにも相当苦労してるから、
ノーマル→7行は難しそうだ。
関数なんかも考慮しないかんし・・・
Perlだけど。
>>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クレジャパン: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クレジャパン: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クレジャパン:02/04/19 09:36
c ** 頼むから死んでくれ **
do 5 loop00=0,(10000-1)
write(*, 600 )
600 format('Cが出来るからってエバるなや')
5 continue
stop
end
78クレジャパン:02/04/19 09:52
/* タウンページたら「パソコン教えます」ってかいてあったんだよ */
/* んでなそこに行って「C言語教えて下さい」って言ったら */
/* 「アナタには無理だ、私でも一人前になるのに12年もかかった」 */
/* って言われたんだよ */
/* Cプログラマーって種族は人の顔見ただけでそう言う事判断するのかよ */
/* アアン?何にか言って見ろゴルァ(゚Д゚メ) */
/* そんなに偉いのかよ?C使えたら */
>>73
有る程度の構文解析は必要かと……
>>74
短くしようという気迫に欠けすぎているので却下。
・void main?
・変数名が2文字以上??
・#include <Math.h>???
センセー、>>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

ヤフーは、どこをどうとっても最悪。
ビッダーズが一番!!!↓
http://www.bidders.co.jp/bpu/1072049

皆、左上の会員登録をクリックして、
入会しよう。
>>81
最後にreturn 0;を忘れずに
をを、良スレ。しらなかった。
97S ◆Q14CxNhI :02/04/19 18:07
プログラムの概念がわかれば、言語を知らなくても参加できるぞぃ。
たとえばおいらは JavaScript をほとんど全くしらなかったが、
蛇にはまり、ライフゲームを改造し、ついには自分でスロットやテトリスを書けるようになった。
今だ JavaScript はよくわかっていないが、7行そのままで読解もできるようになった。
これは Java についても同じ。
98S ◆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>
9974:02/04/19 18:40
>>80
すんません。自分でちょっと前に書いたコードを適当に縮めただけだったので…
あと?の意味がわかりません。何故なんでしょうか?
C歴1ヶ月未満の厨房です。スマソ
10074:02/04/19 18:44
あと>>81
#include <Math.h>
しないと動かないんですが…

100get。
>>99
7行プログラミングとは言っているが、やはり縮められるだけ縮めたいもの。
そのため、変数・関数名は最初に1文字にしておくのが、チヂマー(縮める人?)の基本。
7行達成したからといって、無駄(に見える)をなくすべし!

ということを >>80 は言おうとしているんだろうよ。

それから void main() と main 関数の返値に void を指定するのは間違いというのがCの基本(と言われている)。
もちろん縮める上で有効ならば、皆それ(Warning)くらいは無視するよ。
102S ◆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
10474:02/04/19 19:43
>>101
丁寧にありがとうございました。
出直してきます。

皆さんがんばってください。
105perl16: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;}

↑のインデントバージョン
http://www2.freejpn.com/~az1028/indent/indent.txt

↑のツールを使って自分自身を実行した結果。
http://www2.freejpn.com/~az1028/indent/indent2.txt
>>101
>>95は無視してないようだが(w
107C_sugar:02/04/19 21:07
テトリスは結構すごいね。

普通にJavaScriptでテトリスを作ろうとすると数百行になるからね。
108SYN ◆mMJ0UaoA :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);}
あんたGCAの作者か?
なんつーか、惰性で続いてる感が拭えない。
前スレ500前後で終わるべきだったかと。
range corderはオモロかったけどね。
>>109
SもSYNも某圧縮アルゴリズム掲示板の住人
前スレのRange corder作ったのも縮めたのもSだっか。
112SYN ◆mMJ0UaoA :02/04/19 21:59
>>110
http://pc.2ch.net/test/read.cgi/tech/984182993/775
を見て何か描けたらいいなって思ったけど、ショボくてスマソ。
113110:02/04/19 22:08
>>112
いや、誰がショボイとかそういう話じゃなく。
「これを縮めるぞ」みたいなやる気の出る作品が出てこないなぁって話
>>111
別に誰だろうとあんま関係ないよ。
まぁ、面白いかつまらないかはあるけどな。
115S ◆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>
>>100
math使わなくても、二乗したのを比較すればいいのでは??

>>115
読めないのだよ……
過去スレの354みたいに書いてくれると嬉しい……
http://pc.2ch.net/test/read.cgi/tech/984182993/354
117S ◆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>
>>117
いやそれはsageてくれ
119S ◆Q14CxNhI :02/04/20 02:19
>>118
スマソ。改行エラーがでてばかりなので sage 忘れてしまった
120116:02/04/20 02:26
>>119
thx。可能なら縮めるのに協力します
>>116
速度に違いは?
いや、短くするのが趣旨なのはわかってるんだけど
>>121 q < sqrt(m) より q*q < mのほうが速いに決まってるだろ
>>122
ウチで動かしたらq*q<mの方が平均0.2〜3秒遅くなったのだが。
…逝ってくる

VBなら間違いなく前者の方が早いな(関係無い)
124S ◆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
ありがとうございます。
125S ◆Q14CxNhI :02/04/20 04:16
>>124
画面がスクロールする恐れがあるため、回転は「リターンキー」にしました。
126デフォルトの名無しさん:02/04/20 04:40
CかC++でオセロかインベーダ作ってください。
おながいします
>>126
前スレに6行オセロ(コンピュータ対戦可能)という神の作品はあったぞ。
128前スレ853:02/04/20 08:28
>>105
ん? Perl4 対応を考えてる?
129perl16: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);

↑のインデントバージョン
http://www2.freejpn.com/~az1028/indent/indent.txt

↑のツールを使って自分自身を実行した結果。
http://www2.freejpn.com/~az1028/indent/indent2.txt
130perl16:02/04/20 11:55
バグって言うか、ちゃんと改行されない。
131775: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]);}}

それにしてもすごいスレだ・・。
>>126
6行オセロは必見だぞ。
あの短さ、バグなし、コンピュータ対戦、あれは間違いなく芸術
133775:02/04/20 12:54
ああ、>>108にもっと頭良いのが出てましたね・・・。
すいませんでした、逝ってきます。
134デフォルトの名無しさん:02/04/20 13:05
>>131
すげーbmpを吐いたぞ
135前スレ853: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のやつ、回転できなかったけど、直ってるかな?ドキドキ。
sage忘れた、
アナログ回線切って、オフラインでコーヒーブレークしてから、CPU頭に載せて自冊・・・
138S ◆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>
139S ◆Q14CxNhI :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>
>>138
>>117はスペース回転だったけど?

>>117ベースで機能を追加すると死んでしまった・・・
所詮折れのスキルはこんなものなのか?と、悔しいから奮闘中。
Sタン、更新ハヤイヨー(スゴイナ-。

7行の壁を破りたい・・・
>>139
本題じゃないけどこのテトリス、ゲームとしてシビアすぎない?。
>>141
ちょっと、ね。キーが鈍いし、ブロックは早いし。
まぁ、自分で調節すればいいんだけど。
143S ◆Q14CxNhI :02/04/20 21:06
>>140
わかりやすさを優先するために >>117 は少し以前のものをベースに、その時点での最新版と融合させました。

>>141
1段落下に対して、横移動あるいは回転のどちらか1つしかできませんので。
2〜3回操作可能にすると、バランスが良くなるでしょう。
落下を任意(カーソル下)、得点に応じて速くなるとすることもできるでしょう。
ただ、どちらにしろ、文字数が・・・
ちょうどテトリスつくりたかったこともあって、参戦。
dめおえj、JavaScriptやったことないんだよね。

そうか、ブロックのデータはそうやって考えると小さくなるのか。
パパ、がんばっちゃうぞー
凄いのかもしれないけれど、ちょっといまいちの印象が抜けきらないな。
とりあえず、長くなってもいいからゲームとして成り立つソースを
是非アップして貰いたいと思いますがどうでしょう。
自分で作ってもいないのに生意気ですか?逝ってきます。
146S ◆Q14CxNhI :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>
147145:02/04/20 23:53
>>146
キー操作が辛くてなんとも…
その部分を改良しないと、テトリスとしてはダメかなと、
僭越ながら思いました。とりあえずソース読んでみます
なんかテトリス不評だな。俺は7行ネタとしては面白いと思うけど、
ゲームとして見たら……うーん。
やっぱJSだからきついな
>>147
そうか?おれには簡単すぎていつまでも終わらない
ゲーム性はこれくらいでいい
これで7行したら紙
>>149
先人達に比べると、完成度をもう少し上げて欲しいと思わないか?
前スレのマインスイーパとかの完成度と比べてしまうと、どうも……
でもとりあえず7行にするのはそれでいいかもしれないけど、
S氏には期待しているので、もう少し頑張って欲しい、と無責任なことを言うテスト
>>150
先人達と比べるのは辛すぎるのではない?
Sさんもかなり頑張って縮めてると思うし、なによりこのやる気はいいと思う。

しかし、前スレの初期にいた人、来ないね。
152S ◆Q14CxNhI :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>
>>152
お疲れ。
154S ◆Q14CxNhI :02/04/21 03:54
ついに8行達成です。・・・遊びづらい版ですが・・・

<body onKeyDown=K=event.keyCode><pre><script>X=[];A=12;Z=[];function Y(){E=B[t]
c=g=f=0;d=K-37?1:-1;C=[];for(i=4;i--&&K;K-b?c+=!Z[h+p+d]:g+=!Z[h+(C[i]=p*A-Math
.round(p/A)*145)])p=E[i];t&&g==4?B[t]=C:c-4?0:h+=d;for(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]]=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,99)}B=[[-11],[-
24],[2],[b=13],[-b],[-1],[2,-1]];D=document;h=17;for(K=t=P=i=0;i<280;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>

眠い。
155 ◆Air.TtTk :02/04/21 04:07
ちゃんとした迷路(7行)
迷路って以外と簡単だったのね。
5行レベルかな…。

// M.java

public class M{int g,x,y,m[][]=new int[79][23];public static void main(String[]_
){new M();}M(){for(y=0;y<23;y++)m[0][y]=m[78][y]=1;for(x=0;x<79;x++)m[x][0]=m[x]
[22]=1;m[2][1]=m[76][21]=m[2][2]=1;while(true){g=1;for(x=2;x<77;x+=2)for(y=2;y<
21;y+=2){if(m[x][y]>0){D(0,-2);D(0,2);D(-2,0);D(2,0);}g&=m[x][y];}if(g>0)break;}
for(y=0;y<23;y++){for(x=0;x<79;x++){System.out.print(m[x][y]>0?" ":"@");}System.
out.println("");}}void D(int X,int Y){if(m[x+X][y+Y]<1&&Math.random()<0.1)m[x+X]
[y+Y]=m[x+X/2][y+Y/2]=1;}}
>>155
(´ー`)。o○(Java知らないから遊べねーや)

金ないから家ではBCCでコンパイルできるつしか試せない罠
>>156
Javaコンパイラは無料じゃー。
>>157
ええっそうなの?早速あさってみよ。
通信回線遅いうえに従量制なんで重いのは落とせない罠。

#初心者丸出しな自分に鬱
おれもマチヒチ勉強してみよっかなぁ

マチヒチっ何だよ。javaだよ。なんかカナロックか何かに取り付かれていたようだ。。。(w
ワラタ
cygwin があるから、c も FORTRAN も Pascal も perl も・・・
つーか、おれんちは Unix系 しかないから、むしろ Windows 環境が無い。
162perl16:02/04/21 17:00
javaむずい。つーかよく分からん。
perlしかやってないもんで。
perlでゲームは面白くない。CUI中心だから。

>>135
>トークナイザ作って括弧の対応調べて地道に改行
そうですね。一時的にハッシュとかに対応できるようにしても、
新たな問題が出てきますからね。
七行で完璧に近いインデントツール作るのは難しそうだ。

>>Java&JSプログラマーの皆さん
Java&JSのインデントツールは作らないんですか?
>>162
インデントツールという発想がいまいち言語にあわなくて…。
Cやマチヒチの場合、縮めた後ではインデントを揃えても見やすくならないでしょ?
>>161
割り切って1台くらいWin環境を入れたら?
gcc for Win32だとWindowsプログラムの開発も出来るよ。
165Javaさん:02/04/21 17:31
前スレ770です。。
いつの間にやらPart2突入していたんですね。

>>155
ぱっと見削れる部分を削ってみました。
class M{int g,x=0,y=0,m[][]=new int[79][23];static void main(String[]_){new M()
;}M(){for(;++y<23;m[0][y]=m[78][y]=1);for(;++x<79;m[x][0]=m[x][22]=1);m[2][1]=m
[76][21]=m[2][2]=1;for(;;g=1){for(x=2;x<77;x+=2)for(y=2;y<21;y+=2){if(m[x][y]>0
){D(0,-2);D(0,2);D(-2,0);D(2,0);}g&=m[x][y];}if(g>0)break;}for(y=-1;y++<22;x=0)
for(;x<79;System.out.print(m[x++][y]>0?" ":x>77?"@\n":"@"));}void D(int X,int Y
){if(m[x+X][y+Y]<1&&Math.random()<0.1)m[x+X][y+Y]=m[x+X/2][y+Y/2]=1;}}

やっぱJavaは読みやすいなぁ、、。

さて、前スレで書いたHTTP鯖にバグあったから手直し、、、。
こうやって休日がつぶれていくわけです。鬱
166デフォルトの名無しさん:02/04/21 17:43
以前見かけて面白かったスレですが、ちょっとネタを思いついたので。
急スレに書き込んでしまったのですが、写します。
ーーーーーーーーーーーーー
プラパズルNo5とかどうでしょうか。
全組み合わせを探し出し、できれば表示する。
ルール
正方形が5つ集まってできたコマが
12種類(5つの正方形を組み合わせて出きる全通りです)あります。
これを6*10マスに収まるように並べる並べ方をしらべます。
ちなみに組み合わせは全部で2339通りあります。
もちろんコードが短ければ短いほど、全通りの検出が速ければ速いほど イイ! ってかんじで。
ーーーーーーー
全組み合わせ合わせの取得まで、私がテキトーに作った(全然7行じゃないですよ)奴で3日、まじめに作り直して5分かかりました。
結構真剣にやって10秒ぐらいまで縮みました。
7行でも3日ぐらいの奴ならできそうに思うんですが、ここの方ならスピードも・・・
なお、マシンはPenIII500でした。
ソースキボン
ネタ提供だけ?
とりあえず自分で縮められるところまで縮めてくれ。
169perl16:02/04/21 17:59
>>163
確かにそうですね。
ツール使ってインデントしても、
ただ改行してるだけですからね…
字下げもするか…
>>169
そういう問題ではなく、たとえば
if(v-p-*i&&m[v]==t&&(s=a=v=p,d))do m[v]=t,v+=*i;while(m[v]-t);
をインデントしても、
if(v-p-*i&&m[v]==t&&(s=a=v=p,d))
  do
    m[v]=t,v+=*i;
  while(m[v]-t);
にしかならないぞ、という事ではないかな?
これで読みやすくなるわけでは無いよね。無いよりはマシだけど
171 ◆Air.TtTk :02/04/21 19:48
ちゃんとした迷路(5行)

// M.java

public class M{public static void main(String[]_){new M();}M(){for(;p<1617;p++)m
[p+80+p/77*2]=1;m[81]=m[160]=m[1735]=0;for(;g>0;){g=0;for(p=160;p<1658;p+=(p+3)%
79<1?((p+82)%158<1?84:5):2){if(m[p]<1){D(-158);D(158);D(-2);D(2);}g|=m[p];}}for(
p=0;p<1817;p++)System.out.print(m[p]<1?(p%79<1?"\n ":" "):"@");}void D(int P){if
(m[p+P]>0&&Math.random()<0.2)m[p+P]=m[p+P/2]=0;}int g=1,p,m[]=new int[1817];}

>>165
M は public じゃないといけないし、
j2sdk1.4.0 なら main も public じゃないといけないらしいぞ。
172S ◆Q14CxNhI :02/04/21 21:56
テトリス多少遊びやすい版も8行到達です。

<body onKeyDown=K=event.keyCode><pre><script>X=[];function Y(){(E=B[t]).push(c=
0,1,-A);C=[d=K-37?1:-1];for(i=4;i--&&K;K-b?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.
round(p/A)*145)])p=E[i];t&&c<-3?B[t]=C:c-4?0:h+=d;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<280;X[i]=Z[i]=++i%A<2||i>228?1:0)D.write(i%b?"<b></b>":"\n");Y()</script>
173perl16:02/04/21 22:29
>>170
あ、そうか。
うーん。完璧にインデントするのは難しい。
174Javaさん:02/04/21 22:43
>>171
とうとう5行ですか。
ロジックの変更お疲れ様です。
ここまでくると、残りの2行で何か出来そうですね。

>M は public じゃないといけないし、
>j2sdk1.4.0 なら main も public じゃないといけないらしいぞ。

Thanks.
でも動くならいいやというノリで、削ってしまう今日この頃なのでアリマス。鬱氏
175Javaさん:02/04/21 22:46
>>173
インデントのことでなく、変数名のことを言っているんじゃないかな?
176S ◆Q14CxNhI :02/04/21 22:47
表示系を変更したんですが、どうでしょうか?

<body onKeyDown=K=event.keyCode><script>Z=[];B=[[-11],[-24],[2],[b=13],[-b],[-1
],[2,-1]];function Y(){(E=B[t]).push(c=0,1,-A);C=[d=K-37?1:-1];for(i=4;i--&&K;K
-b?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/A)*145)])p=E[i];t&&c<-3?B[t]=C:c
-4?0:h+=d;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(S="",i=0;i<240;S+=i-11?X[i]?"■":"_":P,X[i]=Z[i++
])S+=i%A?"":"<br>";document.all(3).innerHTML=S;Z[5]?0:setTimeout(Y,150)}X=[];A=
12;for(e=K=t=P=i=0;i<280;h=17)X[i]=Z[i]=++i%A<2||i>228?1:0;Y()</script>
177デフォルトの名無しさん:02/04/22 00:34
>>168
ネタ提供だけのつもりだったんですが・・・
ソースはなくしちゃって。また作っても良いんですが、最近忙しくて・・・
178perl16:02/04/22 01:07
よく分からなくなってきた。
なんか僕、書き込むたびにつっこまれているような…。
>>178 有名税ってことで。
180厨々房某:02/04/22 04:18
プログラムのことはよくわからないんですが、
ネットで対戦できるゲーム作れますかね。
7行でできたら神だ・・・・
まず言語は何がいいか?詳しくないからわからないけど、
Cじゃ厳しそうだな。
>180
じゃんけんぐらいならすぐできるぞ。
183S ◆Q14CxNhI :02/04/22 20:39
ゲーム性能向上も狙ってみたんですが・・・

<body onKeyDown=K=event.keyCode><script>function Y(){(E=B[t]).push(c=0,1,-A);C=
[d=K-37?1:-1];for(i=4;i--&&K;K-b?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/A)
*145)])p=E[i];t&&c<-3?B[t]=C:c-4?0:h+=d;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=S="";i<240;S+=i-11
?X[i]?"■":"_":P,X[i]=Z[i++])S+=i%A?"":"<br>";document.body.innerHTML=S;Z[5]?0
:setTimeout(Y,99-P)}X=[B=[[-11],[-24],[2],[b=13],[-b],[-1],[2,-1]]];for(Z=[A=12
],e=K=t=P=i=0;i<280;h=17)X[i]=Z[i]=++i%A<2||i>228?1:0;Y()</script>
184S ◆Q14CxNhI :02/04/23 00:04
今日はここまで、アプアゲ
1日5文字くらい縮められて、今月中に7行達成できるかなぁ

<body onKeyDown=K=event.keyCode><script>function Y(){E=B[t];c=0;C=[d=K-37?1:-1]
for(i=4;i--&&K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/A)*145)])p=E[i]
t&&c<-3?B[t]=C:c-4?0:h+=d;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=S="";i<240;S+=i-11?X[i]?"■":
"_":P,X[i]=Z[i++])S+=i%A?"":"<br>";document.body.innerHTML=S;Z[5]?0:setTimeout
(Y,99-P)}X=[B=[Z=[A=12]]];for(e=K=t=P=i=0;i<264;X[i]=Z[i]=++i%A<2||i>228?1:0)B[
i%7]=[[-7,-20,6,h=17,-9,3,6][i%7]-4,0,1,i%6?-A:-1];Y()</script>
185perl16:02/04/23 02:29
>>179さん
いい意味で有名(トリッキーの1氏みたいな)ならいいですが、
明らかに悪い意味で有名なので鬱。
もっと勉強せねば…
186デフォルトの名無しさん:02/04/23 12:39
>>184
ぬをを…一文字でも貢献できればと思ったが、全然わかんねぇYO!
俺も参加。
前スレ839のproxyを縮めてみた。

import java.net.*;import java.io.*;class P{public static void main(final String
a[])throws Exception{ServerSocket s=new ServerSocket(a.length>2?Integer.parseInt
(a[2]):8080);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer.parseInt(a[1]
));new P(o.getInputStream(),n.getOutputStream());new P(n.getInputStream(),o
.getOutputStream());}}P(final InputStream i,final OutputStream o){new Thread(new
Runnable(){public void run(){try{for(int d;(d=i.read())!=-1;)o.write(d);i.close(
);o.close();}catch(Exception e){}}}).start();}}
188S ◆Q14CxNhI :02/04/23 22:25
一日5文字なんて、夢は夢だった・・・1文字減らす難しさは指数関数的に増えるのかも
大改造して数文字減らせるかもと作業していますが、今日はパスです
ピンポン、8行だけど。
難しい・・・このままじゃゲームとして面白くないし(;´Д`)

import java.awt.*;class P extends Canvas{static int x=1,y=1,h=1,v=1,b=1;{
enableEvents(8);}public static void main(String a[]){Frame f=new Frame();
P p=new P();f.setSize(120,160); f.add(p); f.show();for(;;){p.repaint();
try{Thread.sleep(20);}catch(Exception e){}if(x<1||x>98)h*=-1;if(y<1||y>118||
(y>108&&x>b&&x<b+20))v*=-1;x+=h;y+=v;}}public void paint(Graphics g){g.drawRect
(0,0,100,120);g.fillRect(x,y,2,2);g.fillRect(b,110,20,3);}public void
processKeyEvent(java.awt.event.KeyEvent e){int c=e.getKeyCode();if(e.getID()!=
401)return;if(c==37&&b>1)b-=2;if(c==39&&b<80)b+=2;}}
190S ◆Q14CxNhI :02/04/24 22:34
テトリス。後46文字?

<body onKeyDown=K=event.keyCode><script>X=[B=[Z=[a=A=12]]];function Y(){C=[d=K-
37?1:-1];c=0;for(i=4;i--&&K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/A)
*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1;
if(e=!e){if(f|a){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,a=0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A
;)Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;S+=i-11?X[i]?"■":"_":P,X[i]=Z[i++])S+=i%A
?"":"<br>";document.body.innerHTML=S;Z[5]?0:setTimeout(Y,99-P)}for(e=K=t=P=i=0;
i<264;Z[i]=++i%A<2||i>228?1:0)h=17;Y()</script>
>189氏のピンポンいぢってみた也

import java.awt.*;public class P{public static void main(String a[]){new Frame
(){int x,y,s,h=1,v=1,b;{setSize(120,160);Canvas p=new Canvas(){{enableEvents(8
);}public void paint(Graphics g){g.drawRect(0,0,100,120);g.fillRect(x,y,2,2);g
.fillRect(b,110,20,3);}public void processKeyEvent(java.awt.event.KeyEvent e){
if(e.getID()==401)s=(e.getKeyCode()==37?-2:2);else s=0;}};add(p);show();try{
for(p.requestFocus();;p.repaint()){Thread.sleep(20);if(x<0||x>99)h*=-1;if(y<0
||y>119||(y>108&&x>b&&x<b+20))v*=-1;x+=h;y+=v;b+=s;}}catch(Exception e){}}};}}
>>190
ソースを読んだけど、テトリスだとは理解できなかた ...(゚Д゚)逝ってきます
193デフォルトの名無しさん:02/04/24 23:36
前スレ 839 です.
アスキーアートを Java で作ってみた.
特に工夫もせず,ビールを飲みながら作ると,できちゃった.

import java.io.*;import javax.swing.*;public class A{static String A=" `.-:i+*"+
"3X8&%$W#@";public static void main(String[]S){PrintStream o=System.out;
ImageIcon c=new ImageIcon(S[0]);int h=c.getIconHeight(),w=c.getIconWidth();int[]
p=new int[w*h];try{(new java.awt.image.PixelGrabber(c.getImage(),0,0,w,h,p,0,w))
.grabPixels();}catch(InterruptedException e){}for(int i=0;i<h;i++){for(int j=0;j
<w;j++){int P=p[i*w+j];int g=(int)(0.3*((P>>16)&0xff)+((P>>8)&0xff)*0.6+(P&0xff)
*0.1);o.print(A.charAt(g/A.length()));}o.println();}o.flush();System.exit(0);}}

$ java imagefile
>>193
すごい! Java の強みを生かした良いプログラムですな。
蒸し返すようで悪いけど、 >>22 よ。
スライド辞書圧縮が楽勝だというのなら、もっと短くしてみれ
>193の出力を79行にしてみた

import java.awt.image.*;import java.awt.*;public class A{public static void
main(String[]S)throws Exception{Image c=new javax.swing.ImageIcon(S[0]).
getImage();int w=79,h=c.getHeight(null)*w/c.getWidth(null);BufferedImage s=new
BufferedImage(w,h,10);Graphics g=s.getGraphics();g.drawImage(c,0,0,w,h,null);g.
dispose();DataBuffer p=s.getData().getDataBuffer();char[]b=new char[w];for(int
y=0;y<h;y++){for(int x=0;x<w;x++)b[x]=" `.-:i+*3X8&%$W#@".charAt(p.getElem(x+y
*w)/16);System.out.println(b);}System.out.flush();}}

もうちょっと縮むかも。
System.out.flush()は要らないかも。
コンソールの文字の縦横比を考慮した方がいいのかも。かも。
197S ◆Q14CxNhI :02/04/25 01:48
意外とさくさく進みます。後40字。

<body onKeyDown=K=event.keyCode><script>X=[B=[Z=[A=12]]];function Y(){c=0;C=[d=
K-37?1:-1];for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[(C[i]=p*A-Math.round(p/A)*145)
+h])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1;if(e
=!e){if(f|a){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t%7]-
4,a=0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)Z[
j]=Z[j-A]}h+=A}for(i=S="";i<240;S+=X[i]?"■":"_",X[i]=Z[i++])S+=i%A?"":"<br>";
document.body.innerHTML=S+P;Z[5]?0:setTimeout(Y,99-P)}for(e=K=t=P=i=0;i<264;Z[i
]=++i%A<2||i>228?1:0)a=h=17;Y()</script>
>>197
目立ちたいのはわかるが、作業中なのにぽこぽこageんでください。
ageられてるから見てみると、作業途中のテトリスばかりでうざいです。
>>198 むしろどんどんアゲ欲しいのだが。
テトリス(以外も含めて)の縮め過程を見るのが最近ここのスレでの楽しみ。
それとも >>198 よ。作業用スレ立てるか?その方がうざい。
200perl16:02/04/25 02:04
>>198
まぁまぁマターリしようよ。
>>199
はぁ?
何で作業スレ立てるって話になるんだよ
別に作業課程を書き込むのは悪くないけど、いちいちageるなってことだ。
大幅に構造を変更したとかならともかく、ちまちま削るたびにageられても迷惑だ。

だいたい、ageられなきゃレスを確認できない>>199の環境に問題がある。
>193氏のアスキーアートをさらに縮めて4行に。

class A{static{new javax.swing.ImageIcon(System.getProperty("i")){int i,w=80,h
=w*getIconHeight()/getIconWidth();{new java.awt.image.BufferedImage(w,h,10){{
for(getGraphics().drawImage(getImage(),0,0,w,h,null);++i<w*h;)System.out.print
(" `.-:i+*3X8&%$W#@".charAt(getData().getDataBuffer().getElem(i)>>4));}};}};}}

コンソールの横幅を80桁にして
java -Di=C:\graphic\hoge.jpg A
みたいな感じで実行。例外吐いて終了。

なんというか、これぞ糞コードの極み。みたいな。
テトリスうざいのは同感だが、
作った物を見てくれ……というS氏の気持ちもわからんではない。
extern int putchar(int);char*P="31287f861fa1fa187e7a182085efa186187efe0fa083ff\
e0fa08207a182785e861fe186110410410404104185e862f248a182082083f873b61861871a658\
e17a186185efa187e8207a186589dfa187e8a17a078185e7c410410486186185e86186148c8618\
6dce185230c4a144a104104fc210843f";B(int i,int c){long long int j,x;for(x=j=0;j<
9;j++)x=(x<<4)+(*(P+i*9+j)-(*(P+i*9+j)>60?87:48));for(j=0;j<6;j++)putchar(((x>>
c*6)&63)>>(5-j)&1?35:32);putchar(32);}main(int c,char*v[]){char*l,j;if(c>1)for(
j=5;j>=0;j--){for(l=v[1];*l!=0;l++)B(*l-65,j);putchar(10);}}

banner
大文字アルファベットのみ。long long int を __int64 にすればVCでも動くと思う。
上のAA生成に比べると見劣りするナァ(;´Д`)
>199はageとアップを混同してると思われ。
プログラミング過程はどんどんカキコしていいけど、
完成品じゃないならメール欄にsageと書くべし。
206193:02/04/25 21:21
>>187
new Thread(new Runnable(){ ...
の new Runnable っていらんのじゃないの?
なくなってもいいから,もっと縮むかも.

>>202
縮むもんだねぇ.
ちゃんとインデントして見たソース.
私には書けない...
喜んでいいのやら哀しんでいいのやら...
207perl16:02/04/26 00:56
ピンポンには正直驚いた。
僕はJAVAプログラミングできませんが、
ピンポンを発展させて7行でブロック崩しができたらすごいと思う。
Perlでなんかいいネタないかなー。
208187:02/04/26 09:21
>>206縮めてみた

import java.net.*;import java.io.*;class P{static void main(String a[])throws
Exception{ServerSocket s=new ServerSocket(a.length>2?Integer.parseInt(a[2]):8080
);for(;;){Socket n=s.accept(),o=new Socket(a[0],Integer.parseInt(a[1]));new P(o.
getInputStream(),n.getOutputStream());new P(n.getInputStream(),o.getOutputStream
());}}P(final InputStream i,final OutputStream o){new Thread(){public void run()
{try{for(int d;(d=i.read())!=-1;)o.write(d);i.close();o.close();}catch(Exception
e){}}}.start();}}

こんなもんか
209S ◆Q14CxNhI :02/04/26 22:19
>>198 >> 203
うざっこく思われているということに全く気付いていませんでした。
申し訳ありません。
今後は気をつけて参加したいと思います。
>>209
ガンバレSさん。sageだけど応援してるよ
いつかロシア人もビックリの7行テトリスを夢見て
こういった心遣いによってこのスレは成り立ってるんだね。
誰もレスしてないのに何度もアップしたのは確かにS氏のチョンボだけど、
テトリス自体は応援してるので、是非いつか遊びやすくて7行のテトリスを
ずずんとアップしてください
212S ◆Q14CxNhI :02/04/27 01:20
ついにやりました! テトリス7行達成です!!
叱咤激励いろいろいただきました、みなさんのレスに感謝いたします。

遊び方:カーソル左右で移動、リターンキーで回転
プレイ環境:おそらく IE 5.01 以上?

<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X
[i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>

...これは age て良かったですよね?
>212
下キー押すと右に行くのは仕様ですか?
ちなみに1行79文字がこのスレの標準ルールです。
215S ◆Q14CxNhI :02/04/27 01:30
>>213
残念ながらそうなります。縮めるだけで精一杯なもので・・・
カーソル左右とリターンキー以外のキーを押すと、トンでもないことになります。
>>212
おめでとう
綺麗にまとまったもんだねー、すごい。
これならageても文句はなかろう。
やっとテトリス終わりですか。嬉しい。
S、嫌われたね。自己厨の典型的な末路だな
>>218
はあ?うざいのは確かだったが、誰も嫌ってなどはいない
少なくともテトリスは賞賛に値する(紙かどうかは別として)
今後は正しく sage てね、で終わりでいいじゃないか
本人も反省しているよう出し
>>218、嫌われたね。自己厨の典型的な末路だな
>>S
感動すますた
荒れるのはやだねぇ。新しい作品期待。

ここで自分で「これみろや!」って出せないのが鬱
テトリスは俺の中で神。というわけで解説キボンヌ
簡単な障害物よけゲームをJAVAアプレットで作ってみました。
 
import java.awt.*;public class H extends java.applet.Applet{int p,c,m,b,t=300,
s[]=new int[18];{new Thread(){public void run(){for(;s[p+15]<1&b<1;){repaint()
;try{sleep(t--);}catch(Exception e){}for(c=17;c>=0;c--)s[c]=c>2?s[c-3]:m>2?0:m
==c?0:1;m=m>2?(int)(Math.random()*3):3;}}}.start();}public void paint(Graphics
g){for(c=0;c<18;c++)g.drawString(s[c]>0?"■":c==p+15?"△":"□",c%3*10,c/3*10);
}public boolean keyDown(Event e,int k){if(k==1006&p>0)p--;if(k==1007&p<2)p++;b
=s[p+15];repaint();return 1>0;}}
 
アプレットなので、以下のHTMLを使ってください。

<HTML>
<BODY>
<CENTER>
<APPLET code="H.class" width="30" height="50"></APPLET>
</CENTER>
</BODY>
</HTML>
 
矢印キーで左右に移動します、だんだんスピードが上がっていきます。
>>223
テトリスの解説は >>117 にすでにあります
226223:02/04/28 01:32
>225 それは知っていたんだけど、完成型は随分違うから全然わかんない
もしかして俺はバカ? 無限にウィンドウを開くJS作ってOSごとしんできます
        http://game.2ch.net/test/read.cgi/gamedev/1005038280/
        「ソースを上げるスレッド」 @ゲ制技板
114前後しか今のところ言ってないみたいだし、
あまり変化がないならここに張ったらどうよ?
228デフォルトの名無しさん:02/04/28 13:43
7文字プログラミングは?
#includ

cは早くも脱落
230デフォルトの名無しさん:02/04/28 13:51
void mai
main(){
10 CLS
1CLS:FOR
N88BASICで、リストと実行結果が全く同じプログラム
10 list

ネタはこの程度にしておこう。
誰か作品出してくれっ
トリッキーの1降臨キボン
236VB厨:02/04/29 22:52
Sub Main
237デフォルトの名無しさん:02/04/29 22:52
旧スレが上がってるのでage
del %0
バッチはダメ?
239ロボ鉄 ◆MGTy6iYI :02/04/30 21:27
おぉ、僕の冗談で作った2行カウンタが晒されてる・・・
ただのカウンタをちょっと縮めただけなのに。
恥ずかしいからsage。
誰も見ないでくれ
正直、7行で作ってくれ
241ロボ鉄 ◆MGTy6iYI :02/04/30 22:17
カウンタに七行も無いでしょうが
じゃ、スレ違い
>>239
逝け
ついにロボ鉄が来たか…
このスレももう終わりだな。

良スレから駄スレへ

悲しいけど

     ∧∧  ミ _ ドスッ
     (   ,,)┌─┴┴─┐
    /'   つ 糸冬 了 │
  〜′ /´ └─┬┬─┘
   ∪ ∪      ││ _ε3
               ゛゛'゛'゛
245デフォルトの名無しさん:02/05/01 20:39
ネタ募集

246               :02/05/01 21:06
    遺伝子的循環



前スレが激良スレだったからこそなんだろうか…
ネタを与えれば活発に動き出すと思われます
テトリス見てる限りそれも怪しいぞ…
そういえば、cって戻り値だけじゃなくて、引数がintの時に

func(a, b)
{ return a + b; }

こうやって省略できるんだね。
これも多少は縮めるのに役立つんじゃないかな。
前スレのSHA-1縮めていて思いついたけど、
やっぱり11行より短くなりそうもなかったので破棄したけど。
>>250
みんな普通にやってるみたいだけど?オセロ参照
>>252
引数まで省略してるのは見つからないけど。
記事番号キボンヌ
>>253
引数省略はC++で許されたっけ?
gccではエラー出てたような?うろ覚えスマソ
縮めるためならK&R
256デフォルトの名無しさん:02/05/06 13:15
誰かが「すでに動いてるソースコードで」ネタを提供しなきゃ駄目なんだよ
テトリスやオセロもそうだったけど、比較的上級者?が最初にネタを提供しても、
始めから縮めテクが使われているし、そのまま自分で解決してしまうからねぇ・・・
# それはそれで、見ていて楽しかったけれど。
あまり縮めるのが得意でない人が、10数行でネタを投稿するのが良いかも。
# スネークとかライフゲームとか
>>257
初心者の出すネタは上級者には面白くないという罠。
上級者が考えると、ホントに出来るかどうか微妙だから面白い。
テトリスはそういう意味では、ネタとしては、ナイスだったね。
色当てゲームはどうかな。
P2Pチャットシステムとかどうよ?
7行でメールソフト作ってください。
コマンドラインから
 *** <smtpサーバ> <port> <送信先アドレス> <subject> <内容> <添付ファイル>
みたいな感じで送れるやつ。
添付ファイルは無理だろ
Base64 encodingだけで2~3行食いそう
2 rem 言語:Basic
4 rem 使用方法:使えません(w
10  print "ここは七行でプログラムを作る・鑑賞するスレです。"
20  print "マターリが原則です。"
30  print "ネタ提供時/七行達成時いがいはsage推奨"
40  print:print "ソースUP時は、必ず"
50  pirnt "言語"
60  print "使用方法"
70  print "何を作ったのか"
80  print"などを書きましょう。"
90   goto 20
>>258
テトリスは絶対不可能だと思ってたからね。驚いたよ
オセロやテトリス、倉庫番など、
元があるゲーム類ってのはネタとして興味が大きそうだね
ファイラーなんてどうでしょ?
削除とかしか出来ない超低機能な奴。
>>265
昔 MSX で作ったことがあるよ。BASIC 15行くらいで、名前変更と削除のみができるの。
超低機能ならば、できるでしょうね。
あとは、7行でどれだけの機能を詰め込めるか・・・
ゴールが見えない時点で曖昧だなぁ
じゃぁ,コラムスとか。
お絵かきロジック、できるかもだ。
箱入り娘はどうよ?

  0.1.2.3
  -----
a| BAAC  G,1-e って入力すると、Gが(1,e)に移動。
b| BAAC  で、Aを (1,d)-(2,e) に持ってこれればクリア。
c| DF.FE  でもこれだとわかりづらいから、別の表示方法キボンヌ。
d| DGHE  (記号とかもありかも)
e| .I   .J  たしか、最短の手が81手だったかな。
271デフォルトの名無しさん:02/05/08 01:10
キタ━━━( ゚∀゚ )━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━( ゚∀゚ )━━━!!!!
272age:02/05/11 17:10
273デフォルトの名無しさん:02/05/11 23:23
メーラー 11行。

#include <stdio.h>
#include <winsock.h>
#define k send(s,t,l,0);Sleep(999);while(z=recv(s,t,99,0)){t[z]=0;printf("%s",t);}
#define sp sprintf
main(int c,char **a){SOCKADDR_IN d;WSADATA w;char t[99],z,l;SOCKET s;
WSAStartup(MAKEWORD(2,2),&w);s=socket(AF_INET,SOCK_STREAM,0);if(c!=2)return;
d.sin_family=AF_INET;d.sin_port=htons(25);d.sin_addr.s_addr=inet_addr(a[1]);
if(!connect(s,(PSOCKADDR)&d,sizeof(d)))
{l=sp(t,"HELO %s\r\n",a[2]);k;l=sp(t,"MAIL FROM:%s\r\n",a[3]);k;
l=sp(t,"RCPT TO:%s\r\n",a[4]);k;l=sp(t,"DATA\r\n",a[4]);k;
l=sp(t,"Subject: %s\r\n",a[5]);k;l=sp(t,"%s\r\n",a[6]);k;
l=sp(t,"\r\n.\r\n");k;l=sp(t,"QUIT");k;}closesocket(s);}
274261:02/05/11 23:26
>>273
まだやってみてないけど、ありがとう!
#include <stdio.h>
#include <winsock.h>
#define k send(s,t,l,0);Sleep(999);while(z=recv(s,t,99,0)){t[z]=0;printf("%s",t);}
#define sp sprintf
main(int c,char **a){SOCKADDR_IN d;WSADATA w;char t[99],z,l;SOCKET s;WSAStartup(
0x0202,&w);s=socket(2,1,0);if(c!=2)return;d.sin_family=2;d.sin_port=htons(25);d.
sin_addr.s_addr=inet_addr(a[1]);if(!connect(s,(PSOCKADDR)&d,sizeof(d))){l=sp(t,
"HELO %s\r\n",a[2]);k;l=sp(t,"MAIL FROM:%s\r\n",a[3]);k;l=sp(t,"RCPT TO:%s\r\n",
a[4]);k;l=sp(t,"DATA\r\n",a[4]);k;l=sp(t,"Subject: %s\r\n",a[5]);k;l=sp(t,"%s\r\
\n",a[6]);k;l=sp(t,"\r\n.\r\n");k;l=sp(t,"QUIT");k;}closesocket(s);}

俺にはコレが限界。
>>274
動かなかったらごめん。
プロバイダのメール鯖の認証の関係で、
動作確認できなくて・・・
>>273 >>275
つーか、実行できんやろ。
if(c!=2)return; ってなんや?
278273:02/05/12 00:34
あー HTTPクライアントを適当に変えただけだからね。

基になるソースコードが無いと
誰も手をつけてくれなさそうだったからさ・・・
俺、ネットプログラム初心者です。ごめん。
279273:02/05/12 00:42
#include <stdio.h>
#include <winsock.h>
#define k printf("%d,%s\n",l,t);send(s,t,l,0);Sleep(999);z=recv(s,t,99,0);t[z]=0;printf("%s",t);
#define sp sprintf
main(int c,char **a){SOCKADDR_IN d;WSADATA w;char t[99],z,l;SOCKET s;WSAStartup(
0x0202,&w);s=socket(2,1,0);d.sin_family=2;d.sin_port=htons(25);d.
sin_addr.s_addr=inet_addr(a[1]);if(!connect(s,(PSOCKADDR)&d,sizeof(d))){l=sp(t,
"HELO %s\r\n",a[2]);k;l=sp(t,"MAIL FROM:%s\r\n",a[3]);k;l=sp(t,"RCPT TO:%s\r\n",
a[4]);k;l=sp(t,"DATA\r\n",a[4]);k;l=sp(t,"Subject: %s\r\n",a[5]);send(s,t,l,0);
l=sp(t,"%s\r\n",a[6]);send(s,t,l,0);;l=sp(t,"\r\n.\r\n");send(s,t,l,0);;l=sp(t,"QUIT");k;}closesocket(s);}

一応送信できるはず。
ウザくてごめんね
>>279
おー、送信できました。実験する場合はローカルにサーバを立てるのがよろしいかと。
ただプログラムの無駄は多そうですので、十分7行になるのでは?
縮めてみますた

#include <stdio.h>
#include <winsock.h>
SOCKET s;char t[99],z,l,f,*b;k(char*b,char*x){l=sprintf(t,b,x);printf("%s",t);
send(s,t,l,0);if(!f){Sleep(999);t[recv(s,t,99,0)]=0;puts(t);}}main(int c,char**
a){SOCKADDR_IN d;WSADATA w;WSAStartup(514,&w);s=socket(d.sin_family=2,1,0);d.
sin_port=htons(25);d.sin_addr.s_addr=inet_addr(a[1]);if(!connect(s,(PSOCKADDR)&
d,sizeof(d))){k("HELO %s\r\n",a[2]);k("MAIL FROM:%s\r\n",a[3]);k("RCPT TO:%s\r\
\n",a[4]);k("DATA\r\n",a[4]);k("Subject: %s\r\n",a[f=5]);k("%s\r\n",a[6]);k(
"\r\n.\r\n","");f=0;k("QUIT\n","");}closesocket(s);}
>>261
添付ファイルは難しいが(uuencode形式ならOK)、telnet コマンドを使えばいいのでは???
つーことは、Unix系なら perl かシェルスクリプトで、Windows なら BAT でもできる?
283281:02/05/12 02:45
winsock の使い方が良くわからないので、その辺がどうにもならぬ

#include <winsock.h>
typedef char C;puts(C*);sprintf(C*,C*,C*,C*);SOCKET s;C t[99],l,f;k(C*b,C*x){l=
sprintf(t,"%s%s\r\n",b,x);puts(t);send(s,t,l,0);if(!f)Sleep(999),t[recv(s,t,99,
0)]=0,puts(t);}main(int c,C**a){SOCKADDR_IN d;WSADATA w;WSAStartup(514,&w);s=
socket(d.sin_family=2,1,0);d.sin_port=6400;d.sin_addr.s_addr=inet_addr(a[1]);if
(!connect(s,(PSOCKADDR)&d,sizeof(d)))k("HELO ",a[2]),k("MAIL FROM:",a[3]),k("R\
CPT TO:",a[4]),k("DATA",""),k("Subject: ",a[f=5]),f=0,k(a[6],"\r\n.\r\nQUIT");
closesocket(s);}
>>279
腹が立って作ったプログラムなのに、ツッコマレても謙虚な姿。感心アゲ。
285tara:02/05/12 05:23
超簡易七行SMTPクライアントです。エラー処理ほとんど無翅です。
コンパイルすると警告が出ますが、無視してください。

#include <winsock.h>
main(int c,char **a){SOCKADDR_IN d;WSADATA w;char t[999];SOCKET s;WSAStartup(
514,&w);s=socket(d.sin_family=2,1,0);if(c!=7)return;d.sin_port=6400;d.sin_addr
. s_addr=inet_addr(a[1]);if(!connect(s,(PSOCKADDR)&d,sizeof(d))){int z;send(s,t
,sprintf(t,"HELO %s\r\nMAIL FROM: %s\r\nRCPT TO: %s\r\nDATA\r\nSubject: %s\r\n\
\r\n%s\r\n.\r\nQUIT\r\n",a[2],a[3],a[4],a[5],a[6]),0);while(z=recv(s,t,99,0))
{t[z]=0;printf("%s",t);}}closesocket(s);}

実行時には、以下の順序で引数を指定する必要があります。
・SMTPサーバーのIP(ドット区切りの数字で指定)
・発信元のホスト名
・発信者のメールアドレス
・受信者のメールアドレス
・Subject(題名)
・メール本文

ex)
program 127.0.0.1 7gyou.com [email protected] [email protected] subject data

多分これで動くはず、です。
なお、引数の区切り文字がスペースであるため、メール本文その他に
スペースを入れることができません。
286tara:02/05/12 05:35
しまった、訂正。
スペースは入れられます。
program 127.0.0.1 7gyou.com [email protected] [email protected] subject "This is test."
と、スペースを含む内容を「"」で囲んでやればOKです。
287273:02/05/12 14:53
>>281 とりあえず送信できることを目指したんで、無駄は勘弁
>>282 それじゃ面白くないじゃん
>>284 ありがとう
>>285 7行達成おめでとう

次はTelnetかFTPクライアント・・・
ネタさえあればこのスレもPatt 1.並なんだけどな
288261:02/05/12 15:00
ネタ提供だけでスマソ。感動しました。
採用してくれてありがとうございましたー!
289XXXXXXX:02/05/12 15:02
1> <html>
2> <head>
3> <title>7行プログラム</title>
4> </head>
5> <body bgcolor="black">ここに本文を書きます
6> </body>
7> </html>
CじゃFTPは不可能だーね
コネクションが2つ必要な時点でヤヴァイ
291デフォルトの名無しさん:02/05/12 18:49
>>290
FTP、Javaなら行けるかな
>>285
stdio.h をインクルードしないと printf,sprintf 使えなくないですか?
age
いい流れになってきたね
一番、画面内密度を上げられる言語ってなんでしょう?LISP系かな?
>>295
BASICじゃないの?大文字だし。
perlでしょ
lispはカッコがあるから
Ruby!!!
>>298
Ruby厨ってこうやって叫ぶだけで特に害がないから良いよね。
結構独自路線だからアイデンティティはしっかりしてるのか。
それに比べて多方面にコンプレックスのあるVB厨とかは痛いな・・・。
300!!!
301VB厨:02/05/13 00:28
>>299
スマン。
>>301
謝ってくれる人は心優しい人だね。
バカとは自分がバカと言うことに気が付いていないからバカなんだ。
>>301さんは賢人のようです。
>295
MSXべーしっくがいいと思う。スペースすら省略可能だし。
PRINTは ? で書けるし。(LIST取ったら伸張されちゃうけど)
>>303
N88でいいじゃん。?も同様だし。
305前775:02/05/13 16:34
あー、なんか、、スレ間違えたかと思った。
昔は文章よりプログラムの方が多いくらいのスレだったのに・・。
306前スレ853:02/05/13 18:23
Perl は全ての変数にプレフィクスが付く分、極まってくると
画面密度が上がる。

ex.
($n,$p,@e)=split/,/,<>;$_=<>;$j=(@m=map{split//}$_,<>)-($k=($c=length)-2)-2;@g=
('.')x@e;$t=0;sub w{(*z,$g)=@_;$m[$i=$z+($z%$c?-1:$k,$z>=$j?-$j:$c,$z<$k?$j:-$c
,$z%$c==$k?-$k:1)[--$g]]eq'#'||$l&&grep$i==$_,@e or$z=$i}sub u{@m[@e,$p]=@_}sub
r{1+int rand 4}while($m[$p]ne'*'or$t+=$n){u(('m')x(@g=@m[@e]),($d=grep$p==$_,@e
)?'D':'C');$r=grep/[*.]/,@m,@g;print@m,"R:$r T:$t >";$r&&($t||!$d)?u@g,' ':exit
;$l=0;w*p,<>%5||next;for(@e){if(($w=$e=pop@e)-$p){w*w,$w%$c-$p%$c?int$w/$c-$p/
$c?r:$w<$p?4:1:$w<$p?2:3;w*w,r while++$l%9&&$w==$e}@e=($w,@e)}$t--if$t}
>>306
思わずishにかけたくなるねw
>>307
ホントだ。なんかのエンコードかけてあるみたい。
このままメモ帳に書いて拡張子を.comにしたら動きそうだ
2行目文頭 ('.')
3行目 [--$g]
4行目 ('m')

Perlを知らない俺から見ると、この辺はもはや顔文字だな。
ネット対戦オセロ作ってください。
よろしく。
311tara:02/05/14 04:23
超簡易七行SNTPクライアントです。(SMTPではない)
エラーチェック皆無です。引数の数すらチェックしてません。
コンパイルすると警告が出ますが、無視してやってください。

#include <winsock.h>
#include <time.h>
int N[12];int z;u_int n;struct tm*T;SOCKADDR_IN d={2,31488},u={2,4,0};main(int
c,char **a){WSADATA w;SOCKET s;SOCKADDR*q=(SOCKADDR*)&u;WSAStartup(514,&w);s=
socket(2,2,0);bind(s,q,16);d.sin_addr.s_addr=inet_addr(a[1]);*N=11;z=48;sendto
(s,&N,z,0,(PSOCKADDR)&d,16);recvfrom(s,&N,z,0,(PSOCKADDR)&d,&z);n=ntohl(N[10])
-2208988800;printf("%s",ctime(&n));closesocket(s);}

前回に引き続きstdio.hをincludeできませんでした……残念。
実行時には、SNTPサーバーのIP(ドット区切りの数字で指定)を引数として
指定する必要があります。

ex)
program 127.0.0.1

多分これで動くはず、です。
312tara:02/05/14 04:36
……言ってるそばから縮みました。

#include <winsock.h>
#include <stdio.h>
#include <time.h>
int N[12];int z;u_int n;struct tm*T;SOCKADDR_IN d={2,31488},u={2,4};main(int c,
char **a){WSADATA w;SOCKET s;SOCKADDR*q=&u;WSAStartup(514,&w);s=socket(2,2,0);
bind(s,q,16);d.sin_addr.s_addr=inet_addr(a[1]);*N=11;z=48;sendto(s,&N,z,0,&d,
16);recvfrom(s,&N,z,0,&d,&z);n=ntohl(N[10])-2208988800;printf("%s",ctime(&n));}

VC++ .NETで動作検証しました。
これでも動くのか……。
313前スレ853:02/05/15 01:23
久々に読み返したらまだ縮むじゃんよ…。ついでに画面密度も
上げる方向で修正。
http://boobar.hoops.ne.jp/pacmaso.tar.gz

($n,$p,@e)=<>=~/\d+/g;$j=(@m=map/./gs,($_=<>),<>)-($k=($c=length)-2)-2;$t=0;sub
u{@m[@e,$p]=@_}@g=(".")x@e;sub w{(*z,$g)=@_;$m[$i=$z+($z%$c?-1:$k,$z>=$j?-$j:$c
,$z<$k?$j:-$c,$z%$c==$k?-$k:1)[--$g]]eq"#"||$l&&grep$i==$_,@e or$z=$i}while($m[
$p]ne"*"or$t+=$n){u(("m")x(@g=@m[@e]),($d=grep$p==$_,@e)?"D":"C");$r=grep/[*.]/
,@m,@g;print@m,"R:$r T:$t >";$r&&($t||!$d)?u@g," ":exit;$l=0;w*p,<>%5||next;sub
r{1+int rand 4}for(@e){if(($w=$e=pop@e)-$p){w*w,$w%$c-$p%$c?int$w/$c-$p/$c?r:$w
<$p?4:1:$w<$p?2:3;w*w,r while++$l%9&&$w==$e}@e=($w,@e)}$t&&$t--}

延々バグ取りしてるから大分枯れてる筈。
314前スレ843:02/05/16 03:06
>>313
そろそろしつこいと思いますた。
315デフォルトの名無しさん:02/05/16 11:58
悲しいことを言うなぁ
またーり行こうよ
317前スレ853:02/05/16 18:54
いや、自分でもしつこいと思った。(w

sub h{sprintf"\\x%X",($i+=$_)}$c=join q/\xA1-\xFE]/,(q/\G((?:[\x00-\x7F]|[\x8E/
,"[","|\\x8F[","[",")*?)");$i=160;for((2)x5,1,(2)x11,3,(2)x3,(1)x5,(3)x5,(1)x4,
(2)x3,(1)x5,2,3,1,-48,32,2,2){$s.=h;$S{$j}=chr$i;$j=$i}$i=170;for((2)x12,3,2,2,
7,(3)x4){$d.=h;$D{$i}=chr($i-1)."\xA1\xAB"}$i=206;for((3)x5){$d.=h;$D{$i}=chr(
$i-2)."\xA1\xAC"}sub u{unpack"C",$3}eval join q/\xA1/,(q/s!$c([\xA4\xA5])([/.$d
.q|])!"$1$2".$D{&u}!eg;s/$c|,'\\xAC/$1','\\xDF/g;s/$c','\\xAB/$1','\\xAC/g;
s/$c','\\xA9/$1',q{\xAB/g;s/$c[\xA4\xA5]\xE7/$1},q{\xA9/g;s!$c([\xA4\xA5])([}.
$s.q|])!"$1$2".$S{&u}!eg;s/$c|,q{\xBC/$1\xA4\xA2/g;print})while<>

日本語→ひんたぼ語フィルタ。
Usage: perl hintabo text.euc > text.hintabo

変換テーブルの生成部分がもっと縮めば七行いけるかも。
七行いけてもネタ的にイマイチかも。(w
折れ的にはしつこくない。
つーか勉強になるのでどんどん短くしてぽ。

できたらどこかにコメント付でうぷしてほしいなぁ。
誰かが7行スレ専用ソース公開ページを作ってくれるといいのになぁ。
そうすると、ここのスレでは「また短くなったので見てね」と書いておいて、
公開ページの方で、短いソース(とコメントつきソース)を見て貰う事が出来るのに。

でもそうすると、新しい人が入りづらいか。某メガデモスレみたいな感じで。
それなりに動くソフトウェアだし、著作権的に面倒だってんで皆気が進まないんじゃ。
321前スレ853:02/05/17 19:00
Wiki みたく、各作者が好きな時に更新できるフレームワークを
準備しないと不便だし、そこまでする気になる人がいないだけかと。

自分のだけなら適当なアカ取って普通にメンテすりゃ済むから
楽だけど。つか俺はそうしてる。 http://boobar.hoops.ne.jp/

sub u{"$1$2".$D{unpack"C",$3}}sub h{*t=pop;$t.=sprintf"\\x%X",$i+=$_;chr($i-pop
).pop}$c=join q/\xA1-\xFE]/,qw!\G((?:[\x00-\x7F]|[\x8E [ |\\x8F[ [ )*?)!;$z=$c.
q/([\xA4\xA5])/;$i=160;map{$D{$j}=h*s;$j=$i}(2)x5,1,(2)x11,3,(2)x3,(1)x5,(3)x5,
(1)x4,(2)x3,(1)x5,2,3,1,-48,32,2,2;$i=170;$D{$i}=h"\xA1\xAB",1,*d for(2)x12,3,2
,2,7,(3)x4;$i=206;$D{$i}=h"\xA1\xAC",2,*d for(3)x5;eval join'\\xA1','s!$z(['.$d
.'])!u!eg;s/$c',qw!\xAC/$1 \xDF/g;s/$c \xAB/$1 \xAC/g;s/$c \xA9/$1!,q{\xAB/g;
s/$z\xE7/$1},q{\xA9/g;s!$z([}.$s.'])!u!eg;s/$c',q{\xBC/$1\xA4\xA2/g;print}for<>

あっさり七行達成してもた。でも数字やアルファベットを変換してない
から、フィルタとしては不完全。萎え。
いちいち「更新」とかこのスレに描くくらいなら
最初からここにうぷしたほうがいいと思うけど?

どうせ7行程度なんだしさっさとスクロールすれば いいんじゃないの?
ちょっとだけしか縮めていないときとか、
説明のために長いプログラムをうぷするときとか、
そういったスレは欲しいかもね。

こっちに載せるときは、ネタ提供か、完成か、バグ取りか、大幅改変か・・・
324前スレ843:02/05/18 08:57
>>前スレ853
ネタ提供。
??行→7行へのunindent。
ひんたぼ語って何だか知らないけどすげー
ここは神が集まるスレだな
326名無しさん@Vim%Chalice:02/05/18 11:26
327前スレ853:02/05/19 18:37
>>324
とりあえずたたき台を作ってみたよ。まだまだ機能的に不完全だけど。
http://boobar.hoops.ne.jp/rms.tar.gz

$_=join" ",grep{s/^\s*(?:#.*)?|\s+$//g;s/\s+/ /g;length}<>;%k=qw|( ) < > [ ] {
}|;1 while s=\G(.*?)((?:(?:(?<![\$\%\&\*\@])(?:(?:m|q[qrwx]?)(?:([(<[{]).*?${k{
$3}}|([^\w\s(<[{]).*?\4)|(?:s|tr|y)(?:([(<[{]).*?$k{$5}\s*\5.*?${k{$5}}|(
[^\w\s(<[{]).*?\6.*?\6))|(?<![\w])/(?:\\/|[^/])*/)[a-z]*)|"(?:\\"|[^"])*"|'(?:
\\'|[^'])*')=push@c,$1,$2;''=egx;$q=1 if$c[0]=~m!^(?:["'/]|(?:[ms]|q[qrwx]?|tr)
[^\w\s])!x;($_,@c)=map{++$q%2?split:$_}grep/\S+/,@c,$_;sub j{$_.=$_[0].shift@c}
sub l(){length$_.$c[0]}sub p{print"$_\n";$_=shift@c}sub w(){/\w$/&&$c[0]=~/^\w/
}79<=l?79<l?p:w?p:j&&p:w?j" ":j while@c;p;

さぁ、縮めようか。(w
保守保守
329前スレ843 :02/05/20 08:38
>>327
僕には無理です。
がんばって縮めてください。
応援してます(w
330775:02/05/20 19:38
#include <stdio.h>/*7行になるかチェッカーーー*/
main(int c,char**v){FILE *f = fopen(v[1],"r");int i=0;if(c<1)return;for(;fgetc
(f)!=-1;i++);if(i<80*7)printf("イイ!: %d文字(%d行?)\n",i,i/80);else printf(
"糸冬 了 :%d文字(%d行?)\n",i,i/80);}

正直すまん・・・。
AVIファイル生成は構造わからんで脱落。
331ネタ出:02/05/20 20:21
格闘ゲーム(パンチとかが出てHPが減りさえすればイイ) きぼんぬ!

モナーのダンレボ きぼんぬ!

15パズル きぼんぬ!

もぐらたたき きぼんぬ!

Hello world きぼんぬ!

えっと・・・えっと・・・・(ワラ
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
main(int a, char **v){struct sockaddr_in h;int s;char c[1024];
bzero(&h,sizeof(h));h.sin_family=AF_INET;h.sin_port=htons(21);inet_aton(v[1],&h.sin_addr);
s=socket(AF_INET,SOCK_STREAM,0);connect(s,(struct sockaddr *)&h,sizeof(h));
read(s,c,1024);write(s,v[2],strlen(v[2]));write(s,"\r\n",2);read(s,c,1024);
write(s,v[3],strlen(v[3]));write(s,"\r\n",2);read(s,c,1024);while(1){
printf("$: ");fgets(c,1024,stdin);write(s,c,strlen(c));write(s,"\r\n",2);
read(s,c,1024);printf("%s", c);}close(s);}

7行じゃないけど。ftpもどき
./a.out 127.0.0.1 "USER user" "PASS password"
$:の後にコマンドです。
>332
うーん……、手元にPC-UNIX系の環境が無いから、検証できないまま口出して
申し訳ないけれど、これだとファイルのやり取りはできないんじゃ?
FTPサーバー接続してコマンド打つのが限界のような……。
334332:02/05/21 21:23
>333
telnetでport21につないでるようなカンジだから、
たいした事は出来ない&バッファもクリアしてないからゴミが残ると。。。
全然使えないね(藁
335前スレ843 :02/05/22 09:28
>>331
Perlには無理だな。
やろうと思えばできるけど。(漏れには無理)
意味もなく上げまくるなよ、自己主張激しすぎて見苦しい
>>319
縮む過程で加えられたテクも見たい
CVSサーバ付けてくれれば文句無いけど
sourceforge.jpで7行プロジェクトとか・・・ダメかなぁ。
7-liner
340前スレ843 :02/05/24 10:46
>>336
スマソ。
前スレの猛者が戻ってこない限り、このスレが良スレになることはないな
トリッキーの1氏や前スレ60氏の降臨きぼーーーんぬ。
*nix厨氏とか、S氏とかも来てほしー。
Sタン、JavaScriptでぷよぷよ作ってー。
7行、7行、7行、7行、7行、ハァハァ
7行、7行、7行、7行、7行、ゼェゼェ。

みんな来てよー(w
344猛者募集:02/05/26 11:07
agge
>>343
無理っぽいな。消滅判定と落下だけでかなり食うと思う。
連鎖中は同時に複数色消えることもあるし・・・

なんつって無理無理いっててもしょうがないんで
叩き台を作ってみよっかな
>>345
S氏ですか?
>346
いや、通りすがりのものです。
昔X68で作ったもんで
348デフォルトの名無しさん:02/06/01 04:15
mange
349デフォルトの名無しさん:02/06/01 12:05
たたき台が重要だ
350デフォルトの名無しさん:02/06/07 15:35
ttp://wildmag.de/compo/Mados-Divo/divo.html
ねたをくれなんていってる時点で間違ってたんだ…
>>350
感動した
ソースを見て更に感動した
イカス
>>350
!!!
マジかよおい!
感動した…マジ感動した!
354デフォルトの名無しさん:02/06/07 22:00
>>350
スゲー!!
なるほどソース見て感動!!
355デフォルトの名無しさん:02/06/07 22:52
>>350
これは凄い!
356デフォルトの名無しさん:02/06/07 23:01
>>350
な、なぬ・・・・
>>350 見た目は驚かなかったけど、ソースの簡潔さに驚いた。
俺はできないけど、がんばってください
ってのがうざい
サーバ側七行、クライアント側七行で、ネット対戦できるオセロつくってください。
サーバ:

#include "osero-server.h"
#include <stdlib.h>
int main()
{
do_osero_server();
return EXIT_SUCSESS;
}

クライアント:
#include "osero-cliant.h"
#include <stdlib.h>
int main()
{
do_osero_cliant();
return EXIT_SUCSESS;
}

>>360
言ってはならないことかもしれないけど
あなたはここにくる前にしなければならないことがあるような気がします
>>350
スクロールバーが動いたので部落らかと思った。
スゲー。感動すた。
<script>s=Math.sin;z=0;function a(){for(i=0;i<50;){z?0:document.write('<b id=x'
+i+' style=position:absolute><big>O</big><sub>'+i+'</sub></b>');
w=i*s(z);o=eval('x'+i).style;o.top=s(w)*i*4+230;o.left=s(w+2)*i++*4+230}
z+=.015;setTimeout('a()',50)}a()</script>

>>350 名前: デフォルトの名無しさん 投稿日:02/06/07 (金) 15:35
> ttp://wildmag.de/compo/Mados-Divo/divo.html
> ねたをくれなんていってる時点で間違ってたんだ…
より。(改行をマジで適当に追加)。

すげーな。
前ここにprintfってあったっけ?
あと一行が縮まらない8行迷路。HSP。
一番右下がゴール。

dim g,4,2:g=-1,0,1,0,0,-1,0,1:dim m,49,49:randomize:repeat 49:t=cnt:repeat 49
s=cnt:if ((s\2)+(t\2))=2{m.s.t=1:rnd r,4:a=s+g.r.0:b=t+g.r.1:m.a.b=1}loop:loop
gsel 0,-1:screen 2,10,10,8:repeat:repeat 10:b=cnt:repeat 10:a=cnt:d=a+v:e=b+w
palcolor 1-m.d.e*7:pset a,b:loop:loop:d=(k&4!0)-(k&1!0)+x:palcolor 39:stick k,15
e=(k&8!0)-(k&2!0)+y:r=(d<0)|(d>48):d=1-r*d+(r*x):r=(e<0)|(e>48):e=1-r*e+(r*y)
r=m.d.e:d=1-r*d+(r*x):v=1-(d>43)*(1-(d<5)*(d-4))+((d>43)*39):x=d:r=m.d.e:c++
e=1-r*e+(r*y):w=1-(e>43)*(1-(e<5)*(e-4))+((e>43)*39):y=e:if (x=48)&(y=48):break
pset x-v,y-w:redraw:title ""+c:wait 5:loop:dialog "cleared:"+c
367デフォルトの名無しさん:02/06/14 19:40
キタ━━━━(・∀・)━━━━━━!!!!!!!
368366:02/06/14 20:04
ここの人はレベルが高くてHSPを知らない罠か・・・(´д`;
>368
いや、縮める隙を探してるさいちゅう。
HSPだって立派じゃないけど言語だしね
370366:02/06/14 21:35
>>369
ありがたや。なるべくif文使わないようにしたから、回りくどいことやってます。(´ー`
もっといい迷路アルゴリズムが使いたいんだけど、長くなる・・・
371デフォルトの名無しさん:02/06/14 23:05
>>350
(゚д゚)すげー
>>367だけど
>>366,>>368ゴメソ、HSPだったのね、よく考えずにレスしてた(w

勉強中の折れは「レベルが低くてHSPを知らない」のであった。
ダウソしてみよかな?
373moge:02/06/15 00:12
もっと繁栄を願ってage
374デフォルトの名無しさん:02/06/15 14:38
7行以内でbase64エンコード/デコードプログラム作ってくれ
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
ExitWindowsEx(EWX_SHUTDOWN,0);return 0;}

まぁ激しくガイシュツだろうな・・・。
ネットワークゲーム用の汎用サーバとかは7行じゃ大変?
Javaでキボンヌ。
>>376
そもそも汎用サーバなどという発想自体が厨
仕様を定義してみせい
アクセスしてきたクライアントのソケットを保持。
どのクライアントから言われたことも、すべてのクライアントに返す。
という意味でした。
>>378
絶対どこかでデータの動機ミスが怒りそうな予感。
>>378
それはむしろチャットサーバだね。そのくらいならできそうかな。
本気でネットゲの鯖やるならオブジェクトの同期も考えるから難しい。
381デフォルトの名無しさん:02/06/21 22:16
たまには、あげにゃ
382デフォルトの名無しさん:02/06/22 00:08
HSP製があったので、私もHSPでチャレンジ。
行数削るのだるいんでそのまんま。
一応砂嵐。改行なくせば一行いくかな?

boxf 0,400,640,0
repeat
redraw 0
repeat 60
y=cnt*8
repeat 80
x=cnt*8
pos x,y
rnd rx,640
rnd ry,480
gcopy 0,rx,ry,8,8
loop
loop
redraw 1
await 1
loop

処理的にはパレットモードにして、
パレットを白黒にランダムで変更てのが楽なんだけどね。
つーか、そっちも作ってみるかな。
383デフォルトの名無しさん:02/06/22 00:13
>>382
7行にまとめよ
384382:02/06/22 00:37
>>383
スマソ、そういうわけでまとめてみたら2行になった。

boxf 0,0,640,400:repeat:redraw 0:repeat 60:y=cnt*8:repeat 80:x=cnt*8:pos x,y
rnd rx,640:rnd ry,480:gcopy 0,rx,ry,8,8:loop:loop:redraw 1:await 1:loop

砂嵐の濃度調整はboxf 0,0,640,400の部分で、画面を何割黒で塗りつぶすかで決まるから。
お題:BlockSorting
>>385
#include <stdlib.h>
typedef unsigned char b;e(b*s,b*d,int c){unsigned*o,i=0,r;o=calloc(65536,4);c--
;for(i;i<c;i++)o[s[i]<<8|s[i+1]]++;o[s[c]<<8|*s]++;for(i=1;i<65536;i++)o[i]+=o[
i-1];d[--o[s[c]<<8|*s]]=s[i=c-1];for(;i;i--)d[--o[s[i]<<8|s[i+1]]]=s[i-1];r=--o
[*s<<8|s[1]];d[r]=s[c];free(o);return r;}

一応、限定ソートなり。
こっちは復元

#include <stdlib.h>
typedef unsigned char B;void d(B*s,B*d,int c,unsigned x){unsigned*o,i,a=0,t[256
];memset(t,0,1024);for(i=--c;i;i--)t[s[i]]++;o=calloc(65536,4);for(;i<256;i++){
memset(d+a,i,t[i]);a+=t[i];}for(i=0;i<=c;i++)o[(s[i]<<8)+d[i]]++;for(i=1;i<
65536;i++)o[i]+=o[i-1];*d=d[x];d[c]=s[x];d[c-1]=s[--o[(d[c]<<8)+*d]];for(i=c;i>
2;i--)d[i-2]=s[--o[d[i-1]<<8|d[i]]];free(o);}
388385:02/06/22 01:58
>386-387
(゚д゚)ハヤー

で、自分でも作ってみた。動作未確認・ブロックサイズ256に固定。
#include <stdlib.h>
enum{S=256};typedef unsigned char UC;int cmp(void*a,void*b){return memcmp(a,b,S
);}UC*bs(UC*s,UC*d){UC*p,**t,i;p=malloc(S*2);t=malloc(S);for(i=0;i<S;i++)p[i]=p
[i+S]=s[i],t[i]=p+i;qsort(t,S,S,cmp);for(i=0;i<size;i++)if(p== t[i])break;*d++=
i;for(i=0;i<S;i++)d[i]=t[i][S-1];free(p);free(t);return --d;}
389385:02/06/22 02:50
ぅぁー、>388バグりまくりだ。
出なおしてきます。
390デフォルトの名無しさん:02/06/24 00:47
ageじゃ!
インチキだけど(includeとか含めなければ)7行
アナログ時計

#define NO_STRICT
#include <windows.h>
typedef void*v;typedef int i;typedef float f;f q=50,r=100;f R(f n){return(90.0\
-n)/57.3;}void L(v h,f r){MoveToEx(h,q,q,0);LineTo(h,q+q*cos(r),q-q*sin(r));}i\
WINAPI WinMain(v,v,char*,i){v h=CreateWindow("EDIT","n",(1<<28),0,0,1<<31,1<<\
31,0,0,0,0);HideCaret(h);SetTimer(h,1,r,0);MSG m;while(GetMessage(&m,0,0,0)!=0\
){if(m.message==275){v d=GetDC(h);Rectangle(d,0,0,r,r);SYSTEMTIME s;GetLocalTi\
me(&s);L(d,R(s.wSecond*6));L(d,R(s.wMinute*6));L(d,R(s.wHour*30));ReleaseDC(h,\
d);}if(m.message==513){break;}DispatchMessage(&m);}KillTimer(h,1);}
漏れの環境(VS6SP5)だと、
math.hをインクルードしないとエラーになったので、
一行減って、一行増えたから、減ってない・・・。
鬱だ。

#define NO_STRICT
#include <windows.h>
#include <math.h>
typedef void*v;typedef float f;v d;f q=50;void L(f r){r=(15-r)/9.55;MoveToEx(d,
q,q,0);LineTo(d,q+q*cos(r),q-q*sin(r));}int WINAPI WinMain(v,v,char*,int){v h=\
CreateWindow("EDIT","n",1<<28,0,0,1<<31,1<<31,0,0,0,0);HideCaret(h);SetTimer(h,
1,100,0);MSG m;while(GetMessage(&m,0,0,0)&&m.message!=513){if(m.message==275){
d=GetDC(h);Rectangle(d,0,0,100,100);SYSTEMTIME s;GetLocalTime(&s);L(s.wSecond);
L(s.wMinute);L(s.wHour*5);ReleaseDC(h,d);}DispatchMessage(&m);}KillTimer(h,1);}

「 #include
  は数えないのはどうよ?」
って議論になったことがあった(はず)なのでキニスンナ!
394デフォルトの名無しさん:02/06/28 19:29
新たなお題キボーン
>>393
おいおい、ソリャだめだって話になったろ
396392:02/06/28 21:22
>>395
オーケイ、分かった

#include <windows.h>
#include <math.h>
HDC d;float q=50;L(float r){r=(15-r)/9.55;MoveToEx(d,q,q,0);LineTo(d,q+q*cos(r)
,q-q*sin(r));}WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,D\
efWindowProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);HWND h=CreateWindow("1",0,51\
3<<19,0,0,200,200,0,0,i,0);SetTimer(h,1,99,0);MSG m;d=GetDC(h);while(GetMessag\
e(&m,h,0,0)!=-1){if(m.message==275){Rectangle(d,0,0,100,100);SYSTEMTIME s;GetL\
ocalTime(&s);L(s.wSecond);L(s.wMinute);L(s.wHour*5);}DispatchMessage(&m);}}

先人の遺産(砂嵐)を参考にしてみた

でも、漏れには限界・・・
397392:02/06/28 22:55
前スレの537を参考に・・・

#include <windows.h>
typedef double b;b cos(b);b sin(b);HDC d;b q=30;L(b r){r=(15-r)/9.55;MoveToEx(d
,q,q,0);LineTo(d,q+q*cos(r),q-q*sin(r));}WINAPI WinMain(HINSTANCE i,HINSTANCE p
,LPSTR l,int q){MSG m;HWND h;SYSTEMTIME s;WNDCLASS w={67,DefWindowProc,0,0,i,0,
0,0,0,"1"};RegisterClass(&w);h=CreateWindow("1",0,513<<19,0,0,95,95,0,0,i,0);S\
etTimer(h,1,99,0);d=GetDC(h);while(GetMessage(&m,h,0,0)!=-1){if(m.message==275)
{Rectangle(d,0,0,60,60);GetLocalTime(&s);L(s.wSecond);L(s.wMinute);L(s.wHour*5)
;}DispatchMessage(&m);}}

あと、24字で七行達成かな?
一人でやってると鬱だからage

誰か、助けて
398392:02/06/28 22:56
書き忘れたけど、>>397からは.cppじゃなくて.cでよろしく
399tara:02/06/29 04:50
VC++ .NETであれば、これでも動くはずです。

#include <windows.h>
typedef double b;b cos(b),sin(b);HDC d;b q=30;L(b r){r=(15-r)/9.55;MoveToEx(d,q
,q,0);LineTo(d,q+q*cos(r),q-q*sin(r));}WinMain(i,p,l,q){MSG m;HWND h;SYSTEMTIME
s;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);h=
CreateWindow("1",0,513<<19,0,0,95,95,0,0,i,0);SetTimer(h,1,99,0);d=GetDC(h);
while(GetMessage(&m,h,0,0)!=-1){if(m.message==275){GetLocalTime(&s);Rectangle(
d,0,0,60,60);L(s.wSecond);L(s.wMinute);L(s.wHour*5);}DispatchMessage(&m);}}
>>395
いや、「打つ」とかかいてあったんで。
401392:02/06/29 16:48
>>399
お早う。本当だ、動いたヨ。
ずっと、VS6でやってたからなぁ。

何はともあれ、taraさんThx!
402392:02/06/29 18:07
#include <windows.h>
typedef double b;b sin(b),q=30;HDC d;HWND hL(b r){r=(15-r)/9.55;MoveToEx(d,q,q,
0);LineTo(d,q+q*sin(r+1.57),q-q*sin(r));}WINAPI WinMain(HINSTANCE i,HINSTANCE p
,LPSTR l,int q){MSG m;SYSTEMTIME s;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,
"1"};RegisterClass(&w);h=CreateWindow("1",0,513<<19,0,0,95,95,0,0,i,0);SetTimer
(h,1,99,0);d=GetDC(h);while(GetMessage(&m,h,0,0)!=-1){if(m.message==275){Recta\
ngle(d,0,0,60,60);GetLocalTime(&s);L(s.wSecond);L(s.wMinute);L(s.wHour*5);}Dis\
patchMessage(&m);}}

taraさんを見習って宣言をまとめた。
あと、cosを使わないように変えた。
これで、5文字減らした。
VS6でも七行達成するのを目標に!
403392:02/06/29 18:14
>>402
しまった。HWND hの後にセミコロンが抜けてる!
でも、4行目の余白で吸収されるかな。
404デフォルトの名無しさん:02/06/29 23:34
家にはVC++無いんで確認できないけど七行達成したよ。
誰か確認おながいします。

#include <windows.h>
float sinf(float),q=30;HDC d;HWND h;MSG m;L(float r){MoveToEx(d,q,q,0);r/=9.55;
LineTo(d,q+q*sinf(r),q-q*sinf(r+1.57));}WINAPI WinMain(HINSTANCE i,HINSTANCE p,
LPSTR l,int q){SYSTEMTIME s;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"1"};Re\
gisterClass(&w);Rectangle(d=GetDC(h=CreateWindow("1",0,513<<19,0,0,95,95,0,0,i,
0)),0,0,60,60);SetTimer(h,1,99,0);while(GetMessage(&m,h,0,0)>-1)m.message==275?
GetLocalTime(&s),L(s.wSecond),L(s.wMinute),L(s.wHour*5):0;DispatchMessage(&m);}
405せめて:02/06/29 23:37
>>404
なにをするプログラムなのか、書け
406392:02/06/29 23:41
#include <windows.h>
typedef double b;b sin(b),q=30;HDC d;HWND h;L(b r){r=(15-r)/9.55;MoveToEx(d,q,q
,0);LineTo(d,q+q*sin(r+1.57),q-q*sin(r));}WINAPI WinMain(HINSTANCE i,HINSTANCE
p,LPSTR l,int q){MSG m;WORD s[8];WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"1"
};RegisterClass(&w);h=CreateWindow("1",0,513<<19,0,0,95,95,0,0,i,0);SetTimer(h,
1,99,0);d=GetDC(h);while(GetMessage(&m,h,0,0)!=-1){if(m.message==275){Rectangle
(d,0,0,60,60);GetLocalTime((PSYSTEMTIME)s);L(s[6]);L(s[5]);L(s[4]*5);}Dispatch\
Message(&m);}}

SYSTEMTIME構造体をWORDの配列に変更
407404:02/06/29 23:53
>405
>>402のを縮めてみますた。
408392:02/06/29 23:53
>>404
ごめん、見てなかった

残念ながら、
error LNK2001: 外部シンボル "_sinf" は未解決です
fatal error LNK1120: 外部参照 1 が未解決です。

と言われたよ。
つーか>>399のやつ、VC6.0でも動くが何が問題?
410392:02/06/30 00:13
>>409
あ、VC.NETで動くのは見たけど、
VC6で動かないのは確かめなかった。
taraさん、>>404さん、ごめんなさい

#include <windows.h>
double sin(double),q=30;HDC d;L(double r){r/=9.55;MoveToEx(d,q,q,0);LineTo(d,q+
q*sin(r),q-q*sin(r+1.57));}HWND h;WinMain(i,p,l,q){MSG m;WORD s[8];WNDCLASS w={
67,DefWindowProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);h=CreateWindow("1",0,513\
<<19,0,0,95,95,0,0,i,0);SetTimer(h,1,99,0);d=GetDC(h);while(GetMessage(&m,h,0,0
)!=-1){m.message==275?Rectangle(d,0,0,60,60),GetLocalTime((PSYSTEMTIME)s),L(s[6]
),L(s[5]),L(s[4]*5):0;DispatchMessage(&m);}}

これで最後。
411392:02/06/30 00:27
>>409
教えてくれてありがとう。
おかげで助かった。
412tara:02/06/30 01:42
>409
お、VC++6.0でも動きましたか。
.NETの方しかインストールしてなかったもので、確認できなかったんです。
ありがとうございました。
413404:02/06/30 01:48
>>408
sinfってman引いてあったから使ったんだけどVCには無いのか。鬱氏。

>>410
7行達成おめでとう♪
414392:02/06/30 02:00
>>413
ありがとうございます
sinの計算と、三項演算子は参考にさせて頂きました。

ところで、次のお題って誰かありませんか?
415tara:02/06/30 02:15
>414
遅ればせながら、おめでとうございます。
で、次ですか……。
POP3のクライアントってありましたっけ。
416392:02/06/30 04:53
>>415
POP3クライアントは、
無かったと思いますよ。
SMTPは・・・、参加なさってたんですね(w

とりあえず、Webアプリの経験ないんで、
猫で修行しに逝ってきます
http://www.kumei.ne.jp/c_lang/sdk3/sdk_230.htm
pop3は意味無いだろ
メッセージ取ってきてもmimeとかでエンコーディングされてるし
418デフォルトの名無しさん:02/06/30 10:15
>>417
デコードすればいいじゃん。
できない?
nkf32.dllを使いなさい。
4194k demo:02/06/30 12:42
7行じゃないけど・・・これはすごいの?すごくないの?どぉなの?

4K+ポリゴン+音源+音楽
ftp://ftp.jp.scene.org/pub/scene/parties/2000/dialogos00/in4k/stoerfall_ost_final.zip
420おまえら!:02/06/30 12:44
includeしているのは何行あるんだ!
7行じゃなくてコンパイル後のサイズで勝敗つけろや!

>>420
>includeしているのは何行あるんだ!

その手があったか!w
422デフォルトの名無しさん:02/06/30 12:54
>>420
それでいいやろ(w
>>420
静的リンクする上に、標準のライブラリもサイズに含めるということかな?
でも、ライブラリなんて(サイズも含めて)システム依存だから、単純に比べられないよね

アセンブラだったら、ソースコードの方がサイズが大きいってことか…
>>420
Perl や JavaScript はどうすればいいんだ?
425おまえら! :02/06/30 16:57
PerlはともかくJavaはこんぱいるできるだろ。
Java(以下略)
>>425
Perl はコンパイルできますが、JavaScript は……
>>425
議論をするのは構わないけど、ageないで。
インタプリタは従来どおりでイイんじゃ?
430おまえら!part2:02/06/30 21:20
>>423
あほか?
ワシがいうてんのは、しらん人間の作ったソースを
組み込んでて、
「すごいねチミ!ハァハァ」
「おたくのやつのほうがスゴイッスよアニキィ!ハァハァ」
やってられん!
>>430
それって GPL ?
>>430
オブジェクトならいいのか ?
433おまえら!part2:02/06/30 22:28
俺はすごいぞ。
Cの標準関数なんぞ使ったこと無い。
人のライブラリなんぞ信用できるか!

main以外は全部自作だ。
mainを他人のプログラムから流用するのはスゴイ
4kデモはデモスレで語ってくれ。
>>433
Windowsのプログラムをどう書いてるのか、興味が・・・
>>433
もちろん Java でもそれを実行なさっている、と
まぁ、漏れもJavaでCの標準関数は使わないな
で、この議論は7行スレとどんな関係があるのですか?
>>438
使っている漏れは、どうすればいいのでしょう
保守
442デフォルトの名無しさん:02/07/03 23:31
うーん
7行でJPEG、かなり厳しいなぁ・・・
>>442
7行で DCT あるいは DFT だけならいけるかもしれないよ。
つーか、普通に書いてもメインの部分はそれくらいか…
>442
7行無圧縮PNGなら出来るかもな。
でも、CRCの計算がきついかもしれない。
>>444
とりあえず CRC の部分から書き始めてみる?
そこから、PNG のように大きな枠組みに持っていくのは大変かもしれないけど、
任意の CRC を計算するまでならできそうだし、それはそれで功有りかと。
>>445
いいですねぇ。最終的に7行の*.cファイル群を幾つかリンクするとJPEGエンコーダ/
デコーダ等々になる、というのは面白いかも。
447445:02/07/04 11:52
CRC32 を計算、入力は標準入力から。g++ 2.95.3
多分あってると思いますが、確認お願いします。

#include <fstream>
unsigned C,t[256],i,j,v,a=256;
main(){
for(i=0;i<a;t[i++]=v)for(v=i,j=0;j<8;j++)v=(v&1)?((v/2)^0xEDB88320):(v/2);
for(C=~0;~(i=cin.get());)C=t[(C%a)^i]^(C/a);
cout<<hex<<~C<<endl;
}
448445:02/07/04 12:08
ごめんなさい。1つ前のバージョンを送ってしまいました。

#include <fstream>
unsigned C,t[256],i,j,a=256;
main(){
for(;i<a;t[i++]=C)for(C=i,j=9;--j;)C=C/2^(C&1?0xEDB88320:0);
for(C=~0;~(i=cin.get());C=t[(C%a)^i]^(C/a));
cout<<hex<<~C<<endl;
}
449デフォルトの名無しさん:02/07/04 13:34
450445:02/07/04 14:49
>>449
そうです。そこから縮めました。書いておけばよかったですね、はい。
ちなみに C=t[C%a^i]^C/a) でもう少し縮められます。
4511:02/07/04 18:54

#include <stdio.h>

int main(void)
{
while(1)
printf("\t\b\b");
}
>>451
XPクラッシャーじゃん
>>452
確か 2000 でも落ちるような。
9x, Me は大丈夫。
454デフォルトの名無しさん:02/07/05 21:47
>>453
NT系アウトの罠>>printf("\t\b\b");
455デフォルトの名無しさん:02/07/06 10:39
七行プログラミングのスレにでてるコードをちゃんとインデントを入れた形に整形してくれる
プログラムなんてガイシュツですか?
>>455
作ればいいかと。{}付けがよっぽど変なバカのコード以外は簡単かと。
>>455
プリティプリンタでぐぐればいっぱいあるよ。
gnu-indent
>>455
visual stadioでもできるよ(たぶん
できない
DCTまだですか?
462デフォルトの名無しさん:02/07/06 22:43
double c[8][8],is;void di(){int u,v;is=1./sqrt(2.);for(u=0;u<8;u++)for(v=0;x<8;
x++)c[u][x]=cos((2.*x+1.)*u*M_PI/16.);}void dc(int *b){int v,u,x,y,w[64];double
s,cu,cv;for(v=0;v<8;v++){cv=(v==0)?is:1.0;for(u=0;u<8;u++){cu=(u==0)?is:1.;s=0;
for(y=0;y<8;y+)for(x=0;x<8;x++)s+=b[y*8+x]*c[u][x]*c[v][y];w[v*8+u]=(int)(s*cu*
cv/4);}}}
>>462
x と v を間違えたり、y+ になったり、ちょっとしょぼーん(´・ω・`)
もっと短くできそうだ

次は、PNG と JPG のファイルフォーマット変換部分か…
モジュールを集めればJPEGだって何だってできるのはあたりまえだから、
もう少し「寄せ集めること」の意義を考えてみないか?

たとえばSUSIEみたいに、メインルーチンとローダー・変換部分をわけて、
それぞれが7行プログラムで作成されているというように。
465462:02/07/06 23:25
>>463 叩き台なので勘弁してCRAY.
Javaを使えば、JPEG入出力なんて始めからできているという罠
double c[8][8],is,s;int x,y,u,w[64];di(){is=1/sqrt(2);for(u=0;u<64;u++)c[u/8][u
%8]=cos((2*(u%8)+1)*(u/8)*M_PI/16);}dc(int*b){for(x=0;x<8;x++)for(u=0;u<8;w[x*8
+u]=s*(x?1:is)*(u++?1:is)/4)for(s=0,y=0;y<64;y++)s+=b[y]*c[u][y%8]*c[x][y/8];}
468463:02/07/07 01:11
先を越された…
double c[8][8],s;int x,y,w[64];di(){for(x=64;x--;c[y=x/8][x%8]=cos((2*(x%8)+1)*
y*M_PI/16));}dc(int*b){for(x=64;x--;w[x]=s*(x/8?1:1/sqrt(2))*(x%8?1:1/sqrt(2))/
4)for(s=0,y=64;y--;)s+=b[y]*c[x%8][y%8]*c[x/8][y/8];}
>>464
過去ログ読んでね。そう言うコンセプトでやってる。
470464:02/07/07 18:19
>>469
ごめん。読んでいるけどわからんかった・・・ウツ
471デフォルトの名無しさん:02/07/08 02:27
(⌒Д⌒)あらやだわ奥さんハハハ
472みぃとぼぉる:02/07/08 15:09
参戦?させていただきます。んで、Pascalにて迷路...

Program Q;const B=$B800;var S,C,D,F:Word;A:Array[1..999]of Integer;begin For C
:=81to 3840do begin MemW[B:C*2]:=4016;If(C mod 80)=77 then C:=C+3;end;S:=1;A[S]
:=324;while(S>0)do begin C:=A[S];Mem[B:C]:=0;F:=0;while(F<15)do begin D:=(
Port[65]+S)mod 4;F:=F OR(1SHL D);D:=(2-(D div 2)*4)*(1+(D mod 2)*79);If Mem[B:C
+D*2]=176then begin Mem[B:C+D]:=0;A[S+1]:=C+D*2;S:=S+2;Break;end;end;S:=S-1;end
;Mem[B:164]:=0;Mem[B:7672]:=0;Readln;End.

80x50の英語モードDOS窓で CLS してから実行してちょ。
Borland Pascal 7.0 / WinXP で動作確認済み。難しい事は一切やっていないような。
ランタイムエラーが怖いのでCRTは未使用です。

尚、MS-DOSのメモリ依存。
473みぃとぼぉる:02/07/08 16:25
ちょっぴり修正。

Program Q;Uses crt;const B=$B800;var S,C,D,F:Word;A:Array[1..999]of Word;begin
TextMode(259);Randomize;For C:=81to 3840do begin MemW[B:C*2]:=4059;If(C mod 80)
=77 then C:=C+3;end;S:=1;A[S]:=324;while(S>0)do begin C:=A[S];Mem[B:C]:=0;F:=0;
while(F<15)do begin D:=Random(4);F:=F OR(1SHL D);D:=(2-(D div 2)*4)*(1+(D mod 2
)*79);If Mem[B:C+D*2]=219then begin Mem[B:C+D]:=0;A[S+1]:=C+D*2;S:=S+2;Break;
end;end;S:=S-1;end;Mem[B:164]:=0;Mem[B:7672]:=0;Readln;End.


- ランダムナンバージェネレーターにポートを使わずに正規の命令を使用。
- 毎回生成するパターンも変更される。
- Borland / Turbo Pascal で実行時にエラーが出る場合は CRT と TextMode を削除
するか、バグ修正板のCRT RTLを使用すること。

でわ。
474775:02/07/09 23:02
激簡単なもんから・・・・。
元画像をppmに限定すれば読みこみはかなり削減できないかな。>コンバータ

#include <stdio.h>/* usage:bmp2ppm src.bmp dest.ppm*/
main(int c, char*v[]){int i,x,y;FILE *f,*g;if(c<3)return;if((f=fopen(v[1],
"rb"))==NULL||(g=fopen(v[2],"w"))==NULL)return;fseek(f,18,SEEK_SET);fread(&x,4
,1,f);fread(&y,4,1,f);fprintf(g,"P6\n%d %d\n255\n",x,y);fseek(f,54,SEEK_SET);
for(i=0;i<x*y*3;i++)fputc(fgetc(f),g);fclose(f);fclose(g);}
475392:02/07/10 10:32
遅くなったけど、popクライアント
rcvmail サーバ名 ユーザ名 パスワード メール番号

#include <WinSock.h>
char z[512];int s,r,S;M(){z[r=recv(s,z,512,0)]=0;printf("%s",z);}T(x,y){r=spri\
ntf(z,x,y);strcat(z,"\r\n");send(s,z,r+2,0);M();}main(int c,char** v){SOCKADDR\
_IN a={2,28160};WSAStartup(257,z);a.sin_addr=*((PIN_ADDR)*(gethostbyname(v[1]))
->h_addr_list);connect(s=socket(2,1,0),&a,16);M();T("USER %s",v[2]);T("PASS %s"
,v[3]);if(c>4&&(c=atoi(v[4]))>0){T("LIST %d",c);sscanf(z,"%s%d%d",z+r,&r,&S);T(
"RETR %d",c);while((S-=r)>=0)M();}T("QUIT",0);closesocket(s);WSACleanup();}
476463:02/07/10 18:19
>>474
上下反転はともかく、RGBも逆だといやんなので、直しました。
上下も直した方が良いでしょうかね?

#include <stdio.h>/* usage:bmp2ppm src.bmp dest.ppm */
main(int c,char**v){int i,x,y,z[3];FILE*f,*g;if(c<3||(f=fopen(v[1],"rb"))==NULL
||(g=fopen(v[2],"w"))==NULL)return;fseek(f,18,c=SEEK_SET);fread(&x,4,1,f);fread
(&y,4,1,f);fprintf(g,"P6\n%d %d\n255\n",x,y);fseek(f,54,c);for(i=x*y;--i;){for(
c=0;c<3;)z[c++]=fgetc(f);for(;c--;)fputc(z[c],g);}fclose(f);fclose(g);}
477デフォルトの名無しさん:02/07/10 21:36
保守
>>477
早っ (゚Д゚)
479デフォルトの名無しさん:02/07/10 22:35
popクライアント
キタ━━━(^∀゚)━━━!!
寄せ集めで作ってみた無圧縮PNG。10行デス
CRCは>>448のを使わせてもらいました

#include <stdio.h>
typedef unsigned U;U X=128,C,t[256],i,j,a=256,h[17]={73,72,68,82},d[1<<18]={73,
68,65,84,120,218,1},l,M=1,N;FILE*f;B(U b){fputc(b,f);}W(U n){B(n>>24);B(n>>16);
B(n>>8);B(n);}S(U*b,U n){for(i=0;i<n;)B(b[i++]);for(i=0;i<a;t[i++]=C)for(C=i,j=
9;--j;)C=C/2^(C&1?0xedb88320:0);for(i=0,C=~0;i<n;)C=t[C%a^b[i++]&0xff]^C/a;W(~C
);}main(){f=fopen("mona.png","wb");W(0x89504e47);W(0xd0a1a0a);l=X+X*X*3;h[7]=h[
11]=X;h[12]=8;h[13]=2;W(13);S(h,17);d[7]=l;d[8]=l>>8;d[9]=~l;d[10]=~l>>8;l+=11;
for(i=11;i<l;M=(M+d[i++])%65521,N=(N+M)%65521)d[i]=(i-11)%(X*3+1)?i%a:0;d[i++]=
N>>8;d[i++]=N;d[i++]=M>>8;d[i++]=M;W(l);S(d,l+4);W(0);W(0x49454e44);
W(0xae426082);}
これは流石に7行は無理じゃなかろか?
482480:02/07/12 14:08
9行・・・これ以上は無理ぽ

#include <stdio.h>
typedef unsigned U;U X=128,C,t[256],i,j,a=256,h[17]={73,72,68,82},d[1<<18]={73,
68,65,84,120,218,1},l,M=1,N;FILE*f;B(U b){fputc(b,f);}W(U n){B(n>>24);B(n>>16);
B(n>>8);B(n);}S(U*b,U n){for(i=0;i<a;t[i++]=C)for(C=i,j=9;--j;)C=C/2^(C&1?
0xedb88320:0);for(i=0,C=~0;i<n;C=t[C%a^b[i++]&0xff]^C/a)B(b[i]);W(~C);}main(){f
=fopen("mona.png","wb");W(0x89504e47);W(0xd0a1a0a);l=X+X*X*3;h[7]=h[11]=X;h[12]
=8;h[13]=2;W(13);S(h,17);d[7]=l;d[8]=l>>8;d[9]=~l;d[10]=~l>>8;l+=11;for(i=11;i<
l;M=(M+d[i++])%65521,N=(N+M)%65521)d[i]=(i-11)%(X*3+1)?i%a:0;d[i++]=N>>8;d[i++]
=N;d[i++]=M>>8;d[i]=M;W(l);S(d,l+4);W(0);W(0x49454e44);W(0xae426082);}
483448:02/07/12 18:45
>>480
縮めてみました。

#include <stdio.h>
typedef unsigned U;U*x,X=128,i,j,a=256,t[256],l,M=1,k;FILE*f;W(U n){for(i=4;i--
;)fputc(n>>i*8,f);}S(U*b,U n){W(n-4);for(i=~0;n--;i=t[i%a^*b++%a]^i/a)fputc(*b,
f);W(~i);}main(){U h[17]={73,72,68,82,0,0,0,X,0,0,0,X,8,2},d[1<<18]={73,68,65,
84,120,218,1,l=X+X*X*3,l/a,~l,~l/a};f=fopen("mona.png","wb");for(i=a;i--;k=l/X)
for(k=i,j=9;--j;x=d+11)t[i]=k=k/2^(k&1?0xedb88320:0);W(0x89504e47);W(0xd0a1a0a)
;for(S(h,17);l;l--)j+=M+=*x++=l%k?l%a:0,M%=i=65521,j%=i;*x++=j/a;*x++=j;*x++=M/
a;*x++=M;S(d,x-d);W(0);fputs("IEND\256B`\202",f);}
>>483
もうわからん煤i´Д`;)
485484:02/07/12 22:46
つーか、新ネタ来たらあげて良し。
mona.pngって…
>>486
モナの絵が出てくるかと思ったけど、そうじゃないところが2ちゃんらしいというか。
488デフォルトの名無しさん:02/07/14 00:38
age
489484:02/07/14 02:18
これ以上はちょっと苦しいですね。
標準出力にしてもよいなら、後6文字くらいなんですが。

#include <stdio.h>
unsigned t[256],M=1,i,j,k,l,X=128,a=256;FILE*f;W(int n){for(i=4;i--;)putc(n>>i*
8,f);}S(int*b){W(X-4);for(i=~0;X--;i=t[i%a^putc(*b++,f)%a]^i/a);W(~i);}main(){
int*x,h[17]={73,72,68,82,0,0,0,X,0,0,0,X,8,2},d[1<<16]={73,68,65,84,120,218,1,l
=X+X*X*3,l/a,~l,~l/a};f=fopen("mona.png","wb");for(i=a;i--;k=l/X)for(k=i,j=9;--
j;x=d+11)t[i]=k=k/2^(k&1?0xedb88320:0);W(0x89504e47);W(0xd0a1a0a);for(X=17,S(h)
;l;l--)j+=M+=*x++=l%k?l%a:0,M%=i=65521,j%=i;*x++=j/a;*x++=j;*x++=M/a;*x++=M;X=x
-d;S(d);W(0);fputs("IEND\256B`\202",f);}
失礼。 484 ではなく 448 でした。
491448:02/07/14 02:59
標準出力へ無圧縮 PNG を吐き出す7行プログラム

#include <stdio.h>
unsigned t[256],M=1,i,j,l,X=128,a=256;W(int n){for(i=4;i--;)putchar(n>>i*8);}S(
int*b){W(X-4);for(i=~0;X--;i=M^i/a)for(M=i%a^putchar(*b++)%a,j=9;--j;)M=M/2^(M&
1?0xedb88320:0);W(~i);}main(){int*x,h[17]={73,72,68,82,0,0,0,X,0,0,0,X,8,2},d[1
<<16]={73,68,65,84,120,218,1,l=X+X*X*3,l/a,~l,~l/a};W(0x89504e47);W(0xd0a1a0a);
X=l/X;for(x=d+11;l;l--)j+=M+=*x++=l%X?l%a:0,M%=i=65521,j%=i;*x++=j/a;*x++=j;*x
++=M/a;*x++=M;X=17;S(h);X=x-d;S(d);W(0);printf("IEND\256B`\202");}
ってかコンパイルとおらん・・・。
「不正な初期化」
493448:02/07/14 13:28
>>492
gcc -ansi foo.c として通ったから問題ないと思った・・・
どこがだめだかわかります? h[] と d[] の初期化かなぁ
494448:02/07/14 13:47
>>492
通らないコンパイラは bcc32 かな。
gcc も -pedantic を付けたら通らなかった。
配列の初期化はコンパイル時に決定すべし、ということを忘れていたよ・・・欝
------ ビルド開始 : プロジェクト : 491, 構成 : Debug Win32 ------

コンパイルしています...
main.cpp
f:\programs\C++.net\7行\part2\491\main.cpp(2) : warning C4508: 'W' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
f:\programs\C++.net\7行\part2\491\main.cpp(4) : warning C4508: 'S' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
f:\programs\C++.net\7行\part2\491\main.cpp(7) : warning C4244: '=' : '__w64 int' から 'unsigned int' に変換しました。データが失われているかもしれません。
リンクしています...

ビルドログは "file://f:\programs\C++.net\7行\part2\491\Debug\BuildLog.htm" に保存されました。
491 - エラー 0、警告 3



---------------------- 終了 ----------------------

ビルド : 1 正常終了、0 失敗、0 スキップ
496392:02/07/15 10:40
>>475 で受信したメッセージのSJISの本文を読めるようにする

rcvmail サーバ名 ユーザ名 パスワード メール番号 | tosjis

#include <stdio.h>
int x,y=0,f=0,c=-1,h,l;int T(int j){h=(j>>8)&255;l=j&255;l+=(h&1)?31:125;if(l>
126)l++;h=((h-33)>>1)+129;if(h>159)h+=64;return(h<<8)|l;}main(){while((x=getch\
ar())!=EOF)if(++c||x!=27)if(c!=1||!f||x!=40)if(c!=1||f||x!=36){if(c!=2||x!=66){
if(f)if(x<33||x>126)putchar(x);else if(!y)y=x;else{x=T(x|(y<<8));y=0;putchar(x
>>8);putchar(x&255);}else putchar(x);}else f^=1;c=-1;}}
>>496
縮めてみました。

#include <stdio.h>
int x,y,f,c=-1;main(){while(~(x=getchar()))if(++c||x-27)if(c-1||!f||x-40)if(c-1
||f||x-36){if(c-2||x-66)f&&32<x&&x<127&&!(c=!y)?x+=y&1?31:125,x>126?x++:0,y=(y-
33)/2+129,putchar(y>159?y+64:y),y=0:0,c?y=x:putchar(x);else f^=1;c=-1;}}
4行…(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
499デフォルトの名無しさん:02/07/15 20:28
>>498ワラタ。

( ~~~゚ ∀~)~~~ ゚ メダマ ボーン

みんなご一緒に… ( ~~~ ゚ ∀~)~~~ ゚ メダマ ボーン

意味不明なところで>>500getしてください。
500デフォルトの名無しさん:02/07/15 20:30
500!!
7行は永遠に不滅です!
501デフォルトの名無しさん:02/07/15 20:32
>>500
はげどー
七行はPart2で終わりです
Part2で終り?!・・・( ~~~゚ ∀~)~~~ ゚ メダマ ボーン
7行どころか7行未満にする達人が増えたので、今度は
 7行以下プログラミング
になります。
505デフォルトの名無しさん:02/07/15 20:51
>>497 を >>475 の pop クライアントに融合させ、
直接 SJIS でメールを読むことができるようにならんかなぁ

お題のつもりなので age ます
506497:02/07/15 21:59
これ以上は難しそうなので、終わりにします。
メールの方は良くわからないので、 >>505 のお題は他の方、どうぞお願いします。

#include <stdio.h>
int x,y,f,c=-1;main(){while(~(x=getchar()))if(++c||x-27)if(c-1||!f||x-40)if(c-1
||f||x-36){c==2&&x==66?f^=1:(f&&32<x&&x<127&&!(c=!y)?x+=y&1?x>95?32:31:126,y=(y
-33)/2+129,putchar(y>159?y+64:y),y=0:0,c?y=x:putchar(x));c=-1;}}
(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
508デフォルトの名無しさん:02/07/16 20:33
保持age
repeat
cls 0:mes ""+h+":"+m+":"+s
wait 100
s+
if s=60{m+:s = 0}
if m=60{h+:m = 0}
loop
510392:02/07/17 15:12
>>505 のお題に応えてみたけど・・・
とりあえず、くっつけてみただけ

#include <WinSock.h>
char z[512];int s,r,S,x,f,y,c=-1;M(){z[recv(s,z,512,0)]=0;for(r=0;x=z[r++];)if(
++c||x-27)if(c-1||!f||x-40)if(c-1||f||x-36){c==2&&x==66?f^=1:(f&&32<x&&x<127&&!
(c=!y)?x+=y&1?x>95?32:31:126,y=(y-33)/2+129,putchar(y>159?y+64:y),y=0:0,c?y=x:\
putchar(x));c=-1;}}T(x,y){r=sprintf(z,x,y);send(s,strcat(z,"\r\n"),r+2,0);M();}
main(int c,char** v){SOCKADDR_IN a={2,28160};WSAStartup(257,z);a.sin_addr=*((P\
IN_ADDR)*(gethostbyname(v[1]))->h_addr_list);connect(s=socket(2,1,0),&a,16);M()
;T("USER %s",v[2]);T("PASS %s",v[3]);if(c>4&&(c=atoi(v[4]))>0){T("LIST %d",c);
sscanf(z,"%s%d%d",z+r,&r,&S);T("RETR %d",c);while((S-=r)>=0)M();}T("QUIT",0);c\
losesocket(s);WSACleanup();printf("\r\n");}

現在、10行
511デフォルトの名無しさん:02/07/19 18:21
age
512七誌饅頭 ◆Pc9801rE :02/07/20 17:23
静的RangeEncoderです
encode inputfile outputfileとして使ってください。
unsigned longのかわりにsize_tを使うなど、外道なことをしています。

#include <stdio.h>
size_t l=0,r=0xffffffff,z,u[257];unsigned char f[256];main(int a,char**v){FILE
*n=fopen(v[1],"rb"),*o=fopen(v[2],"wb");int i,c;fseek(n,0,2);z=ftell(n);fwrite
(&z,4,1,o);fseek(n,0,0);while((c=fgetc(n))!=-1)if(f[c]!=255)f[c]++;for(i=0;i<
256;i++)u[i+1]=u[i]+f[i];fwrite(f,1,256,o);fseek(n,0,0);while((c=fgetc(n))!=-1
){r/=u[256];l+=u[c]*r;r*=f[c];while((l^l+r)<1<<24||r<1<<16&&((r=65535&~l+1),1)
){fputc(l>>24,o);r<<=8;l<<=8;}}for(i=0;i<4;i++){fputc(l>>24,o);l<<=8;}}
513七誌饅頭 ◆Pc9801rE :02/07/20 17:24
ついでにDecoder
#include <stdio.h>
unsigned char f[256];size_t l,r=0xffffffff,c,q,z,u[257],i;main(int a,char**v){
FILE*n=fopen(v[1],"rb"),*o=fopen(v[2],"wb");fread(&z,4,1,n);fread(f,1,256,n);
for(i=0;i<256;i++)u[i+1]=u[i]+f[i];for(i=0;i<4;i++)c=c<<8|fgetc(n);while(z){r
/=u[256];q=(c-l)/r;if(q>=u[256])return;for(i=0;i<256&&q>=u[i+1];i++);if(i>=256
)break;fputc(i,o);z--;l+=u[i]*r;r*=f[i];while((l^l+r)<1<<24||r<1<<16&&((r=~l+1
&65535),1)){c=c<<8|fgetc(n);r<<=8;l<<=8;}}}
514 ◆iM7eXrMU :02/07/20 18:20
C言語+Win32でマンデルブロー。
cygwin で gcc -mno-cygwin -mwindows でコンパイル。
2行目はs=倍率、x=x座標、y=y座標。適当に変えれ。
s=2400,x=500,y=1030なんかも良いかも。

#include <windows.h>
int s=5800,x=1100,y=3000;
m(double a,double b){int t=100;double c,d,e,f;c=a=(a+x)/s;d=b=(b+y)/s;while(t--
){e=c*c-d*d+a;f=2*c*d+b;if(e*e+f*f>4)return 0;c=e;d=f;}return 1;}int WINAPI
WinMain(HINSTANCE q,HINSTANCE w,PSTR e,int r){HDC a=CreateDC("DISPLAY",0,0,0);
double i,j,k=0.5;for(j=0;j<400;j++)for(i=0;i<400;i++)SetPixel(a,i,j,255-RGB(((m
(i,j)+m(i+k,j)+m(i+k,j+k)+m(i,j+k)))*63,0,0));DeleteDC(a);}
515デフォルトの名無しさん:02/07/20 21:05
>7行×79文字なら言語は問いません。
>過去作品は>>2-5を参照。

これ7行プログラミングじゃなくて、素直に553文字プログラミングにしたほうが
いいような気がする。
改行文字はカウントに含まない。
それでいいじゃん。
本質はそういう事だし、読みづらいだけ。
多分ガイシュツなんだろうけど。
あと悪気はありません。これ面白いと思います。
改行をいかに避けるかにも面白さがあるんじゃないかな?ともおもう
>>512 >>513
符号と復号を別々にしても、いまさらという感じがする。
前スレ http://pc3.2ch.net/test/read.cgi/tech/984182993/745 で、
両者を併せて7行にしてしまっている(こちらは動的だが)。

できれば、静的バージョンもあわせて7行を目指して頑張って欲しい。
518517:02/07/20 22:10
どうでもいいことなのかもしれないが、
過去レスで使われているテクニックをもっと使って欲しいと思ふ。

for 文の記述 for(i=0;i<x;i++){} --> for(i=x;i--;){}
シフト演算の置換 x<<=8,y>>=8; --> a=256;x*=a;y/=8;
ビット演算の利用 x=0xffffffff;while((c=getchar())!=EOF){}
         --> x=~0;while(~(c=getchar())){}
>>518
参考になります。
過去ログあんまり読んでなので。なんとなくやっただけだし。
今9行。exec E input outputでエンコード
exec d input outputでデコード
ファイルの入出力が痛い。
#include <stdio.h>
size_t l=0,r=~0,z,q,e,u[257],g;unsigned char f[256];main(int a,char**v){FILE*n
=fopen(v[2],"rb"),*o=fopen(v[3],"wb");int c=4,x=256;if(g=*v[1]-69){fread(&z,4,
1,n);fread(f,1,x,n);for(;c--;)e=e*x|fgetc(n);}else{while(~(c=fgetc(n)))z++,f[c
]<255?f[c]++:0;fwrite(&z,4,1,o);fwrite(f,1,x,o);fseek(n,0,0);}for(c=0;c<x;c++)
u[c+1]=u[c]+f[c];while(g?z--:~(c=fgetc(n))){r/=u[x];if(g){if((q=(e-l)/r)>=u[x]
)break;for(c=x;--c&&q<u[c];);fputc(c,o);}l+=u[c]*r;r*=f[c];while((l^l+r)<1<<24
||r<1<<16&&((r=65535&~l+1),1))g?(e=e*x|fgetc(n)):fputc(l>>24,o),r*=x,l*=x;}if(
!g)for(c=4;c--;)fputc(l>>24,o),l*=x;}
#include <stdio.h>
size_t l,r=~0,z,q,e,u[257],g,f[256];main(int a,char**v){FILE*n=fopen(v[2],"rb"
),*o=fopen(v[3],"wb");int c=4,x=256,(*t)()=fgetc;if(g=*v[1]-69)for(fread(&z,4,
1,n),fread(f,4,x,n);c--;)e=e*x|t(n);else{while(~(c=t(n)))z++,f[c]<255?f[c]++:0
;fwrite(&z,4,1,o);fwrite(f,4,x,o);fseek(n,0,0);}for(c=0;c<x;c++)u[c+1]=u[c]+f[
c];while(g?z--:~(c=t(n))){r/=u[x];if(g){for(q=(e-l)/r,c=x;--c&&q<u[c];);fputc(
c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1<<16&&(r=65535&~l+1);)g?(e=e*x|t
(n)):fputc(l>>24,o),r*=x,l*=x;}if(!g)for(c=4;c--;)fputc(l>>24,o),l*=x;}
出力サイズは増えるが八行。
これ以上は厳しいかも
>>520
協力しようと思いましたが、あまり縮みませんね。
ロジック部が良くわからないので、ソース追いかけ中です。
定数やそのシフトを変数にできそう。(1<<24とか)
f=u-1 で置き換えると、もう少し短くなりそうですが・・・

#include <stdio.h>
size_t l,r=~0,z,q,e,u[257],f[256],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[
2],"rb"),*o=fopen(v[3],"wb");int(*t)()=fgetc;if(g=*v[1]-69)for(fread(&z,4,1,n),
fread(f,4,x,n);--c;)e=e*x|t(n);else{for(;~(c=t(n));f[c]<255?f[c]++:0)z++;fwrite
(&z,4,1,o);fwrite(f,4,x,o);fseek(n,c=0,0);}for(;c<x;c++)u[c+1]=u[c]+f[c];while(
g?z--:~(c=t(n))){r/=u[x];if(g){for(q=(e-l)/r,c=x;--c&&q<u[c];);fputc(c,o);}for(
l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1<<16&&(r=65535&~l+1);)g?e=e*x|t(n):fputc(l
>>24,o),r*=x,l*=x;}for(c=4;!g&&c--;)fputc(l>>c*8,o);}
int(*t)()=fgetcはsize_tに移動しても大丈夫かと(警告は出るかも)。
u[c+1]=u[c]+f[c];を
q=u[c+1]=q+f[c];にすると1バイトちぢむかも(w
524521:02/07/22 23:46
>>522 getc に置き換えることにより t を使わないようにしました。
>>523 サンクスです。でも現時点で q が無くても同じ文字数だ・・・

#include <stdio.h>
size_t l,r=~0,z,q,e,u[257],f[256],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[
2],"rb"),*o=fopen(v[3],"wb");if(g=*v[1]-69)for(z=getw(n),fread(f,4,x,n);--c;)e=
e*x|getc(n);else{for(;~(c=getc(n));f[c]<255?f[c]++:0)z++;putw(z,o);fwrite(f,4,x
,o);fseek(n,c=0,0);}for(;c++<x;)q=u[c]=q+f[c-1];for(;g?z--:~(c=getc(n));){r/=u[
x];if(g){for(c=x;--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1
<<24||r<1<<16&&(r=65535&~l+1);)g?e=e*x|getc(n):putc(l>>24,o),r*=x,l*=x;}for(c=4
;!g&&c--;)putc(l>>c*8,o);}
525デフォルトの名無しさん:02/07/22 23:58
age
526521:02/07/22 23:58
ふと思ったんですが、7行スレで開発されて続けている新しい技術を使うと、
昔のプログラムがもっと縮められることに気づきました。
7行に不到達のもので、何か挑戦してみようかな、などと考えてしまう・・・

でもそれはネタ的には面白くない罠、か
527デフォルトの名無しさん:02/07/23 01:16
>>526
イインジャネーノ
528いつも名無し:02/07/23 09:00
しっかし凄い良スレだなぁココ
java chat サーバー
マルチユーザー用のスレッドクラスを別にしてみました。
mainの方は楽勝。
スレッドのほうはだめでした。

クライアントもやってみます。

import java.net.*;import java.io.*;import java.util.*;
public class S{public static void main (String args[]) throws IOException{
int port = Integer.valueOf(args[0]).intValue();ServerSocket sS = null;
boolean e = true;try{sS = new ServerSocket(port);}catch (IOException i){}
while(e){new T(sS.accept()).start();}sS.close(); }}

class T extends Thread {Socket s;PrintStream o;BufferedReader i;static Vector
m;T(Socket s){super("T");s=s;if(m==null){m=new Vector();}m.addElement(this);}
public void run(){try{o=new PrintStream(s.getOutputStream(),true);i=new
BufferedReader(new InputStreamReader(s.getInputStream()));String c;while((c=i.
readLine())!=null){w(c);}e();}catch(IOException e){}}public void w(String s){
for(Enumeration e=m.elements();e.hasMoreElements();){T c=(T)e.nextElement();c.
o.println(s);}}public void e(){try{i.close();o.close();s.close();}catch(
IOException e){}m.removeElement(this);}}

その程度ならまとめろという気がしないでもない。
わざわざスレッド別にして文字数を増やすこともないだろうに。
531七誌饅頭:02/07/23 17:41
>>521さんすごいです。
r/=u[x];はr/=qにできそうですね。
って3バイトしか縮みませんが。
532521:02/07/23 17:52
>>531
いやいやとんでもない。これはアルゴリズムもすごいですよ。
オーバーフローを避けるために、r の値を毎回制御しているのはわかったんですが、
(l^l+r)<1<<24 がどういう役割を担っているのか、いまいちわからん。
l の精度が落ちたら? を判定しているのかな。それとも r の?

符号化部と復号部をいっしょにしてしまったのもすごいが、
ロジック部が小さいと、全体のサイズはかえって大きくなるんじゃないかな、
などといろいろプログラムを試行中。
533デフォルトの名無しさん:02/07/23 18:06
7行未到達のお題を旧スレから見繕ってみました。
現代の技術で、7行を目指してくだちい。

ハフマン符号化
http://pc3.2ch.net/test/read.cgi/tech/984182993/194
レイトレーシング
http://pc3.2ch.net/test/read.cgi/tech/984182993/209
BASIC
http://pc3.2ch.net/test/read.cgi/tech/984182993/497-518
波紋
http://pc3.2ch.net/test/read.cgi/tech/984182993/678
パーティクル
http://pc3.2ch.net/test/read.cgi/tech/984182993/675-676
SHA1
http://pc3.2ch.net/test/read.cgi/tech/984182993/881-886
534七誌饅頭:02/07/23 18:50
>>532
>(l^l+r)<1<<24 がどういう役割を担っているのか、いまいちわからん。
lとl+rの最上位の8ビットが等しいかどうかの判定ですね。
等しいならXORで消えるので1<<24未満になると。

>符号化部と復号部をいっしょにしてしまったのもすごいが
これは寝る直前に思いつきました。
RangeCoderは符号かも複号化も似たようなものになるのでできそうだ。と思い、
判定の結果を保存しておけば、三項演算子でいけるかもと気づきました。

>>534
いやー、勉強になります。
というわけで、z を保存しないようにしてみました。

#include <stdio.h>
size_t l,r=~0,z,q,e,u[257],f[257],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[
2],"rb"),*o=fopen(v[3],"wb");if(g=*v[1]-69)for(fread(f,4,x,n);--c;)e=e*x|getc(n
);else{for(;~(c=getc(n));f[c]++);fwrite(f,4,x,o);fseek(n,c=0,0);}for(;c<x;c++)z
+=f[c],f[c]>=x?f[c]=255:0,q=u[c+1]=q+f[c];for(;g?z--:~(c=getc(n));){r/=q;if(g){
for(c=x;--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1
<<16&&(r=65535&~l+1);)g?e=e*x|getc(n):putc(l>>24,o),r*=x,l*=x;}for(c=4;!g&&c--;
)putc(l>>c*8,o);}
標準入出力に切り替えれば、7行達成じゃね?
537:02/07/23 22:08
1<<16はx*xの方向で。
>>536
標準入出力の巻き戻し fseek(f,0,0); って使えるんでしたっけ?
まぁ、旧スレは標準入出力を使ったので、今回は無しで目指すのはどうでしょ?
もっとも、旧スレのも標準入出力を使わずにできることが判明しました。
539今日も名無しさん:02/07/23 22:39
f[c] の最大値を 255 じゃなくて、256 にしてもいいもんだろうか?
>>539
終端をサイズで無くターミネータ(0x100)で判断させるためだろ。
この手の圧縮は別に0x00-0xff/charでないといけない物ではない。
>>540
いや、そうではなくて、l と r の上位8ビットを比較するわけで、
このとき 256 倍までならば、整合性が保たれることは確実です。
しかし、r=256*256 となると、r=65535&~l+1 がまずいことになりそうなので、
誰か検証してくれないかなぁ、と思ったのです。
542541:02/07/23 22:50
ちなみに e>=l が必ず成り立つので、g と e をまとめることができますね。
543Javaさん:02/07/23 22:54
>>529
ひとつにまとめますた。

T.java

import java.net.*;import java.io.*;import java.util.*;class T extends Thread{
Socket s;OutputStream o;static Vector m;T(Socket a){s=a;m=(m==null)?new Vector()
:m;m.addElement(this);start();}public void run(){try{o=s.getOutputStream();for(
BufferedReader i=new BufferedReader(new InputStreamReader(s.getInputStream()));;
){for(int k=0;k<m.size();) {T c=(T)m.get(k++);c.o.write((i.readLine()+"\n").
getBytes());c.o.flush();}}}catch(Exception e){}m.remove(this);}public static
void main (String[]q) throws Exception{for(ServerSocket v=new ServerSocket(
Integer.parseInt(q[0]));;new T(v.accept()));}}
544七誌饅頭:02/07/23 23:10
#include <stdio.h>
size_t l,r=~0,z,q,e,u[257],f[257],c=5,x=256;main(int g,char**v){FILE*n=fopen(v
[2],"rb"),*o=fopen(v[3],"wb");g=*v[1]-69;for(g&&fread(f,4,x,n);g?--c:~(c=getc(
n));)g?e=e*x|getc(n):f[c]++;g||(fwrite(f,4,x,o),fseek(n,c=0,0));for(;c<x;c++)z
+=f[c],f[c]>=x?f[c]=255:0,q=u[c+1]=q+f[c];for(;g?z--:~(c=getc(n));){r/=q;if(g)
{for(c=x;--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r
<x*x&&(r=-l&65535);)g?e=e*x|getc(n):putc(l>>24,o),r*=x,l*=x;}for(c=4;!g&&c--;)
putc(l>>c*8,o);}
どうも頭が固いな。
(l^l+r)<1<<24→r<=~l*x/x
遅いけどな(w
546今日から名無し:02/07/23 23:21
>>544 横1行78文字ですよん?
他もちょっと縮めました。

#include <stdio.h>
size_t l,r=~0,z,q,u[257],f[257],c=5,x=256,*a=f;main(int g,char**v){FILE*n=fopen
(v[2],"rb"),*o=fopen(v[3],"wb");g=*v[1]-69;for(g&&fread(f,4,x,n);g?--c:~(c=getc
(n));)g?g=g*x|getc(n):f[c]++;g||(fwrite(f,4,x,o),fseek(n,c=0,0));for(;c<x;q=u[1
+c++]=q+*a++)z+=*a,*a>=x?*a=255:0;for(;g?z--:~(c=getc(n));){r/=q;if(g){for(c=x;
--c&&(g-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<x*x&&(r=-
l&65535);)g?g=g*x|getc(n):putc(l>>24,o),r*=x,l*=x;}for(c=4;c--;)g||putc(l>>c*8,
o);}
後4文字っす
547Javaさん:02/07/23 23:22
>>543のバグ取り (´・ω・`)ショボーン

T.java

import java.net.*;import java.io.*;import java.util.*;class T extends Thread{
Socket s;OutputStream o;static Vector m;T(Socket a){s=a;m=(m==null)?new Vector()
:m;m.addElement(this);}public void run(){try{o=s.getOutputStream();String c="";
for(BufferedReader i=new BufferedReader(new InputStreamReader(s.getInputStream()
));;c=i.readLine()){for(int k=0;k<m.size();) {T t=(T)m.get(k++);t.o.write((c+
"\n").getBytes());t.o.flush();}}}catch(Exception e){}m.remove(this);}public
static void main (String[]q) throws Exception{for(ServerSocket v=new
ServerSocket(Integer.parseInt(q[0]));;new T(v.accept()).start());}}
548今日こそ名無しさん:02/07/23 23:23
7行達成!?

#include <stdio.h>
size_t l,r=~0,z,q,u[257],f[257],c=5,x=256,*a=f;main(int g,char**v){FILE*n=fopen
(v[2],"rb"),*o=fopen(v[3],"wb");g=*v[1]-69;for(g&&fread(f,4,x,n);g?--c:~(c=getc
(n));)g?g=g*x|getc(n):f[c]++;g||(fwrite(f,4,x,o),fseek(n,c=0,0));for(;c<x;q=u[1
+c++]=q+*a++)z+=*a,*a>=x?*a=255:0;for(;g?z--:~(c=getc(n));){r/=q;if(g){for(c=x;
--c&&(g-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];r<=~l*x/x||r<x*x&&(r=65535
&-l);)g?g=g*x|getc(n):putc(l>>24,o),r*=x,l*=x;}for(c=4;c--;)g||putc(l>>c*8,o);}
>>548
兄さん! age ましょう!!
550548:02/07/23 23:27
>>548
すいませんでした!! バイナリファイルだと暴走します。
鬱だ・・・・
551548:02/07/23 23:31
所詮 >>545>>546 を見て、4文字ちょうどジャンと
知識も無いのに参加したおいらが厨ですた・・・
552521:02/07/23 23:41
>>548-551
g と e をまとめちゃったのが、まずいのではないかな?
今のところ後2文字くらいになっていますが、どこを削れるかなぁ。
553521:02/07/23 23:45
これで7行ですね。上げておきます。

#include <stdio.h>
size_t*a,l,r=~0,e,z,q,u[257],f[257],c=5,x=256;main(int g,char**v){FILE*n=fopen(
v[2],"rb"),*o=fopen(v[3],"wb");for(g=*v[1]-69&&fread(f,4,x,n);g?--c:~(c=getc(n)
);)g?e=e*x|getc(n):f[c]++;g||fwrite(f,4,x,o)&&fseek(n,c=0,0);for(a=f;c<x;q=u[1+
c++]=q+*a++)z+=*a,*a>=x?*a=255:0;for(;g?z--:~(c=getc(n));){r/=q;if(g){for(c=x;
--c&&(e-l)/r<u[c];);putc(c,o);}for(l+=u[c]*r,r*=f[c];r<=~l*x/x||r<x*x&&(r=65535
&-l);)g?e=e*x|getc(n):putc(l>>24,o),r*=x,l*=x;}for(c=4;c--;)g||putc(l>>c*8,o);}
554七誌饅頭:02/07/23 23:59
あらま。考えてる間に。
>>521さんお疲れ様です。それにしても縮んでよかった(w
3人寄れば文殊の知恵というかなんと言うか。
コードのエントロピーはどこにあるんでしょうね(w
>>554
今回は久しぶりに参加者が多かったですね。
中盤では、比較的わかりやすいソースコードになっていたからでしょうね。
最終的にはやはり奇妙奇天烈(に見えるもの)になりましたが。
>>553
こいつはマジですげぇ。インデントしてもまともなプログラムとは思えねぇ(w
forをうまく使い込み、(まともに使っていれば)ありえないような例外処理も省き、
その上でエンコードとデコードの処理が3項演算子と論理演算子で融合されている。
定石と、非常識が合わさった執念のプログラム。これが匠という奴なのか。
ソースを追うごとにwhileが消えていく(w
558最大の賛辞:02/07/24 00:28
君たち頭おかしいよ、まじで。
>>557
やたら for や ?:, ++, --, * が増える。それもまた楽しw
前スレのハフマン符号 http://pc3.2ch.net/test/read.cgi/tech/984182993/194
アルゴリズムをほとんど見ずに、ステートメントだけで縮めてみました。

int b,i,j,l,m,n=1024,c,p=7,h[32],y=16;r(h,b){for(;b--;!p--?putchar(c),c=0,p=7:0
)c|=(h>>b)%2<<p;}q(int*a,int*b){return*a-*b;}struct v{int i,b,h,n;}*v,*f;struct
{int n,i,e,k;struct v v[63];}x[32]={0,},*a=x;main(){char*d=0;for(;~(b=getchar()
);a[d[l++]=b%y].n++)a[(d=realloc(d,l+2))[l++]=b/y].n++;for(i=32;i--;)a[a[i].i=a
[i].v[0].i=i].e=1;qsort(a,y,n,&q);for(b=17,i=0;!x[i++].n;a++)b--;for(;2<b;a+=2)
{qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;i++)v[i].h|=j%2<<v
[i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m*y);memcpy(a->v+m+a->e,a[2].v,496);a
->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,n);}for(i=0;i<y;i++)for(j=0;j<32
;j++)if((f=a->v+j)->i==i)r(f->b-1,4),r(f->h,f->b),h[i]=f->b,h[i+y]=f->h,j=32;
for(i=0;i<l;r(b+y,b))b=h[d[i++]];p-7&&r(0,p);}
561デフォルトの名無しさん:02/07/25 18:55
面白そうなので、私も作ってみました。15パズルです。

P.java(JDK1.4.0で確認)

import java.awt.*;public class P extends Frame{class B extends Button{String l,
r,t;int o;B(int i){o=i%4+i/4*6;s(r=i+1+"");}void m(){if((64<<o&4257<<n.o)>0){t=
l;s(n.l);n.s(t);n=this;}}void s(String n){setLabel(l=n);}}int g;B[]a=new B[16];
B n;public P(){setLayout(new GridLayout(4,4));for(;g<16;g++)add(n=a[g]=new B(g)
);pack();show();i();}void i(){n.s("");for(g=0;g++<999;)a[(int)(Math.random()*16
)].m();}public boolean handleEvent(Event e){if(e.id==201)System.exit(0);if(e.id
==1001)if(g<0)i();else{((B)e.target).m();for(g=15;g-->0;)if(a[g].l!=a[g].r)
return 1>0;n.s("R");}return 1>0;}public static void main(String s[]){new P();}}

頑張って8行まで縮めたのですが、私にはこれで限界でした(;_;)
ちなみに、201==Event.WINDOW_DESTROY、1001==Event.ACTION_EVENTです(笑)

# 2ちゃんねる初書き込みなので、ちょっとどきどき…。
562560:02/07/26 18:45
オリジナルに間違いがあったのでそれも修正しました。
現在9行。アルゴリズムを変更しないと、これ以上は無理かな・・・

int b,i,j,l,n=1024,c,p,h[32],y=16;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c|=(
h>>b)%2<<7-p;}q(int*a,int*b){return*a-*b;}struct v{int i,b,h,n;}*v;struct{int n
,i,e,k;struct v v[63];}x[32],*a=x;main(){char*d=0;for(;~(b=getchar());a[d[l++]=
b%y].n++)d=realloc(d,l+2),a[d[l++]=b/y].n++;for(i=32;i--;)a[a[i].i=a[i].v[0].i=
i].e=1;for(qsort(a,b=y,n,&q);!x[y-b--].n;a++);for(;b;a+=2){qsort(a,2+b--,n,&q);
for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;i++)v[i].h|=j%2<<v[i].b++;i=a[1].e;
memcpy(a->v+a->e,v-64,i*y);memcpy(a->v+i+a->e,v,496);a->e+=i+a[2].e;a->n+=a[1].
n+a[2].n;memcpy(a+2,a,n);}for(i=0;i<y;i++)for(j=0;(v=a->v+j)->i==i?r((b=v->b)-1
,4),r(h[i+y]=v->h,h[i]=b),0:++j;);for(i=0;i<l;r(h[b+y],h[b]))b=d[i++];r(0,7);}
563デフォルトの名無しさん:02/07/27 03:20
ひさしぶりage
コーディングテクニックが極まっちゃうと手を加えられなくなるよね。
565560:02/07/27 05:59
Huffman 符号構成のアルゴリズムを変更してみました。現在8行。
ほぼ1から作り直したので、コーディングに甘い部分があります。
関数 z とか新設したんですが、どなたかこれを無くして下さいです。

int*d=0,i,j,k,l,h[32],y=16,c,p;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c|=(h>>
b)%2<<7-p;}q(int*a,int*b){return*a-*b;}struct v{int f,b,s[2],i,c;}n[31],*x=n,*w
;z(d,c){int m;struct v*w=x;if(w->i<y)w->b=d,w->c=c;else for(m=2;m--;)for(j=30;w
->s[m]==n[j].i?x=n+j,z(d+1,c*2+m),0:j--;);}main(){for(;i<y;)n[i++].f=1;for(;~(i
=getchar());n[d[l++]=i/y].f++)d=realloc(d,l*4+8),n[d[l++]=i%y].f++;for(;++i<y;)
n[i].i=i;for(j=k=y;--k;w->s[1]=x++->i){qsort(x,j,24,&q);w=x+j--;w->f=x->f+x[1].
f;w->i=i++;w->s[0]=x++->i;}z(-1,0);for(i=y;i--;)for(k=31;k--;)n[k].i==i?r(j=h[y
+i]=n[k].b,4),r(h[i]=n[k].c,j):0;for(;++i<l;r(h[j],h[y+j]))j=d[i];r(0,7);}
寝よう・・・
566560:02/07/27 06:10
圧縮率と簡便さから、range coder が Huffman にとって代わりつつあるが、
符号化&復号をあわせて7行プログラミングできるかどうかでも、
Huffman は range coder に敵わないのだということを嫌というほど実感中w

・・・起きたら7行に到達していたらいいなぁ・・・zZZ
567デフォルトの名無しさん:02/07/27 11:15
ここのソースを自動インデントするプログラムを書こうと思ったけど
一文字ずつの処理じゃもうだめぽ
>565
c|=(h>>b)%2<<7-p;→c+=c+(h>>b)%2;
A==B?C:D;→A-B?D:C;
で僅かに縮む…が、焼け石に水か(w
>>568
A-B?D:C; の場合、C にカンマ演算子が含まれていないことが条件ですぞ。
: までと : 以降ではカンマの扱いが微妙に違うのがいやらしい。
&&, || の場合もカンマ演算子は使いにくいです。
570568>569:02/07/27 15:03
3項演算子の方は検証せずに書いてた、逝って狂
571560:02/07/27 18:09
現在残り29文字になりました。これから z を改良します。
・・・ところで、どなたか復号器を作っていただけませんか。

>>565までのものには、明らかな間違いが存在します。
また復号が不可能だったので、データ長を記録するようにしました。

符号語のフォーマットは、
元のデータ長(4byte), (符号語長 4bit, 符号語 x bit) の組が16個,
その後ろに符号化したデータがぞろぞろと繋がります。

int*d=0,i,j,k,l,h[32],y=16,c,p;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c+=c+(h
>>b)%2;}struct v{int f,b,s[4],i,c;}n[31],*x=n,*w;z(d,c){int m;struct v*w=x;w->b
=d,w->c=c;for(m=2;(w->i>=y)&&m--;)for(j=30;w->s[m]==n[j].i?x=n+j,z(d+1,c*2+m),0
:j--;);}q(int*a,int*b){return*a-*b;}main(){for(;~(i=getchar());n[d[l++]=i/y].f
++)d=realloc(d,l*4+8),n[d[l++]=i%y].f++;for(;++i<y;)n[i].i=i;for(j=k=y;--k;w->s
[1]=x++->i){qsort(x,j,32,&q);w=x+j--;w->f=x->f+x[1].f;w->i=i++;w->s[0]=x++->i;}
z(i=0,0);for(r(l,32);i<l+y;i++)for(w=n+31;w-->n;w->i==(i<y?i:d[i-y])?i<y&&r(j,4
),r(w->c,j):0)j=w->b;r(0,7);}

>>568>>570 いえいえ、ありがとうございます。
572560:02/07/27 18:55
7行 Huffman符号化。
ただし、復号できるかどうかは未検証です。

int*d=0,i,j,k,l,h[32],y=16,c,p;r(h,b){for(;b--;++p>7?putchar(c),p=c=0:0)c+=c+(h
>>b)%2;}q(int*a,int*b){return*a-*b;}struct v{int f,b,s[4],i,c;}n[31],*x=n,*w=n+
16;main(){for(;~(i=getchar());n[d[l++]=i/y].f++)d=realloc(d,l*4+8),n[d[l++]=i%y
].f++;for(;++i<y;)n[i].i=i;for(k=y;--k;w++->s[1]=x++->i){qsort(x,k+1,32,&q);w->
f=x->f+x[1].f;w->i=i++;w->s[0]=x++->i;}for(r(l,32);i--;)for(j=i,w=n+i;w->i>=y&&
j--;)for(k=2;k--;)w->s[k]==n[j].i?n[j].b=w->b+1,n[j].c=w->c*2+k:0;for(;++i<l+y;
)for(w=n+31;w-->n;w->i==(i<y?i:d[i-y])?i<y&&r(j,4),r(w->c,j):0)j=w->b;r(0,7);}
(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
&qの&はなくてもいいんではないのかい?
最近のレスを見ていると、よくもこんなというテクニックが多く見られる
当時興味があったBASICも、今見るとあちこち縮められそうに思える
技術の進歩はすごいんだなあ…参戦したくなりますたw
このスレにWebプログラミングで参戦してみようと思います
恐らくPHPですかね
なんかやってみます
>>576
大歓迎ざます
ただ、ここにいる方々ほど偉大な
プログラミングは出来ないですが、
やれるだけのことはやってみます
>>578
始めてじゃなくて初めてだな
プログラミングと一緒に日本語もガンバレヨ
580デフォルトの名無しさん:02/07/28 15:43
前スレのスライド辞書圧縮
http://pc3.2ch.net/test/read.cgi/tech/984182993/153-154
符号化と復号とが分かれていたので、いっしょにしてみました。現在9行。

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;r(o){for(p(o
);o--;)p(d[g++]);}main(int i){if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q
();if(g<n)for(i=g;i--;)d[s++]=q();else for(k=q()+(g-128)*256,i=k>>10,j=s-(k&f);
i--;)d[s++]=d[j++];}for(;l--;)p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d,
l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){m=1;j=s>31?31:s;j=l-s-2
>j?j:l-s;for(;j>2;j--){for(i=s<f?0:s-f;i<s;i++)if(!(m=memcmp(d+i,d+s,j))||i+j>l
)break;if(!m)break;}if(!m){for(k=s-g;k>n;k-=n)r(n);k&&r(k);p(128+j*4+(k=s-i)/
256);p(k%256);g+=j;s=g-1;}}}}
581でけた!:02/07/28 15:53
fawekfgvuq4eoptvnu4u905634^05689^3-5iqwoptjap bmg\xcm,c/<a\;vifa
sfkqvprv8q^@08pgkv\b/m,sb\/Vcbn\/.\>a[]-1[\lo-5^-269^2ryib@;:]ym
wriobyw45[2bm9^\c;,lhmx\:V,xc\./n,z_C;1^\@a:daf/v,w@]byk90w46by0
-3569kby-w35y6w65yeryhnu356ja;4pot8mi681^-:]bc\./bzsgnsfhn/.n,s
we\2\q34t5o34^-68^24690^-oy;:pvb\./xn,\/XCV,.b;:d]s9tbqo^while
dt69oqw@]qyniom7@ln:,/.zcvbn;]r[q[rt2^\56o2^\5789hknl.vmn.;/vmn;
hlwit^y02846ypokfhfghh56yfghadginytmainstdio.hriotjueirutjintint
>>581 ワラタ
>>580
縮めてみますた。アルゴリズムが間違っていたらすまソ

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;main(int i){
if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q();if(g<n)for(i=g;i--;)d[s++]=
q();else for(k=q()+(g-128)*256,i=k>>10,j=s-(k&f);i--;)d[s++]=d[j++];}for(;l--;)
p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d,l+9);putw(l,stdout);memset(d+l
,0,8);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l-s;m&&j>2;j--)for(i=s<f?0:s-f;m
&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k+1;)for(p(m=k>n?n:k);k--,m--;)p(
d[g++]);p(++j*4+128+(k=s-i+1)/256);p(k);g+=j;s=g-1;}}}}
オセロ作ったら39行になっちった(汗
585580:02/07/28 18:17
意外と縮むようで、縮まない。後21文字

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;main(int i){
if(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k
>>10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~(s=q());d[
l++]=s)d=realloc(d,l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(
m=j=l-s-2>31?31:l-s;m&&j>2;j--)for(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if
(!m){for(k=s-g;k;)for(p(m=k>n?n:k);m--;k--)p(d[g++]);p(++j*4+128|(k=s-i+1)>>8);
p(k);g+=j;s=g-1;}}}}
586デフォルトの名無しさん:02/07/28 21:18
>>585
関数ポインタか…
587580:02/07/29 00:07
rangecoderを7行にしたみなさんこちらも挑戦してみてください、と言ってみるテスト
もう一人協力いただければ、文殊の知恵で何とかできるかもしれない

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~((d=realloc(
d,9+l))[l]=q());)l++;putw(l,stdout);memset(d+l,0,8);for(l+=8;m=l-s,m>3;s++){for
(j=m-2>31?31:m;m*j>2;j--)for(i=s<f?0:s-f;i<s*m;)m=memcmp(d+i++,d+s,j);if(!m){
for(k=s-g;k;)for(p(m=k>n?n:k);m--;k--)p(d[g++]);k=++g-i;s+=j;g+=j;p(j*4+132|k>>
8);p(k);}}}}
588デフォルトの名無しさん:02/07/29 00:11
みんな作るときどうしてる?

・普通にコード書く→スペース・タブなどを潰して縮めて見てを繰り返す
・いきなり7行書きをする
>>588
for や if は右にそのまま書く。
インデントは長いブレースのところにだけ置く。
などとして、15行程度のソースコードで書いている。
590饅頭:02/07/29 09:30
多分memsetはいらないと。
あと>>587は動かなかった。
#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1){for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--;s++)d[s]=g>n?d[s-(k&f)]:q();for(;l--;)p(*d++);}else{for(;~(s=q());d[l
++]=s)d=realloc(d,l+9);putw(l,stdout);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l
-s;m&&j>2;j--)for(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k;
)for(p(m=k>n?n:k);m--;k--)p(d[g++]);k=++g-i;s+=j;g+=j;p(j*4+132|k>>8);p(k);}}}}
591561:02/07/29 18:36
15パズル、7行達成しました〜♪

P.java(JDK1.4.0で確認)

import java.awt.*;public class P{public static void main(String[]s){new Frame()
{class B extends Button{String l,r;int o;B(int i){o=i%4+i/4*6;s(r=i+1+"");}void
m(){if((64<<o&4257<<n.o)>0){n.s(l);s("");n=this;}}void s(String n){setLabel(l=n
);}}int g;B n,a[]=new B[16];{setLayout(new GridLayout(4,4));for(;g<16;g++)add(n
=a[g]=new B(g));n.s("");pack();show();for(;g++<999;)a[(int)(Math.random()*16)].
m();}public boolean action(Event e,Object o){if(g<0)System.exit(0);((B)e.target
).m();for(g=15;g-->0;)if(a[g].l!=a[g].r)return 1>0;n.s("E");return 1>0;}};}}

ちょっと仕様変更して、

・ウィンドウクローズボタンをあきらめ
 (七行スレのJavaプログラム標準?(^^;))
・ゲームクリア時、リスタートせず終了するよう変更

としました。
あと、先達のテクニックも参考にさせていただきました。
(匿名クラスを使うのは目から鱗…)
592饅頭:02/07/29 18:58
どうせなのでもう少し削っておきました。

#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1)for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--;s++)p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~(s=q());d[l++]=s)d=realloc(d
,l+9);putw(l,stdout);for(l+=8;s<l-3;s++){for(m=j=l-s-2>31?31:l-s;m&&j>2;j--)for
(i=s<f?0:s-f;m&&i<s;)m=memcmp(d+i++,d+s,j);if(!m){for(k=s-g;k;)for(p(m=k>n?n:k)
;m--;k--)p(d[g++]);p(++j*4+128|(k=s-i+1)>>8);p(k);s=(g+=j)-1;}}}}
>>590
>>587は動作しますが、>>590および>>592は動作しません・・・core dump
memset および復号時の l までの復号は必須のようですよ?

当片 gcc 2.95.2 を使用しています。
594580:02/07/29 20:28
ややっ7行達成と思ったのですが、>>593での指摘通り、動きません。
前スレのレスを見ると、符号語を過剰に生成して、
復号時に余分を切り捨てるという仕組みなので、
アルゴリズムを変えないと memset などは消せないのかもしれませんね。
ちなみに私は Cygwin(or FreeBSD) + gcc 2.95.3 を使用しています。
595饅頭:02/07/29 23:34
むう、一応やってみました。これでオッケーなら七行達成です。
#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1)for(l=getw(stdin),d=malloc(l+8);s<l;)for(g=m=q(),m>n?k=q()|g-128<<8,m=k>>
10:0;m--&&s<l;s++)p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~((d=realloc(d,9+l))[l]=
q());)l++;putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(j=l-s>33?31:l-
s;j>2;j--)for(i=s<f?0:s-f;i<s;)if(!memcmp(d+i++,d+s,j)){for(k=s-g;k;)for(p(m=k>
n?n:k);m--;k--)p(d[g++]);p(j*4+128|(k=s-i+1)>>8);p(k);g+=j;s=g-1;goto z;}z:}}}
596饅頭:02/07/30 00:59
すいません>>595はVCで文句を言われました。
これで七行です。多分gccでもO.K.ではないかと。
#include <stdio.h>
int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d;main(int i){if
(i>1)for(l=getw(stdin),d=malloc(l+8);s<l;s++,m--)!m?g=m=q(),m>n?k=q()|g-128<<8,
m=k>>10:0:0,p(d[s]=g>n?d[s-(k&f)]:q());else{for(;~(s=q());d[l++]=s)d=realloc(d,
l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){for(j=l-s>33?31:l-s;j>2
;j--)for(i=s<f?0:s-f;i<s;)if(!memcmp(d+i++,d+s,j)){for(k=s-g;k;)for(p(m=k>n?n:k
);m--;k--)p(d[g++]);p(j*4+128|(k=s-i+1)>>8);p(k);g+=j;s=g-1;goto z;}z:;}}}
597580:02/07/30 13:33
>>596
おみごと! 今度は gcc でも動作しました。
if や for をまとめる手腕は素晴らしいです。

>>587 は gcc でもファイルによっては動作しないようですね・・・欝。
598*nix厨:02/07/30 18:31
久しぶりに来て見たら、なんと7行!
しかも圧縮+復元してるし素晴らしすぎる
ここまで縮むと思ってなかったので感動です

# おかげで、また何か作りたくなっちゃいました(w
おお!*nix厨たんだ。萌え〜
スライド辞書の別版です、適当に作ったのでまだ縮む筈

#include<stdio.h>/*encoder*/
int X,Z,M,P;char*L,B[17],*W=B,*N,*R,K,*T;main(int c,char**v){FILE*r=fopen(v[1],
"rb"),*w=fopen(v[2],"wb");for(;~(X=fgetc(r));L[Z++]=X)L=realloc(L,Z+1);for(N=L;
N-L<Z;K+=K){if(!K)fwrite(B,K=1,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)>18?M=18:0,(T
=N-4096)<L?T=L:0;T<N;T++,P>X?X=P,R=T:0)for(P=0;P<M&&T[P]==N[P];P++);X*=2<X;P=N-
R;X?*W++=P>>8<<4|X-3:(*B|=K);*W++=X?N+=X,P:*N++;}fwrite(B,1,W-B,w);}

#include<stdio.h>/*decoder*/
int X,Z,M;char*W,F,K,*C;main(int c,char**v){FILE*r=fopen(v[1],"rb"),*w=fopen(v[
2],"wb");for(;~(X=fgetc(r));K+=K){if(!K)F=X,X=fgetc(r),K=1;if(F&K)M++[W=realloc
(W,M+1)]=X;else for(Z=3+X%16,W=realloc(W,M+Z),C=W+M-fgetc(r)-X/16*256-1;Z--;W[M
++]=*C++);}fwrite(W,1,M,w);}
>>600
うわー、これまた奇妙で素晴らしい。
こんな配列の操作方法、普段は絶対に使いたくないですなあ。
M++[W=realloc(W,M+1)]=X
・・・おおっ、(W=realloc())[M++] よりカッコの分だけ短くなるのかー!
>>600
また、ここの住人がまとめて7行にしちゃうよね、と言ってみるテスト
603デフォルトの名無しさん:02/07/31 01:23
>>602
それにはまずageなきゃ.
>>600>>601
M=M++ と同じ問題が起こるのはカンマと論理演算子以外と思っていましたが、
配列のカッコ [] の中と外では、++ の演算順序が決まっているんでしたっけ?
あれ? M[W=realloc(W,1+M++)]=X; とすればいいのでは?

つーか、そんな使い方を実際に目にするのは初めてだ・・・。
神の集うスレッドはここですか?
>>605
あなたも >>602 のお題を成し遂げて神になりましょう、と言ってみるテスト
>604
>601の部分はW=realloc(W,M+α);W[M++]=X;(但しα>0)となれば良い
従って演算順序はどちらでも構わない
むしろM[W=realloc(W,1+M++)]=X;は順序次第でバグるかと思われ

…もっとも実際に順序が規定されてるのかは知らん(w
608昼あげ:02/07/31 10:58
神の集うすれを執拗にage
>>607
どちらにしろ未定義動作。何が起こるかわからない。

某UNIXと某コンパイラはこれやるとカーネルパニック起こすことで有名。
某knkタンが思い浮かぶな<未定義動作
未定義動作といえば、あれでしょう。
というわけで>>600を実行すると鼻から悪魔が出てくるかもしれません。
612*nix厨:02/07/31 19:12
7行リハビリということでBASICを少し刈り込みました
#include <stdio.h>
#include <stdlib.h>
int b[2<<16],f,g,i,n;char l[103][80],c[80],*p,*q,*r,x;S(){for(;*p==32;++p);}T()
{for(r="GOTO \0PUT \0 ET \0 IF \0 RUN\0 QUIT"+6*n++,*r&&*r==*p;++r)++p;return
!*r&&(S()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets
(p=l[i=100]);while(i<101){n=0;S();if(*(q=p)==48||atoi(q))for(p=l[atoi(q)],q+=3;
*p++=*q++;)i=101;else p=!*q?l[++i]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T
()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i]:T()?(I()?p+3:l[++i]):T()?l[
i=l[100][0]=0]:T()?exit(0),0:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g
=I(),b[*(short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<
g:f/g:f*g:f-g:f+g),l[++i]);}puts("OK");}}
きました。主任の登場です(w
>>612
atoi() を関数ポインタで置き換えれば少しちぢむね。
printf() と puts() もまとめて置き換えられないだろうか?

しかし、stdlib.h を何とかしたほうがよっぽどちぢむかもしれん。
>>614
atoiは短くならないみたい
ちなみに4行目の6*n++の後は;の間違い
多分、空白を消す際に間違ったんだろう
>>600の展開
#include<stdio.h>/*decoder*/
int Z,M;char*W,F,K,*C;main(int X,char**v){FILE*r=fopen(v[1],"rb"),*w=fopen(v[2]
,"wb");for(;~(X=fgetc(r));K+=K){if(!K)F=X,X=fgetc(r),K=1;W=realloc(W,M+18);for(
Z=F&K?W[M++]=X,0:(C=W+M-fgetc(r)-X/16*256-1,3+X%16);Z--;W[M++]=*C++);}fwrite(W,
1,M,w);}
>>600>>616 をまとめただけです。
>exec {D|E} file1 file2

#include<stdio.h>
int Z,M,P;char*L,B[17],*W=B,*N,*R,*T,K;main(int X,char**v){FILE*r=fopen(v[2],
"rb"),*w=fopen(v[3],"wb");if(*v[1]-68){for(;~(X=fgetc(r));L[Z++]=X)L=realloc(L,
Z+1);for(N=L;N-L<Z;K+=K){if(!K)fwrite(B,K=1,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)
>18?M=18:0,(T=N-4096)<L?T=L:0;T<N;T++,P>X?X=P,R=T:0)for(P=0;P<M&&T[P]==N[P];P++
);X*=2<X;P=N-R;X?*W++=P>>8<<4|X-3:(*B|=K);*W++=X?N+=X,P:*N++;}T=B;M=W-B;}else{
for(;~(X=fgetc(r));K+=K){if(!K)P=X,X=fgetc(r),K=1;T=realloc(T,M+18);for(Z=P&K?T
[M++]=X,0:(R=T+M-fgetc(r)-X/16*256-1,3+X%16);Z--;T[M++]=*R++);}}fwrite(T,1,M,w);
}
618デフォルトの名無しさん:02/08/01 02:06
クソスレの下に潜ってしまっているので上げ
>617、残り40文字弱

int Z,P,M,Q;char*L,*N,B[17],*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],
"rb"),*w=fopen(v[3],"wb");for(Q=*v[1]-68;~(X=fgetc(r));L[Z++]=X,K+=K){L=realloc
(L,Z+18);if(!Q){for(!K?F=X,X=fgetc(r),K=1:0,P=~F&K?T=L+Z-fgetc(r)-X/16*256-1,3+
X%16:1;--P;L[Z++]=*T++,X=*T);T=L;}}if(Q){for(N=L;N-L<Z;K+=K){if(!K)fwrite(B,K=1
,W-B,w),W=B,*W++=0;for(X=0,(M=L-N+Z)>18?M=18:0,(T=N-4096)<L?T=L:0;T<N;T++,P>X?Q
=N-T,X=P:0)for(P=-1;++P<M&&T[P]==N[P];);2<X?*W++=Q>>8<<4|X-3,N+=X:(*B|=K,Q=*N++
);*W++=Q;}L=B;Z=W-B;}fwrite(L,1,Z,w);}
620619:02/08/01 04:38
すまん、最初の#include<stdio.h>コピペし忘れた
stdlib.hは atoiだけの為みたいだから
extern int atoi(const char *s); と直接書いてはルールに触れる?
>>621
いいと思うよ。やってるの見た気がする。
>>619
fgetc() は getc() と置き換えてよい。
符号器の for(N=L; ...) を N=L=realloc(L, ...) にすると1文字短くなる。

あまり手伝えないなぁ
624623:02/08/01 14:40
>>619
そうか、N=L=realloc(L, ...) にすると、復号器側の T がいらなくなる。
T=L; を消せるし、if(!Q){...} のブレースもいらないな。
625623:02/08/01 14:53
ごめん、他にもいろいろ削れたんで、うpしちゃう。

#include <stdio.h>
int Z,P,M,Q;char*L,*N,B[17],*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],
"rb"),*w=fopen(v[3],"wb");for(Q=*v[1]-68;N=L=realloc(L,Z+18),~(X=getc(r));L[Z++
]=X,K+=K)if(!Q)for(!K?F=X,X=getc(r),K=1:0,P=~F&K?N=L+Z-getc(r)-X/16*256-1,3+X%
16:1;--P;L[Z++]=*N++,X=*N);if(Q){for(;N-L<Z;X>2?*W++=Q>>8<<4|X-3,N+=X:(*B|=K,Q=
*N++),*W++=Q,K+=K)for(X=!K?fwrite(B,K=1,W-B,w),W=B,*W++=0:0,(M=L-N+Z)>18?M=18:0
,(T=N-4096)<L?T=L:0;T<N;T++,P>X?Q=N-T,X=P:0)for(P=-1;++P<M&&T[P]==N[P];);L=B;Z=
W-B;}fwrite(L,1,Z,w);}
626*nix厨:02/08/01 18:07
もう少し短くしました
とりあえずここまでで、また縮むかもと思ったらBASICに手をつけます
これからオリジナルに挑戦、まずネタ探しから始めます

#include <stdio.h>
#include <stdlib.h>
int b[2<<16],f,g,i,n;char*p,l[103][80],c[80],*q,*r,x;S(){for(;*p==32;++p);}T(){
for(r="GET \0OTO \0PUT \0RUN\0 QUIT\0IF"+5*n++;*r&&*r==*p;++r)++p;return!*r&&(S
()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets(p=l[i
=100]);while(i<101){n=0;S();g=atoi(p);if(*(q=p)==48||g)for(p=l[g],q+=3;*p++=*q
++;)i=101;else p=!*q?l[++i]:T()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i
]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T()?l[i=l[100][0]=0]:T()?exit(0),0
:T()?I()?p+3:l[++i]:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g=I(),b[*(
short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<g:f/g:f*g
:f-g:f+g),l[++i]);}puts("OK");}}
とりあえずここまで縮んだ

#include<stdio.h>
int Z,P,Q;char*L,*N,B[17]="rb",*W=B,F,K,*T;main(int X,char**v){FILE*r=fopen(v[2
],B),*w=fopen(v[3],"wb");for(Q=*v[1]-68;N=L=realloc(L,18+Z),~(X=getc(r));L[Z++]
=X,K+=K)for(P=!Q?!K?F=X,X=getc(r),K=1:0,~F&K?T=L+Z-getc(r)-X/16*256-1,3+X%16:1:
1;--P;X=*T)L[Z++]=*T++;if(Q){for(;Z;Z-=(2<X?*W++=Q>>8<<4|X-3,N+=X,X:(*B|=K,Q=*N
++,1)),*W++=Q,K+=K)for(X=!K?fwrite(B,K=1,W-B,w),W=B,*W++=0:0,(T=N-4096)<L?T=L:0
;T<N;T++,P>X?Q=N-T,X=P:0)for(P=-1;++P<(Z>18?18:Z)&&T[P]==N[P];);L=B;Z=W-B;}
fwrite(L,1,Z,w);}
628561:02/08/02 19:07
Javaでブロック崩しと詰めロードランナー(番兵がいない奴(^^;))にも挑戦してみたけど、
ブロック崩しの方は16行、詰めロードランナーの方は17行と敗北…(;_;)
う〜む、題材が無謀過ぎたか。
629デフォルトの名無しさん:02/08/02 19:57
7行達成したのでageときます

#include <stdio.h>
int Z,P,Q;char*L,*N,B[17],F,K,*T;main(int X,char**v){FILE*r=fopen(v[2],"rb"),*w
=fopen(v[3],"wb");for(X=*v[1]-69;N=L=realloc(L,18+Z),~(Q=getc(r));K+=K,L[Z++]=Q
)for(P=X?!K?F=Q,Q=getc(r),K=1:0,~F&K?T=L+Z-getc(r)-Q/16*256-1,3+Q%16:1:1;--P;Q=
*T)L[Z++]=*T++;if(!X){for(;Z-=X;2<X?B[P++]=Q>>8<<4|X-3:(*B|=K,Q=*N,X=1),N+=X,B[
P++]=Q,K+=K)for(X=!K?fwrite(B,K=1,P,w),P=1,*B=0:0,(T=N-4096)<L?T=L:0;T<N;T++,F>
X?Q=N-T,X=F:0)for(F=0;F<(Z>18?18:Z)&&T[F]==N[F];F++);L=B;Z=P;}fwrite(L,1,Z,w);}
630デフォルトの名無しさん:02/08/02 21:16
前スレの雰囲気が出てきたね
631デフォルトの名無しさん:02/08/02 21:20
始めまして。なんか最近面白いサイトが出来たみたいですよ。
掲示板とチャットルームがくっついたサイト?!ですかね。
キャラクター(笑)とかがタダで持てたり、着替えさしたり・・・・
でも今だけらしいですよ入会無料なのって!!
詳しくは下記URLをクリックして、確かめて!!

http://www.e-mansion.co.jp/co/ac.html
>>628=561
とりあえずうpしてみてください。
一人で縮めるより、みんなでああだこうだすると、
思いがけないテクニックが考案されたりして、どんどん縮まるよ。
633561:02/08/02 22:57
>>632
了解っす!
まずはブロック崩しから…。(現在16行)

import java.awt.*;public class B{public static void main(String[]a){new Frame()
{int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m=
new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(
Graphics g){for(int i=0;i<W*H;i++){g.setColor(m[i]>0?Color.BLACK:Color.WHITE);g
.fillRect(i%W*U,i/W*U,U,U);}}public boolean handleEvent(Event e){if(e.id==503){
int n;if((n=e.x/U)<1)n=1;if(n>W-2)n=W-2;p=n+(H-3)*W;}if(e.id==501)g=l;return 1>
0;}};for(;i<H;i++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W
-6;k+=4){m[k+j]=m[k+1+j]=2;l++;}}for(i=W;i>0;){m[--i]=1;m[i+H*W-W]=4;}add(c);
pack();show();try{for(;;Thread.sleep(50)){m[n=b]=0;if(g>0){n+=v((d+16)%64)+v(d)
*W;o=m[n];if(o>0){i=n%W;j=n/W*W;d=(m[b%W+j]>0)?(m[i+b/W*W]>0)?(d+32)&63:-d&63:d
&32|(32-d)&31;if(o==2){m[k=(i&~1)+j]=m[k+1]=0;if(--l<1)g=0;}if(o==3){if((d+=(b%
W-p%W)*2/3)<36)d=36;if(d>60)d=60;}if(o==4){b=p-W;d=56;g=0;}}else b=n;}else b=p-
W;i=(H-3)*W;for(k=0;k<W;k++)m[k+i]=0;m[i]=m[W-1+i]=1;for(k=(j=p)-P/2;k<=j+P/2;k
++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1)%8;c.repaint();}}catch(
Exception e){}}int v(int d){int n;if((n=d%32)>16)n=32-n;return n*(t+1)/8>n*t/8?
(d<32)?1:-1:0;}};}}

アルゴリズム自体試行錯誤中なので、まだ最適化をしてません。
((H-2)*W→690みたいな…)
そこら辺を直せば1〜2行は縮まりそうですが、とても7行は無理っぽい…(;_;)

ボールの数は無制限です(^^;)
それから、終了はControl+Cで…。
634561:02/08/02 23:11
おっと、言い忘れましたが633はB.javaです。
続いて、詰めロードランナー。(L.java : 現在17行)

import java.awt.*;import java.io.*;public class L extends Frame{int W,H,T,U=12,
p,t,v,g,e,l,r,u,d,a,b,i,j,k,x,y,m[],w[];char[]q={'□','田','田',' ', ' ̄','#',
' ','◎','★'};L(String n){try{BufferedReader f=new BufferedReader(new
FileReader(n));W=Integer.valueOf(f.readLine()).intValue();H=Integer.valueOf(f.
readLine()).intValue();m=new int[T=W*H];w=new int[T];for(;i<T;){if((j=i%W)<1)n=
f.readLine();if((m[i]=(int)n.charAt(j)-48)>7)m[p=i]=3;if(m[i++]>6)g++;}Canvas
c=new Canvas(){{setSize(W*U,H*U);}public void paint(Graphics g){for(k=T;--k>=0;
)g.drawChars(q,m[k],1,k%W*U,k/W*U+U);g.drawChars(q,8,1,p%W*U,p/W*U+U);}};add(c)
;pack();show();m:for(;g>0|p>W*2;Thread.sleep(20)){e=0;for(i=T;--i>=0;)if(w[i]>0
&&--w[i]<1){e=m[i]=1;if(i==p)break m;}if((i=m[p])>6){m[e=p]=3;if(--g<1)for(j=T;
--j>=0;)if(m[j]==6)m[j]=5;}if(t>0)t--;else{v=(i!=4&i!=5&(j=m[p+W])!=0&j!=1&j!=5
|d>0&j>1)?W:(u>0&i==5&m[p-W]>2)?-W:(l>0&m[p-1]>2)?-1:(r>0&m[p+1]>2)?1:0;if(v!=0
){p+=v;e=t=4;}else{if(a>0)v=p+W-1;if(b>0)v=p+W+1;if(v>0&m[v]==1)if((j=m[v-W])==
3|j==6){m[v]=3;e=w[v]=500;}}}if(e>0)c.repaint();}}catch(Exception e){}}public
boolean handleEvent(Event e){if((x=402-e.id)>=0&x<2){y=e.key;if(y==52)l=x;if(y
==54)r=x;if(y==56)u=x;if(y==50)d=x;if(y==90|y==122)a=x;if(y==88|y==120)b=x;}
return 1>0;}public static void main(String[]a){new L(a[0]);}}

番兵はおらず、ひたすら穴を掘って金塊を集めます(笑)
こちらは、ゲームの面データを外部から与える形式なので、単独では動きません。

java L map.txt

として、テキストファイルで面データを指定します。
(ずるいかな?(^^;))
現時点で思いつくかぎりの最適化をしましたが、これ以上は縮まらず…(;_;)
635561:02/08/02 23:22
634の詰めロードランナー用面データはこんな感じ↓で作ります。

12
7
000000000000
033333333360
033334337360
075112115360
035177715360
035177715860
000000000000

1行目に幅、2行目に高さを指定します。
配置するブツの番号は

0 : ブロック(掘れない)
1 : レンガ(掘れる)
2 : 落とし穴(外見はレンガと同じ)
3 : 空白
4 : バー
5 : はしご
6 : 脱出はしご
7 : 金塊
8 : ロードランナー

です。
なお、画面端の判定を行っていないため、面データの周囲はブロックで囲ってください。
(アルゴリズム的な意味の『番兵』(笑))

オマケで、逆転掘りデータ(^^;)

7
10
0000000
0353330
0353330
0158310
0131510
0151310
0131510
0151710
0111110
0000000
>>631
勿論7行で作ったんだよね?
出来ればソース欲しいかも
637デフォルトの名無しさん:02/08/03 00:21
>>636
perlとかなら7行掲示板作れそうだな。
荒らし対策とかは無理だろうけど。
webprogかどっかで見掛けたよ、掲示版。
見付けたら張ります。
>>633
定数HやWなんかは、定数でいいと思うよ
>>633 これは難しいねぇ。 >>20 を参考にして少し何とかできませんかね?

import java.awt.*;public class B{public static void main(String[]a){new Frame()
{int W=23,H=32,P=7,U=6,b=W/2+(H-4)*W,n,d=56,p=W/2+(H-3)*W,g,l,t,o,i,j,k;int[]m=
new int[W*H];{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(
Graphics g){for(int i=0;i<W*H;g.fillRect(i%W*U,i++/W*U,U,U))g.setColor(m[i]>0?
Color.BLACK:Color.WHITE);}public boolean handleEvent(Event e){int n=e.x/U;n=n<1
?1:n>W-2?W-2:n;p=e.id==503?n+(H-3)*W:p;g=e.id==501?l:g;return 1>0;}};for(;i<H;i
++){m[j=i*W]=m[W-1+j]=1;if(i%3==1&i>3&i<=H/2)for(k=6-i/3%2*2;k<W-6;k+=4,l++)m[k
+j]=m[k+1+j]=2;}for(i=W;i>0;m[i+H*W-W]=4)m[--i]=1;add(c);pack();show();try{for(
;;Thread.sleep(50)){m[b]=0;o=m[n=b+v((d+16)%64)+v(d)*W];if(g>0)if(o>0){i=n%W;j=
n/W*W;d=m[b%W+j]>0?m[i+b/W*W]>0?(d+32)&63:-d&63:d&32|(32-d)&31;if(o==2){m[k=(i&
~1)+j]=m[k+1]=0;g=--l<1?0:g;}if(o==3){d+=(b%W-p%W)*2;d=d/3<36?36:d>60?60:d;}if(
o==4){b=p-W;d=56;g=0;}}else b=n;else b=p-W;m[i=(H-3)*W]=1;for(k=W-1;k>1;)m[--k+
i]=0;for(k=(j=p)-P/2;k<=j+P/2;k++)if(k>=(H-3)*W&k<(H-2)*W)m[k]=3;m[b]=1;t=(t+1)
%8;c.repaint();}}catch(Exception e){}}int v(int d){o=d%32;o=o>16?32-o:o;return
o*(t+1)/8>o*t/8?(d<32)?1:-1:0;}};}}
>>633とは別のブロック崩しを自分で作ってみました(現在9行)
JAVAアプレットです

C.java

import java.awt.*;public class C extends java.applet.Applet{int W=15,H=21,x=1,y
=W,i,m[]=new int[W*H],p=278,b=290;{for(;i<W*11;m[i++]=i<W?2:1);for(i=0;i<H;m[i*
W]=m[i++*W+14]=2);for(i=0;i<5;m[b+i++]=2);new Thread(){public void run(){try{
for(;;p+=x+y,repaint(),Thread.sleep(80))while(s(0,y)|s(x,0)|s(x,y));}catch(
Exception e){}}}.start();}boolean s(int t,int u){if((i=m[p+t+u])>0){x-=t*2;y-=u
*2;m[p+t+u]-=i>1?0:2;}return i>0;}public boolean keyDown(Event e,int k){if(k==
1007&m[b+5]<2){m[b]=0;m[b+++5]=2;}if(k==1006&m[b-1]<2){m[b+4]=0;m[b---1]=2;}
return 1>0;}public void paint(Graphics g){for(i=0;i<W*H;i++)g.drawString(m[i]>0
|i==p?"■":"□",i%W*10,i/W*10);}}

C.html

<HTML><BODY>
<APPLET code="C.class" width="150" height="200"></APPLET>
</BODY></HTML>

jdk1.4の場合、javac -target 1.1 C.java としてください
appletviewerおよびIE5で動作確認済(ちらつくのは仕様です)
643561:02/08/05 18:55
>>641
参考になりました。三項演算子を効果的に使うんですね。
かなり短縮できました。(ブロック崩し - B.java : 現在13行)

import java.awt.*;public class B{public static void main(String[]a){new Frame()
{int W=26,H=33,T=W*H,P=7,U=6,b=1+W,d=56,p=1+T-W*3,g,l,t,i,j,k,u,m[]=new int[T];
{Canvas c=new Canvas(){{setSize(W*U,H*U);}public void update(Graphics g){for(u=
0;u<T;g.fillRect(u%W*U,u++/W*U,U,U))g.setColor(m[u]>0?Color.BLACK:Color.WHITE);
}public boolean handleEvent(Event e){k=e.x/U;k=k<1?1:k>W-2?W-2:k;p=e.id==503?k+
T-W*3:p;g=e.id==501?l:g;return 1>0;}};for(;i<T;i++)m[i]=(j=i/W)>=H-1?4:j<1|(k=i
%W)<1|k>W-2?1:j>3&j<H/2+2&j%3>1&k>3&k<W-4&((j/3^k/2)&1)>0?2+0*++l:0;l/=2;add(c)
;pack();show();try{for(;;Thread.sleep(50)){m[b]=0;i=g>0?b+v((d+16)%64)+v(d)*W:p
-W;j=g>0?m[i]:0;if(j>0){d=m[i%W+b/W*W]>0?m[b%W+i/W*W]>0?(d+32)&63:(32-d)&63:-d&
63;if(j==2){m[i]=m[i^1]=0;g=--l<1?0:g;}if(j==3)d=(d+=b%W-p%W)<36?36:d>60?60:d;
if(j==4){d=56;g=0;}i=b;}m[b=i]=1;i=p%W-P/2;for(j=0;j<W;j++)m[j+T-W*3]=j>=i&j<i+
P?3:j<1|j>W-2?1:0;t=(t+1)%8;c.repaint();}}catch(Exception e){}}int v(int d){j=d
%32;j=j>16?32-j:j;return j*(t+1)/8>j*t/8?d<32?1:-1:0;}};}}

ただ、「g=--l<1?0:g;」のような処理はアトミックじゃないので、別スレッドから変更さ
れた場合に、やや心配ではありますが。(取り越し苦労?(^^;))

>>642
やっぱり仕様そのものが問題だったかも(^^;)
ラケットの位置により反射角度が変化ってのはオーバースペックかな?
あと、ApplicationよりAppletの方が短くできそうですね。
ShiftJISのヒルベルト曲線
EUCは33962→43180で大丈夫ではないかと

#include <stdio.h>
#include <stdlib.h>
main(int k,char**v){int a[]={17699,43061,39682,43056,17779,17697,47768,39746,
45464,31384,42549,27458},m,s,x,y;for(y=m=1<<atoi(v[1]);y--;puts(""))for(x=m;x--
;s=33962+s%6,printf("%c%c",s>>8,s))for(s=0,k=m;k/=2;s=(a[s]>>((x&k?0:4)+(y&k?0:
8)))&15);}

実行例
┓┏━┓┏━┓┏
┗┛┏┛┗┓┗┛
┏┓┗┓┏┛┏┓
┃┗━┛┗━┛┃
┗┓┏━━┓┏┛
┏┛┗┓┏┛┗┓
┃┏┓┃┃┏┓┃
┗┛┗┛┗┛┗┛
645デフォルトの名無しさん:02/08/05 21:41
>>644
ヒルベルト走査は作ろうと思ってたんだが、先を越されてしまったな。
Java で作ろうと思ってたから、これより短くなることはなかっただろう。

いや、お見事。
646デフォルトの名無しさん:02/08/05 21:59
どこが曲線なの?
>>646
お前…
>>646
今小学校何年生ですか?
曲線は、中学までに習うはず。それまでがまんがまん。
649age:02/08/06 01:06
カラアゲうまうま
>>643
私ごときが口を挟むのは失礼とは存じますが、、

public class B { を、class B にして7文字。
Color.black,Color.white を、Color.red, Color.blue で3文字。
32 をint変数として、2文字。
Thread.sleep(50) を、Thread.sleep(H) として1文字(汗;

以上、重箱の隅をつついてみました。
651561:02/08/07 00:08
>>650
>私ごときが口を挟むのは失礼とは存じますが、、

いやいや、そんなことはありませんです。参考になります。
特に、mainのクラスがpublicじゃなくてもいいというのは知りませんでした。
(SUNのサンプルにも非publicなクラスがありますから、安心して使えそうですね)
http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#11484
7文字減らせますから、七行スレのJava使いには朗報です。

# 赤青の方も試してみましたが…目にキツいですね(笑)

成果を採り入れて、詰めロードランナーが一行縮みました。(L.java : 現在16行)

import java.awt.*;import java.io.*;class L extends Frame{int W,H,T,U=12,p,t,g,e
,l,r,u,d,a,b,i,j,k,x,y,m[],w[];char[]q={'□','田','田',' ', ' ̄','#',' ','◎',
'★'};L(String n){try{BufferedReader f=new BufferedReader(new FileReader(n));W=
Integer.valueOf(f.readLine()).intValue();H=Integer.valueOf(f.readLine()).
intValue();m=new int[T=W*H];w=new int[T];for(;i<T;g+=m[i++]>6?1:0){n=(j=i%W)<1?
f.readLine():n;if((m[i]=(int)n.charAt(j)-48)>7)m[p=i]=3;}Canvas c=new Canvas(){
{resize(W*U,H*U);}public void paint(Graphics g){for(k=T;k-->0;)g.drawChars(q,m[
k],1,k%W*U,k/W*U+U);g.drawChars(q,8,1,p%W*U,p/W*U+U);}};add(c);pack();show();m:
for(;g>0|p>W*2;Thread.sleep(20)){e=0;for(i=T;i-->0;)if(w[i]>0&&--w[i]<1){e=m[i]
=1;if(i==p)break m;}if((i=m[p])>6){m[e=p]=3;if(--g<1)for(g=T;g-->0;)m[g]-=m[g]>
5?1:0;}if(t>0)t--;else{p+=i=i!=4&i!=5&(j=m[p+W])>1&j!=5|d>0&j>1?W:u>0&i==5&m[p-
W]>2?-W:l>0&m[p-1]>2?-1:r>0&m[p+1]>2?1:0;if(i!=0)e=t=4;if(i==0&(i=a>0?p+W-1:b>0
?p+W+1:0)>0&m[i]==1)if((j=m[i-W])==3|j==6){m[i]=3;e=w[i]=500;}}if(e>0)c.repaint
();}}catch(Exception e){}}public boolean handleEvent(Event e){y=(x=402-e.id)>=0
&x<2?e.key-48:0;l=y==4?x:l;r=y==6?x:r;u=y==8?x:u;d=y==2?x:d;a=y==42|y==74?x:a;b
=y==40|y==72?x:b;return 1>0;}public static void main(String[]a){new L(a[0]);}}

7行には達するべくもなさそうですが、結構気に入ってます。
(最近更新してない自分のサイトにでも置こうかな…(^^;))
ヒルベルト走査関連

走査順に座標を求める
#include<stdio.h>
#include<stdlib.h>
main(int w,char**v){size_t k,m=1<<atoi(v[1]),n=m*m,s,t,x,y,z;for(;n--;printf(
"%d(%d,%d)\n",m*m+~n,x,y))for(x=y=0,t=n,s=54,k=m;k/=2;t%=k*k,x+=w&68?k:0,y+=w>4
?0:k,s=--z&2?z&1?(s&195)+(s&12)*4+(s/4&12):(s&60)+s/64+s%4*64:s)for(w=64;t-(z=s
/w%4)*k*k>=k*k;w/=4);}

座標から走査順を求める
#include<stdio.h>
#include<stdlib.h>
main(int w,char**v){int k,m=1<<atoi(v[1]),s,t,x,y=m;for(;y--;puts(""))for(x=m;x
--;printf("%02X ",t))for(t=0,s=54,k=m;k/=2;w=(s>>((y&k?4:0)+(x&k?2:0)))&3,t+=k*
k*w,s=--w&2?w&1?(s&195)+(s&12)*4+(s/4&12):(s&60)+s/64+s%4*64:s);}

↑を利用しBITMAPCOREHEADERのBMPを出力
#include<stdio.h>
#include<stdlib.h>
FILE*f;O(a,b){for(;b--;a>>=8)putc(a,f);}main(int w,char**v){int k,m=1<<atoi(v[1
]),s,t,x,y;f=fopen("hilbert.bmp","wb");O(19778,2);O(m*m*3+26,8);O(26,4);O(12,4)
;O(m*65537,4);O(1572865,4);for(y=m;y--;)for(x=m;x--;O(t,3))for(t=0,s=54,k=m;k/=
2;w=(s>>((y&k?0:4)+(x&k?2:0)))&3,t+=k*k*w,s=--w&2?w&1?(s&12)*4+(s&195)+(s/4&12)
:s/64+(s&60)+s%4*64:s);}

BITMAPINFOHEADERのBMPを出力
#include<stdio.h>
#include<stdlib.h>
FILE*f;O(a,b){for(;b--;a>>=8)putc(a,f);}main(int w,char**v){int k,m=1<<atoi(v[1
]),s,t,x,y;f=fopen("hilbert.bmp","wb");O(19778,2);O(m*m*3+54,8);O(54,4);O(40,4)
;O(m,4);O(m,4);O(1572865,8);O(m*m*3,4);O(x=11812,4);O(x,12);for(y=m;y--;)for(x=
m;x--;O(t,3))for(t=0,s=54,k=m;k/=2;w=(s>>((y&k?0:4)+(x&k?2:0)))&3,t+=k*k*w,s=--
w&2?w&1?(s&12)*4+(s&195)+(s/4&12):s/64+(s&60)+s%4*64:s);}

BMP2種はMSPAINTとGIMPで表示を確認
653*nix厨 :02/08/09 21:02
小さな言語シリーズで行きます
現在、Lispにチャレンジ中です
20行切ったら公開します
Cでsub-Cを!
655デフォルトの名無しさん:02/08/11 09:08
なんで7行X80じゃ無いの?
>>655
末尾に改行があるから。
657age:02/08/13 02:20
ほしゅ
658デフォルトの名無しさん:02/08/13 16:39
age
659デフォルトの名無しさん:02/08/15 03:01
最近、ちょっとさびしいねあげ
660*nix厨:02/08/16 18:10
お盆だからしょうがないよ
漏れも実家に帰っているのでコードが書けましぇん
実装に向けて機能の刈り込みとか細々やってます
暇だったので前スレにあったSHA1を試してみた
でも10行が限界、ここから更に3行は無理ぽ

#include<stdio.h>
size_t*p,n,i,z,l,h,B[16],W[80],I[]={0x67452301,0xefcdab89,0x98badcfe,271733878,
0xc3d2e1f0},H[85],d;E(s){for(z=4;z--;s>>=8)d=d<<8|s&255;}X(k){*p+=(p[1]<<5|p[1]
>>27)+p[5]+W[i++]+k;p[2]=p[2]<<30|p[2]/4;}Y(k){*p=p[2]^p[3]^p[4];X(k);}S(a){for
(a=4;a--;)L(h>>a*8);}L(c){n++[(char*)B]=c;if(!(n&=63)){for(;i<80;W[i++]=d)i>15?
p=W+i-16,z=p[13]^p[8]^p[2]^*p,d=z+z|z>>31:E(B[i]);memcpy(p=H+80,I,20);for(p--,i
=0;i<80;p--)i/20&1?Y(i<40?0x6ed9eba1:0xca62c1d6):X(i<20?*p=p[2]&(p[3]^p[4])^p[4
],0x5a827999:(*p=p[2]&(p[3]|p[4])|p[3]&p[4],0x8f1bbcdc));for(i=6;--i;)I[i-1]+=p
[i];}}main(int a,char**v){FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))
L(a);for(L(128);n-56;)L(0);for(S(),S(h=l);i<5;)printf("%08x",I[i++]);}
662561:02/08/19 18:49
お盆明けage〜。
3D迷路です。(M.java : 現在12行)

import java.awt.*;class M{public static void main(String[]a){new Frame(){int W=
200,M=15,G=5,x,y,d,u,v,a,b,i,j;int[]s={0,1,0,-1,0},m[]=new int[M][M],w[]={{36,
48,50,40,7,3},{36,80,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}},q;
Canvas c;{for(;i<M*M;)m[x=i%M][y=i++/M]=x<2|y<2|x>M-3|y>M-3?1:0;m[M-3][M-2]=2;
for(i=G*G;i>0;)if(m[x=(j=(int)(Math.random()*G*G*4))%G*2+3][y=j/G%G*2+3]<1&m[x+
s[j/=G*G]*2][y+s[j+1]*2]>0)m[x][y]=m[x+s[j]][y+s[j+1]]=i/i--;x=y=2;add(c=new
Canvas(){{resize(W,W);}public void paint(Graphics g){for(i=0;i<8;i++){u=(i+2)%3
-1;v=2-i/3;j=m[x+s[d]*u+s[d+1]*v][y-s[d+1]*u+s[d]*v];if(j>0){g.setColor(j>1?
Color.RED:Color.GRAY);Polygon p=new Polygon();q=w[(i%3)*2/3+(i/3)*2];for(j=0;j<
q.length;){u=q[j++];u=i%3<1?120-u:u;p.addPoint(u/11*20,u%11*20);}g.fillPolygon(
p);}}}});pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d
+k&3:d;if(k==5&m[a=x+s[d+1]][b=y+s[d]]<1){x=a;y=b;}c.repaint();return 1>0;}};}}

せっかくだから赤い扉を目指してください(笑)
(辿り着いても、何も起きませんけど(^^;))
操作は8で前進、4/6で左右90度回転、5で180度回転、です。

迷路作成部分が2行半ほどあるのが無駄かな。
迷路を固定にしちゃえば、もう少し縮められそうですが…。
>661
9行にしか縮まらん

#include <stdio.h>
size_t*p,n,i,z,l,h,B[16],W[80],I[]={0x67452301,0xefcdab89,0x98badcfe,271733878,
0xc3d2e1f0},H[85],d;L(c){((char*)B)[3^n++]=c;if(!(n&=63)){for(;i<80;W[i++]=d)d=
i>15?p=W+i-16,z=p[13]^p[8]^p[2]^*p,z+z|z>>31:B[i];for(i=!memcpy(p=H+80,I,20);--
p,i<80;*p+=(p[1]<<5|p[1]>>27)+p[5]+W[i++]+c,p[2]=d<<30|d/4)d=p[2],z=p[3],c=p[4]
,c=i/20&1?*p=d^z^c,i<40?0x6ed9eba1:0xca62c1d6:i<20?*p=d&(z^c)^c,0x5a827999:(*p=
d&(z|c)|z&c,0x8f1bbcdc);for(i=6;--i;)I[i-1]+=p[i];}}S(a){for(a=4;a--;)L(h>>a*8)
;}main(int a,char**v){FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a)
;for(L(128);n-56;)L(0);for(S(),S(h=l);i<5;)printf("%08x",I[i++]);}
期待age




                              夏だから期待sage。
SHA1(>663)の続きだが、漏れはそろそろ限界
でもbig endian用がinclude以外は7行に逝ったからいいや

>little endian用
#include <stdio.h>
size_t*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z,l
,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[
8]^p[2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[
2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27)+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^c:
882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;)*p
+=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb")
;for(;~(a=getc(f));h+=!(l+=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;)
printf("%08x",H[z++]);}

>big endian用
#include <stdio.h>
size_t*p,H[186]={19088743,0x89abcdef,0xfedcba98,0x76543210,0xf0e1d2c3},n,d,z,l,
h;L(c){n++[(char*)p=H+90]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^p[8]^p[
2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=p[2],c=
p[3],p[-1]=p[4]+(*p<<5|*p>>27)+(z/20&1?z>59?d&(n^c)^c:882459459+(d&(n|c)|n&c):(
z>39?341275144:0x6fe0483d)+(d^n^c))+H[185-z]+0x5a827999;for(;z=n=H-p--;)*p+=p[5
];}}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(;~(a=getc(f));h+=!(l+=8))L(a)
;for(L(128);n-56;)L(0);p[14]=h;n=63;for(L(p[15]=l);z<5;)printf("%08x",H[z++]);}
666sage:02/08/24 10:32
IyBNSU5PUlMgVU5ERVIgQUdFIDE4IEFSRSBQUk9ISUJJVEVEIFRPIEVYRUNVVEUgVEhJUyBT
Q1JJUFQuIDE4GyRCOlBMJEt+O0hNUTZYO18bKEIuCnN1YiBnZXR7bG9jYWwkXz1zaGlmdDtg
dzNtIC1kdW1wX3NvdXJjZSAkX2BvcmBseW54IC1zb3VyY2UgJF9gb3JgR0VUICRfYG9yIGRp
ZX0KJGI9Imh0dHA6Ly93d3cua2suaWlqNHUub3IuanAvfnJ1YnkvZW1vbi8iOyRyPXEnaHR0
cDovL1stXy5+YS16QS1aMC05JS9dK1wucm0nOwptYXB7bWFwe3N5c3RlbSJ3Z2V0IC14ICRf
In1nZXQoJGIuJF8pPX4vJHIvZ31xdyh0aW1lLmh0bSBtYWluLmh0bWwgbWFpbjIuaHRtbCkK
>>662
やー、縮まりませんな。

import java.awt.*;class M{public static void main(String[]a){new Frame(){int M=
15,x,y,d,u,v,a,b,i,j;int[]s={0,1,0,-1,0},m[]=new int[M][M],q,w[]={{36,48,50,40,
7,3},{36,80,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}};Canvas c;{for
(;i<225;m[12][13]=2)m[x=i%M][y=i++/M]=x<2|y<2|x>12|y>12?1:0;for(i=25;i>0;x=y=2)
if(m[x=(j=(int)(Math.random()*100))%5*2+3][y=j/5%5*2+3]<1&m[x+s[j/=25]*2][y+s[j
+1]*2]>0)m[x][y]=m[x+s[j]][y+s[j+1]]=i/i--;add(c=new Canvas(){{resize(200,200);
}public void paint(Graphics g){for(i=0;i<8;){u=(i+2)%3-1;v=2-i/3;j=s[d+1];j=m[x
+s[d]*u+j*v][y-j*u+s[d]*v];g.setColor(j>1?Color.RED:Color.GRAY);g.fillPolygon(
new Polygon(){{q=w[(i%3)*2/3+(i/3)*2];for(v=0;j>0&&v<q.length;addPoint(u/11*20,
u%11*20)){u=q[v++];u=i%3<1?120-u:u;}}});i++;}}});pack();show();}public boolean
keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[a=x+s[d+1]][b=y+s[d]]<
1){x=a;y=b;}c.repaint();return 1>0;}};}}
668デフォルトの名無しさん:02/08/24 23:54
>>665
little endian 版、標準入力から読むようにして7行

unsigned*p,H[186]={0x67452301,0xefcdab89,0x98badcfe,271733878,0xc3d2e1f0},n,d,z
,l,h;L(c){((char*)p=H+90)[3^n++]=c;if(n>63){for(;z<80;p++)p[16]=++z>16?n=p[13]^
p[8]^p[2]^*p,n+n|n>>31:*p;for(memcpy(p-=85,H,20);z--;1[p--]=d<<30|d/4)d=p[1],n=
p[2],c=p[3],p[-1]=p[4]+(*p<<5|*p>>27)+H[185-z]+0x5a827999+(z/20&1?z>59?d&(n^c)^
c:882459459+(d&(n|c)|n&c):(z>39?341275144:0x6fe0483d)+(d^n^c));for(;z=n=H-p--;)
*p+=p[5];}}S(a){for(z=4;z;)L(a>>--z*8);}main(a){for(;~(a=getchar());h+=!(l+=8))
L(a);for(L(128);n-56;)L(0);for(S(h),S(l);z<5;)printf("%08x",H[z++]);}
>>653
20行 Lisp 期待してます。
FORTHのサブセットのインタープリターってできないかな?
>>670
まずは逆ポーランド計算機だな。
Cならincludeを除いて2行くらいで書ければいけるかもしれぬ。

・・すでにあったような気がするけど、気のせいか。
宿題スレのお題を元に
7行で提出しる!

ってか、一度やってみてほしい。
673665:02/08/25 17:30
SHA1でH[2]を0で初期化、mainでfor(H[2]=~*H;~(a=...とすれば1文字減る事に今更気付いた
674ageとくか:02/08/25 20:00
>>672
大抵の宿題は7行よりはるかに短く書けてしまう罠
printfで終わりだったり名(w
676667:02/08/26 02:43
>>667
q=w[(i%3)*2/3+(i/3)*2];をq=w[5-v*2-(u==0?0:1)];として1文字減る
>>676
それならq=w[(u==0?5:4)-v*2];とできる?
3次元表示迷路、そのままだとだめそうね。
位置を(x,y)で管理せずにp=x*15+yとしたpで扱うとどうかな。
679667:02/08/26 03:07
>>677
あ、そうですた。
>>678
試してみます。
680667:02/08/26 04:18
1行短くなって11行になりますた。
迷路を1次元配列で扱うようにしてすっきりしたので、別のところが縮むかも。

import java.awt.*;class M{public static void main(String[]a){new Frame(){Canvas
c;int[]s={1,-15,-1,15,1},q,w[]={{36,48,50,40,7,3},{36,80,84,40},{12,36,40,20,9,
1},{12,100,108,20},{0,12,20,10}};int d,u,v,a,i,j,m[]=new int[225],p;{for(;i<225
;m[193]=2)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(i=25;i>0;p=32){p=(j=(int)(Math.
random()*100))/4;if(m[p=p/5*20+p*2+48]<1&m[p+s[j%=4]*2]>0)m[p]=m[p+s[j]]=i/i--;
}add(c=new Canvas(){{resize(200,200);}public void paint(Graphics g){for(i=0;i<8
;i++){u=(i+2)%3-1;v=2-i/3;j=m[p+s[d]*v-s[d+1]*u];g.setColor(j>1?Color.RED:Color
.GRAY);g.fillPolygon(new Polygon(){{q=w[(u==0?5:4)-v*2];for(v=0;j>0&v<q.length;
addPoint(u/11*20,u%11*20)){u=q[v++];u=i%3<1?120-u:u;}}});}}});pack();show();}
public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[a=p+s[d
]]<1)p=a;c.repaint();return 1>0;}};}}
>>680
絶対に壁が置かれる25点を順番に調べて、その4方位の壁の無い部分をランダムで選択。
少し短く&速くなるのではないかな。
682667:02/08/26 04:56
>>681
ちょっとゲーム性は落ちる(迷路がやや簡単になる)けど、その分短くなりますた。

# それにしても、こんな時間まで何を...
683667:02/08/26 18:47
迷路 10行と8文字

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,v,i,j,p;int[]s={1,-15,-1,15,1},q,m=new int[225],w[]={{36,48,50,40,7,3},{36,80
,84,40},{12,36,40,20,9,1},{12,100,108,20},{0,12,20,10}};Canvas c=new Canvas(){{
resize(200,200);}public void paint(Graphics g){for(i=0;i<8;i++){u=(i+2)%3-1;v=2
-i/3;j=m[p+s[d]*v-s[d+1]*u];g.setColor(j>1?Color.RED:Color.GRAY);g.fillPolygon(
new Polygon(){{q=w[(u==0?5:4)-v*2];for(v=0;j>0&v<q.length;addPoint(u/11*20,u%11
*20)){u=q[v++];u=i%3<1?120-u:u;}}});}}};{for(;i<225;m[193]=2)m[i]=i<30|i>194|(2
+i++)%15<4?1:0;for(;j<25;p=32)if(m[(p=j/5*20+j*2+48)+s[i=(int)(Math.random()*4)
]*2]>0)m[p]=m[p+s[i]]=++j/j;add(c);pack();show();}public boolean keyDown(Event
e,int k){k-=51;d=k>0&k<4?d+k&3:d;if(k==5&m[k=p+s[d]]<1)p=k;c.repaint();return 1
>0;}};}}
684デフォルトの名無しさん:02/08/26 20:35
お題:逆ポーランド電卓、はどなたか?
>>685
FORTHにしる!
文字数の都合で、茶色の中を黒い部分を目指すことになりますた。
ここいらで限界です。

import java.awt.*;class M{public static void main(String[]a){new Frame(){int[]s
={1,-15,-1,15,1},m=new int[225],w={48,50,40,7,3,36,80,84,40,40,40,36,12,1,9,20,
20,20,108,100,12,20,10,0,0,0};int d,u,v,i,j,p,q;Canvas c=new Canvas(){{resize(
200,200);}public void paint(Graphics g){for(i=0;i<8;g.fillPolygon(new Polygon()
{{for(v=0;j>0&v<6;addPoint(u/11*20,u%11*20)){u=w[(i%3)/2*5+i/3*10+v++];u=i%3<1?
120-u:u;}i++;}}))g.setColor(new Color(j=m[p+s[d]*(2-i/3)-s[d+1]*((i+2)%3-1)]<<
23));}};{for(;i<225;m[193]=2)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(;j<25;p=32)if
(m[(p=j/5*20+j*2+48)+s[i=(int)(Math.random()*4)]*2]>0)m[p]=m[p+s[i]]=++j/j;add(
c);pack();show();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d
;if(k==5&m[k=p+s[d]]<1)p=k;c.repaint();return 1>0;}};}}
>>687
なかなか短くなってるけど、もっと減らさないとだめそうだね
キー入力判定部分と、迷路描画部分が短くなりそうだけど
予約語と定数が多いので、7行化はかなり困難げ
689688:02/08/27 22:53
import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,v,i,j,p;int[]s={1,-15,-1,15,1},m=new int[u=240],w={48,50,40,7,3,36,80,84,40,
40,40,36,12,1,9,20,20,20,108,100,12,20,10,0,0,0};Canvas c=new Canvas(){{resize(
u,u);}public void paint(Graphics g){for(i=-1;++i<8;g.fillPolygon(new Polygon(){
{for(v=0;j>0&v<6;addPoint((i%3<1?120-u:u)/11*24,u%11*24))u=w[(i%3)/2*5+i/3*10+v
++];}}))g.setColor(new Color(j=m[p+s[d]*(2-i/3)-s[d+1]*((i+2)%3-1)]<<23));}};{
for(p=32;i<u;)m[i]=i<30|i>194|(2+i++)%15<4?1:0;for(m[193]=2;j<25;)m[v=j/5*20+j*
2+48]=m[v+s[i=(int)(Math.random()*4)]]=m[v+s[i]*2]>0?++j/j:0;add(c);pack();show
();}public boolean keyDown(Event e,int k){k-=51;d=k>0&k<4?d+k&3:d;p=k==5&m[k=p+
s[d]]<1?k:p;c.repaint();return 1>0;}};}}
>>687私にはこれ以上は無理でした。パラダイムシフトを期待して、あげ。
690561:02/08/28 18:56
縮んできましたね〜。
色んなテクニックがあって、ほんと参考になります。

>689
「パラダイムシフト」なんてレベルではありませんが、ちょっと短くなりました。
(M.java : 現在10行[9行+19文字])

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,i,j,p;int[]s={1,-15,-1,15,1},w={0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m=
new int[u=240];Canvas c=new Canvas(){{resize(u,u);}public void paint(Graphics g
){for(i=9;--i>0;g.fillPolygon(new Polygon(){{for(j=j/2*6-1;++j<6;addPoint((i%3<
2?120-u:u)/11*24,(j<3?120-u:u)%11*24))u=w[(i%3+1)/2*3+i/3*6+(j<3?j:5-j)-3];}}))
g.setColor(new Color((j=m[p+i/3*s[d]-((i+1)%3-1)*s[d+1]])<<23));}};{for(;i<165;
)m[i+28]=i++%15<4?0:2;for(m[193]=1;j<25;p=32)m[p=j/5*20+j*2+48]=m[p+s[i=(int)(
Math.random()*4)]]=m[p+s[i]*2]<2?++j*0:2;add(c);pack();show();}public boolean
keyDown(Event e,int k){k-=51;p=k==5&m[k=p+s[d=k>0&k<4?d+k&3:d]]>1?k:p;c.repaint
();return 1>0;}};}}

通路=0,壁=1,扉=2だったのを、通路=2,壁=0,扉=1にしました。
迷路の初期化部分が短縮できたようです。
また、この結果「茶色の中を黒い部分を目指す」が「黒の中を茶色い部分を目指す」とな
ります。
さらに、壁ポリゴンが一枚あたり5(+1)データだったのを、3データに減らしました。
ただ、このせいでaddPointの辺りがちょっと冗長ぎみに…。
>>690 5文字だけだけど
配列sをwとまとめる(sはwで置き換え)。宣言も[]をまとめる。
int d,u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int[u=240];
壁描画部分で、もとwとのずれを修正。
u=w[(i%3+1)/2*3+i/3*6+(j<3?j:5-j)+2];
692561:02/08/29 19:16
3D迷路、9行達成&保守age。(M.java : 現在9行)

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int
[u=240];Canvas c=new Canvas(){{resize(u,u);}public void paint(Graphics g){for(i
=9;--i>0;g.fillPolygon(new Polygon(){{for(j=j/2*6;j<6;addPoint((i%3<2?120-u:u)/
11*24,(j++<3?120-u:u)%11*24))u=w[i*i%3*3+i/3*6+(j*j%5+8)/3];}}))g.setColor(new
Color((j=m[p+i/3*w[d]-(-~i%3-1)*w[d+1]])<<23));}};{for(add(c);i<165;m[193]=1)m[
i+28]=i++%15<4?0:2;for(pack();j<25;p=32)m[p=j/5*20+j*2+48]=m[p+w[i=(int)(Math.
random()*4)]]=m[p+w[i]*2]<2?++j*0:2;show();}public boolean keyDown(Event e,int
k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>1?k:p;c.repaint();return 1>0;}};}}

>691
どうもです。役立ちました〜。

あと、いくつか狡いテクニックを駆使しました(笑)

・n+1と-~nが等価であるため、"(i+1)%3"を"-~i%3"へ変更。
 単項演算子は優先順位が高いので括弧が不要になります。(せこ)

・n*n%3の数列が0,1,1,0,1,1,...になることを利用して、
 "(i%3+1)/2*3"を"i*i%3*3"に変更。

・n*n%5の数列がn=0〜5では0,1,4,4,1,0になることを利用して、
 "(j<3?j:5-j)-2"を"(j*j%5+8)/3"に置き換え。

ソース見ても、何やってるのか分からない状態に…(^^;)
>>692
アプレット版を作ってみました。クラス名変えてます。
appletviewerでは動いたけど、IE5.5だとだめでした。
-(-~i%3-1) って、 +(1-~i%3) でも良い?

import java.awt.*;public class N extends java.applet.Applet{int d,u,i,j,p,w[]={
1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int[u=240],x=120
;public void paint(Graphics g){for(i=9;--i>0;g.fillPolygon(new Polygon(){{for(j
=j/2*6;j<6;addPoint((i%3<2?x-u:u)/11*24,(j++<3?x-u:u)%11*24))u=w[i*i%3*3+i/3*6+
(j*j%5+8)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]+(1-~i%3)*w[d+1]])<<23));}
{for(;i<165;m[193]=1)m[i+28]=i++%15<4?0:2;for(;j<25;p=32)m[p=j/5*20+j*2+48]=m[p
+w[i=(int)(Math.random()*4)]]=m[p+w[i]*2]<2?++j*0:2;}public boolean keyDown(
Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>1?k:p;repaint();return
1>0;}}

<HTML><BODY>
<APPLET code="N.class" width="240" height="240"></APPLET>
</BODY></HTML>
694693:02/08/29 21:02
言い忘れましたが、x=120 は穴埋めです。
695561:02/08/30 00:28
>693
おっ、鋭いです〜。
ただ、"+(1-~i%3) "ではなくて"+(1+~i%3) "じゃないかな?

あと、
"w[i*i%3*3+i/3*6+(j*j%5+8)/3]"の部分は
"w[~-i*2/3*3+(j*j%5+17)/3]"と短縮できることが判明しました。

# x=120は無いほうがいいような…。
最単純RLE(復号込)
#include <stdio.h> /* encode:this.exe e in out / decode:this.exe d in out */
int i=1,p;main(int c,char*v[]){FILE*f=fopen(v[2],"rb"),*o=fopen(v[3],"wb");if(
*v[1]=='e'){p=fgetc(f);while((c=fgetc(f))>=0){if(!c-!p&&i<255)i++;else{fwrite(
&p,1,1,o);fwrite(&i,1,1,o);p=c;i=1;}}}else while((c=fgetc(f))>=0){if((p=fgetc(
f))<0)break;for(i=0;i<p;i++)fwrite(&c,1,1,o);}}
>>696
だからね。概出ものを持ってくるときはね、何か一工夫してほしいのね。
2行で書くとかね、良いアイデア・工夫があるとかね、面白くなってるとかね。
http://pc3.2ch.net/test/read.cgi/tech/984182993/101
>>695
ふと気が付いた、何でCanvas使っているんだろう?
というわけで、40文字くらい減らせました。

import java.awt.*;class M{public static void main(String[]a){new Frame(){int d,
u,i,j,p,w[]={1,-15,-1,15,1,0,0,u=12,u,u,100,1,u,p=36,p,p,80,3,p,48},m[]=new int
[u=240];public void paint(Graphics g){for(i=9;--i>0;g.fillPolygon(new Polygon()
{{for(j=j/2*6;j<6;addPoint((i%3<2?120-u:u)/11*24,(j++<3?120-u:u)%11*24))u=w[~-i
*2/3*3+(j*j%5+17)/3];}}))g.setColor(new Color((j=m[p+i/3*w[d]+(~i%3+1)*w[d+1]])
<<23));}{for(resize(u,u);i<165;m[193]=1)m[i+28]=i++%15<4?0:2;for(;j<25;p=32)m[p
=j/5*20+j*2+48]=m[p+w[i=(int)(Math.random()*4)]]=m[p+w[i]*2]<2?++j*0:2;show();}
public boolean keyDown(Event e,int k){k-=51;p=k==5&m[k=p+w[d=k>0&k<4?d+k&3:d]]>
1?k:p;repaint();return 1>0;}};}}
>>697
2行でおながいします。
>697
指摘すべきはツッコミどころ満載のコードの方だと思うのだが
>>696
プログラムのミスを修正した上で、標準入出力を使用。2行と27文字。むぅ。
符号化は引数(何でも良い)を付け、復号は何も付けない。

int putchar(),i,p,(*o)()=putchar;main(int c){if(c<2)while(~(c=getchar()))for(i=
getchar();i-->=0;)o(c);else{for(p=getchar();~(c=getchar());)i=c-p||i>254?o(p),o
(i),p=c,0:i+1;o(p);o(i);}}
702デフォルトの名無しさん:02/08/31 05:12
>>701少し短くなた

int putchar(),i,p,c,(*o)()=putchar;main(int v){for((v=v>1)?p=getchar():0;~(c=
getchar());i=v&&c-p||i>254?o(p),o(i),p=c,0:i+1)if(!v)for(i=getchar();i-->=0;)o(
c);v?o(p),o(i):0;}
703デフォルトの名無しさん:02/08/31 07:07
奥村本よりフラクタル圧縮画像の表示
現在10行

import java.awt.*;class F{public static void main(String[]a){new Frame(){double
x,y,s,t;int N,M,i,j,k,r,z[]=new int[6],h[]=new int[M=150];double[]a={.05,.05,
.46,.47,t=.42,t},b={0,0,-.32,-.15,.28,.26},c={0,0,.39,.17,-.25,-.35},d={.6,-.5,
.38,t,.45,.31,0,1,.6,1.1,1,.7},p=new double[6];{resize(600,600);show();}public
void paint(Graphics g){for(;i<6;s+=p[z[i]=i++])p[i]=Math.abs(a[i]*d[i]-b[i]*c[i
]);for(;j<6;z[k]=r){for(k=i=j;++i<6;)k=p[i]<p[k]?i:k;t=p[j];p[j]=p[k];p[k]=t;r=
z[j];z[j++]=z[k];}r=M;for(i=0;i<6;s-=p[i++])for(k=(int)(r*p[i]/s+.5);k-->0;)h[
--r]=z[i];for(i=0;i<50000;i++){j=h[(int)(Math.random()*M)];g.setColor(new Color
(1<<(r>1&N>1&k>1&j>1?15:23)));r=N;N=k;t=a[k=j]*x+b[j]*y;y=c[j]*x+d[j]*y+d[6+j];
x=t;if(i>9)g.drawRect(300+(int)(250*x),550-(int)(250*y),0,0);}}};}}
704703:02/08/31 08:45
ソート部分いらないかった。再描画時のバグを修正。
9行になりました。

import java.awt.*;class F{public static void main(String[]a){new Frame(){double
x,y,s,t;int M=150,N=M,i,j,k,r,z[]=new int[156];double[]a={.05,.05,.46,.47,t=.42
,t},b={0,0,-.32,-.15,.28,.26},c={0,0,.39,.17,-.25,-.35},d={.6,-.5,.38,t,.45,.31
,0,1,.6,1.1,1,.7},p=new double[6];{for(resize(600,600);i<6;s+=p[z[i]=i++])p[i]=
Math.abs(a[i]*d[i]-b[i]*c[i]);for(;j<6;s-=p[j++])for(k=(int)(N*p[j]/s+.5);k-->0
;)z[--N+6]=z[j];show();}public void paint(Graphics g){for(i=0;i<50000;i++){j=z[
(int)(Math.random()*M)+6];g.setColor(new Color(1<<(r>1&N>1&k>1&j>1?15:23)));r=N
;N=k;t=a[k=j]*x+b[j]*y;y=c[j]*x+d[j]*y+d[6+j];x=t;g.drawRect(300+(int)(250*x),
550-(int)(250*y),0,0);}}};}}
705703:02/08/31 10:31
かなり強引ですが、7行達成。

import java.awt.*;class F{public static void main(String[]a){new Frame(){int M,
N,i,j,k,r,z[]=new int[k=600],w[]={7,6,74,55,64,55};double x,y,t,a[]={.05,.05,x=
.46,x,t=.42,t,0,0,-.32,-.15,y=.26,y},c[]={0,0,.4,.17,-y,-.35,.6,-.5,.38,t,x,.31
,0,1,.6,1.1,1,.7};public void paint(Graphics g){for(i=0;i++<M*M;g.drawRect(300+
(int)(280*x),550-(int)(250*y),0,0)){j=z[(int)(Math.random()*M)];g.setColor(new
Color(1<<(r>1&N>1&k>1&j>1?15:23)));r=N;N=k;t=a[k=j]*x+a[6+j]*y;y=c[j]*x+c[6+j]*
y+c[12+j];x=t;}}{for(resize(k,k);i<6;i++)for(;w[i]-->0;)z[M++]=i;show();}};}}
コンパイル後のコードサイズが縮まらなきゃ意味ないんじゃないの。
何でこんなに夢中になる人がいるのか理解不能。
>>706
俺はあんたが理解不能。tiny.objでも使ってろヴォケ
>>706
コンパイル概念の無い言語はどうすればいいんだ
最初からパズルみたいな、お遊びと思って楽しんでるんだよ。
そこそこ勉強にもなるし。
>>709
トリッキープログラムに近いためか、プログラムの読解力がついた。
また反面教師にして、小難しいロジックを組まないようなプログラミングをするようになった。
711デフォルトの名無しさん:02/09/01 04:00
とりあえず、Javaが盛んそうなので、前スレのレイトレ13行を縮めてみた
http://pc3.2ch.net/test/read.cgi/tech/984182993/209

import java.awt.*;class R{public static void main(String[]a){new Frame(){double
a,b,c,d,R;int x,y,w,z=255;{resize(z,z);show();}public void paint(Graphics g){
for(;y<z;y++)for(x=0;x<z;g.drawRect(x++,y+20,0,0))g.setColor(new Color(w=L(new
V(x-128,y-128,100),new V(0,0,200)),w,w));}int L(V A,V B){a=A.c(A);b=A.c(B);c=B.
c(B)-10000;R=(Math.sqrt(d=b*b-a*c)-b)/a;if(d>0){V N=new V(A.x*R,A.y*R,A.z*R);N.
n();R=(N.x+N.y-N.z)/Math.sqrt(3);A.x-=B.x;A.y-=B.y;A.z-=B.z;a=-N.c(A);N.x=2*N.x
*a+A.x;N.y=2*N.y*a+A.y;N.z=2*N.z*a+A.z;w=(int)(F(N)*R);return R>0?(w>0?w:(int)(
R*z)):30;}return F(A);}int F(V A){a=A.x;b=10000-A.r;c=A.y==0?0:b/A.y;return c>0
?((((a*c>0?a*c+b/2:-a*c)%b)>b/2)^(((A.z*c+200)%b)>b/2)?100:200):0;}};}}class V{
double x,y,z,r;V(double a,double b,double c){x=a;y=b;z=c;}V(V a){x=a.x;y=a.y;z=
a.z;}double c(V s){return x*s.x+y*s.y+z*s.z;}void n(){r=Math.sqrt(x*x+y*y+z*z);
x/=r;y/=r;z/=r;}}
712デフォルトの名無しさん:02/09/01 15:32
>>703
七オメ
このスレすげえ。
ところで、ここにはってあるソースを
public class hoge {
.....
}
みたいな風に簡単に戻す方法ないですか。
やっぱ手動ですか?
>713
>>3 の下のほう。C用だけど。
715713:02/09/01 16:37
>>714
ありがとー
>>713
展開しても10数行だから、漏れは手動でしてる。
Java用を>>713が作るってのはどうだね?
;->;\r\nに変換すれば良いじゃん。
forとか例外部分は手で直す
>>717
それを7行プログラムでするのに、意味があるんだろ
7行プログラムを展開する7行プログラムかw
>>711>>705
グラフィックスが入ると、何だかすごいぞ、って感じがするね。
もちろん圧縮などもすごいんだけど、視覚に訴えるのは大きい。
7行プログラミング、やっても1週間で飽きそうだな。
住人のメンツかわんの早そうなスレだな。
722713:02/09/02 14:42
>>716
現在このスレ見て勉強中なので
いずれJavaを覚えたら作ってみます。Java用。
>>722がいい事言った!
724665:02/09/02 22:22
久々にSHA1を見直したらまだ削れる事に気付いた
これで>665のlittle endian用もinclude以外が7行、と
#つー訳で>668氏の7行標準入力版も更に短縮可能

#include <stdio.h>
size_t*p,*q,H[186]={0x67452301,0xefcdab89,0,271733878,0xc3d2e1f0},n,d,z,l,h;L(c
){((char*)q=H+90)[3^n++]=c;if(n>63){for(n=80,p=memcpy(q-5,H,20);n;1[p--]=d<<30|
d/4)d=q[13]^q[8]^q[2]^*q,q[16]=d+d|d>>31,d=p[1],z=p[2],c=p[3],p[-1]=(*p<<5|*p>>
27)+p[4]+0x5a827999+*q+++(--n/5&4?n>39?c^d&(z^c):882459459+(d&(z|c)|z&c):(n>39?
341275144:0x6fe0483d)+(d^z^c));for(;H-p--;)*p+=p[5];}}S(a){for(h=4;h--;)L(a>>h*
8);}main(a,v)char**v;{FILE*f=fopen(v[1],"rb");for(H[2]=~*H;~(a=getc(f));h+=!(l
+=8))L(a);for(L(128);n-56;)L(0);for(S(h),S(l);n<5;)printf("%08x",H[n++]);}
725702:02/09/03 00:34
RLEを縮めてみた。2行まで後8文字。

int putchar(),i,p,c,(*o)()=putchar;main(v){for(--v?p=getchar():0;~(c=getchar())
;i=v&&c-p||i>254?o(p),o(i),p=c,0:i+1)if(!v)for(i=getchar();i-->=0;)o(c);v?o(p),
o(i):0;}
RLE
727702:02/09/03 11:10
途中カキコ失礼。RLE2行達成。

int i,p,c;f(x){putchar(x);}main(v){for(--v?p=getchar():0;~(c=getchar());i=v&&c-
p||i>254?f(p),f(i),p=c,0:i+1)if(!v)for(i=getchar();~i--;)f(c);v?f(p),f(i):0;}
空ファイルを考慮すると↓の方が良いと思うのだが
int c,p,i;f(x){putchar(x);}main(v){for(p=getchar(),--v;~(c=getchar());p=v?i=254
<i||p-c?f(p),f(i),0:i+1,c:getchar())for(;!v&&~c--;f(p));v*~p?f(p),f(i):0;}
729デフォルトの名無しさん:02/09/05 20:52
ファイルをアーカイブする。
exec filename1 filename2 ...
で標準出力に吐き出す
引数なしなら標準出力から読み込んで展開
上のほうの圧縮を組み合わせて使うと吉。かも。
#include <stdio.h>
char n[256];int main(int a,char**v){int(*g)()=getchar,i,c;FILE*f;size_t s;if(a-
1){printf("%d\n",a);for(i=1;i<a;i++){f=fopen(v[i],"rb");fseek(f,0,SEEK_END);s=
ftell(f);printf("%s\n%u\n",v[i],s);fseek(f,0,SEEK_SET);while((c=fgetc(f))!=EOF)
putchar(c);fclose(f);}}else{scanf("%d",&a);g();for(;--a;){gets(n);scanf("%d",&s
);g();f=fopen(n,"wb");for(;s--;){fputc(g(),f);}fclose(f);}}return 0;}
FreeBSDのdmesg|head -6を表示
本当はブートシーケンスでバーがくるくる回るところを表示したかったが、
プログラムが長くなっちゃってだめでした。
文章データは前スレのrangecoderをu=128で使用後、8x3=6ビットx4に変更後、+49している。

char t[]="Rm19aKD8`a:GGAa<?Hnn`lc94BhK<oYZa8VOOl=6Ifb1d]f\\`TQfMUiVfa[D`C7fEX?"
"=ImOhIg?8AAlTpio4IeKYX9]h3Qh]2cbL1RF^]4]_?9PS8ThmObf:\\1`oih:YG9@c?7?MenXQiQa"
"Q=3T`[K<L@T?>34l55Zjj2_dBpMF1npY;GH3@CojA3nYW3XZ8MH5H5\\Na1QV7Cg9jdJU\\@K;MjJ"
":IemMXN]\\9j3]YP78Wf31HU9TVhd58oi8An^AVECjm4LAI7iU:aPOPEB?iK:@_YY9=Recl`]nU<?"
"MBU^PWhV[MkS8Pi]d__G<95Ll3pU3`l44l2h[d:794YSYCf]U_g]1^jBUbBO93`V=]",*s=t;
unsigned*p,W,O=357,u=128,b=360,a[999],R=~0,x=256;f(){W=W*x|*p++;}main(K){for(p=
a+u;*s;)*s++-=49;for(s=t;b>0;b-=4)*p++=s[0]*4|s[1]>>4,*p++=(s[1]<<4|s[2]/4)%x,
*p++=(s[2]<<6|s[3])%x,s+=4;p=a+u;for(f(f(f(f())));O--;R*=a[b]){for(K=b=0;R<1<<
24;R*=x)f();for(R/=u++;W/R>=K;K+=a[b++]+1);W-=R*(K-++a[putchar(--b)]);}}
>>729
7行スレでそんな丁寧なプログラムを書かなくても・・・
つーわけで、今縮め中です。
732731:02/09/05 23:21
>>729
アーカイブのフォーマットを変更しちゃいました。
RLE(>>728)と組み合わせることで、圧縮書庫が7行でできそうですね。
# SEEK_END=2って規定されてましたっけ?

#include <stdio.h>
char n[256];int i,c;main(int a,char**v){FILE*f,*o;if(a-1)for(putw(a,o=stdout);
--a;)for(fseek(f=fopen(v[++i],"rb"),0,SEEK_END),puts(v[i]),putw(ftell(f),o),
rewind(f);~(c=getc(f));)putchar(c);else for(a=getw(o=stdin);--a;)for(f=fopen(
gets(n),"wb"),c=getw(o);c--;)putc(getchar(),f);}
>>732
規定されてない。
そもそも、EOF=-1も規定されてないからどっちにしろ処理系依存
>>733
EOF=-1をこのスレではいつの間にかデフォルトで使ってるよなぁ
SEEK_???もデフォルトしちゃえ!
ついでにi=i++も!
>>734 knkタンだ! ((((;゚Д゚)))) ガクガクブルブル
>>732
SEEK_END=2の使用はデフォルトってことでいいのかな
このくらいちぢまればRLE圧縮も組み込めるかな
ちぢめすぎてかえって組み込めなくなる罠かもしれない

#include <stdio.h>
char n[256];int i,c,b;main(a,v)char**v;{FILE*f,*o;b=a-1;for(b?putw(a,o=stdout):
(a=getw(o=stdin));--a;){f=fopen(b?v[++i]:gets(n),b?"rb":"wb");for(b?fseek(f,0,2
),puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o));b?~(c=getc(f)):i--;)putc(
b?c:getc(o),b?o:f);}}
SEEK_END=2はPOSIXで規定されてたりしなかったっけ
どっちにしろこのスレでは縮むならある程度の処理系依存は
容認の方針だと思うけど
gccとbcc32で、EOF と SEEK_* が同じだったから、
まぁ、このスレで議論する分には困らないと思われ。

perlだとSEEK_*と0,1,2のどちらを使っても一致することが明記されてるんだけど。
>>736 + >>728 の6行書庫
#まだ100文字程あるから前スレRLEでも7行いけるかな?

#include <stdio.h>
FILE*f,*o;char n[256];int i,c,b,p,q;r(){return b?getc(f):i<=0?-1:getc(o);}w(x){
putc(x,b?o:f);}main(a,v)char**v;{for(!(b=a-1)?a=getw(o=stdin):putw(a,o=stdout);
--a;b*~p?w(p),w(q):0)for(f=fopen(b?v[++i]:gets(n),b?"rb":"wb"),b?fseek(f,q=0,2)
,puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o)),p=r();~(c=r());p=b?q=q>254
||p-c?w(p),w(q),0:q+1,c:r())for(b||(i+=~c);!b&&~c--;)w(p);}
740736:02/09/06 23:55
>>739
6行ですか、素晴らしい
>>736 + 前スレ101版RLE の7行書庫
fcloseを入れたので多い日も安心

#include <stdio.h>
FILE*f,*o;char n[256];int i,c,b,p,q;r(){return b?getc(f):i<=0?-1:getc(o);}w(x){
putc(x,b?o:f);}main(a,v)char**v;{for(!(b=a-1)?a=getw(o=stdin):putw(a,o=stdout);
--a;b*q?w(p),w(q):0,fclose(f))for(f=fopen(b?v[++i]:gets(n),b?"rb":"wb"),b?fseek
(f,q=0,2),puts(v[i]),putw(ftell(f),o),rewind(f),0:(i=getw(o)),p=-1;~(c=r());p=b
?q=p-c||q>254?q?w(p),w(q):0,w(c),0:q+1,c:c-p?c:r())for(b||(q=c-p?~p?0:-1:r(),i
+=~q);!b&&~q--;)w(p);}
742729:02/09/07 06:24
tarみたいな感じでアーカイブができれば良いかなと思って書いたんですが、
圧縮までして7行ですか!恐れ入りましたすばらしいです。
画像ファイルとか音楽ファイルだと逆にでかくなるだけだが
>>743 使えるのはBMPファイルとか、AAとかだね。
圧縮+書庫化するだけ、ならばrangecoderでもできるだろうけどね。
!b&&~q-- って b||~q-- にできるんちゃう?いまさらやけど。
ちょっとした暇つぶしに、ゲームなぞ。
何かキーを押すとスタート、ストップ、リスタート。
動く丸を四角の中で止めてください。赤くなれば成功!

import java.awt.*;class S{public static void main(String[]a){new Frame(){int u=
2,p,t,s,c;void L(){u=p=0;t=1;s=(int)(Math.random()*8+2);c=150/s+19;}{resize(350
,200);show();try{for(;;Thread.sleep(s)){p=p+t;if(p>300)u=2;if(u==1)if(--c<1){t=
0;u=2;}for(repaint();u>1;);}}catch(Exception e){}}public void paint(Graphics g)
{g.setColor(t<1&p>249&p<281?Color.RED:Color.BLACK);g.drawOval(p,75,50,50);g.
drawRect(250,60,80,80);}public boolean keyDown(Event e,int y){u=u<1?1:u;if(u>1)
L();return 1>0;}};}}
>745
b||~q--だとb!=0の時に無限ループする
ネタ募集上げ
749デフォルトの名無しさん:02/09/09 17:11
適応型Huffman
但し毎回木を更新するので滅茶苦茶重い(w

圧縮
int*a[258],n[2060],o[257],*r,*p,*q,c,f,i,j,k;Q(int**a,int**b){return**b-**a;}W(
a,b){for(;b--;++i>7?putchar(f),i=f=0:0)f+=f+(a>>b)%2;}S(s){for(r=n,j=k;j++<258;
r+=4)*r?a[k++]=r:0;for(;--k;r+=4){qsort(a,k+1,4,Q);a[k-1][1]=a[k][1]=r-n;*r=*a[
k-1]+*a[k];r[2]=a[k-1]-n;r[3]=a[k]-n;a[k-1]=r;}for(r=n+s;r-*a;r=q)o[k++]=r-n!=2
[q=n+r[1]];for(;k;)W(o[--k],1);}main(){for(*n=n[4]=1;~c;S(*p?p-n:0),(*p)++||W(c
,8))p=n+(c=getchar())*4+8;W(0,7);}

展開
int*a[258],n[2060],o[257],*r,*p,*q,c,f,i,j,k;Q(int**a,int**b){return**b-**a;}R(
a){for(c=0;a--;c+=c+(f>>--i)%2)f=!i?i=8,getchar():f;return c;}L(){for(r=n,j=k;j
++<258;r+=4)*r?a[k++]=r:0;for(;--k;r+=4){qsort(a,k+1,4,Q);a[k-1][1]=a[k][1]=r-n
;*r=*a[k-1]+*a[k];r[2]=a[k-1]-n;r[3]=a[k]-n;a[k-1]=r;}for(r=*a;r[2]|r[3];r=n+r[
2+R(1)]);r-n||(r=n+R(8)*4+8);(*r)++;~(c=(r-n)/4-2)&&putchar(c);}main(){for(*n=n
[4]=1;~c;)L();}
751デフォルトの名無しさん:02/09/12 18:42
レスがついてなくて寂しそうだ。あげてあげよう。
>>750の圧縮・展開を纏めて7行化
何か引数があれば圧縮、なしで展開

int*a[258],n[2060],*r,*p,*q,c,f,i,k;Q(int**a,int**b){return**b-**a;}W(a,b){for(
;b--;++i>7?putchar(f),i=f=0:0)f+=f+(a>>b)%2;}R(a){for(c=0;a--;c+=(f>>--i)%2+c)f
=!i?i=8,getchar():f;}S(int*r){r-*a?S(n+r[1]),W(r-n!=n[r[1]+2],1):0;}L(){for(r=*
a;r[2]|r[3];r=n+r[2+c])R(1);}main(v){for(--v,*n=n[4]=1;~c;v?S(*(p=n+(c=getchar(
))*4+8)?p:n),(*p)++||W(c,8):(L(),r-n||(R(8),r=n+c*4+8),(*r)++,~(c=(r-n)/4-2)&&
putchar(c))){for(r=n;r-n<1032;r+=4)*r?a[k++]=r:0;for(;--k;p=a[k-1],q=a[k],p[1]=
q[1]=r-n,*r=*p+*q,r[2]=p-n,r[3]=q-n,a[k-1]=r,r+=4)qsort(a,k+1,4,Q);}v&&W(0,7);}
753デフォルトの名無しさん:02/09/12 20:23
すげーなあ
このforなげえぇぇぇぇなあぁぁぁぁ。
755デフォルトの名無しさん:02/09/13 14:01
うわーん。某あれで九州の某へ逝っていたら、ネタが来ただけじゃなく、終わってたよ。
すばらしい! あげちゃえ。
756デフォルトの名無しさん:02/09/14 14:39
ファイラってできるかな?
俺主催囲碁プログラミングコンテスト スレより、13行囲碁
http://pc3.2ch.net/test/read.cgi/tech/1024024666/136-
おいお前ら、これを7行に縮めてください。

#include <stdio.h>
int w[4]={1,-1,12,-12},s,d,h[3],b[132];r(int a, int c){int z,i;b[a]|=8;s++;for
(i=0;i<4;i++){z=a+w[i];if(b[z]==0)d++;if(b[z]==c)r(z,c);}b[a]&=3;}v(int a,int
c){int z,i;b[a]=0;for(i=0;i<4;i++){z=a+w[i];if(b[z]==c)v(z,c);}}int t(int u){
int m,e,g,z,i,k;m=e=0;for(z=0;z<132;z++){k=g=0;if(b[z])continue;for(i=0;i<4;i++
){if(b[z+w[i]]==u){d=s=0;r(z+w[i],1);k+=(d==1)*s*300+(d==2)*s*300+(d==3)*s*20;
}if(b[z+w[i]]==0)k+=10;else g++;}if(g==4)continue;if(k>m){m=k;e=z;}}return e;}
char *p="・○● \n";int main(){int c=1,u=2,z,x,y,i;for(i=0;i<132;i++){if((i+1
)%12==0)b[i]=4;else if(i%12==0||i<12||(i+2)%12==0||i>120)b[i]=3;}for(;;){for(i
=0;i<132;i++)printf("%.2s",&p[b[i]*2]);if(c==1){scanf("%d %d",&x,&y);z=y*12+x;
if(b[z]){printf("Err\n");continue;}}else{if((z=t(u))==0){printf("ps\n");break;
}}b[z]=c;for(i=0;i<4;i++){if(b[z+w[i]]==u){d=s=0;r(z+w[i],u);if(d==0){h[c]+=s;
v(z+w[i],u);}}}d=0;r(z,c);if(d==0)break;u=c;c=3-c;}return 0;}
758デフォルトの名無しさん:02/09/14 14:46
>>756>>757
ネタ来たーーーーーーあげ
でも囲碁はちょっと見ただけでも無駄が多い、10行くらいにはすぐなりそう
759オマケ月:02/09/14 16:08
#include <stdio.h>
main(){printf("ファイア\nファイラ\nファイが!");}
>>759
やってくれたね...
761758:02/09/14 19:08
>>757
ちょっとだけ縮めてみた。十分7行になりそうだ。

int w[4]={1,-1,12,-12},s,d,h[3],b[132],c=1,u=2,x,y,i;r(a,c,f){int z,i;f?b[a]=0:
(b[a]|=8,s++);for(i=4;i--;b[z]==c&&r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}t(u){
int m,e,g,z,i,k;for(m=e=z=0;z<132;z++)if(k=g=0,!b[z]){for(i=4;i--;b[y]?g++:(k+=
10))if(b[y=z+w[i]]==u)d=s=0,r(y,1,0),k+=(d==1)*s*300+(d==2)*s*300+(d==3)*s*20;
if(g!=4)k>m?m=k,e=z:0;}return e;}char*p="・○● \n";main(z){for(i=132;i--;i%12
==11?b[i]=4:0)if(i%12==0||i<12||(i+2)%12==0||i>120)b[i]=3;for(;;){if(c==1){for(
i=10;i<119;)printf("%.2s",&p[b[i++]*2]);scanf("%d %d",&x,&y);if(b[z=y*12+x]){
puts("Err");continue;}}else if(!(z=t(u))){puts("ps");break;}b[z]=c;for(i=4;i--;
d=0)if(b[x=z+w[i]]==u)if(d=s=0,r(x,u,0),!d)h[c]+=s,r(x,u,1);r(z,c,0);if(!d)
break;u=c;c=3-c;}}
762758:02/09/14 23:48
>>761
現在9行。ゲーム性の向上を目指し、
終了時にアゲハマを表示し、余分な改行を消しました。

int w[]={1,-1,12,-12},s,d=1,h[3],b[132],c=1,u=2,y,i=132,m,g,e,k;r(a,c,f,z,i){b[
a]=!f?s++,b[a]|8:0;for(i=4;i--;b[z]==c&&r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}
main(z){for(;i--;i%12==11?b[i]=4:0)i%12==0||i<12||i%12==10||i>120?b[i]=3:0;for(
;d;){if(c==1){for(i=10;i<120;)printf("%.2s",&("・○● \n"[b[i++]*2]));if(scanf
("%d %d",&k,&y),b[z=y*12+k]&&puts("Err"))continue;}else{for(m=e=z=0;e<132;e++)
if(k=g=0,!b[e]){for(i=4;i--;b[y]?g++:(k+=10))b[y=e+w[i]]==u?r(y,1,d=s=0),k+=(((
d==1)+(d==2))*15+(d==3))*s*20:0;g!=4&&k>m?m=k,z=e:0;}if(!z&&puts("ps"))break;}b
[z]=c;for(i=4;i--;)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[c]+=s,r(k,u,1):0:0;r(z,u=c,
d=0);c=3-c;}printf("%d,%d\n",h[1],h[2]);}
4行目のスペースが纏められちゃったので修正
;d;){if(c==1){for(i=10;i<120;)printf("%.2s",&("・○●  \n"[b[i++]*2]));if(scanf
>763
cはu^3で代用、それに伴いc==1→u-1等に変更
((d==1)+(d==2))→(d-1U<2)
i<12||略||i>120→i-12U>108||略
for(i=10;i<120;略&("・○● \n"[b[i++]*2)→for(i=9;i++<119;略"・○● \n"+b[i]*2
765囲碁スレ136:02/09/15 07:04
>>762
やるねぇ・・・。そうやって圧縮するのか。
再帰関数も1つになってるし。
しかしここからはつらそう。
>>759
printfって最後、\nしないと問題が出る環境なかった?
うろおぼえだけど
>>762 最初の盤作成部分
for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?0:3:4)z=i%12;
囲碁8行(あと62-63文字)

int w[]={1,-1,12,-12},s,d=1,h[3],b[132],u=2,y,i=132,m,g,e,k;r(a,c,f,z,i){b[a]=!
f?s++,b[a]|8:0;for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];!f?b[a]&=3:0;}main(
z){for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?0:3:4)z=i%12;for(;d;){for(i=9;i++<119;
)printf("%.2s",&("・○●  \n"[b[i]*2]));for(m=z=0;i--;g!=4&&k>m?m=k,z=i:0)for(k
=g=0,e=4*!b[i];e--;!b[y]?k+=10:g++)b[y=i+w[e]]==u?r(y,1,d=s=0),k+=((d-1U<2)*15+
(d==3))*s*20:0;if(u>1&&(scanf("%d %d",&k,&y),b[z=y*12+k]&&puts("Err")));else{if
(!z&&puts("ps"))break;for(i=4;i--;b[z]=u^3)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[u]
+=s,r(k,u,1):0:0;r(z,u^=3,d=0);}}printf("%d,%d\n",h[2],h[1]);}
printf("%.2s",&("・○● \n"[b[i]*2]));

printf("・\0○\0●\0 \0\n"+b[i]*3);
3文字か…
関数r内
b[a]=f?0:~b[a];s++;
for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];
b[a]^=!f*~0;
3文字?
771758:02/09/15 21:20
後34文字になりますた。

int w[]={1,-1,12,-12},s,d=1,h[3],b[132],u=2,y,i,m,g,e,k;r(a,c,f,z,i){b[a]=f?0:~
b[a];s++;for(i=4;i--;b[z]-c||r(z,c,f))d+=!b[z=a+w[i]];b[a]^=!f*~0;}main(z){for(
;d;){for(;i++<132;printf("・\0○\0●\0 \0\n"+(b[i]=z-11?z&&z-10&&i-12U<109?b[i
]:3:4)*3))z=i%12;for(m=z=0;i--;g!=4&&k>m?m=k,z=i:0)for(k=g=0,e=4*!b[i];e--;!b[y
]?k+=10:g++)b[y=i+w[e]]==u?r(y,1,d=s=0),k+=((d-1U<2)*15+(d==3))*s*20:0;if(u<2||
!(scanf("%d%d",&k,&y),b[z=y*12+k]&&puts("Err"))){if(!z&&puts("ps"))break;for(i=
4;i--;b[z]=u^3)b[k=z+w[i]]==u?r(k,u,d=s=0),!d?h[u]+=s,r(k,u,1):0:0;r(z,u^=3,d=0
);}}printf("%d,%d\n",h[2],h[1]);}
772囲碁スレ136:02/09/15 21:47
お前ら・・・すごいです(w
もはや暗号だな。
円周率を求める7行ってないの?もちろんエンドレスで。
>>773が作ってみるということでどうだっ!
エンドレスって正しい値を永遠にはきだし続けるって事か?
多倍長クラスとページングマネージャも書けと。
無理臭い
>>775
メモリさえあれば、数百万桁計算する程度なら7行でもできそうだ。
挑戦してみようかなぁ。
標準出力に10進数を一桁ずつ吐くだけだから
多倍長クラスはいらないのでは。
しかしアルゴリズムが分からない罠。
ttp://www.pluto.ai.kyutech.ac.jp/plt/matumoto/pi_small/_pi_small.html
たくさんあってどれが7行向きなのやら。
>>777
1桁ずつ計算する物じゃないぞ
779デフォルトの名無しさん:02/09/16 22:57
>>778
一桁ずつできるけどね。やるかどうかは別として。
以下のコードをバイナリエディタで書いて prg.com で保存後 実行

B0 13 CD 10 C4 2F AA 11 F8 64 13 06 6C 04 EB F6
>>780
メガデモスレから持ってこないで下さい。(w
http://farb-rausch.de/prod.html
>>780
これ何?
>780の実効ファイル版ISHにしてみた。

<<< A.COM for MS-DOS ( use shift_jis ish ) [ 8 lines ] >>>
!!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v
!!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v
!!!&!!9Q!5"XRo"O"I->!C$oR6nt!&"HDm=NH,!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!JF;v
%x/。」;掲僕ウFリ策ル」\EB機@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q繆
。ツ0拆M3鐇Aェ物ォミ^2ンロCm@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@UR「
」\VG・ュッ、{ャナ^・ヨH*j8Le+フ「ワVe、錦ラ;サヌ,Kヤ省竿58h3Q筰ミ隹峻Sスヨアヘニ゙妹4\覬レメノレウh岻屁搶ワ
--- A.COM (8/8) ---
784デフォルトの名無しさん:02/09/17 20:25
>>780
だれかこの動作をマジレスしてください。

メガデモスレと言われても、あまりこの板にはこないから。
>>784
自分でやればわかるよ
786デフォルトの名無しさん:02/09/17 20:31
>>785
いや、なんか怖い…。

format cよりも怖いです。
788デフォルトの名無しさん:02/09/17 21:32
>>787
噂の「ポケモンフラッシュ」みたいなやつですか?
グロよりも苦手なんでよかった。
>>788
見てみりゃわかる。無害。
790デフォルトの名無しさん:02/09/17 21:50
<age>
791bloom:02/09/17 21:59
792デフォルトの名無しさん:02/09/17 22:21
>>789
ちょっと面白かった。
でもわずかにチカチカするのでちょっとだめかもw

フルスクリーンのせいでアプリをひとつ間違って閉じたのに気づかなかったぞゴルァ
つーか、Cなり何なりで、上のバイナリコードを吐き出すようにすれば、
もっと簡単に試したのではなかろうか。
main(){char data[]={...};fwrite(data,1,sizeof(data),stdout);}
みたく。
>>789
Win2k飛ばされますた
>>793
16バイトで出来てることに意味があるのでせう
逆アセンブルリスト見て嘆息
795デフォルトの名無しさん:02/09/18 16:11
コードをアセンブラで書いて、インストラクションコードを
>>793みたいに文字列として埋め込むのはありでしょうか?
typedef int(*f)();
((f)"....")(); //呼び出し
>>795
良いと思うけど、普通は逆にオブジェクトコードが増えると思うよ
オブジェクトコード埋め込みの方が…ですね、スマソ
798トリッキーの1:02/09/18 21:29
ご無沙汰してました。相変わらず皆さん凄いですね。勉強になります。
近いところでは囲碁面白いですね。でも囲碁のルールが解らないので残念です。
>>771
半角スペース2個は全角1個にしないと、貼り付けるときに消えてしまいますよ
それと、「3,3:4,4:2,4:2,5:2,6:2,8」と入力すると相手の石の上に自分の石が来るけれど、
これは囲碁のルールで正しいんですか?
LZW系の展開・圧縮
使い方は>>752と同じ

同じ辞書を使い続ける6行版
int*Q,N[16384],S,T,U,V,F,G,P,C,X,Z;p(a,b){for(;b--;++S>7?putchar(T),S=T=0:0)T=T
+T|a>>b&1;}g(a){for(G=0;a--;G=G+G|V>>--U&1)!U?U=8,V=getchar():0;}a(){F<1<<12?1[
Q=N+F*4]=X,Q[2]=C,Q[3]=N[C*4],*Q=0,N[C*4]=F++:0;}r(x){p((x>256?r(N[x*4+2]),N[x*
4+1]:(X=x))-1,8);}main(c){for(G=F=257;G--;)1[Q=N+G*4]=G;for(--c?g(8),C=V+1:0;g(
c?8:12),c?C:~V;C=c?!Z?p(C,12),a(),X:Z:(G=X,r(Z<F?Z:C),Z<F||p(G-1,8),P++&&a(),Z)
)for(Z=c?X=V+1,N[C*4]:G;c*Z&&1[Q=N+Z*4]-X;Z=Q[3]);p(0,7);}

辞書が一杯になると再構築する7行版
int*Q,N[16384],S,T,U,V,F,G,P,C,X,Z;i(){for(G=F=257;G--;*Q=Q[2]=Q[3]=0)1[Q=N+G*4
]=G;}p(a,b){for(;b--;++S>7?putchar(T),S=T=0:0)T=T+T|a>>b&1;}g(a){for(G=0;a--;G=
G+G|V>>--U&1)!U?U=8,V=getchar():0;}a(){F<1<<12?1[Q=N+F*4]=X,Q[2]=C,Q[3]=N[C*4],
*Q=0,N[C*4]=F++:i();}r(x){p((x>256?r(N[x*4+2]),N[x*4+1]:(X=x))-1,8);}main(c){i(
);for(--c?g(8),C=V+1:0;g(c?8:12),c?C:~V;C=c?!Z?p(C,12),a(),X:Z:(G=X,r(Z<F?Z:C),
Z<F||p(G-1,8),P++&&a(),Z))for(Z=c?X=V+1,N[C*4]:G;c*Z&&1[Q=N+Z*4]-X;Z=Q[3]);p(0,
7);}
>>773
ほらよ。多少の誤差には眼をつぶれや。

#include <stdio.h> // printf()
#include <stdlib.h> // rand()
int main(){
printf( "3.1415926535897932384626433832795" ) ;
for (;;) printf( "%d",rand() ) ;
return 0 ;
}
後はランダムかよ
お題:素数列挙
p2pの七行があったらすごいよね。なんて言って見るテスト
804>>802:02/09/18 23:15
printf(char*,...);main(){int z,i=1;for(;z=i++;z?0:printf("%d,",i))while(i%z--);}

1文字オーバーなのは秘密だ。
>>802
外出だったりする
>>805
>>74 >>81やね
>>804
1文字縮めてみますた
printf(char*,...);main(){int z,i=1;for(;z=i++;z||printf("%d,",i))while(i%z--);}
808804:02/09/18 23:53
おぉ、さんきゅー!
そうか、|| か。なんかPerlっぽい。
>>807
gcc -ansi -pedantic だとprintf(char*,...)は通らず。
ANSI C forbids data definition with no type or storage class
printf()を削除すれば通るので、そっちの方がよい?

1文字縮めてみた。
printf(char*,...);main(z){int i=1;for(;z=i++;z||printf("%d,",i))while(i%z--);}
これではだめですかね。引き数なしで実行が条件ですが。
main(i,z){for(;z=i++;z||printf("%d,",i))while(i%z--);}
>>810
bcc32でも動きますね。しかもgccよりも速かった。
コンパイラを選ぶのはどうかと思う
>>810 Solaris cc, GNU gcc, Borland bcc32 でコンパイル・実行できますた。
>>807 上記すべてのコンパイラでprintfの宣言がおかしいといわれますた。
>>812 短くするためならコンパイラどころかアーキテクチャすら選択するのが最近の風潮らしいです。
>>803
p2pの何だ?
囲碁、申し訳ないんだが、
コンパイルして実行したら、
1の列を指定すると落ちるんだけど。
(ex:1,5)
バグ?
>>798>>815
囲碁、cygwin+gccやSolaris+ccでは正常らしい動作してますね
bcc32だと動作は正常のようでも、表示がおかしくなりますね
ANSI準拠っぽいソースだけど、どっかしらコンパイラ依存があるんでしょうね
>>771さんはいないようだし、ここはひとつトリッキーの1氏のご助力を!
プロトタイプ宣言無しで printf 使うのって好かんのだけどどうよ。
…っと言っても>>810、VC++.NETでもdmc++でも通るな。

int printf(char*,...); ... にすれば>>809行けるね。
818817:02/09/19 08:16
あーでも、宣言省略すれば int printf( ... ); 扱いになるんだっけ。Cって。
それならOKか。
819デフォルトの名無しさん:02/09/19 17:45
>>810
>main(i,z)
Cって引数の型を省略するとintになるってこと?
820デフォルトの名無しさん:02/09/19 20:40
円周率は

#include <stdio.h>
main(){printf("3.14159265358979323846264338327950288419716939937510582097494");
/* 以下略 */
}

よりも桁が多いことを願います。

とりあえず、職人さんに

(~~~゚∀~~)~~゚ メダマ ボーン
#include <stdio.h>
main()
{
char* url = "http://www.prokofiev.ru/prikol/text/t5/pi.htm";
system(url);
return 0;
}
>>814
不特定多数なWinMXみたいな奴でなくて、
相手を登録して交換するスタイル。Grooveとかがそんな感じかなぁ。
七行でできたらビックリだけどね。CUIでそういうの聞いたことないし。
それもP2Pかもしれないけど、
P2P=ファイル交換じゃないぞ
なんにせよ、もしできたら凄く便利だと思う
便利って・・・・・・別に7行でも覚えられるわけで無し・・・・・・
ぱっと思いつく最小のメディアであるFDに収まる1.44MBに入れば何だって同じ気が。
面白いけどね。
今更ながら>>800にワラタ
827トリッキーの1:02/09/20 15:54
円周率です。意外と七行は簡単でした。オイラーの公式使ってますので収束遅いです。

#include <stdio.h>
#define s ( 5000 /*←希望する桁数*/ /4+2)
int main(){int i,n,c,t,j,l,a[]={4,9},r[s][4]={0,0,8,12},k=10000;for(n=0;n<s*15
;n++)for(i=0;i<2;i++){for(c=t=j=0;j<s;r[j++][i]+=((n&1)*-2+1)*l/(2*n+1))t=(l=k
*t+r[j][i+2])%a[i],c=(l=k*c+(r[j][i+2]=l/a[i]))%(2*n+1);for(t=0,j--;j+1;r[j--]
[i]%=k)t=(r[j][i]+=k+t)/k-1;}for(i=s-(t=1);i+1;*r[i--]%=k)t=(*r[i]=k+*r[i]+r[i
][1]+t)/k-1;printf("%d.",**r);for(i=1;i<s-1;printf("%04d",*r[i++]));return 0;}
828トリッキーの1:02/09/20 15:56
こうやってみるとまだまだ短くなりそうですね。桁数固定にすれば後一行は軽そうです。
829デフォルトの名無しさん:02/09/20 20:47
復活直後にでかいのを持ってきましたね。実質5行だし。相変わらず凄い。

7行にするのって、1字1字縮める技術ももちろんあるけれど、
組む前にデータ構造とアルゴリズムをなるべく文字数を減らすことを念頭に
構想する才能が必要だと思うが、それは知識と知恵の両方を要求するよね。
色々なネタで7行達成している常連の職人さんたちはかなりハイレベルだと思った。
有名人が出てくるたびにヨイショするこの雰囲気、
どうにかならんもんかねぇ。
名無しで新しいアイデア出てきても「たいしたことない」と言ってのけるのに。
本人がageてないのに他人がageるのも正直ウザい
ただのひがみかもしれないがマジレス。
有名人をよいしょしているわけではなく、
優れたプログラムを書く人をほめているのでは?
>>799
UNISYSに通報しますた
はいはい、そこ雰囲気悪くしない!
作品いっぱい出るのはいいことだし、批評はその作者の次に繋がるので良し!
でも830、無意味な煽りは入れない!
次のネタいきましょう、次。
次のネタ候補
・FORTH や C, LISP, BASICなどのプログラミング言語のサブセット
・囲碁
>>533の前スレの未達成もののうち、このスレでも未達成のもの

特に言語ものは20行以下になったらとりあえず見せて欲しいなぁ。
サブセット言語で作った7行プログラムとか出てきたりして:-P
7行でC/C++コンパイラ作ってくだちぃ。
>>836
四則演算と表示くらいならできるかもしれないが、難しいだろうね。
つーか、>>836よ、インタプリタで良いから作ってみないか?
>>837
>四則演算と表示くらいなら...
マジで!?それともネタ?
冗談で言ったつもりなんだが…

>インタプリタで良いから...
技術のない漏れには作れません...
VTL系のBASICはどうなのかな?
オリジナルは768バイトなんでしょ?
マンセーうぜー言われるかもしれないが、やっぱり>>827は(・∀・)イイ! 
FORTHモドキ(逆ポーランド電卓か?)。オペレータは+-*/.のみ。

#include <stdio.h>
W[1000],*S=W,c,v;G(){c=getchar();}g(){v=0;do v=v*10+c-48;while((G(),c)-48<10U)
;return v;}main(){G();while(~c)c==45?G(),c-48>9U?v=*S--,*S-=v:(*++S=-g(),G()):
(c-48<10U?*++S=g():c==43?v=*S--,*S+=v:c==42?v=*S--,*S*=v:c==47?v=*S--,*S/=v:c-
46?c-32&&c-10&&printf("err\n"):printf("ok\n%d\n",*S--),G());}
既出ネタのチェックはしてから話題振ることにせんか?
 ・四則演算 >>5
多倍長整数、さらには有理数演算に対応しろと言ってみる。
・何かをグラフィック
・非常に便利な関数を7行で作成
>>842 ごめん、正直指摘間違いでは?、と始め思った。
つーか、>>841の勘違いですね。

四則演算はすでにあります。要求されたのは、
・FORTHのサブセット  あるいは
・四則演算のみ可能な C/C++ !!コンパイラ!!
ですよん。そして、
・多倍長整数、有理整数演算、浮動小数演算などに対応
が追加されますた。
問題:単なるクリックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。
847846:02/09/21 15:03
>846にパッチ当て。
---問題:単なるクリックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。
+++問題:単なるクイックソートより早いqsort()互換のソート関数を79文字7行で記述せよ。
848デフォルトの名無しさん:02/09/21 16:42
>>835
いいだしっぺの法則
将棋作れ!
┃激┃し..┃く..┃ず┃れ┃て┃鬱┃だ.┃が┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃こ.┃れ┃で┃12┃行┃な.┃ん┃だ┃YO┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃  ┃角┃  ┃  ┃  ┃  ┃  ┃飛┃  ┃
┣━╋━╋━╋━╋━╋━╋━╋━╋━┫
┃香┃桂┃銀┃金┃王┃金┃銀┃桂┃香┃
┗━┻━┻━┻━┻━┻━┻━┻━┻━┛
激しくはずれなくてうれしいw
敵の歩なんかはどうしたらいいのさ?

┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃歩┃
┣∨╋∨╋∨╋∨╋∨╋∨╋∨╋∨╋∨┫
とか?
ニフで昔あった将棋は

|歩v|歩^|

で表現していたな

コンピュータの思考ルーチンが激しく難しそうだ
854デフォルトの名無しさん:02/09/21 23:20
前のスレッドにあった自動インデントプログラムを機能拡張・7行版にしてみました。
使用方は
 program.exe(仮称) 入力ファイル名 出力ファイル名
です。

#include <stdio.h>
FILE *s,*o;I,c,d;G(){return c=getc(s);}P(){c-10&&putc(c,o);}R(){putc(10,o);}T(t
){while(t-->0)putc(9,o);}S(p){d=1;P();while(~G()&&(P(),c!=41||--d))c-p||++d;}Q(
p){P();while(~G()&&(P(),c!=p))if(c==92||_ismbblead(c))P(G());}main(a,v)char**v;
{s=fopen(v[1],"r");o=fopen(v[2],"w");while(~G())c==63||c==58?R(),T(I),P():c==34
||c==39?Q(c):c==40?S(c):c=='{'?R(),T(I),P(),R(),T(++I):c=='}'?fseek(o,-1,1),P()
,R(),T(--I):P(),c==59&&(R(),T(I));}



>将棋
駒は数字で表せばいいじゃん。

王金銀桂香飛角歩 
+1+2+3+4+5+6+7+8 

玉金銀桂香飛角歩
-1-2-3-4-5-6-7-8
>>855
お前は数字を見て将棋だと言えるのか?

#現実問題、数字にでもしなければ不可能だとは思うが
#つーか数字にしても不可能だろ(w
囲碁の九路盤みたいに、将棋もサブセットがあればいいのだが・・・詰め将棋か?
詰め将棋だと駒が全部必要になってしまうのではさみ将棋はどうでしょう?
859デフォルトの名無しさん:02/09/22 00:09
王 玉
金 キン
銀 ギン
桂 ケイ
香 車
飛 ヒシャ
角 カク
龍 リュウ
馬 ウマ
歩 フ
と  ト

でいけるんじゃ?
>>859
それだったら漢字+「符号」とか「色」で区別した方が扱いも容易
つーか、>>859だと駒の表現だけで2行くらい使ってしまうぞぅ
>>858
もはや別のゲームだが、面白いかもしれない。
コンピュータの思考ルーチンも簡単にかけるし。
よし、いっちょ作ってみるか。>>858が。
>>859
タマキン
863858じゃないけど:02/09/22 03:31
はさみ将棋 現在9行+3文字 とりあえず動く版を作成

ルールは●○を縦横に移動させ、相手をはさむと取れます
ただし、辺を使ってはさんでも無効です
角をはさむのは正式ルールなのかわからなかったので、今のところ無効
移動方法は移動元(x,y)と移動先(m,n)の4整数で指定、左上が(1,1)
1 2 3 4 [RET]

コンピュータの思考ルーチンはまだなので、ランダムに移動します
今は、関数c()で動作を決めるようになっているので、どなたか作成をば!
変数vが移動元で変数zが移動先になってまつ。

int w[]={1,-1,12,-12},h[3],b[132],u=1,z,y,m,n,i=132,v,d=1;r(p,a,f,z){if(b[z=p+w
[a]]==(u^3)){d++;r(z,a,f);f?b[z]=0:0;}if(b[z]==3||!b[z])d=0;}o(x,y,m,n){d=0;z=x
+y*12;v=m+n*12;if((x!=m&&y!=n)||b[z]!=u||b[v]!=0)d=1;if(x==m){for(;y++<n;)d+=b[
x+y*12];}else if(y==n){for(;x++<m;)d+=b[x+y*12];}}c(){for(d=1;d;){for(i=132;i--
;)if(b[i]==2)v=i,i=0;z=rand()%132;o(v%12,v/12,z%12,z/12);}}main(x){for(;i--;b[i
]=z-11?z&&z-10&&i-12U<109?z-1?z-9?0:2:1:3:4)z=i%12;for(;;){printf("%d:%d %d\n",
u,h[1],h[2]);for(i=11;i++<131;)printf("・\0●\0○\0 \0\n"+b[i]*3);if(h[2]>7||h
[1]>7)break;if(u<2){scanf("%d%d%d%d",&x,&y,&m,&n);o(x,y,m,n);if(d&&puts("Err"))
continue;}else c();b[z]=0;for(i=4;i--;d?r(v,i,1):0)r(v,i,0),h[u]+=d;b[v]=u;u^=3;}}
864858じゃないけど:02/09/22 05:20
>>863
あー、移動可能判定間違えてました。現在修正中です。
865858じゃないけど:02/09/22 05:48
>>863
移動判定ミス修正、簡易思考ルーチン装備、やや縮めた版です。

int w[7]={1,-1,12,-12},b[132],u=1,z,y,m,n,i=132,v,d=1;r(p,a,f,z){b[z=p+w[a]]==3
-u?d++,r(z,a,f),f?b[z]=0:0:b[z]-1U>1?d=0:0;}o(x,y,m,n,p,a){d=b[v=m+n*12]+(b[a=z
=x+y*12]!=u||(x-m&&y-n)?1:0);for(p=x==m?y<n?2:3:x<m?0:1;!d&&a!=v;)d+=b[a+=w[p]]
;}c(j,k,s,f,g){s=-1;for(i=120;i--;d=0)for(j=120;b[i]==u&&j--;)for(o(i%12,i/12,j
%12,j/12),k=4;!d&&k--;d>s||d==s&&rand()%j<1?s=d,f=z,g=v:0)r(v,k,0);z=f;v=g;}
main(x){for(;i--;b[i]=z-11?z&&z-10&&i-12U<109?z-9?z-1?0:1:2:3:4)z=i%12;for(;;){
printf("%d:%d %d",u,w[5],w[6]);for(i=9;++i<120;)printf("・\0●\0○\0 \0\n"+b[i
]*3);if(w[5]>7||w[6]>7)break;u<2?scanf("%d%d%d%d",&x,&y,&m,&n),o(x,y,m,n):u>1&&
c();if(d&&puts("Err"));else{b[z]=0;for(i=4;i--;d?r(v,i,1):0)r(v,i,0),w[4+u]+=d;
b[v]=u;u^=3;}}}
>>865
相手のコマの上に持っていってエラーが出ても、相手のコマを消して続くぞ。
867858じゃないけど:02/09/22 16:47
>>866
1 1 9 1 等では再現しませんでした・・・
よろしければ、棋譜(?)を教えてください。
>>867
俺は1 1 9 1 で一発再現。コンパイラ依存か?gccだけど
あと、1 1 91 1 とかも出来たりして、好きな場所にとばせるが、これは仕方ないか
だれか7行grepよろしく
#!/usr/local/bin/ruby
$pattern = ARGV.shift
while gets
  print if /#{$pattern}/
end
>>868

#!/usr/local/bin/perl
`grep @ARGV`;
>>871 せめて
$p=shift;$f=shift||"-";open H,$f;while(<H>){/$p/&&print $_}

perl grep.pl pattern file.txt
perl grep.pl pattern < file.txt
の両方を受け付けるように、という縛りをつけたらperlの短縮のいい例題になりますた。
見てのとおり初心者ですが、ここのスペースは要る、要らんとかいろいろあってなかなか
面白かったです。
まだパーサの改良ができるかもしれないです。
しかし、1行でこれだと7行は相当に死ねるな・・・・・・
while(<>){/$ARGV[0]/&&print $_}

<>の仕様が良く分かってませんでした。
道理で最初に試したのがうまく動かなかったわけだ。
あ、違った、こっちです。上のは動きませぬ。連投すま・・・・。
$p=shift;while(<>){/$p/&&print $_}
875871:02/09/23 00:22
まさかネタに突っ込まれるとは思わなかった。

>>874
>print $_;
print;
でいけます。
876871:02/09/23 00:26
$a=shift;/$a/&&print while(<>);
>>876
惜しい。
$a=shift;/$a/&&print while<>

でも始めから7行以内に収まる事が分かってるようなネタで
盛り上がるのは止めてもらえまいか。
どうせなら10行くらいから頼む。
>>822
つーかそれって単なる認証付きファイル検索なのでは?
認証して自分の所のファイル検索するCGIとそのクライアントのセット?
呼び出し用鯖も作れば余計なhtttpシーケンス省けるかな?
879871:02/09/23 01:24
>>877
while(<>) => while<>
うおぉ!そんな省略まで…。

>どうせなら10行くらいから
そうでつね。了解しました。
C言語でgrepを実装するのは正規表現を実装することだからそれなりに面白いと思われ。
どこまで行けるんだろ。
>>877
んじゃ、Cで作れ。
正規表現解析機を7行で実現しろって意味だったんだが、
perlとか糞Rubyに走るな
882877:02/09/23 05:37
>>881
>>869 さんかい? このスレは言語問わずだから、
このお題の出し方じゃPerlやRubyで応えられても文句言えないぞ(笑)。

俺は >>872 の段階で既に7行どころか1行に収まっているコードを
書き込み続けるのを止めて欲しかっただけなんだが、表現が悪かったかな。
「ネタ」ってのは「*Perlで* 7行grep」を意図してる。他の言語は知らんよ。

出されたネタに対しどの言語で組むかは自由だと思うが、
簡単に達成できる言語で応えるのは控えて欲しい。面白くないし。
反対に、PerlやRubyでも7行に縮めるのが難しそうなネタなら大歓迎。
JavaやJavaScriptでも言語の特色を活かした作品いっぱい出てるしね。
>>881
「正規表現解析機」て…。
なんだか私のせいで荒れたようで……。
申し訳ありませんでした。つい出来て嬉しくて書き込んでしまいました。
初心者だからといって、ここでは発表せず、脳内にとどめた方がよさそうですね。
厨だなぁ・・・
ほんと最近レベル落ちてるな。色々な意味で
お題:平安京エイリアン
しかし気にしすぎじゃない?。
まあ例えばprintfを7行でと言われても、結局テクニックの問題なんだし
単にそれが凄いのか凄くないのかって事なんだからさあ。確かにどうせなら
それを応用して7行使ったビックリするようなものが見てみたいけどね。
 ところでゲームといえば冷たい方程式系のシミュレーションはどうだろう?
アポロ13号とか、どっかのガス欠気味の人工衛星や探査機とかにコマンド送って
操作するような奴。それともまずは定番の月着陸からだろうか?
888デフォルトの名無しさん:02/09/24 17:23
VTL系のBASICはどうなのかな?
オリジナルは768バイトなんでしょ?
>>888
過去ログ
890デフォルトの名無しさん:02/09/25 00:39
HSPスレがなぜか姉妹スレ化してる…
http://game.2ch.net/test/read.cgi/gamedev/1005332663/l50
>>889
そもそも私(>>839)のコピペ。
でネタ自体は>>11で既出だったらしい。
ちなみに前スレや>>612>>626のは予約語からして普通のBASIC
じゃないかな?それともなにか見逃してる?
もっと中間コード風でGAMEIIコンパイラみたいな奴。
>>892
自分でやれ
89460cm浮き上がるストレート:02/09/25 06:22
○ラクエです。20行もオーバーしてしまいました。どなたか縮めてください。

int a,b,c,d,e,f,g,h,i,j,k,l,m,n,z[6],r,x[9],y[9];char o[][9]={"アリーナ","クリフト"
,"ブライ","スライム","マーマン","トロル","オーク","キメラ","竜王","攻撃","防御","イオ","ホイミ","ヒャド"
,"who?","唱えた","ダメージ","回復","死んだ","敵出現","勝利","クリア","全滅","した",
"に","の","は","を","▼","\x1b[2J"," ","MP不足","\x1b[0m","\x1b[31m",
"\x1b[32m","\x1b[>5h"},q[]="00533",
p[]="vlb:XvlXvvlb:XvlXv:?B06060?:?B06060?SI?5?SNXSA?<2?2:?D234040302";
main(){srand(time(0));S(35);for(r=0;r<=3;r++){S(19);S(28);for(b=3;b<6;b++)
{p[r+b]=p[r+b+9];p[r+b+18]=p[r+b+27];}for(l=0;l/10!=3;){for(b=0;b<3;b++)
{if(p[b]!=48){N();S(b);C(63);C(10);for(c=1;c<4;c++){D(c);C(58);S(8+c+c/3*b);
C(10);}d=getch()-49;x[b]=d+d/2*b;if(d==0||(d==2&&b>0)){C(10);S(14);C(10);
for(c=1;c<4;c++){e=x[b]==3?c-1:r+c+2;if(p[e]!=48){D(c);C(58);S(e);C(10);}}
e=getch()-49;y[b]=x[b]==3?e:r+3+e;}}S(29);}for(b=r+3;b<r+6;b+=p[y[b]]!=48?1:0)
{d=x[b]=rand()%2==0?0:p[b+54]-48;e=rand()%3;y[b]=d==3?r+3+e:e;}for(n=0;n<6;
89560cm浮き上がるストレート:02/09/25 06:22
>>894の続き

n++){z[n]=6;d=rand()%6;z[n]=d>2?r+d:d;for(b=n-1;b>-1;b--)n-=z[n]==z[b]?1:0;}
for(n=0,l=0;n<6&&l/10!=3;n++){b=z[n];if(p[b]!=48){N();d=x[b];S(b);d==0?
(S(25),S(9)):d==1?(S(26),S(10),S(23)):(S(26),S(d+9),S(27),S(15));C(7);C(10);
if(d<2||p[b+18]!=48){p[b+18]-=q[d]-48;e=y[b];f=p[b+36]-p[e+45];f=d==0?f<1?2:f:
d==2?20:d==4?30:0;if(d==2)for(g=b<=2?r+3:0,h=0;h<3;h++)Z(g+h);else Z(e);
for(k=0,l=0;k<r+6;k+=k==2?r+1:1)l+=p[k]==48?k<3?1:10:0;if(l%10==3){S(22);
S(28);exit(1);}if(l/10==3){S(20);S(23);}}else S(31);S(28);}}}}S(21);S(28);}
S(a){printf("%s",o[a]);a==28?(getch(),S(29)):a;}P(a){printf("%3d",p[a]-48);}
D(a){printf("%d",a);}C(a){printf("%c",a);}N(){for(a=0;a<3;a++){S(a);P(a);
P(a+18);C(10);}for(a=3;a<6;a++){S(p[a+r]!=48?a+r:30);C(10);}C(10);}Z(a){
if(p[a]!=48&&d!=1){S(a);if(d%2==0){S(24);m=f*(rand()%4+8)/10;p[a]-=m/=x[a]==1
?2:1;D(m);S(16);p[a]<49?(p[a]=48,C(10),S(18)):a;}if(d==3){S(26);S(17);S(23);
p[a]=p[a+9];}C(10);S(32);for(c=0,m=0;c<3;c++)m+=p[c]<49?4:p[c]<64?1:0;m>3?
S(33):m>0?S(34):m;}}
896デフォルトの名無しさん:02/09/25 06:53

>>880
おいお前ら、これを7行にしてください。

typedef unsigned char *U;U Z[9999],H[9999],P,Q,s,t,u,r,n;o,p;N(c){u=Q;*Q++=c;*Q
++=0;*Q++=0;return u;}C(b){*Q++=b;}I(c){return c&&strchr("*+?",c);}X(U p){o=(p[
1]<<8)|p[2];return o?p+(*p==7?-o:o):0;}S(U p){s=Q;Q+=3;while(s-->p)s[3]=*s;*p=6
;p[1]=p[2]=0;}T(U p,U v){for(s=p;t=X(s);s=t);s[2]=o=*s==7?s-v:v-s,s[1]=o>>8;}O(
U p,U v){*p==6&&T(p+3,v);}M(U e){int f;P=e;Q=Z;G(0,&f);}L(c,F)int*F;{if(c-91)c-
92?--P:*P||E(),s=N(8),C(*P++);else{s=N(*P==94?P++,5:4);if(*P==93||*P==45)C(*P++
);while(*P!=93)if((*P||E()),*P-45)C(*P++);else if(*++P==93||!*P)C(45);else{for(
c=P[-2];c<=*P;c++)C(c);P++;}P++;}*F|=1;C(0);}G(p,F,f)int*F;{U r,b,e;p?r=N(10),T
(r,B(&f)):(r=B(&f));for(*F=1;f&1||(*F&=~1),*F|=f&2,*P=='|';P++,T(r,B(&f)));T(r,
e=N(p?11:0));for(b=r;b;b=X(b))O(b,e);if(p?*P++-41:*P)E();return r;}E(){exit(2);
}B(F,f,g,h)int*F;{U r=N(6),c=0,l;for(*F=0;*P&&*P-'|'&&*P-41;p=*P++,g=0,l=p==94?
N(1):p==36?N(2):p==46?g|=1,N(3):p==40?s=G(1,&h),g|=h,s:strchr("|)?+*",p)?E():(L
(p,&g),s),p=*P,I(p)?g&1||p==63||E(),f=p-43?2:1,p==42?S(l),O(l,N(7)),O(l,l),T(l,
N(6)),T(l,N(9)):p==43?T(l,n=N(6)),T(N(7),l),T(n,N(6)),T(l,N(9)):p==63?S(l),T(l,
N(6)),T(l,n=N(9)),O(l,n):0,I(*++P)&&E():(f=g),*F|=f&1,c?T(c,l):(*F|=f&2),c=l);c
||N(9);return r;}A(U s){Q=s;do{P=s;if(D(Z))return 1;}while(*s++);return 0;}main
(c,v)char**v;{M(v[1]);while(gets(H))if(A(H))puts(H);}D(U s){for(;;s=n){n=X(s);p
=*s;if(!p||p==1&&P!=Q||p==2&&*P||p==3&&!*P++||p==4&&(!(o=*P++)||!strchr(s+3,o))
||p==5&&(!(o=*P++)||strchr(s+3,o))||p==8&&(memcmp(s,P,o=strlen(s+=3))||(P+=o,0)
))return!p;if(p>9)return D(n);if(p==6)if(*n==6){do{U t=P;if(D(s+3))return 1;P=t
;s=X(s);}while(s&&*s==6);return 0;}else n=s+3;}}

897デフォルトの名無しさん:02/09/25 19:18
898デフォルトの名無しさん:02/09/25 21:31
>>894-895
いろんな意味で凄いな…
>>894-895
やってみたけど、ある意味悲惨…
ここまでして○ラクエやりたいとは
思わない。

でもがんばりは評価。
900デフォルトの名無しさん:02/09/26 03:16
900達成! PART.2とPART.1未達成やその他スレの話題まとめ >>901
○7行達成されているもの  ×未達成のもの

※レス番号では提示したり達成したりした番号を表示
※おふざっけぽいものは抜いてありますが、ホカソ希望はご自由に
※次のスレでこのレス番号を記載するか、コピペしてください
※間違いがあったらごめんね
ゲーム系
○スロットゲーム >>16
○迷路 >>171>>366>>472-473
○ピンポン >>191
○テトリス >>212
○障害物よけゲーム >>224
○パックマソ >>313
○15パズル >>561>>591
○暇つぶしゲーム >>746
×ブロック崩し >>643>>642
×詰めロードランナー >>634-635>>651
×3D迷路 >>662>>698
×囲碁 >>757>>771
×はさみ将棋 >>863>>865
×○ラクエ >>894-895
×将棋(http://pc3.2ch.net/test/read.cgi/tech/1004395614/760-761) >>897
圧縮
○ブロックソーティング >>386-387
○rangecoder >>512-513>>553
○Huffman符号 >>572>>750>>752
○スライド辞書圧縮 >>580>>596>>600>>616>>629
○RLE >>696>>728
○アーカイバ >>729>>736>>739>>741
○LZW >>799
グラフィックス
○PDTビューワ >>70
○フラクタル画像出力 >>108>>703-705
○アスキーアート >>202
○バナー生成 >>204
○bmp2ppm >>474>>>476
○PNG >>491
○マンデルブロー >>514
×BMP >>131
×レイトレーシング(http://pc3.2ch.net/test/read.cgi/tech/984182993/209) >>711
×波紋 http://pc3.2ch.net/test/read.cgi/tech/984182993/678
×パーティクル http://pc3.2ch.net/test/read.cgi/tech/984182993/675-676
計算
○素数列挙 >>74>>81>>810
○CRC >>447-448
○DCT >>462>>468
○ヒルベルト曲線 >>644>>652
○SHA1 >>668>>724
○円周率 >>827

ネットワーク
○proxy >>208
○SMTPクライアント >>285-286
○SNTPクライアント >>311-312
○POPクライアント >>475
○jis2sjis >>496-497>>506
×FTPもどき >>332
×POPクライアント+jis2sjis >>510
×チャット >>529>>547
ツール
○インデントツール >>105>>129>>129>>854
○ひたんぼ語フィルタ >>317>>321
○時計 >>410
×インデントツール >>327
×grep >>896

デモ
○ねたをくれなんていってる時点で間違ってたんだ…(w >>350>>363
○砂嵐 >>384
言語                                    
○FORTHもどき >>841                            
×BASIC(http://pc3.2ch.net/test/read.cgi/tech/984182993/497-518) >>626
                                      
その他                                   
×FreeBSDのdmesg|head -6を表示 >>730                  
907前スレ853:02/09/26 04:36
あー。Perl 用空白除去ツールは 7 行達成してます。

$_=join" ",grep{s/(^\s*#.*)|\s+/ /g;length}<>;%k='()<>[]{}'=~/./g;s~(.*?)((?:
(?:(?<![\$\%\&\*\@])(?:(?:m|q[qrwx]?)(?:([(<[{]).*?$k{$3}|([^(<[{ \w]).*?\4)|
(?:s|tr|y)(?:([(<[{]).*?$k{$5}\ *\5.*?$k{$5}|([^(<[{ \w]).*?\6.*?\6))|(?<![\w])
/(?:\\/|[^/])*/)[a-z]*)|"(?:\\"|[^"])*"|'(?:\\'|[^'])*')~push@c,$1,$2;''~egx;$q
=$c[0]=~m!^["'/]|([msy]|q[qrwx]?|tr)[^ \w]!;($_,@c)=map{++$q%2?split:$_}@c,$_;
sub j{$_.=$_[0].shift@c}sub l(){length$_.$c[0]}sub p{print"$_\n";$_=shift@c}sub
w(){/\w$/&&$c[0]=~/^\w/}78<l?79<l?p:w?p:j&&p:w?j" ":j while@c;p;

コメント付きはここに。
http://boobar.hoops.ne.jp/rms/
まとめ乙です〜。
970ぐらいで次スレに移ったときにコピペしましょ。
○ラクエで思い出したけど、プログラムポシェットにも1画面RPGってあったよね。
あれ七行で出来ないかな…。マップ移動もあるやつ。
91060cm浮き上がるストレート:02/09/26 14:18
>>909マップ移動のみ。1~9で移動します。黒いところに行くと終了します。

char x,y,Y,X,m[][12]={"47764454244","77762222244","77622111224","66221111224",
"22221111244","42222422224","22222522224","42222422044","22224422224",
"44224424444","44444454444"},g;main(){printf("\x1b[>5h");for(y=x=1;;){for(Y=X=
-2;Y<3;X==2?(X=-2,Y++):X++)printf("\x1b[%d;%dH\x1b[%dm\x1b[%dm  ",Y+13,X*2+40,
Y==0&&X==0?5:0,m[L(y+Y)][L(x+X)]-8);if(y==7&&x==8)exit(1);g=getch();if(g>48&&g
<58){y+=1-(g-49)/3;x+=(g-49)%3-1;y=L(y);x=L(x);if(m[y][x]==49||m[y][x]==52){y
-=1-(g-49)/3;x-=(g-49)%3-1;}}}}L(a){a-=a>=11?11:0;a+=a<=-1?11:0;return a;}
今度はここに出没かよ!>60
まぁ>>910には新スレ立ててもらいましょう。
もう新スレいらないんじゃない?レベル低いし
Prologインタープリタ作ってみたが、これは7行は無謀だな。
とりあえず15行
#define D(X,Y,Z) Y(){N*x=X();return c==Z>>6?s[4]=Z,s[6]=x,x=s+=4,x[3]=Y(),x:x;}
typedef*P,N,*E[99];N*F[99],f,S[99999],*s=S,c,R,**G;C(){(c=getchar())<0?exit(0):
c<33&&C();}T(){N*x;C();s[4]=c*64+(c-65<26U)+1;return'('==c?x=p(),C(),x:(C(),s+=
4);}D(T,Q,2884)D(Q,q,2820)D(q,p,3716)a(c){putchar(c);}W(N*x){r(&x);a(*x>>6);*x&
4?a(40),W(x[2]),a(44),W(x[3]),a(41):0;}B(x,y){s+=4;*s=8;s[2]=x;s[3]=y;}r(P*x){N
*y=*x;for(;y<=s&&**x&2;y+=4)*y==8&&y[2]==*x?*x=y[3]:0;}u(N*x,N*y){r(&x);r(&y);
return x==y||(*x&2?*y&2&&x>y?B(y,x):B(x,y),1:*y&2?B(y,x),1:*x==*y?*x&4?u(x[2],y
[2])&&u(x[3],y[3]):1:0);}I(N*x,E z){P*y=z+(*x>>6),w=s+=4;*w=*x;return*x&2?*y?*y
:(*y=w):*x&4?w[2]=I(x[2],z),w[3]=I(x[3],z),w:x;}Y(x,y,z){s+=4;s[0]=0;s[1]=x;s[2
]=y;s[3]=z;return s;}U(n,g,x){P*i=F,z,q=s;while(*i){E e={0};z=I(*i++,e);if(u(g,
z[2])){X(Y(n+1,z[3],x));if(R<n+2)break;}s=q;}}X(N*x){N*g,z;R=999;x?(g=x[2])?U(x
[1],g,x[3]),*g==2113?X(x[3]),R=R>x[1]?x[1]:R:*g==2820?X(Y(x[1],g[2],Y(x[1],g[3]
,x[3]))):0:X(x[3]):J();}J(){N i=0;while(i<99)G[i]?a(i),a(61),W(G[i++]),a(10):i
++;puts("yes");}main(){N*z;while(z=p()){E e={0};G=e;*z!=3716?W(z),a(10),X(Y(0,I
(z,e),0)),puts("no"):(F[f++]=z,0);}}

:-の代わりに:を使う。compound termはない。変数等は一文字のみ。
:のある入力はassertされて、ないのは問い合わせだとみなされる。
差分リストを使った7行クイックソートでも食わせてみてくれ
t:!. o-(X,Y): z-(X,Y,(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,@)).
z-(X,Y,(X,R)): !. z-(X,Y,(Y,R)): !,f. z-(X,Y,(Z,R)): z-(X,Y,R).
q-(@,X-X):!. q-((X,R),Y-Z): v-(X,R,L,B), q-(L,Y-(X,W)), q-(B,W-Z).
v-(P,(X,R),L,(X,B)): o-(P,X),!,v-(P,R,L,B).
v-(P,(X,R),(X,L),B): v-(P,R,L,B).v-(P, @, @, @):t.

q-((6,2,f,9,7,e,d,5,b,1,8,a,3,c,4,@),Y-@).
>>913
他のスレに比べても十分良いレベルにはあると思うよ。
part2が作られたときも散々言われたけど、なかなかいい作品が出てきたし。

>>914
つーか、すげーよ! 10行未満には絶対すべきや! そしていつか7行に!!
>>915
Part2でレベル下がったと思うけどな。
低レベルの作品をお互いにほめあってどんどんレベル落ちてるかと。
>>916
Part3で回復を期待しましょう。
>>916
そういうあなたの作品は?
>>916
確かにRLEやgrep@perl、○ラクエなどはどうかと思ったけど。

(まだ7行プログラミングが普及していないせいもあるが)
それでもpart1ではオセロやカラースネークくらいしか見られるものがなかった。
part2ではテトリスや各種データ圧縮がなかなかのレベルかと思うが、どうだろ。
>>919
圧縮はPart1のレンジコーダーが最高峰でないの?
>>920
part1のrangecoderはもっと短くできるから、それが再登場したら最強かも。
でも、詰め込み(縮め)度合いならば、part2の方がかなり熟成された感じが良い。
ただコンパイラ依存、環境依存になりかけているのが残念だけど。
>>921
もっと短くしてみろよ
>>922

#include <iostream>
unsigned W,O,u=256,i=6,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){unsigned
char*t=new unsigned char[1<<24];if(*V[1]-69){for(cin>>O;i--;)W=W*x|cin.get();
for(;l<O;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++
]+1);W-=R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W
+=R/u*(a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]
=W/y,W*=x;}cout<<l<<-1;for(y=4;y--;)t[O++]=W>>y*8;}cout.write(t,O);}
924923:02/09/26 23:35
ちなみにもともとのようにgccオンリーでよいならば、
3行目をchar t[y];とできるから、もっと縮まるよん。
言っちゃなんだが大して変わってないな
926923:02/09/27 00:15
>>925
まだpart2ができる前のものだからねぇ。すまんねぇ。
このスレで登場したrangecoderのように符号化と復号をいっしょにするとか、
今ならもっと縮まるかもしれない。>>925が挑戦してみる?
> #include <iostream>
> unsigned W,O,u=256,i,l,K,b,a[256],R=~0,y=1<<24,x=u;main(int,char**V){unsigned
> char t[y];if(*V[1]-69){cin>>O;cin.read(t,6);for(W=t[2]*y|t[3]<<16|t[4]*x|t[5];l
> <O;R*=a[b]){for(K=b=0;R<y;R*=x)W=W*x|cin.get();for(R/=u++;W/R>=K;K+=a[b++]+1);W
> -=R*(K-++a[t[l++]=--b]);}}else{for(;~(i=cin.get());K=W,l++){for(b=0;b<i;W+=R/u*
> (a[b++]+1));if(K>W)for(K=O;!++t[--K];);for(R=R/u++*++a[i];R<y;R*=x)t[O++]=W/y,W
> *=x;}cout<<l<<-1;t[O++]=W/y;t[O++]=W>>16;t[O++]=W/x;t[O++]=W;}cout.write(t,O);}

前スレのrangecoder。
エンコデコ一緒だろ、これ?
>>927
forをひとつにまとめてしまうっていう手法のことだろ?
g=*V[1]-69;としておいて、for(g?decode:encode;g?...:...;);とするやつ。
Part1は無茶苦茶レベル高かったからな。
各コテハン達がしのぎを削ってたね。オフで逢った人たちもいるみたいだし。
見ているだけでわくわく出来た。
Part2も、テトリスとかいい作品はいっぱいあったんだけれど、
いい作品は何故か叩かれ、下らない作品がほめられる傾向が強かったね。
実際にPart1のコテハン達が全然来なくなってしまったしね。

include省いてアーキテクチャ限定して何が楽しいんだろう・・・
と愚痴を言ってみるテスト
930デフォルトの名無しさん:02/09/27 05:47
>>914
prolog15行はすごいね。

今lisp作ってるけどだらだら書いてたら100行超えちゃったよ・・。
>>929
レベルが下がったのは同意だが、他のスレのように厨が入り込みにくいし、
住民の質も平均以上であると思われ。
ROMしてる者ですが、基本テクニック集を作っていただけないでしょうか。
ん?私のような厨を排除するためにもテクニックは実例を見て盗め、ですか?
その他力本願さ加減が素敵
>>933 こちらが乗り込んで作ろうとすると質が下がると言うくせに。
935デフォルトの名無しさん:02/09/27 12:08
>>932
今、私はとってもいそがしい。 そこでだ。
キミが代わりに作っておいてくれないか?
936デフォルトの名無しさん:02/09/27 13:18
UmlToJavaを7行で作って欲しいのですが…。

書式:「入力行」 => 「出力行」
-type hoge => private type hoge {\n}
#type hoge => protected (以下略
+type hoge => public (以下略
-type hoge(...) => private type hoge(...) {\n}
#(以下略
+(以下略
「それ以外」 => 「そのまま出力」

あと、+(public)以外のときには
public type getHoge() {\nreturn hoge;\n}
public void setHoge(type hoge) {\n}
をつけてくれるとうれしいです。
937936:02/09/27 13:21
書き忘れました。
実行時引数で与えたファイル名がクラス名になるようにしてください。
ここって依頼スレか?
939936:02/09/27 14:20
>>938
ネタを提供してやってるん…(゚д゚)ハッ…どうか作ってくださいm(_ _)m。
>>935 ROMな私が作って良いものができると思ってるんですか?
ifを3項演算子に書き換える、とかは圧縮する基本テクニックだろうが
結局のところは対象をいかに簡明でトリッキーなアルゴリズムに
変換できるか、に尽きると思うな。
論理演算、ビット演算、アルゴリズム、データ構造は必須。
>>940
そんなことは問題じゃない!
気持ちの問題だ!
あたってぶつかれ!
>>940
そして砕け散れ!
なんか今日はえらい背中を押しますね。
ROMってのは嘘で1度だけ書いてます。アレだったので叩かれましたが。。。


とりあえずC系の基本技、論理演算子と3項演算子の威力を数字にしてみます。
括弧はついていませんが、各条件部の前に!をつけても正しく動きます。

if(printf("1-1:"))printf("逝ってよし");else if(printf("1-2:"))printf("オマエモナー");else printf("シラネーヨ");
printf("1-1:")&&printf("逝ってよし")||printf("1-2:")&&printf("オマエモナー")||printf("シラネーヨ"); // 12バイト短縮
printf("1-1:")?printf("逝ってよし"):printf("1-2:")?printf("オマエモナー"):printf("シラネーヨ"); // 更に4バイト(演算子が全て2バイトから1バイトになった)

以上は単純で汎用的な短縮パターンですが、3項演算子は演算なだけにif文と違って
戻り値を利用できるので、then/else節に入る命令が同じなら

printf(printf("1-1:")?"逝ってよし":printf("1-2:")?"オマエモナー":"シラネーヨ");// 更に16バイト

とできます。(16バイトは"printf()"が2つ)


なお、これ↓は型の都合上動かないようで。
printf(printf("1-1:")&&"逝ってよし"||printf(printf("1-2:")&&"オマエモナー"||"シラネーヨ"));
そろそろ次スレですか?
つーかprintfの戻りって何だっけ?
printf("1-1:逝ってよし");

最短。
>>946
次スレは立てない方向じゃなかったの?
>>949
なんで?つーかそれ何処から出た話?
>>950 スレ建てお願いしまスタ
952950:02/09/28 01:11
>>951
立てるのは別にいいけど、過去作品まとめてくれ
>>950
レベルが落ちてるから立てなくてよくねぇ?という話は出てたな。
どうせ低下の一途を辿るなら、今のまま埋もれさせる方がいい、とかかな?
個人的にはせっかく出てきたハイレベルな常連を
厨房が叩いていたのを見た時点でこのスレの終わりを感じた。

過去作品は>>903-905
自己レス。>>900-905。スマソ
955950:02/09/28 01:17
つーか立てられるかわかんないけど・・
試しに今からスレ立てて見るから、>>2-5>>900-906とそれ以降のリンク、
誰か次スレに貼っつけてといてね。
956950:02/09/28 01:20
次スレ立てれました。
リンク貼りつけお願いします。

七行プログラミング part3
http://pc3.2ch.net/test/read.cgi/tech/1033143528/
>>956
お疲れ
やっぱりこのスレで止めておけばよかったね
switch(1){case 1:printf("pc3");case 2:printf("2ch");default:printf("net")}
(1==1)?printf("pc3"):(1==2)?printf("2ch"):printf("net")}

上下でやってること違うけど、switch文はやはり使えないな。予約語が長い。
走り抜けが利用できる、条件部が複雑だが等号で行ける、項数が多い。
その3点が揃えば使い道はあると思うが、なかなか無さそう。


まとめにくいなぁ・・・・・・。
3項演算は便利。インクリメント・デクリメントも基本。
ビット演算はとりあえず知っとく。
 ~-1==0なので、EOF検知に使える。
 >>692 のような優先順位を使ったカコイイ技(成果は1バイトだが)もあり。
論理演算が使われているところは隙があるかも。
あと、真理値表って便利。
なんであんなことになっちまったんだろうなぁ
みんなが少しずつ我慢できなかったから。
>>961
> みんなが少しずつ我慢できなかったから。

つーか、ソースも書けねー奴が仕切るからだよ。ちゃんとソースさらして議論すりゃ、厨房はそれなりに淘汰されると思うよ。
こちらで議論するのはなんだけど、
厨房の意見「どんなソースコードでもスレに貼っていいはずだ」
粘着の意見「7行スレは7行を目指す意志の無いソースを貼ってはいけない」
で、いいんだよね?俺は粘着派だな(w

ちなみに、このスレではみんなそこそこ7行を目指していた(様な気がする)。
しかし、厨房増加の危険は出ていた。テトリスでSが叩かれ
(しかも叩かれたのは内容ではなく「誰も興味ないから何度も書き込むな」)
円周率でトリッキーの1を叩く(これも内容ではなく「有名人はもう出てくるな」)。

最終的に明らかに7行の意志のないドラクエが出てきても叩かれない
(しかもコードの質としては、個人的にはテトリスや円周率に比べて低いように感じた)

そりゃスレの質も落ちるよなぁ。

>>962
ソースさらして議論ってどういう意味だろう?
2chに質を求める奴はなんつぅか・・・・・・頭が悪いんじゃなかろうか。
削除を行ったり規制を行ったりする管理人がいれば質も上がるだろうが、
2chは議論の場所しか貸してくれない。

質を求める奴は適当なHN使って自分でHP立ち上げて、ここに1回宣伝に来ればいいのに。
965962:02/09/29 03:26
>>963
> ソースさらして議論ってどういう意味だろう?

「どんなソースでも貼れ」「いや、七行にならない奴はダメだ」とか言ってたって議論は平行線だと思うよ。

27行のドラクエがダメだって言うけど、じゃあ何行ならいいの ? 27行でスカスカのコードもあるし、8行でもキチキチのコードもあるよね。

結局コードの行数って言っても一概に何行までならいいなんて言えないと思う。(かといって、一万行とか貼られても困るけどね。)

だから、とりあえず貼ってもらって、どう見てもダメな奴はそう指摘すりゃいいと思う。

少なくとも、「どんなソースでも貼れ」「いや、七行にならない奴はダメだ」なんて言う不毛な議論よりはマシになると思うよ。
>>964
part1は機能していたのにな。知名度が上がるとダメなのかな?
>>965
963ではないけど、7行にする意志があれば何行でもいいんじゃない?
ドラクエはどうかしらないが、part3のlispはあり得ないよな。
part3は、278からマトモそうな流れになってきた模様
http://pc3.2ch.net/test/read.cgi/tech/1033143528/278-
968デフォルトの名無しさん:02/09/29 06:20
>>965
「このスレ」に於いては、七行でないとダメだろう
スレタイが前提になることを肝に銘じなくてはいかんよ
10行でOKと思う奴は10行のスレを立てれ
>>968
つーか元々perl少年のDVD解除7行事件簿から始まった事だろ。
十分短きゃそれでいいんだよ。
>>968みたいなやつがのさばってからだよ。
スレの雲行きが悪くなったのは
>>968
つーか、あげるなボケ!
上げられたくないなら埋め立てろ
>>968
>「このスレ」に於いては、七行でないとダメだろう
> スレタイが前提になることを肝に銘じなくてはいかんよ
> 10行でOKと思う奴は10行のスレを立てれ

じゃあ聞くけど、貼る奴は7行になると思って貼らないといけないの ?
自分の実力じゃ10行までしかできなかったけど、もしかしたらエキスパートが7行にしてくれるかもしれないじゃん。

あと、勢いあまって6行とかしたら失格ですか ?

まあ、何十行もある奴は論外として、元コードが10行位なら状況によっては7行ぐらいなることもあるでしょ ?
何でそんなにスレタイトルに拘るのかわかんらんよ。
>>973
自分でやらなくても(達成できなくても)7行への希望があるなら良いんじゃないのか
出したか無いけど、新スレのlispとか7行にするつもりがあるとは思えないだろ。
>>974
> 出したか無いけど、新スレのlispとか7行にするつもりがあるとは思えないだろ。

コード見ないとなんとも言えないよ。
>>975
>GC、関数トレース、リスト操作、再帰、高階、内部関数

奇跡が起きてもこれだけを7行付近まで持っていくのは不可能と断言できる。
>>975
その程度のことも解らない人はこの板に来ない方がいい
>>976
もし出来たら、目でピーナッツ噛めよな
>>977
> その程度のことも解らない人はこの板に来ない方がいい

ふ〜〜〜ん、あんたはコードを見なくてもわかるわけね、すごいね。
>>978-979
粘着見苦しい。つーか解るだろ(w
断定して排除するのも見苦しいぞ。
選民思想が強すぎる。
まあ無理っぽい率99.8%超えてるのは認めよう
でも、男なら いや 漢なら! 敢えて0.2%に挑む!
>>981「犬が卵を産まないと断定できるのか?」
http://ton.2ch.net/test/read.cgi/gline/1028811653/
>>982
無理っぽい率100%越えてるって。
>>984
えーやっぱりそうかなー
でも100%のヒーローなんているわけないよと
わかってんだからはりきるしかないですな
>984
ヤマトじゃあるまいしどうやったら100%超えるのかと。
でも見たかったな44行lisp。
GCとかトレースなどはあきらめても問題ないんじゃ?
順次機能を削っていけば…
>>987
よし作れ
>>988
俺はlispを知らない(w
ので、仕様を決めてくれ
7行職人に到る過程として「44行でこんなのできました」というのも
大切にすべきではと思う。7行スレでやるのはスレ違いだが。

無下に断るよりは隔離スレ(釣りバカ)で質疑応答を受けたり
気が向いた人が添削・指摘するなりしたほうがお互いベターでは?
>>990
> 無下に断るよりは隔離スレ(釣りバカ)で質疑応答を受けたり
> 気が向いた人が添削・指摘するなりしたほうがお互いベターでは?

ソース見てから、「あっちへ逝け」と振るんじゃダメなん ?
>>991
いいと思うぞ
993989:02/09/29 21:05
俺はlispを知らないので、代わりにlisp風?ミニ電卓を作ってみた。
"(* (+ 2 3) 4)" みたいな計算ができる。
貧弱な上短くする余地もまだまだある、つーか手抜きだが、その辺は好きに弄ってくれ。

#include<stdio.h>
char s[999],*p=s;a(void){int r=0;if(*p=='('){char c=*++p;++p;while(*p==32)++p;
if(c=='+')r=a()+a();else if(c=='-')r=a()-a();else if(c=='*')r=a()*a();else if(
c=='/')r=a()/a();else if(c=='%')r=a()%a();else if(c=='p'){r=a();printf("%d\n",
r);}++p;}else do{r=r*10+*(p++)-'0';}while(*p!=32&&*p!=0&&*p!=')');while(*p==32
)++p;return r;}main(){gets(s);printf("%d\n",a());return 0;}
>>993
つまり、逆ポーランド記法の電卓ってこと?
995989:02/09/29 21:21
逆ポーランド記法と正反対で、演算子が前に来るから…何て言うんだろ?

表示のpとループ構文l(←もちろん独自仕様)加えて7行に増やした(w
例えば(l 10 (p 10)) で 10を10回表示。
#include<stdio.h>
char s[999],*p=s;a(void){int r=0;if(*p=='('){char c=*++p;++p;while(*p==32)++p;
if(c=='+')r=a()+a();else if(c=='-')r=a()-a();else if(c=='*')r=a()*a();else if(
c=='/')r=a()/a();else if(c=='%')r=a()%a();else if(c=='p'){r=a();printf("%d\n",
r);}else if(c=='l'){int i,n=a();char*b=p;for(i=0;i<n;++i){p=b;r=a();}}++p;}
else do{r=r*10+*(p++)-'0';}while(*p!=32&&*p!=')');while(*p==32)++p;return r;}
main(){gets(s);printf("%d\n",a());return 0;}
>>994
> つまり、逆ポーランド記法の電卓ってこと?

逆ポーランドは、反対。

2 3 + 4 * とか入力すると、20 とか出力される。HP の奴が有名。

ポーランド記法は、* + 2 3 4 とか入力する。
HPの電卓は最高だな。クソCompaqめが…

1000取っていい?
>>996
ネタかどうかしらないがageるな
次スレ:七行プログラミング part3
http://pc3.2ch.net/test/read.cgi/tech/1033143528/l50

兄弟スレ:「釣りバカ日誌パート1」
http://pc3.2ch.net/test/read.cgi/tech/1033220509/l50


           ここは 乂1000取り合戦場乂 となりますた。。。
      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
1000997 ◆1O00getQ :02/09/29 21:32
    \\                                              //
  ♪  \\    キョウモゲンキニ 1000get♪  ミンナナカヨク 1000get♪     //    ♪
       \\                                        //         ♪
     ♪    ∧ ∧     ∧ ∧   ∧ ∧     ∧ ∧    ∧ ∧     ∧∧      ♪
 ♪    ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧      ♪
      (゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧
    ♪ ∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)∧ ∧(゚0 ゚*)  ♪
─♪──(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*)|  ∪(゚0 ゚*) |  ∪(゚0 ゚*) |  ∪───────
       |  ∪  | |  ∪|   | | ∪. |   | |  ∪|  | .|  ∪|   | | ∪ |  | |  ∪ |  |〜    ♪
  ♪   |  | U U .|  | U U  |  | U U. |  | U U .|  | U U  |   | U U  |  | U U   ♪
       U U     U U     U U     U U     U U     U U     U U
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。