Hatena::Groupnadesiko

99円のへたれ学習帳

2009-10-25

問題

| 15:59

問1

名前を尋ねて、の人に挨拶するプログラムを書いてください。

命令:「尋ねる」「言う」「(文字列連結)」

余裕があれば:エディタ部品やボタン部品も使ってみてください。

問2

ひつじを1秒ごとに10匹数えるプログラムを書いてください。

余裕があれば:しゃべらせてみてください。

問3

年を尋ねて、の年の13日の金曜日をすべて表示するプログラムを書いてください。

問4

九九の表を表示するプログラムを書いてください。数字は揃えて表示してください。

命令:「繰り返す 構文」「継続表示」「改行(定数)」

ヒント:「継続表示」は文字を表示した後、改行ない命令です。

問5

なでしこがインストールされているフォルダ以下に含まれているすべての「.nako」ファイルのファイル名と、の個数を表示するプログラムを書いてください。

ヒント:なでしこのインストールされているフォルダは「ランタイムパス」です。

問6

コンピュータとじゃんけんをするプログラムを書いてください。ただし、人対人用にも改造できるようにしてください。

命令:「ボタン選択

ヒント:勝ち負けの判定は、手を数に変換すると簡単になります。

問7

3桁の数を尋ねて、それを漢数字に変換するプログラムを書いてください。

(例:256→二百五十六 101→百一)

余裕があれば、3桁以外の数にも対応させてみてください。

回答

| 21:34

答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]を継続表示

無量大数まで対応したバージョンがどう書く?orgにあります

http://ja.doukaku.org/comment/4530/

kujirahandkujirahand2009/10/25 16:01===
「名前は?」と尋ねる。
「{それ}さん、こんにちは」と言う。
===
普通ですが・・・

kujirahandkujirahand2009/10/25 16:04問2:
~~~~~
!「aquestalk.nako」を取り込む
10回
  母艦=回数
  「ひつじ;が」とAQT話す
  「<NUMK VAL={回数} COUNTER=ひき>」とAQT話す
  1秒待つ。
終わる。
~~~~~

kujirahandkujirahand2009/10/25 16:41問6 じゃんけんプログラム
~~~
#-----------------------------------------------------------------------
# じゃんけんプログラム
#-----------------------------------------------------------------------
相手一覧=「人間
コンピューター」

手一覧=「0:ぐー
1:ちょき
2:ぱー」

「誰と勝負しますか?」を相手一覧で、
ボタン選択して相手に代入。

真の間
 勝負実行
 勝負判定
 「続けますか?」と二択。
 もし、それがいいえならば、終わる。

●勝負実行
 「先手:どの手を出しますか」を手一覧でボタン選択して、
 先手に代入。
 もし、相手=「人間」ならば
  「後手:どの手を出しますか」を手一覧でボタン選択して、
  後手に代入。
 違えば
   手番号=3の乱数
   後手=手一覧¥手番号
 
●勝負判定
 先手N=INT(先手)
 後手N=INT(後手)
 判定番号は、(先手N - 後手N + 3) % 3
 判定番号で条件分岐
  0ならば
   結果=「あいこ」
  1ならば
   結果=「後手の勝ち」
  2ならば
   結果=「先手の勝ち」
 「先手:{先手} 後手:{後手}」を表示
 「結果:{結果}」を表示。
#-----------------------------------------------------------------------

kujirahandkujirahand2009/10/25 16:42問7 3桁限定とのことで、以下のように。本来は、割ってくと良いのですが・・・
~~~
候補=「,壱,弐,参,四,五,六,七,八,九」を「,」で区切る。
「数字を入力してください」と尋ねて、NOに代入。
NOを文字列分解
「{候補\それ\0}百{候補\それ\1}十{候補\それ\2}」を表示  
~~~

kujirahandkujirahand2009/10/25 16:44問4
~~~
LIST=ランタイムパス&「*.nako」の全ファイル列挙
F個数=LISTの要素数
「ファイルの個数:{F個数}
{LIST}」をメモ記入。
~~~

nade_sochanade_socha2009/10/30 18:20問4
「回」を使うと、「回数」が混乱するということですが、
変数を使うことで回避できます。
~~~
文字サイズは12
9回
  Tateは回数。
  10,Tate*30へ回数を文字表示。
  Tate*50-10,0へ「{回数}の段」を文字表示。
  9回
    Yokoは回数。Kekka=Tate*Yokoを2で文字列右寄せ。
    Yoko*50,Tate*30へKekkaを文字表示。
~~~

MusbauMusbau2012/03/26 18:26There are no words to describe how bdoacious this is.

pgqkzqrfhrpgqkzqrfhr2012/03/28 08:32BaNCyg , [url=http://crektuepblbg.com/]crektuepblbg[/url], [link=http://keiuxdrlhjgl.com/]keiuxdrlhjgl[/link], http://ekqugbkcooat.com/

rzsaqzrzsaqz2012/03/28 15:03jdyw6Y <a href="http://dhabbkooczwv.com/">dhabbkooczwv</a>

2009-04-27

「エクセルでカレンダー」の解答

| 22:31

4月25日の勉強会の後半で行った演習の模範解答と解説です。

仕様

・エクセルのシートに2009年のカレンダーを作る
・A列に年、B列に月、C列に日、D列に曜日を入れる

の1

エクセル起動
エクセル新規シート
DATE=「2009/01/01」
DATE<「2010/01/01」の間
  T=DATEを"/"で区切る
  "A"&回数へT[0]をエクセルセル設定
  "B"&回数へT[1]をエクセルセル設定
  "C"&回数へT[2]をエクセルセル設定
  "D"&回数へDATEの曜日をエクセルセル設定
  DATE=DATEに"0/0/1"を日付加算

2009年だけなら、ループは「365」でも大丈夫ですが、閏年などの対応を考えて、1日ずつ日付を増やしていって、2010年になったら終了、とするとよいでしょう。

比較演算子は文字列も比較できるということを利用すると、すっきり書けます。

セルの幅を変更するにはどうすれば良いか、という質問がありましたが、以下のようにすればよいようです。

"A1"をエクセル選択
20にエクセル選択列幅設定

幅を自動設定するときには、以下のようにすればよいようです。参考(環境依存?詳しい人教えてください)

"A1"をエクセル選択
"%oca"のエクセルキー送信

RombyRomby2011/07/11 07:00A mintue saved is a minute earned, and this saved hours!

gzyzqbfgzyzqbf2011/07/11 17:58ciOtl6 <a href="http://nwhokschyemm.com/">nwhokschyemm</a>

olsqwlqzolsqwlqz2011/07/12 21:02m0KR0L , [url=http://rurwkorozbyx.com/]rurwkorozbyx[/url], [link=http://ljxtvxnmpumz.com/]ljxtvxnmpumz[/link], http://teqhrkmonkwf.com/

rchkuqgrchkuqg2011/07/13 18:19hbKNVd <a href="http://kmwvuwqyotbd.com/">kmwvuwqyotbd</a>

rglnxrfrglnxrf2011/07/14 22:41SKboZ8 , [url=http://loaktnyybsee.com/]loaktnyybsee[/url], [link=http://kopvbltwsbyo.com/]kopvbltwsbyo[/link], http://slfrjaqmwnqg.com/

2009-04-25

「ナベアツ算」の解答

| 23:02

4月25日の勉強会の後半で行った演習の模範解答と解説です。

仕様

・1から100まで数を表示する
・3の倍数の時と3が含まれるときは数字の横に「アホ」と表示する

の1

100回
  もし、回数%3=0ならば
    「{回数} アホ倍数」を表示
  違えばもし、回数で3が何文字目ならば
    「{回数} アホ含」を表示
  違えば
    回数を表示
表示ログを言う

これがいちばん分かりやすいのではないでしょうか。

「~」構文で繰り返します。反復した回数は「回数」に入ります。

3の数を判定するには、演算子「%」で割り算の余りとればよいでしょう。

3が含まれる場合の判定には「何文字目」を使います。この命令の返値は文字列の位置で、これは1から始まり、見つからなかったときは0が返されます。

もし」は条件が0以外の時に実行されますので、3が見つかれば(つまり、1や2ならば)「「{回数} アホ含」を表示」が実行されるということになります。

の2

100回
  回数を継続表示
  もし、回数%3=0ならば
    「 アホ倍数」を継続表示
  違えばもし、回数が「*3*」に一致ならば
    「 アホ含」を継続表示
  改行を継続表示
表示ログを言う

回数を先に表示させたい時は、「表示」を使うと自動的に改行されてしまうので、改行がされない継続表示」を使います。しかし、このままでは改行されないので、ループの最後で「改行継続表示」としています。

こちらでは回数に3が含まれるかどうかの判定に「一致」を使っています。ほかには「出現回数」も使えますね。

回数%3=0」が日本語っぽくなくてイヤだ、というときは以下のように関数を定義すると「回数が3の数」と書けます。

●倍数(XがYの)
  (X%Y=0)で戻る

 

以下、chocoさんのご要望によりTOPOZOさんのスーパーテクニック(笑)をご紹介します。解読してみてください。

3が含まれる数の判定法
 ・(区切(回数,3)!=回数)
 ・(行数(置換(回数,3,"{~}_"))-1)

miyako_hechimamiyako_hechima2009/04/27 22:42勉強会お疲れ様でした。糸瓜です。
コメント感覚で書けるのがいいですね、なでしこは。

XannonXannon2011/07/10 18:37That's the best awnser of all time! JMHO

nmsgihkwlnmsgihkwl2011/07/11 22:18wmr1ac , [url=http://fidpdpdhiaku.com/]fidpdpdhiaku[/url], [link=http://xpcioqxkqnxn.com/]xpcioqxkqnxn[/link], http://bzfnolpdomez.com/

lptnrcjlptnrcj2011/07/12 18:18Ke5W4u <a href="http://ujxszbufzlnd.com/">ujxszbufzlnd</a>

tnnlkrnsstnnlkrnss2011/07/14 00:15zxiETa , [url=http://mcxnpwthcndr.com/]mcxnpwthcndr[/url], [link=http://hvhqytiaodko.com/]hvhqytiaodko[/link], http://qptwualjqdux.com/

GeraldaGeralda2012/11/27 14:58The expertise shines through. Thanks for taking the time to aenswr.

kaxynktvkaxynktv2012/11/30 12:59pAtNDS , [url=http://bhggcxmcfbkf.com/]bhggcxmcfbkf[/url], [link=http://xlbkqhvekqyk.com/]xlbkqhvekqyk[/link], http://ggbnfilhvmqs.com/

treskywtreskyw2012/11/30 20:366bD1fT <a href="http://juxyqqsluuwc.com/">juxyqqsluuwc</a>

jwwsmigjwwsmig2012/12/02 02:22Aqvpfo , [url=http://pusziglgtsxm.com/]pusziglgtsxm[/url], [link=http://ggeazndzqdgz.com/]ggeazndzqdgz[/link], http://ucynmulmccsa.com/