2011-05-22
sleep sort
書いてみた |
http://d.hatena.ne.jp/gfx/20110519/1305810786
sleep sortというソートアルゴリズムが話題になっているようなので、なでしこでも書いてみました。
タイマー部品にポケットがないので、そこだけ拡張したPタイマーを定義して使っています。
# スリープソート 99yen 2011/5/22 ソート対象=「5,3,6,3,6,3,1,4,7」を「,」で区切る N=ソート対象の要素数 # ソート済みの個数 CNT=0 # 係数 待機秒=対象*C C=0.1 ソート対象を反復 ソートタイマー[回数-1]をPタイマーとして作成 ソートタイマー[回数-1]→間隔=対象*C ソートタイマー[回数-1]→ポケット=対象 ソートタイマー[回数-1]→時満ちた時は~ 自身→停止 自身→ポケットを表示 CNT=CNT+1 もし、CNT>=Nならば、「ソート完了」と言う ソートタイマー[回数-1]→開始 ■Pタイマー +タイマー ・ポケット
こいつ…動くぞ!w
2010-07-21
ぼくのかんがえたさいきょうのなでしこ2
なでしこ2 |
半年以上もこの日記を書いてなかったのですね(^ ^; 学校の課題ではC言語ばっかり書いています…orz
ということで、最近盛り上がりを見せているなでしこ2について、新機能(文法)案をば。
現在のなでしこは、配列・ハッシュ関連が少し弱いと思うので、まずはその辺についていくつか。
「配列開く」などの命令を追加すれば、使い勝手は変わらないはず
ARRAY = {2, 4, 6} // C言語風
果物は{「りんご」,「みかん」,「ぶどう」}
・ハッシュにループ構文がないので、「反復」でハッシュも扱えるとうれしい。
HASHを反復
「{キー}:{対象}」を表示
そのほかについて
・可変長引数をサポートしてほしい。ただし関数型呼出し専用。関数の宣言についてはまだ議論がありそうですが…
●printf(format,{可変長}varlist)
これでvarlistに配列で入るとか。でも、配列を上記のように{}で書ければ
{「りんご」,「みかん」}を「%s %s」で整形表示
2009-12-10
AlynThat's the best aneswr of all time! JMHO
pqhtrsflleK78Ue <a href="http://dtfjflrajyzf.com/">dtfjflrajyzf</a>
kztxtiezmed7b8GQq <a href="http://xnwgomoocpxl.com/">xnwgomoocpxl</a>
jkvjwf6zaRKH , [url=http://vbadmmwranpm.com/]vbadmmwranpm[/url], [link=http://vwecprmvnauc.com/]vwecprmvnauc[/link], http://iidmcvvuhimx.com/
2009-11-02
nade_socha検証ありがとうございます!
これで安心して64bit版が買えますよ~
2009-10-25
問題
勉強会 |
問1
名前を尋ねて、その人に挨拶するプログラムを書いてください。
余裕があれば:エディタ部品やボタン部品も使ってみてください。
問2
ひつじを1秒ごとに10匹数えるプログラムを書いてください。
余裕があれば:しゃべらせてみてください。
問3
年を尋ねて、その年の13日の金曜日をすべて表示するプログラムを書いてください。
問4
九九の表を表示するプログラムを書いてください。数字は揃えて表示してください。
ヒント:「継続表示」は文字を表示した後、改行しない命令です。
問5
なでしこがインストールされているフォルダ以下に含まれているすべての「.nako」ファイルのファイル名と、その個数を表示するプログラムを書いてください。
ヒント:なでしこのインストールされているフォルダは「ランタイムパス」です。
問6
コンピュータとじゃんけんをするプログラムを書いてください。ただし、人間対人間用にも改造できるようにしてください。
命令:「ボタン選択」
ヒント:勝ち負けの判定は、手を数に変換すると簡単になります。
問7
3桁の数を尋ねて、それを漢数字に変換するプログラムを書いてください。
(例:256→二百五十六 101→百一)
余裕があれば、3桁以外の数にも対応させてみてください。
回答
勉強会 |
答1
「お名前は?」と尋ねて名前に代入。
「{名前}さん、こんにちは!」と言う。
答2
エージェントマーリン召喚
10回
「ひつじが{回数}匹」をエージェント言う
1秒待つ
エージェント終了
MS Agentのマーリンを使用しました。声を出すには、必要なファイルを以下のページを参考にインストールしてください。
http://codezine.jp/article/detail/867?p=2
答3
「何年を調べますか?」と尋ねて年に代入
12回
調査日は「{年}/{回数}/13」
もし、調査日の曜日が「金」ならば
調査日を表示
答4
Iで1から9まで繰り返す Jで1から9まで繰り返す I*Jを3で文字列右寄せして継続表示 改行を継続表示
ただ単に答を表示しただけでは表が綺麗にそろいません。そのため、「文字列右寄せ」で整形しています。
答5
ランタイムパス&「*.nako」の全ファイル列挙 NAKOファイル=それ ファイル数=NAKOファイルの要素数 NAKOファイルを言う ファイル数を言う
会場では反復していちいち比較する方を紹介しましたが、こちらの方が明らかにスマートですね…
全ファイル列挙を使わないで書いてみると再帰関数の勉強になるかもしれません。
答6
人間手=「じゃんけん!」を「グー チョキ パー」でボタン選択 人間手の「グー」を0に置換 人間手=人間手の「チョキ」を1に置換 人間手=人間手の「パー」を2に置換 コンピュータ手=3の乱数 コンピュータ手を表示 (人間手-コンピュータ手)で条件分岐 0ならば 「あいこ」を表示 1ならば 「負け」を表示 2ならば 「勝ち」を表示 -1ならば 「勝ち」を表示 -2ならば 「負け」を表示
このソースでは少々泥臭いのですが、下のクジラさんのソースのように「(先手N - 後手N + 3) % 3」とするとたったこれだけで勝ち負けを判定できます!
答7
数字=「数は?」を尋ねる 漢数字=「,一,二,三,四,五,六,七,八,九」を「,」で区切る 漢字位=「百,十,」を「,」で区切る 3回 数字の回数から1文字抜き出す もし、それ<>1 || 回数=3ならば 漢数字[それ]を継続表示 漢字位[回数-1]を継続表示
kujirahand===
「名前は?」と尋ねる。
「{それ}さん、こんにちは」と言う。
===
普通ですが・・・
kujirahand問2:
~~~~~
!「aquestalk.nako」を取り込む
10回
母艦=回数
「ひつじ;が」とAQT話す
「<NUMK VAL={回数} COUNTER=ひき>」とAQT話す
1秒待つ。
終わる。
~~~~~
kujirahand問6 じゃんけんプログラム
~~~
#-----------------------------------------------------------------------
# じゃんけんプログラム
#-----------------------------------------------------------------------
相手一覧=「人間
コンピューター」
手一覧=「0:ぐー
1:ちょき
2:ぱー」
「誰と勝負しますか?」を相手一覧で、
ボタン選択して相手に代入。
真の間
勝負実行
勝負判定
「続けますか?」と二択。
もし、それがいいえならば、終わる。
●勝負実行
「先手:どの手を出しますか」を手一覧でボタン選択して、
先手に代入。
もし、相手=「人間」ならば
「後手:どの手を出しますか」を手一覧でボタン選択して、
後手に代入。
違えば
手番号=3の乱数
後手=手一覧¥手番号
●勝負判定
先手N=INT(先手)
後手N=INT(後手)
判定番号は、(先手N - 後手N + 3) % 3
判定番号で条件分岐
0ならば
結果=「あいこ」
1ならば
結果=「後手の勝ち」
2ならば
結果=「先手の勝ち」
「先手:{先手} 後手:{後手}」を表示
「結果:{結果}」を表示。
#-----------------------------------------------------------------------
kujirahand問7 3桁限定とのことで、以下のように。本来は、割ってくと良いのですが・・・
~~~
候補=「,壱,弐,参,四,五,六,七,八,九」を「,」で区切る。
「数字を入力してください」と尋ねて、NOに代入。
NOを文字列分解
「{候補\それ\0}百{候補\それ\1}十{候補\それ\2}」を表示
~~~
kujirahand問4
~~~
LIST=ランタイムパス&「*.nako」の全ファイル列挙
F個数=LISTの要素数
「ファイルの個数:{F個数}
{LIST}」をメモ記入。
~~~
nade_socha問4
「回」を使うと、「回数」が混乱するということですが、
変数を使うことで回避できます。
~~~
文字サイズは12
9回
Tateは回数。
10,Tate*30へ回数を文字表示。
Tate*50-10,0へ「{回数}の段」を文字表示。
9回
Yokoは回数。Kekka=Tate*Yokoを2で文字列右寄せ。
Yoko*50,Tate*30へKekkaを文字表示。
~~~


なので、C 言語の初期化子に慣れていると違和感があるかもしれませんが、
Aとは配列 = [1, 2, 3]
Bとはハッシュ = {"a": 10, "b": 100}
のような感じになると思います。
ハッシュのループはいいですね!欲しいです。
可変長引数の実装は難しいかもしれません。そうでなくとも、あの辺は
引数の助詞問題や、オーバーロードを実装するかなど他の問題が山積してる?ので。。。
ではではー
あっ、配列リテラルは例の案に書いてありましたね。JSON記法はシンプルで良い感じですね。
さすがに可変長引数は余計な機能かもですね(^ ^; 一番最後のように書ければ問題ないわけで。関数オーバーロードのほうが必要かも…。
暗黙の型変換は便利な反面、誤作動の原因ともなりますので、
上級者向けに「!変数の型指定は必要」みたいなことも
あれば良いと思います。
ハッ、もしかして「Aとは変数」はこのときのために用意してあったのですかね!?