2006/08/20
キミならどう書く 2.0 - ROUND 3 -
LL Ringも開催まであとわずか!
「キミならどう書く 2.0」,前回の開催から少し間が開いてしまいましたが,ROUND 3 を開催します.
今回のお題はグラフです.
いくつかのデータを与えたときにグラフを出力するプログラムを作ってください.細かい仕様はありません.
たとえば以下のようなものです.
% ./graph 2 5 9
2 : *****
5 : ************
9 : ********************
このプログラムでは最大の数値に対応する '*' の数を 20 とし,与えられた数値に応じた数の '*' を出力しています.
余力のある方は派手なグラフを出力したり,数値以外のデータを扱ってみるのも面白いかもしれません.また,ディスク容量やファイル容量などの値を使ってみるのもよいでしょう.
みなさんのプログラムやグラフをお待ちしています.
- Category(s)
- キミならどう書く2.0
- The URL to Trackback this entry is:
'*' でグラフを描くスクリプト @ Ruby
参考までにエントリで例示したグラフは以下のスクリプトで出力したものです.
#!/usr/bin/env ruby
columns = 20
nums = ARGV.collect {|s| s.to_i}
sum = nums.inject(0) do |sum, i|
sum = sum + i
end
max = nums.max
nums.each do |i|
puts '%3d/%3d : ' % [i, sum] +
'*' * (columns * (i.to_f/max) ).ceil
end
% ./graph.rb 4 6 4 9
4/ 23 : *********
6/ 23 : **************
4/ 23 : *********
9/ 23 : ********************
[プログラム][LL] io + OpenGL = ioDesktop でグラフを描く
例によって iolanguage にて。 ioDesktop では OpenGL を扱えるので、そっちで描画してみました。 graph.io GLGraphApp := OpenGL clone do( width := 440; height := 320 data := nil GW := 12 font := Font clone open("resources/library/fonts/Free/Sans/Bold.ttf&#
グラフを描く(Mathematica)
コンソールでやれば次のようになる In[1]:= この企画、Mathemat...
グラフを描く(Mathematica)
<< Graphics`Graphics` BarChart@{2,...
グラフを描く(SQL)
SELECT d,RPAD('',20*d/m,'*') n FROM dat,...
キミならどう書く 2.0 - ROUND 3 -
>>> def graph(xs): print "\n".join([st...
ボクならこう書く
LL Ringブログでやってる「キミならどう書く」シリーズで、何でも良いからグラフを作ってみやがれって言うお題があったのでおもしろそうだからチャレンジしてみました。 http://ll.jus.or.jp/2
バッチファイルは Lightwight Language なのでしょうか
ふと、「Windows のバッチファイルは Lightwight Language なのか」と悩み、書いてみました。「キミならどう書く 2.0 - ROUND 3 -」でグラフを出力するプログラムがお題でしたので作ってみました。Windows バッチなので、Windows 以外の環境では動きません。現在、Windows S
[隠密][LLR-R3]グラフを描く!
与えられた数値を元にグラフを描くアプリを作れ!だそうです。 僕のではこんなグラフが出来ます。 $ ./graph 2 5 9 ********************|
[隠密][LLR-R3]続き
別ヴァージョン造りました。 今度はこんな感じです。 $ ./graph2 2 5 9 ** ***** ********* $ ./graph2 22 25 39 ++** ++***** ++***&#
[隠密][LLR-R3]更に続き--省略形続き
略式表示第二形です。 $ ./graph3 2 5 9 +* +**** +******** $ ./graph3 22 25 39 +* +**** +*****************
LLR2006 - Round 3; perl + javascript
いよいよLL Ringは明日開催のようですが、私は欠席です。期待してた方ごめんなさい。
その代わり竹迫さんがPerlのLanguage Updateをやってくれます。
そういえば私の不在中にもう一問出てましたね。
キミならどう書く 2.0 - ROUND 3 - ? Lightweight Language Ring....
キミならどう書く2.0 ROUND3 「お題はグラフ」
これを見て、LL Ringにはいけそうもないのだが、Pythonで、またやってみ...
[Python / LLRing ] re:君ならどう書く2.0 -Round 3-
Python で書いてみる。引数として与えられた数値のうち最大の数値を '*'
Tcl(/Tk) でグラフ
Lightweight Language のサイトの「キミならどう書く 2.0 - ROUND 3 -」というトラックバック企画 [1] で今回のお題が「いくつかのデータを与えたときにグラフを出力するプログラム」(細かい仕様無し)ということだった。
今までこの企画で Tcl や Tcl/Tk で参加している人は意外にもいないっぽいので書いてみることにしました(それにこのお題はいかにも Tcl/Tk 向き)。
まずちょっと仕様を制限したもの。キャンバスの幅をはみ出すようなデータは考慮しない。
# graph.tcl
pack [canvas .canvas -width 200 -height [expr 20*[llength $argv]] -bg white]
set ypos 10
foreach num $argv {
.canvas create line 0 $ypos [expr $num*10] $ypos -width 18 -fill blue
.canvas create text 2 $ypos -text $num -anchor w -fill white
incr ypos 20
}
実行するには
wish graph.tcl 2 5 9 18 15
などとする。実行結果はこうなる。
次はちゃんとキャンバスの大きさに合わせて伸縮するようにしたもの。
# graph2.tcl
set height 150; set width 200; # キャンバスの大きさ
set max [lindex [lsort -integer $argv] end]; # 要素の最大値
set lwidth [expr $height/[llength $argv]]; # 線の取れる太さ
pack [canvas .canvas -width $width -height $height -bg white]
set ypos [expr $lwidth/2]
foreach num $argv {
set xpos [expr $width*$num/$max]
.canvas create line 0 $ypos $xpos $ypos -width [expr $lwidth-2] -fill blue
.canvas cre...
キミならどう書く 2.0 - ROUND 3 -
cf. キミならどう書く 2.0 - ROUND 3 - 前のエントリでは話がBrainf*ck(一応伏せ字にする)にいっちゃったけど,こっちが本題。 まったくもって乗り遅れたけど書いてみた。 import System showStar :: Int -> IO () showStar n = do putStrLn $ (show n) ++ " : &#
[参加者募集/ Python]君ならどう書く? -marge sort-
本家 LLRing 風にちょっとした問題で遊んでみようと思います。Python
Re:キミならどう書く 2.0 - ROUND 3 -
Cで
/*BINFMTC:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define max(a,b) ((a) >= (b) ? (a) : (b))
int main(int ac, char** av)
{
int i, sum=0, maxval=0;
const char* graphstr="************************************************************************";
int graphstrlen=strlen(graphstr);
for (i=1; i<ac; (sum+=atoi(av[i])), ++i, maxval=max(maxval,atoi(av[i]))) if (atoi(av[i])<0) exit(1);
for (i=1; i<ac; ++i)
printf("%.2i/%.2i %s\n", atoi(av[i]), sum, graphstr+graphstrlen-1-atoi(av[i])*graphstrlen/sum);
return 0;
}
Re:キミならどう書く 2.0 - ROUND 3 -
しまった、修正
/*BINFMTC:
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define max(a,b) ((a) >= (b) ? (a) : (b))
int main(int ac, char** av)
{
int i, sum=0, maxval=0;
const char* graphstr="************************************************************************";
int graphstrlen=strlen(graphstr);
for (i=1; i<ac; (sum+=atoi(av[i])), (maxval=max(maxval,atoi(av[i]))), ++i) if (atoi(av[i])<0) exit(1);
for (i=1; i<ac; ++i)
printf("%.2i/%.2i %s\n", atoi(av[i]), sum, graphstr+graphstrlen-atoi(av[i])*graphstrlen/maxval);
return 0;
}