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

七行プログラミング part5

レス数が1000を超えています。これ以上書き込みはできません。
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
0951デフォルトの名無しさん2008/06/29(日) 15:09:02
誰かMMLインタプリタ書いた人いなかったっけ
0952デフォルトの名無しさん2008/06/29(日) 15:17:02
>>951
>>328

たぶん俺が書いたんだったと思う…
もうずいぶん前だな…
0953デフォルトの名無しさん2008/06/29(日) 15:25:53
あーもう一年半も前のことだったのか
0954デフォルトの名無しさん2008/06/29(日) 15:30:39
三項演算子つかいすぎw
0955デフォルトの名無しさん2008/06/29(日) 15:32:22
三項演算子は花形中の花形じゃないか
0956デフォルトの名無しさん2008/06/29(日) 15:33:05
==を-にすると少し減ると思う
0957デフォルトの名無しさん2008/06/29(日) 16:46:17
>>956
条件がひっくり返ってしまうから必ずしもそうとは限らないんだなあ。

A?B:C のうち、Bの箇所には?:よりも優先順位の低い演算子が使えるんだけど、
それをCに持っていくと括弧で括らなきゃならない。そうすると1文字増える。
0958デフォルトの名無しさん2008/06/29(日) 16:59:02
a ? b : c
のとき、b を省略すると a が真のとき、a が返る。

っていうのもあったけど、規格に合致しているんだっけ?
0959デフォルトの名無しさん2008/06/29(日) 17:02:33
>>958
そりはgcc拡張
09609522008/06/29(日) 17:57:29
#include <stdio.h>
#include <windows.h>
int r,c,d,n,j,a,o=4,l=4,t=120,f[84],A='A';w(a){ungetc(a,stdin);}y(int*p){return
*p=getchar();}q(int*p){for(r=0;'0'<=y(&d)&&d<='9';)r=r*10+d-'0';w(d);r?*p=r:0;}
main(){float s=27.5;for(;j<84;s*=1.0595)f[j++]=s;while(y(&c)-EOF)c+=c<'a'||'z'<
c?0:A-'a',A<=c&&c<'H'||c=='R'?c-'R'?a="ACDFHIK"[c-A]-A+12*o, y(&d)=='+'||d=='#'
?a+=a!=83:d=='-'?a-=!!a:w(d):0,n=l,q(&n),j=12e4*(y(&d)-'.'?w(d),2:3)/t/n,c=='R'
?Sleep(j),0:Beep(f[a],j):c=='L'?q(&l):c=='O'?q(&o),o=o>7?7:o:c=='T'?q(&t):c=='\
>'?o+=o!=7:c=='<'?o-=!!o:0;}

14字削った。

* 同じ文字リテラルが4回以上出てくるときは、変数においたほうが得。
* お尻に3個以上の0が続く整数リテラルは指数表記を使ったほうが得。
ということに気づいた。
0961デフォルトの名無しさん2008/06/29(日) 18:52:33
指数表記かぁ・・・なるほどねぇ
0962デフォルトの名無しさん2008/06/30(月) 04:09:13
やっぱりmain(A)はまずいですね……。
空気を読まずにもう一つだけ投下。

#include <windows.h>
char*D="9a3adfTh9d3dfh@i<<hf5d7fXd9d3dfh@l<9o3hiheHh<f9h3hijHh/'<f9h3hihPdbdhj\
llln4/M@fhijhddc@fh`d@q5d3fPjjihi<<lPdj/ jij@ig4dgTfH/ om4kj<i<g4f4g4iPPq@@i@h\
hi@57lDhhi@57l<po5n7o\\jjih<i<@fPh/7bd5f;df5h;i<n<lh<h<fhXd@q5b3d<i<hiP/Fii5h;\
io5p;o<n<lh<h<fhPdHqh<i<hd@d<f`d",*E="!/$*'%/'3 5*9&=#@*I&N#R*X$^ c'p$";int A,B
,C;main(){while(*D){if(*D-47)A=*D>96?8:*D++-48,B=*D<97?18:(*D++-97)*2,Beep(B-32
?E[B]*8+E[B+1]:32767,A*35);else D+=C++?C>2?C=0,D[1]-16:-D[1]+2:2;}return 0;}
0963デフォルトの名無しさん2008/06/30(月) 13:22:05
すげええw7行プログラミングはやっぱすげえやw
0964デフォルトの名無しさん2008/06/30(月) 13:30:38
だからもう末期的だといってんだよw
0965デフォルトの名無しさん2008/06/30(月) 17:16:47
文字列からプープー音鳴らすのってMSXみたいだな
0966デフォルトの名無しさん2008/07/01(火) 23:49:43
'd'=100だからそれ以下は数字にすれば1文字稼げる希ガス
0967デフォルトの名無しさん2008/07/02(水) 01:24:37
それだとUNICODE環境とかでは動かなくなるんじゃね
0968デフォルトの名無しさん2008/07/02(水) 09:20:50
UTF-8 なら大丈夫だな
0969デフォルトの名無しさん2008/07/06(日) 12:24:42
UTF-8のテキストファイルをUTF-16に変換します
Winの人は"w"を"wb"にしてね
#include <stdio.h>
FILE*i,*o;int l,p,t[]={0,192,224,240},r=65536;void P(int p){putc(p>>8,o);putc(p
%256,o);}int main(int c,char**v){if(c<3||(i=fopen(v[1],"r"))?((o=fopen(v[2],"w"
))?0:(fclose(i),1)):1)return fputs(c<3?"usage: ./u8tou16 in out\n":"fairu ga h\
irakemasen! itteyoshi!!\n",stderr),1;for(fputs("\xfe\xff",o);(c=getc(i))-EOF;(p
-=r)>=0?P(p/1024+55296),P(p%1024+56320):P(p+r))for(p=c-t[l=(c&224)-192?(c&240)-
224?(c&248)-240?0:3:2:1];l--;)p=p<<6|getc(i)%128;fclose(i);fclose(o);return 0;}
// なんとか7行達成w
0970デフォルトの名無しさん2008/07/06(日) 12:35:59
*i,*o,l,p,t[]={0,192,224,240},r=65536;P(p){putc(p>>8,o);putc(p%256,o);}
main(int c,char**v){if(c<3||(i=fopen(v[1],"r"))?((o=fopen(v[2],"w"))?0:(fclose(
i),1)):1)return fputs(c<3?"usage: ./u8tou16 in out\n":"fairu ga hirakemasen! i\
tteyoshi!!\n"),1;for(fputs("\xfe\xff",o);(c=getc(i))+1;(p-=r)>=0?P(p/1024+55296
),P(p%1024+56320):P(p+r))for(p=c-t[l=(c&224)-192?(c&240)-224?(c&248)-240?0:3:2:
1];l--;)p=p<<6|getc(i)%128;fclose(i);fclose(o);}

//なんども出てきた技だしこれぐらいはしとこうや
0971デフォルトの名無しさん2008/07/06(日) 12:37:20
*i,*o,l,p,t[]={0,192,224,240},r=65536;P(p){putc(p>>8,o);putc(p%256,o);}main(int
c,char**v){if(c<3||(i=fopen(v[1],"r"))?((o=fopen(v[2],"w"))?0:(fclose(i),1)):1)
return fputs(c<3?"usage: ./u8tou16 in out\n":"fairu ga hirakemasen! itteyoshi!"
),1;for(fputs("\xfe\xff",o);(c=getc(i))+1;(p-=r)>=0?P(p/1024+55296),P(p%1024+
56320):P(p+r))for(p=c-t[l=(c&224)-192?(c&240)-224?(c&248)-240?0:3:2:1];l--;)p=p
<<6|getc(i)%128;fclose(i);fclose(o);}
0972デフォルトの名無しさん2008/07/06(日) 12:55:46
fcloseなんて不要だから消すべし
0973デフォルトの名無しさん2008/07/06(日) 13:12:54
いくらなんでもint*にFILE*いれるのはやめれw
0974デフォルトの名無しさん2008/07/06(日) 15:06:12
何がいけないの
まさか今更このスレで型安全性なんて下らない寝言は言わないよな
0975デフォルトの名無しさん2008/07/06(日) 15:40:30
そりゃ、標準を無視すればいくらでも短くできるのは確かだが、
なんというかそれでは意味がない気がするんだよなあ。

入出力機能を使うときに#include<stdio.h>を書かなければ、
一行まるまる浮くわけだが、そういう縮め方に価値を見出せない。

俺は、最低限、型の整合性とプロトタイプの整合性だけは守りたいと思う。
0976デフォルトの名無しさん2008/07/06(日) 15:51:01
KY
0977デフォルトの名無しさん2008/07/06(日) 15:52:28
標準を無視してもいくらでも短くなったりはしないよ
特定の環境に目一杯依存してコードを縮めるのも一つの楽しみ

「標準に準拠するC言語」と
「特定の処理系で動けばよいC言語」を
二つの独立した言語として扱えばいいと思う
自分が関心ないからって別言語のコードに文句付ける必要はないって意味で
0978デフォルトの名無しさん2008/07/06(日) 17:20:02
stdio.hが入らなかったときは、誰かに託せばいいんだよ
0979デフォルトの名無しさん2008/07/06(日) 17:46:33
>>977
「標準に準拠するC言語」>「特定の処理系で動けばよいC言語」

この前提がある以上、「特定の処理系で動けばよいC言語」はランクが下がる
0980デフォルトの名無しさん2008/07/06(日) 20:42:49
で?
0981デフォルトの名無しさん2008/07/06(日) 21:03:35
評価として下になるってだけの話だろ
0982デフォルトの名無しさん2008/07/06(日) 22:41:43
次スレ&まとめの時期ですかね
というわけでむちゃくちゃ適当にまとめてみました
よくわからなかったものは□にしてますごめんなさい。だれか補足お願いします

>7 AA(.com)
>42 Win32用簡易メトロノーム(C/Win32)
>43,46,49 数独(C)
>53,54 アイコンエディタ(JavaScript)
>75,77 1行掲示板(PHP)
>80,649,650 シェルピンスキーのギャスケット(C)
>81 弾避け(JavaScript)
>99,100 正規表現(C) ※9行
>121 Java難読化(Java) ※9行
>167,175 オセロ(C) ※12行
>185,187 サーバー(なでしこ)
>191 メール送信(なでしこ)
>193 Windows送るメニューカスタマイズ(なでしこ)
>221 メール送信フォーム(なでしこ)
>226,230 □(.com)
>244,245 ブロックソート/ソート解除(C#)
>284 ノイズ(C/cygwin)
>300,302,304,305,311,312,313,350 音(C/Win32)
>316 □(C#)
>317 音(Ruby/Win32)
>321,322 Beepエミュ(C/Win32)
>327,328,960 MML再生(C/Win32) ※9行
>343 け言語(Ruby)
>402,404,405 音(C/Win32)
続く
0983デフォルトの名無しさん2008/07/06(日) 22:42:28
続き
>407 TerminateProcessフック(C/Win32) ※11行
>409,412 ハフマン法圧縮(C)
>415 ZwCloseフック(C/Win32) ※3文字オーバー
>414,421,457,458 ランレングス解凍(C)
>459 C/C++コメント除去(C)
>466,467,469,470,476,479,482,483,484,488,492 2進数のビット反転 関数のみ(C)
>477,478 誤爆(C)
>487 brainfuck(C)
>498,499 画像ぼかし(C#)
>509,511,512 ニュートン法(C)
>513 標準出力にBrainfuckと読める絵を出力(Brainfuck)
>520,529,534 ローマ字半角カナ変換(なでしこ) ※11行
>533 ローマ字半角カナ変換(JavaScript) ※13行
>540 ∩( ・ω・)∩ ばんざーい (なでしこ)←データが外部
>555,557,559 WEOF→EOF(C)
>558 素因数分解(JavaScript)
>564 echoサーバ(BASIC)
>565 echo(Brainfuck) 4文字
>577,590 スロット(JavaScript)
>626,631,632,636,637,640 迷路(JavaScript)
>651,657,658,661,663 Base64エンコード(JavaScript)
>669 テニス(JavaScript)
>670,671,672,675 計算機(JavaScript)←evalしてるだけ
>677 □(Befunge?)
>679 Base64エンコーダ、デコーダ(Perl)
>683 Base64エンコーダ(Lua)
>685 Base64エンコーダ(Ruby)←Base64モジュール使ってるだけ
>687,698 自己展開Base64(.com)
続く
0984デフォルトの名無しさん2008/07/06(日) 22:43:47
続き
>700 メッセージボックス(C/Win32)
>701 テトリス(東方何とか)←18行
>705,706 じゃんけん(JavaScript)
>713 RSSリーダ(JavaScript)
>714,717,718,741,745 メモ帳(JavaScript)
>721 テンキー練習(JavaScript)
>743 WYSIWYGなHTML作成支援エディタモドキ(JavaScript)←innerHTMLに代入してるだけ
>755,757,758,760,762 逆localtime(Perl)
>763 626のマウス版(JavaScript)
>765,772,775 ⊂( ^ω^)⊃耐久走 (JavaScript)
>776,777,781 ベートーベン(C/Win32)
>804 数独(C)
>865,867 crypt(C)
>870,875,878,879,919,923 life(C)
>907,912 printf(C)←vprintfに丸投げ
>920 printf(C)
>924 暇つぶし(JavaScript)
>931 シャットダウン(C/Win32)
>940,945,949,962 音(C/Win32)
>969,970,971 UTF-8→UTF-16(C)
誰か次スレお願いします
0985デフォルトの名無しさん2008/07/06(日) 22:56:22
おう立ててこよう。ちょっと待っててな。
0986デフォルトの名無しさん2008/07/06(日) 23:03:59
七行プログラミング part6
http://pc11.2ch.net/test/read.cgi/tech/1215352849/
0987デフォルトの名無しさん2008/07/06(日) 23:13:28
次のお題なんだが、 jsonを見やすくインデント ってのはどうだろう
需要が無いならオレが書く
0988デフォルトの名無しさん2008/07/06(日) 23:20:30
そういえばアセンブラで行詰め込み可能な文法ってないのかな?
0989デフォルトの名無しさん2008/07/06(日) 23:22:31
7行でアセンブラ書けばいいんじゃね?
0990デフォルトの名無しさん2008/07/06(日) 23:27:08
>>987
じゃあ俺はJSで参戦
0991デフォルトの名無しさん2008/07/07(月) 01:27:39
#!/usr/bin/ruby -pl
$_=[$_].pack("m*")

>>685
0992デフォルトの名無しさん2008/07/07(月) 06:41:21
>>982

>>7 みたいにきちんとレス番引用してくれよ・・・(´・ω・`)
09939922008/07/07(月) 06:45:17
置換してみたら、本文が長すぎますだって。そういうことか(´・ω・`)
0994デフォルトの名無しさん2008/07/07(月) 07:24:38
>992,993
専ブラ使え
09959922008/07/07(月) 09:20:53
Janeだと>>994はちゃんと表示できるのに、>>982は表示できない謎
0996デフォルトの名無しさん2008/07/07(月) 09:49:12
「アンカーが多すぎます」もあるんじゃね?
0997デフォルトの名無しさん2008/07/07(月) 10:42:59
自分の奴がまとめに入ってると嬉しかったり恥ずかしかったりだな
0998デフォルトの名無しさん2008/07/07(月) 13:44:13
>>997
あるあるww
0999デフォルトの名無しさん2008/07/07(月) 14:32:45
>>988
db/dw/dq で終りじゃね?
1000ヽ・´∀`・,,)っ━━━━━━━┓2008/07/07(月) 14:48:26
4バイトはDQ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。