Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

Perl入学式夏休みドリル 応用編

遅くなってすみません

夏休み、終わってしまいましたね。。。
第2回復習ドリルも少し手の込んだ応用編を用意してみました。
問題は第2回までの知識で書ける範囲になっていますが、第3回の予習をされた方や、もっと便利な関数とか書き方知ってるよ!って方は自由にコードを書いてもらって構いません。もし、自分なりのコードが書けたら、Githubのアカウントを作って、Gist(ちょっとしたコードを書いて公開できるサービス)で公開して受講者同士でお互いに書いたコードを見せ合うのも良いのではないでしょうか。そういう時は自分の書いたGistのアドレスをTwitterで #Perl入学式 のハッシュタグを付けて呟いてみましょう!

もし、どう書けばよいかわからない、ヒントが欲しい、等のご要望があれば、Perl入学式チャットで質問するもよし、なにわPerlで質問して頂いても構いません。

コードには、入学式で説明したおまじないの3行を書くようにしてください。
問題は全部で8問用意してみました。

Let's enjoy programming!


[問1] 以下の配列を使って、しりとりが完成する様、単語と単語の間を->でつなげて画面に出力してください。

my @words = ('肉','イカ','ラッパ','カニ','クジラ');

# 出力例
# イカ->カニ->肉 ....

[問2] 5つの数字の入力してもらい、5つ入力された後に昇順に並べ替えたものを画面に出力するプログラムを書いて下さい。


[問3] 好きな食べ物をいくつか入力してもらい、入力された順番の逆順に画面に出力するプログラムを書いて下さい。入力の受付は、食べ物の代わりにENDと入力されると終了して下さい。(reverse関数ってのがありましたよね?)

#
# プログラム実行時の画面イメージ
#
# $> 好きな食べ物を入力して下さい>apple
# $> 好きな食べ物を入力して下さい>orange
# $> 好きな食べ物を入力して下さい>banana
# $> 好きな食べ物を入力して下さい>END
# $> banana orange apple
#

[問4] 問3を、reverse関数を使わずにコードを書いて見て下さい。(reverse関数と同じ機能を自分のコードで書いてみてください。)


[問5] 合計時間を計算する、時間計算電卓を作りましょう。プログラム実行時のイメージはこんな感じです。

#
# プログラム実行時の画面イメージ
#
# $> 時間電卓です。時間と分を別々に入力して下さい。終わる時は、ENDを入力して下さい。
# $> '時間'を入力して下さい>5
# $> '分'を入力して下さい。>30
# $> '時間'を入力して下さい>3
# $> '分'を入力して下さい。>10
# $> '時間'を入力して下さい>4
# $> '分'を入力して下さい。>35
# $> '時間'を入力して下さい>END
# $> '分'を入力して下さい。>
# $> 合計は13時間15分です。
#

[問6] 「自分の言った(入力した)言葉が1つ遅れて帰ってくる装置(会話BOT)」を作って、会話してみましょう。
コンピューターは、必ず最初に「こんにちは。」の挨拶から始まります。2回目の返事は「あなたの名前はなんですか?」です。
次からは、あなたが答えた返事を繰り返します。ENDと入力すると終了します。イメージはこんな感じです。

# 1つ遅れて返事する君(終わる時は、'END'と入力しましょう。)
# com>> こんにちは。
# you>こんにちは。
# com>>あなたの名前は何ですか?
# you>tomchaです。
# com>>こんにちは。
# you>さっき、あいさつは済ませましたよ?
# com>>tomchaです。
# you>それは私の名前ですが。
# com>>さっき、あいさつは済ませましたよ?
# you>そうです、済ませました。
# com>>それは私の名前ですが。
# you>済ませましたっていう名前なんですか?
# com>>そうです、済ませました。
# you>え?
# com>>済ませましたっていう名前なんですか?
# you>END

[問7] 1つの数字を入力してもらい、2からその数字までの間にある素数を全て出力するプログラムを書いてください。


[問8] メールアドレスを作って出力するプログラムを書いて下さい。
コンピューターはアカウント名(@の前部分)を聞いてきます。そして、ドメイン(@の後ろ)は3つ候補が出てきますので数字で選択します。
これを繰り返して下さい。終わる時はENDと入力します。
そして、作成したメールアドレスを画面に出力して下さい。イメージはこんな感じです。

# アカウント名を入力して下さい。(終了はEND) >tomcha
# ドメインを入力して下さい。
# 0: foo.net
# 1: bar.net
# 2: baz.net
# No? >1
# アカウント名を入力して下さい。(終了はEND) >hoge
# ドメインを入力して下さい。
# 0: foo.net
# 1: bar.net
# 2: baz.net
# No? >2
# アカウント名を入力して下さい。(終了はEND) >fuga
# ドメインを入力して下さい。
# 0: foo.net
# 1: bar.net
# 2: baz.net
# No? >0
# アカウント名を入力して下さい。(終了はEND) >END
# ドメインを入力して下さい。
# 0: foo.net
# 1: bar.net
# 2: baz.net
# No? >
# tomcha@bar.net hoge@baz.net fuga@foo.net

どうでしょう。全部コードが書けましたでしょうか? 第3回まで復習して忘れないようにしましょう!

素人がYAPC::Asia 2015に今年も行ってきた

あっという間の3日間、熱気が冷めやらぬうちに感想ブログを。

前夜祭

毎年恒例になっている「こだまで4時間ひとりもくもく会」。今読んでいるiOSアプリの本を読んで写経しながら、時間に余裕をもって東京へ。

久しぶりに会うエンジニアさんと再会してテンション↑、ビール飲んで最高↑、トークも聞けてテンション↑、早くもYAPC最高!!でした。

  • @uzulla さんのPHPのトーク。

    • 話の上手さ、面白さは流石。ドッカンドッカンウケて、お祭りのテンションが一気にMAXに。
  • @y-uuk1さんの技術ブログの書き方。

    • 自分は自分用の記録として主にブログを書いていますが、それでも思わぬ反響があれば嬉しいところ。今後の記事の書き方にとても参考になるトークでした。

前夜祭の終わった後は、主にhachioji.pmや各地Perl入学式関係の方々と二次会へ。参加して飲んで話しているだけで楽しい時間でした。

初日

頑張って早起きしてオープニング前に到着。Perl入学式in大阪で一緒にサポーターをしているSTCさんと合流。なんと、当日始発で関西から来てオープニングに間に合わせたそうで、気合が凄かった!また、kansai.pmや去年のYAPCでご一緒したnoanさんとも合流して席を確保。ホールAの前の方の良い席が確保できました。

  • Larry wallホビットの冒険指輪物語の話(あとPerl6)

    • 本を読んだのがもう20年以上前だったので、もう一度読みたくなってしまった。Perl6、後4ヶ月で出るの?!
  • Web由来の組み込みエンジニアの半年間のすべて 〜WebとiOSとBLEとハードウェアデバイスのこと〜

    • 少人数ベンチャーを始めた話。知らない世界の経験談で面白かった。未知の世界の話を聞けるのは、カンファレンスや勉強会の醍醐味。
  • TBD

  • 若手エンジニア達の生存戦略

    • 自分の仕事の部下の事をダブらせながら聞いていた。出演メンバーが優秀な方達ばかりだったし、真面目な話に終始するのは仕方がないですね。
  • 趣味から育てたWebサービスで生きていく

    • webサービスを作って運営する話。裏側や体験談が面白かったです。懇親会でステッカー頂きました!ありがとうございます。

懇親会では、年に一度のご挨拶。また、知ってる人の知ってる人繋がりで新しく出会った人とも色々お喋りできました。また、ツイッター上でしか知らなかった方とも直接会ってお話しする事が出来ました。まさにYAPCがあればこその出会いですね。感謝で一杯です。
また、自分の開いているもくもく会なにわPerlの宣伝もして回りました。大阪へお越しの際は是非ご参加ください!
そう、Larry似にサインをもらって一緒に写真まで撮ってもらえました!

この後、五反田の通称「女子高生中華」?!というお店(※餃子と豆苗炒めが美味しい中華料理屋さんでした。)で2次会。 @xtetusjiさんとお話して、

新しい企画で盛り上がりました。交流できる場が出来て、新しい出会いとか生まれると良いなあと。
結局また深夜まで飲んで交流していました。

最終日

最終日はさすがに疲労もピーク。若手には敵わない。
この日は最初から聞きたいトークは数をしぼり、無限コーヒーで交流したり、Perl6を試してみたりして過ごしました。

  • サーバーサイドエンジニア(特にPerl)のためのiOSアプリ開発入門

    • 今まさに、「xcode7から実機テストが無料で出来るし、swift言語も来たのでiOSアプリ作ってみよう」な自分にジャストなトークでした。このトークを聞いている時、HTTPのリクエストの事とか、4SQのAPIの話とか、4年前にPerl入学式やYAPCに初参加した当時には知識ゼロだった事が、理解しながら聞けた自分を発見し、「気づかない内に自分も成長してたんだなー」と気付けたのが印象的でした。
  • サンタクロースを支えるIT技術

    • エンジニアさんが本業以外のボランティアで技術を使う話でした。自分は本業エンジニアではないので、IT技術を使う時に非エンジニアな人とバランスをとらなければならない話など共感しました。また、色んな形でIT技術が使われるのって素晴らしいなと思いました。

YAPC::Asia が終了して

まずは、スタッフの皆さん、スポンサーの皆さん、ありがとうございます。
2000人を超すイベントの企画と運営、並大抵の事じゃないですよね。
4年前、Perl入学式と出会い、そしてYAPC::Asiaに参加しなければ、ここまでプログラミングやIT技術にのめり込む事はなく、今の自分はないです。
素人ながらも、気付けば初心者向け勉強会のサポートや自らもくもく会を開催したりする程にまでになっていました。感謝しかないですし、今まで出会って知り合えたエンジニアさんも含め、僕にとっては非常に大きな存在です。

YAPC::Asia Tokyo が終わってしまうのは少し寂しいですが、でも、YAPCがきっかけで知り合った人たちの各地のpmや勉強会に自ら行ってみようとも思いますし、何よりPerl入学式なにわPerl,そして@nqounetさんが主催するPerl鍋に来てもらうこともできますよね。

これからもYAPCでの出会いを大切にしていきたいと思いました。本当にありがとうございました。

あと、満員だったり裏だったりで聴けなかったトーク、早く動画で見たいですね!

YAPC前夜祭に今年も参加した!

年に一度、YAPCや勉強会で知り合った仲間との同窓会のような、そしてSNS等ではお見かけする方々と直にお会いする方と新たに交流できるお祭りが開幕しました!

いや〜、今年も来てよかった!前夜祭終了後も飲みに行って、色んな話をして、早くも充実感満載です。

こういう機会が無くなってしまうのは、本当に寂しいかぎりです。いや、まだ今年のYAPCは始まったばかり。 まだお会いしていない方もまだまだ沢山。明日と明後日、思いっきり楽しもう!

個人スポンサー特典のタンブラー、パーカーもめっちゃイイ!!もう良いこと尽くめですね。

いよいよ明日からトークも本格的に始まりますし、懇親会も開催されます。 明日は寝坊しないよう頑張って起きて、みなさん、楽しみましょう!

よろしくお願いします!

さあYAPCだ!!!

Perl入学式とYAPC::ASIA。

この2つと出会わなかったら、今、こんなにどっぷりとプログラミングやwebの世界にのめり込む事は無かったと断言できる。

OSSの世界は色んな形のgive and takeで成り立っていて、エンジニアリングを業としていない自分が出来る事として、Perl入学式ではサポーターとしての参加、YAPC::ASIAには個人スポンサーチケットの購入で、わずかながらもOSSの世界へ恩返しが出来たのだろうか。

お祭り開幕前のテンション、そう、小学生の頃の遠足の前の日に眠れなかったあの興奮の様な高ぶりで、思わずYAPC参加前のブログを書いてしまった。

懇親会も申し込んだ、聞くトークのスケジュールも立てた、Acme大全と雅なPerlを買うお金も銀行でおろしてきた。準備は着々と進んでいる。

まだ始まってすらいないのに、今年のYAPC::ASIAへの期待感は何故か過去最高!

とにかく、期待一杯で明日が楽しみだ!

現地でお会いする皆さん、運営スタッフの皆さん、今回もよろしくお願いします!!

Perl入学式夏休みドリル その3

Perl入学式ドリル(入学式第2回編)の続きです。

Let's challange!

配列操作の命令

  • [問41] 配列@numを宣言し、 1から1000までの整数を配列に代入する。(要素数は1000個になります)
  • [問42] 問41で作成した配列を利用して、1000から1まで逆順に並んだ数字の配列@rev_numを作る。
  • [問43] 問42で作成した@rev_numの要素を昇順にソートした配列@sort_numを作る。

for文

  • [問44] 問41で作成した@numの要素を先頭から順番に出力する。(for文を使う)
  • [問45] 問41で作成した@numの要素のうち、先頭から10番目までの要素出力する。(for文を使う)
  • [問46] 問41で作成した@numの要素のうち、100番目から110番目までの要素出力する。(for文を使う)
  • [問47] 問41で作成した@num、問42で作成した@rev_numを使い、2つの配列の同じ添字の値を足した時全て1001になるか調べるコードを書く。(for文を使う)
  • [問48] 問41で作成した@num、問43で作成した@sort_numを使い、2つの配列の同じ添字の値が全て同じになるか調べるコードを書く。(for文を使う)
  • [問49] C言語風のforループ文を使い、10回ループするコードを書く。
  • [問50] 問49のfor文を使い、画面に10回'Papix!!'と出力させる。

Perl入学式夏休みドリル その2

Perl入学式ドリル(入学式第2回編)の続きです。

Let's challange!

標準入力

  • [問21] 変数$nameを宣言して、キーボードから名前を入力してもらい、変数に代入する。
  • [問22] 変数$nameと$nickを宣言し、キーボードから名前とニックネームを入力してもらい、変数に代入する。
  • [問23] 問22で作った変数を利用し、"◯◯さんのあだ名は△△です。"と出力する。1行で出力し、行の一番最後で改行する。
  • [問24] 変数$year, $monthm $dayを宣言し、キーボードから誕生年、月、日を入力してもらい変数に代入する。
  • [問25] 問24で作った変数を利用し、"あなたの誕生日は◯年◯月◯日です。"と1行で出力し、行の最後で改行する。

文字列演算

  • [問26] "Papix" "xtetsuji" "校長" "教頭" の4つの文字列を、'.'(ドット)を使って連結し、Print文1行でPapix校長とxtetsuji教頭を出力する。校長と教頭の間は改行すること。
  • [問27] 苗字と名前を別々に入力し、苗字+スペース+名前と連結させ、変数$nameに代入し、変数の中身を出力する。

if文

  • [問28] キーボードから「0か1のいずれか」を入力させて、入力した値が1なら画面に'OK'の文字を出力させる。
  • [問29] キーボードから文字列を入力させて、入力した文字が「Perl」なら、画面に'入学式'の文字を出力させる。
  • [問30] キーボードから「1〜10」の数字を入力させて、入力した数が5なら、画面に'5'と出力させ、それ以外なら画面に'5以外'と出力させる。
  • [問31] キーボードから文字列を入力させて、入力した文字が「Perl」なら、画面に'Larry'の文字を、入力した文字が「Ruby」なら画面に'Matz'を出力させる。

論理演算子

  • [問32] キーボードから「1〜100」の数字を入力させて、入力した数字に応じて「50以下の偶数」「50以下の奇数」「51以上の偶数」「51以上の奇数」のいずれかを出力させる。
  • [問33] キーボードから「1〜30」の数字を入力させて、入力した数字が「3の倍数」又は「3の数字が含まれている」場合、'3!'と出力させる。
  • [問34] キーボードから文字を入力させて、入力した文字が「Perl」「Ruby」「Python」のいずれかの時は'LL'と出力し、それ以外の時は'other language'と出力させる。

配列

  • [問35] 配列名「array」を宣言する。
  • [問36] 配列名「array」に、1から10までの数を順番に代入する。
  • [問37] 問36で作った配列の添字'5'の値を出力する。
  • [問38] 問36で作った配列を利用し、配列の先頭から3番目の要素、6番目の要素、10番目の要素の足し算を行い、結果を出力する。
  • [問39] 問36で作った配列を利用し、配列の先頭の値と配列の末尾の値を入れ替える。
  • [問40] 配列名「fruits」を宣言し、'apple','orange','banana','kiwi'を代入する。

Perl入学式夏休みドリル その1

Perl入学式ドリル(入学式第2回編)

Perl入学式第2回より文法の講義が始まりました。まず基本を覚えるにはとにかく反復練習。 反復練習といえば、そう、子供の頃夏休みにやったアレです。宿題ドリルです。

ここでは、第2回で学習した事を忘れないために最初の50問で単純なコードを書く問題、そして51問からは応用的な問題を用意しました。 時間をストップウォッチで測って記録をとるもよし、何度も繰り返して身につけるもよし、第3回につなげる復習にご活用下さい。

ドリルすんのかい、せんのかい、すんのんかい!

では、ドリルスタートです。

基本事項

  • [問1] 3行のおまじないを書いたファイル、'basic.pl'を作る。 (※以下、コードの最初に3行のおまじないを書くこと。)
  • [問2] 画面に「Perl entrance」と出力する'perlentrance.pl'を作って実行する。
  • [問3] 画面に「I love Perl.」と出力し、改行する'loveperl.pl'を作って実行する。
  • [問4] 画面に「YAPC成功祈願」と出力し、改行する'yapc.pl'を作って実行する。

スカラ変数

  • [問5] スカラ変数を一つ宣言する'sc_val.pl'を作る。 (※以下、"ファイルを作る"を問題文から省略する。)
  • [問6] スカラ変数を一つ宣言し、その変数に次の行で'Perl'という文字列を代入する'コードを書く。
  • [問7] スカラ変数を1つ宣言し、同じ行で同時に 'TMTOWTDI' という文字列を代入するコードを書く。
  • [問8] 6で作った変数の中身を画面に出力するコードを書く。
  • [問9] 7で作った変数の中身を画面に出力し、改行もするコードを書く。 (※以下、"コードを書く"を問題文から省略する。)
  • [問10] スカラ変数を3つ宣言する。
  • [問11] スカラ変数3つを宣言し、それぞれに任意の整数を代入する。

四則演算

(※以下、スカラ変数は'変数'と表記します。)

  • [問12] 変数4つを宣言し、3つの変数に任意の整数を代入する。残り1つの変数に、3つの変数を合計した数字を代入する。(変数同士を足し算して代入すること。)
  • [問13] 12で作った4つの変数を利用して、"◯足す◯足す◯は◯です。"という文字を出力して改行する。
  • [問14] 変数2つ$heightと$weightを宣言し、身長150cm体重60kgのAさんの値を代入する。
  • [問15] 14で作ったデータを利用し、AさんのBMIを出力する。(BMIは、体重(kg)÷身長(m)の2乗で求めます。)
  • [問16] 3つの商品の単価を代入する変数を3つ($apple, $banana, $peach)を宣言し、それぞれに単価(りんご250円、バナナ150円、桃120円)を代入する。
  • [問17] 16で作った変数を利用して、りんご10個、バナナ8本、桃5個の合計金額に消費税8%を上乗せして出力する。(小数点以下の端数は)
  • [問18] 17の材料全てでミックスジュースを作ったら、20杯分が出来た。ミックスジュース1杯分の原価を出力する。
  • [問19] 100を3で割った時の余り、7で割った時の余り、11で割った時の余りをそれぞれ出力する。
  • [問20] ピザ1枚1300kカロリーを16等分し、7人でなるべく均等になる様分けて食べた。7人が摂取したカロリーをそれぞれ出力する。