トップページ⇒tech
1001コメント294KB

七行プログラミング part5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/03/16(木) 09:02:39
7行×79文字なら言語は問いません。
過去作品は、もしかしたら>>2-20あたりに。

前スレ
http://pc8.2ch.net/test/read.cgi/tech/1051703369/
part 3
http://pc2.2ch.net/tech/kako/1033/10331/1033143528.html
part 2
http://pc3.2ch.net/tech/kako/1018/10188/1018840143.html
part 1
http://pc.2ch.net/tech/kako/984/984182993.html
0067デフォルトの名無しさん2006/05/19(金) 18:56:48
>>66
>>7の2行目と5行目のことじゃね?
0068デフォルトの名無しさん2006/05/19(金) 21:30:54
>67
空白行?
0069デフォルトの名無しさん2006/05/19(金) 22:14:04
つーかcomファイルなんて実行できねえよ
0070デフォルトの名無しさん2006/05/19(金) 22:39:38
>>68
二行目
> フフフフフフフフフフフフケタタイ カ サョo3レS]サ」J3レセ -ク$$Pクヘハ3チP_SXイミフWWWウハWWWWオkWWWWイ オタP[%
五行目                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ーA3チエ^PUSVRRーハ3チエ PウェウェWWWWWWW3ター"ムネヘミT]ク&&2タムネ3ノア。3メ3ロSSヘミ^_ク@QムタPPヌ゚%
                  ~~~~~~~~~~~~~~~~~
0071デフォルトの名無しさん2006/05/19(金) 23:24:49
>>70
作者乙
0072デフォルトの名無しさん2006/05/19(金) 23:55:08
>>69
死ね
0073デフォルトの名無しさん2006/05/23(火) 08:28:49
comファイルはバイナリそのもので、
プログラムングとは言えないんじゃね?
0074デフォルトの名無しさん2006/05/23(火) 08:41:54
貴様ヘッドアセンブルを否定したな!
0075デフォルトの名無しさん2006/05/23(火) 10:20:29
この類のは散々既出かもしれませんが、PHPで1行掲示板を書いてみました。
連投対策(同IPから60秒間連投を制限)も一応施してあります。なんかまだまだ
短くできそうな悪寒がします。

<?$ip=$_SERVER['REMOTE_ADDR'];$d=time();$n=htmlspecialchars($_POST['n']);
$m=htmlspecialchars($_POST['m']);$p="log.txt";if($n&&$m){$l=@file($p);
$s=explode("<>",$l[0]);if(($ip!=$s[0])||($d-$s[3]>60)){$fp=fopen($p,"w+");fputs
($fp,$ip."<>".$n."<>".$m."<>".$d."<>\n");for($i=0;$i<20;$i++)fputs($fp,$l[$i]);
fclose($fp);}}?><form method=POST><input name=n>:<input name=m><input type=
submit><?$l=@file($p);foreach($l as $arr){$s=explode("<>",$arr);print("<hr>[".
$s[1]."] ".$s[2]." (".date("Y/m/d h:i:s", $s[3]).")");}?>
0076デフォルトの名無しさん2006/05/23(火) 18:25:51
確かにプログラムングとは言えないな
0077デフォルトの名無しさん2006/05/23(火) 18:31:57
>>75
PHPは関数名が長いね…

縮め、改行入力阻止、0のみ入力許可
<?$f=array('n','m');foreach($f as&$v){$v=strtr(htmlspecialchars($_POST[$v]),
"\n",' ');}$p='log.txt';if($f[0]!=''&&$f[1]!=''){$l=@file($p);$s=explode('<>',
$l[0]);if(($ip=$_SERVER['REMOTE_ADDR'])!=$s[0]||($d=time())-$s[3]>60){$l[20]=''
;file_put_contents($p,"$ip<>$f[0]<>$f[1]<>$d<>\n".implode('',$l));}}?><form
method=POST><input name=n>:<input name=m><input type=submit><?$l=@file($p);
foreach($l as$arr){$s=explode('<>',$arr);echo"<hr>[$s[1]] $s[2] (".date(
'Y/m/d h:i:s',$s[3]).')';}?>
0078デフォルトの名無しさん2006/06/29(木) 14:59:10
保守
0079デフォルトの名無しさん2006/07/18(火) 21:50:29
ホッシュ
0080デフォルトの名無しさん2006/08/10(木) 02:37:10
シェルピンスキーのギャスケット

#include <stdio.h>
main()
{
    int x, y;
    for (y = 0; y < 32; y++){ for (x = 0; x < 32; x++)
    printf(x & y? "..": "■"); printf("\n"); }
}
0081デフォルトの名無しさん2006/08/19(土) 15:58:18
JavaScript 弾避け。マウスカーソルを四角にぶつけないように動かす
互換性のないように作ってあるので、IE専用

<body id=B onMouseMove=y=event.y;x=event.x><script>h=B.clientHeight-20;a=[b=[q=
[D=document]]];for(U=x=99;x--;C=F=q[x]=P=y=0)D.write("<b style=background:red;"
+"width=16;height=16;position:absolute;top:-20></b>");function T(){for(i=C;i--*
!F;J=D.all(5+i).style,l=q[i]/U,m=J.left=a[i]*(c=1-l)+a[d=i+U]*l,n=J.top=b[i]*c+
b[d]*l,F=m-15<x&x<m+16&n-15<y&y<n+16)if(!q[s=i]--)for(j=2;j--;s+=R%3+1)R=Math.
random(q[i]=U)*w*h|0,a[c=j?i:i+U]=s%2?s%4>1?0:w:R%w,b[c]=s%2?R%h:s%4?h:0;P++-C*
9||C-U&&C++;if(F)alert(P);else setTimeout(T,U-C)}T(w=B.clientWidth-20)</script>
0082デフォルトの名無しさん2006/08/19(土) 16:15:30
GJ!
だんだん多く速くなるあたり職人芸だな
0083デフォルトの名無しさん2006/08/28(月) 21:02:17
保守age
0084デフォルトの名無しさん2006/09/29(金) 15:58:31
保守
0085デフォルトの名無しさん2006/10/09(月) 16:07:24
hosyu
0086デフォルトの名無しさん2006/10/10(火) 20:06:29
俺には無理だったお題
perlでモジュールを使わずに7行でRSSリーダー(RSS to html)を作れ

LWP::Simpleも使わずに7行はやっぱり無理か??
0087デフォルトの名無しさん2006/10/10(火) 20:13:20
RSSリーダーの定義による
0088862006/10/10(火) 20:24:20
定義はRSSをgetして、htmlに変換するってもの
LWP::Simpleと、XML::RSSで作れたんだがモジュール無しは俺にはむりぽ
0089デフォルトの名無しさん2006/10/10(火) 23:22:55
Socketも使えんがな
0090デフォルトの名無しさん2006/10/10(火) 23:32:32
curlで取得
0091デフォルトの名無しさん2006/10/10(火) 23:33:19
一先ずLWP::Simpleだけで作れないかやってみるお
0092デフォルトの名無しさん2006/10/11(水) 00:28:14
XSLT使えば2〜3行で書けるんじゃない?あほらしくてやる気しないけど
0093デフォルトの名無しさん2006/10/12(木) 14:02:19
じゃあ俺も無理だったお題。
Cで7行正規表現。どうやっても7行は無理だったw 腕に覚えのある奴がいたら、是非挑戦してみてくれ。
0094デフォルトの名無しさん2006/10/12(木) 14:07:44
>>93
正規表現って何をサポートすればいいんだ?
0095デフォルトの名無しさん2006/10/12(木) 22:49:52
#include "regexp.h"
0096デフォルトの名無しさん2006/10/12(木) 22:53:17
#include <boost/regex.h>
0097デフォルトの名無しさん2006/10/14(土) 02:02:18
catコマンドってC言語で7行で作れる?
どこまでの機能を詰め込めるかの問題になりそうだけど。
0098972006/10/14(土) 02:04:30
作れる?ってのはおかしいか。
作るだけなら余裕だろうし。
どれだけ機能を削ったり詰め込めるかって感じ。
0099トリッキーの12006/10/14(土) 05:40:11
お久しぶりです。part1でお世話になったトリッキーの1です。
>>60-64で晒されていますが、そのサイトは私のサイトです。
正規表現が面白そうだったので久々に作ってみましたが、9行になりました。
縮めるテクニックなどを完全に忘れてしまっていますが、頑張れば7行は可能そうです。
仕事の合間に7行目指して頑張ってみようと思います。

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

#include <stdio.h>
int n[999][99],z=2,i;char*s,c[999][99],v[9999];h(f,t,k){for(i=0;c[f][i]!=0;i++)
;c[f][i]=k;n[f][i]=t;}p(int o,int f,int t,char*l){int x;if(l){for(x=0;(f=c[o][x
])!=0;x++)if((f==1||*l==f)&&(n[o][x]==1||p(n[o][x],0,0,(f==1)?l:l+1)))return 1;
}else{(o==0)?p(1,f,t,0),(*s=='|')?s++,p(0,f,t,0):0:(o==1)?(*s==')'||*s=='|'||*s
==0)?h(f,t,1):(x=z++,p(2,f,x,0),p(1,x,t,0)):(o==2)?(x=z++,c[x][0]=1,n[x][0]=t,p
(3,f,x,0),(*s=='*')?h(f,t,1),s++,n[x][0]=f:0):(*s)?(*s=='(')?(s++,p(0,f,t,0),++
s,0):h(f,t,*s++):0;}}main(int x, char**o){s=o[1];p(0,0,1,0);while(gets(v)){s=v;
while(*s){if(p(0,0,0,s++))return printf("match");}}}
0100トリッキーの12006/10/14(土) 05:47:13
多分大体のコンパイラで動くバージョンはこちらです。連投失礼しました。

#include <stdio.h>
int n[999][99],z=2,i;char*s,c[999][99],v[9999];p(int o,int f,int t,char*l){int
x;if(l){for(x=0;(f=c[o][x])!=0;x++)if((f==1||*l==f)&&(n[o][x]==1||p(n[o][x],0,
0,(f==1)?l:l+1)))return 1;}else{(o==0)?p(1,f,t,0),(*s=='|')?s++,p(0,f,t,0):0:(
o==1)?(*s==')'||*s=='|'||*s==0)?c[f][c[f][98]]=1,n[f][c[f][98]++]=t:(x=z++,p(2
,f,x,0),p(1,x,t,0)):(o==2)?(x=z++,c[x][0]=1,n[x][0]=t,p(3,f,x,0),(*s=='*')?c[f
][c[f][98]]=1,n[f][c[f][98]++]=t,s++,n[x][0]=f:0):(*s)?(*s=='(')?(s++,p(0,f,t,
0),s++,0):(c[f][c[f][98]]=*s++,n[f][c[f][98]++]=t):0;}return 0;}main(int x,char
**o){s=o[1];p(0,0,1,0);while(gets(v)){s=v;while(*s){if(p(0,0,0,s++))return
printf("match");}}return 0;}
0101デフォルトの名無しさん2006/10/14(土) 10:22:42
キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!
0102デフォルトの名無しさん2006/10/14(土) 11:17:28
凄すぎます。
0103デフォルトの名無しさん2006/10/14(土) 14:51:06
天 才 現 る
0104デフォルトの名無しさん2006/10/14(土) 14:53:22
何て恐ろしい子!
0105デフォルトの名無しさん2006/10/14(土) 15:15:59
BNFの自前パース+NFA検索ってところかな?
10行でもありえないくらい凄いよ…本当に7行なんて出来るんだろうか
0106デフォルトの名無しさん2006/10/15(日) 01:37:57
よく読んでないんだけどa==bを使ってるところをうまくa-bにするとかで数文字減れないかな
0107トリッキーの12006/10/15(日) 02:06:53
>>105
おお、その通りです。あのコードからよくわかりましたね!
DFAにすべきなんでしょうが、動けばいいやってことでNFAにしました。
でも現状では最初に適当に作りすぎたためにどんなに頑張っても9行なので、
行数を減らすことを前提に少し構造を変えないといけないかも…
等価なBNFで状態数の小さいものを書くことが出来ればなんとかなるのかな?

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

7行達成したらお披露目にきますね ノシ
0108デフォルトの名無しさん2006/10/15(日) 12:12:36
int x;if(l){for(x=0;
↓
int x=0;if(l){for(;

こういう積み重ねが大事なんだろうな。 人間ってすごいな。
0109デフォルトの名無しさん2006/10/15(日) 13:28:33
for(int x=0; はC言語では駄目なんだっけ
C++で出来るようになったのか
0110デフォルトの名無しさん2006/10/15(日) 14:07:28
>>109
C99なら可。
0111デフォルトの名無しさん2006/10/15(日) 19:01:41
(o==0)?(A):(B) → (o)?(B):(A)
とかあるけど……まぁそれでも7行には入りそうにないな。
もっと根本的な対策がいる。
0112デフォルトの名無しさん2006/10/16(月) 01:50:15
'|' とかの即値を数字で書くと一字減る
0113デフォルトの名無しさん2006/10/16(月) 06:58:49
>>112
それは限りなく最後の手段。ASCII文字配列でないコンピュータで動かなくなる。
0114デフォルトの名無しさん2006/10/16(月) 07:58:30
いつの時代のコンピューだよw
0115デフォルトの名無しさん2006/10/16(月) 15:10:16
いや、それは気にすべきだろ。
0116デフォルトの名無しさん2006/10/16(月) 15:48:13
こういう基本的なことは重要
0117デフォルトの名無しさん2006/10/16(月) 17:02:54
それよりもコンピューという略し方のほうが異常だと僕は思うね。
0118デフォルトの名無しさん2006/10/17(火) 00:14:52
>>117
ついに「ぴゅー太」と呼ぶ時代が来たようだな。 時代が追いついてきたな。
0119デフォルトの名無しさん2006/10/17(火) 00:20:38
マイコンと呼ぶ日も近そうだ。ベーマガスペシャル復刊とかね
0120デフォルトの名無しさん2006/10/17(火) 01:03:25
1chipMSX買っちゃったしね。
0121デフォルトの名無しさん2006/10/27(金) 23:58:59
BCELを使った Java難読化プログラムです.
現在,9行.あと少し.キャストがうぜぇ.groovy なら問題なくできるだろう.

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

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

java -cp .:bcel.jar O <target classfile>
0122デフォルトの名無しさん2006/10/28(土) 01:02:08
>>121
純粋な疑問なんだけど、importが許されるなら、そこで全部書けばいいんじゃない?
0123デフォルトの名無しさん2006/10/28(土) 15:16:15
>>122
「BCELを使った」が前提なだけだから、BECL以外をimportしちゃダメだろう。

もちろん他所で書いてimportして「1行で書きました! 7行以下だからいいよね!」
って主張するのは各人の勝手だとは思うけど、スルーされるか叩かれるだけじゃね?
0124デフォルトの名無しさん2006/10/28(土) 16:08:23
うーん、公式ライブラリ以外を使っているのは微妙な気もするけどな。
0125デフォルトの名無しさん2006/10/28(土) 19:48:05
>>122
Cで #include <stdio.h> 書くのは許していいの?
0126デフォルトの名無しさん2006/10/28(土) 20:19:46
じゃあお前includeディレクティブなしでCでなんか書いてみろ。
できなかったら半年ROMってろ。
0127デフォルトの名無しさん2006/10/28(土) 20:44:46
Cなら楽だろ。
0128デフォルトの名無しさん2006/10/28(土) 23:04:28
>>125
Javaでjava.*を使わなかったら認めてやるよ
0129デフォルトの名無しさん2006/10/29(日) 00:44:16
標準ライブラリや有名どころのはいいんじゃね?
0130デフォルトの名無しさん2006/10/29(日) 01:32:42
標準ライブラリは誰からも文句をつけられないが、
有名どころなら一部の人からは認められないだろうね。
正規表現をboost使って実装されてもハァ?だし。
0131デフォルトの名無しさん2006/10/29(日) 03:21:16
boostを使った面白ネタキボン
0132デフォルトの名無しさん2006/10/29(日) 03:25:40
スレ違い。
0133sage2006/11/09(木) 00:13:29
まだ続いてたんだこのスレ。感動した。
0134デフォルトの名無しさん2006/11/11(土) 16:56:12
age
0135デフォルトの名無しさん2006/11/27(月) 22:46:20
だれかなんかねーの?
0136デフォルトの名無しさん2006/11/27(月) 23:19:49
昔、ポケコンで1行プログラムがあったな。
BASICだが、独特の技術だった。
0137デフォルトの名無しさん2006/11/27(月) 23:45:01
>>135
ネタが無いなら対戦リバーシとかどう?
0138デフォルトの名無しさん2006/11/27(月) 23:46:52
>>137
俺が作るのかw
対戦ってコンピューターとの対戦だよな。
交互に入力する対戦でもいいか。
0139デフォルトの名無しさん2006/11/27(月) 23:49:18
リバーシって昔なかったっけ?
x軸とy軸を入力するやつだった気が
0140デフォルトの名無しさん2006/11/27(月) 23:58:45
おいおいすでに誰かのHPにあったろ。
0141デフォルトの名無しさん2006/11/28(火) 00:08:24
ログみたらオセロ、マインスイーパ、ドラクエ
いろいろあったわ。
同じゲーム作ってもおもしろいんじゃないか?
ネタがあれば作る人はたくさん出てきそうだけどな
0142デフォルトの名無しさん2006/11/28(火) 00:09:31
辞書を外に持った簡易日本語IMEってのはどうだ?
0143デフォルトの名無しさん2006/11/28(火) 00:11:24
>>142
データを外に持つのか。それはいいのか?
0144デフォルトの名無しさん2006/11/28(火) 00:16:31
ダメだったら毎回辞書を標準入力から…
0145デフォルトの名無しさん2006/11/28(火) 00:16:39
だめです
0146デフォルトの名無しさん2006/11/28(火) 00:22:08
ネタとして楽しめるならなんでもいいよ。
評価は見てる人がそれぞれすれば良いんだから。
0147デフォルトの名無しさん2006/11/28(火) 00:25:35
じゃー明日オセロ作るわ。
明日な、明日。
0148デフォルトの名無しさん2006/11/28(火) 00:31:34
>>147
プログラム作ってる暇があったらちゃんとオナニーしろよな
0149デフォルトの名無しさん2006/11/28(火) 00:33:27
>>148
校則で禁止されています。
0150デフォルトの名無しさん2006/11/28(火) 01:25:21
破るためにあるんですよ。ナニとは言いませんが。
0151デフォルトの名無しさん2006/11/28(火) 03:45:57
オナニーじゃ処女膜は破れない
0152デフォルトの名無しさん2006/11/28(火) 04:00:38
処女がバイブ使うのは、推奨しない。
でも、たった7行で逝けるなんて感動。
0153デフォルトの名無しさん2006/11/28(火) 07:54:50
今日はじめてみたけど楽しそうなスレだね。
初代のトリッキー1さんとかってまだ居るの?
5年前って凄いな。
0154デフォルトの名無しさん2006/11/28(火) 08:06:29
7行printfは組込で実際に使った。便利だった。
0155デフォルトの名無しさん2006/11/29(水) 03:25:04
そういや、VBScriptやJScriptってsprintf無いよね?
0156デフォルトの名無しさん2006/11/29(水) 11:02:47
ないみたいだな。
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=javascript+sprintf&num=50
自前でいろいろ作ってる人はたくさんいるみたいだけど、
これを7行のプログラムにするのも楽しそうだなww
0157デフォルトの名無しさん2006/11/30(木) 03:32:53
10進BASICで七行プログラミング
01581382006/12/02(土) 21:34:13
先輩!
COMとの対戦オセロ作ってるんですけど50行くらいあるんですよね。
月曜日まで待ってもらっていいですか?
0159デフォルトの名無しさん2006/12/02(土) 22:01:46
よーし じゃあ父さんもなでしこで七行プログラミングしちゃうぞー
0160デフォルトの名無しさん2006/12/02(土) 22:52:59
>>158
きたいあげ
01611382006/12/04(月) 12:06:28
今14行 あと7行……
0162デフォルトの名無しさん2006/12/04(月) 13:22:05
COMとの対戦オセロなら、パート1でトリッキーの1さんが6行で作ってますね
0163デフォルトの名無しさん2006/12/04(月) 14:07:25
>>162
だから?
0164デフォルトの名無しさん2006/12/04(月) 14:13:19
>>163
せっかくオブラートに包んであげたのに…
既に素晴らしい作品があるから、二番煎じな上に14行なんて面白くもなんともない経過報告いらないですよ
0165デフォルトの名無しさん2006/12/04(月) 14:49:11
>>164
(^ω^;)
最近7行のプログラム出てこないから書いてるだけなんだけど
面白くないと思うなら面白いものを提示してくれ
0166デフォルトの名無しさん2006/12/04(月) 17:44:52
>>165
相殺法と呼ばれる詭弁術の典型例
やっていることがつまらないという評価に対してなんら反論できてない
■ このスレッドは過去ログ倉庫に格納されています