Perlで色々なアルゴリズムを実装してみた
ちょいちょい参加している AtCoder で、二分探索のアルゴリズムを時間内に実装する自身がなかったので、基本的なアルゴリズムを手を動かした実装してみました。
まぁ、ソートやサーチなんかは、大体の言語でメソッドや組み込み関数が定義されているので実務で使うことは無いと思いますが、実際にどういう動きをするかを頭で考えてコードで表現する訓練は大事だなぁと思って色々書いてみました。
アルゴリズムについては色々書籍が販売されていますが、手頃な感じの本を入手して最初の問題からコードを書いてみました。普遍的な知識ですね。
図解入門よくわかるアルゴリズムの基本と仕組み (How‐nual Visual Guide Book)
- 作者: 杉浦賢
- 出版社/メーカー: 秀和システム
- 発売日: 2002/02/26
- メディア: 単行本
- 購入: 1人 クリック: 36回
- この商品を含むブログ (6件) を見る
それぞれのコードは、どんな動きをするのかの趣旨だけ読んで自分なりにコーディングしてみたので、コードにツッコミやアドバイス等々あればお手柔らかにお願いします(笑)。
まずは第7章までの基本編。
値の集合から、条件にあった値を取り出すコード(第4章)
合計
数を数える
平均
最大値
最小値
まぁ、この辺りは基本編ですね。プログラミングの初心者の方は、このあたりからコードを書いてちゃんと動くか試してみると良いと思います。Perl入学式の復習にもどうぞ。
順番をソートするアルゴリズムの実装(第6章)
選択ソート
挿入ソート
ちょっとアルゴリズムっぽくなってきました。シェルソートはグループ分けをどう実装するか、頭の中だけで考えるだけでは混乱したので、実際に動きをノートに書き出して実装しました。
頭で考えて書いたコードは思うような結果になりませんでしたが、ノートに書いて整理するとあっさりと書けました。いきなり書かずにまず整理。
どんな言語でも通用する基本って大事。
値の集合から特定の値を探索するアルゴリズムの実装(第7章)
線形探索
二分探索(当たり入り)
二分探索(当たりなし)
文字列の照合
アルゴリズムの実装、頭の体操的にも面白いですね。引き続き第8章以降もやっていきたいと思います。
吉祥寺.pm 17に参加しました
行ってきました、吉祥寺.pm 17。今回、2回目の参加です。
そして「YAPCに行けば人生は変わる」というタイトルでLTをしました。
関西在住なのでなかなか東京近郊の勉強会に行くことはできませんが、今回は参加できそうな機会あったので行けたらいいなと思い家族に相談。
二つ返事で行ってきたら?とOKをもらい、妻に感謝。しかし申し込もうとした時は既に参加枠はキャンセル待ちの状態。
なんとか確実に行ける方法はよく見ると、YAPC-LT枠が一つまだ空いているではありませんか!
妻に赤ちゃんの面倒をかける事になるし、LTするからには有益なLTをしたいけれど、果たして自分に話すネタはあるのか?直前に体調を崩したりしないだろうかetc...
行きたいという気持ちもありつつ、その気持ちの足を引っ張る考えが色々と頭をよぎりました。
しかし、少しでも行きたい気持ちがあるのなら、行動しよう!今までも行動して良かったことが山ほどあるやん!と思って、勢いでLT参加ボタンを押しました。
(まさか、こんなに沢山の参加者がいる前で喋ることになるとは!)
何かを変えるには、行動するしかない。"待ってるだけの昨日にアディオス!"。そんな気持ちを若い人達に伝えられたら、、、とLTのテーマを決めました。スライドはこちら。
終わってからの懇親会やTwitterで、LT良かったですよと声もかけてもらい、ああ勇気を出して参加してよかったなぁとホッとしております。
しかも、嬉しいことに近藤佑子🐱技術書典6 か66(@kondoyuko)さん | Twitterさんに、なんと自分のLTをグラレコしてもらいました!これはめっちゃ嬉しかった!
今回のトーク4本を聞いて色々と感じたことは、、、
1ob1の話
- 自分の仕事の業界は、完全ウォーターフォール型組織なので、育てていく意識をちゃんと持っていて凄いなと思いました。若手を育てない組織の将来性は真っ暗だよなぁと。
Bitcoinの話
- 自分も暗号通貨の技術面を知りたいと思って、書籍を買って読んだり、実装されたコードを写経してみたりして、なんとなく分かった感じだった事が、あらためて整理された話を聞けてとても面白かったです。もっと時間をかけてたっぷり聞きたかった!
- そういえば、今年のkof2018に楠さんの話も聞きに行きました。k-of.jp
非公開APIを探る話
- 自分で既存のサービスから情報が欲しい時、APIが公開されていないとスクレイピングしたり諦めるしかないのかなと思っていたので、chromeのツールを使って探るお話はとても勉強になりました。懇親会でも自分の疑問点に色々丁寧に教えてもらえました。へっくす? (@codehex) | Twitterさん、ありがとうございました。
そして、Perl入学式を卒業する話
そしてLTも多様な話が聞けて楽しかったです。vimや26進数や愛の深いお話、Riot.jsは手軽そうで試してみたい。Perlにインターフェースを実装するPerlハッカー凄い!ラリーとは私も写真とってもらいました!書籍出版たいへん!
その他、久しぶりにお会いする方々との懇親会でのお話も楽しかった!
今回驚いたこと、感じたことメモ
- 自分が参加者最高齢だと思っていたけど違った。多分3番目?
- 69歳現役プログラマー凄い!あと20年以上戦える!
- よしたくさん、想像と違ってめっちゃ若かった
- グラフィックレコーディングはめっちゃ嬉しかった!
- 自分の様な非エンジニアのエンジョイ勢の受け入れてもらえる、多様性のある勉強会。
- 懇親会で初めてお話した方々、新しいつながりができて嬉しい!
- Papixさん、Perl入学式のめっちゃ良い話だった!感極まって泣いて胴上げの展開になったらどうしようかと心配したけど、それはならなくてよかった
- そーだいさんのLT、めっちゃ男前な方だなぁ
吉祥寺.pm、本編も懇親会も本当に楽しかったです。 magnoliak (@magnolia_k_) | Twitter さん、ありがとうございました。
そして憧れのおにやんまの讃岐うどんを食べて帰りました。美味しかった!
関西のPerlmongerの皆さんにも、東京まで行く価値が十二分にある素晴らしい.pmです!
そしてKansai.pmもよろしくお願い致します!
キッカソン#3を開催しました
YAPC::Tokyo 2019の余韻がまだ続いている最中、2019.2.9~2019.2.10の1泊2日で京都の太秦(うずまさ)にある菊香荘で開発合宿を開催しました。
菊香荘+ハッカソン=キッカソン、今回はで3回目です。毎年1回のペースで開催を続けています。 キッカソンは別名Perl修学旅行、Perl入学式の修学旅行的な初心者向け開発合宿のイベントでしたが、Perl入学式が全国に広まり、サポーター同士がオンライン上だけでのコミュニケーションに成りがちなので、入学式のスタッフが集まって今後の活動体制等を話し合うPerl入学式職員旅行のような一面も出てきました。
初日のスケジュールは13時に宿に到着し、大広間の1室に集まって各々持ってきた課題をすすめました。
今回自分は、データベースを使ったアプリケーションをPerlで作成するというチャレンジをしていて、そのアプリ作成の続きをする事にしました。とはいっても、DB操作の基本的なSQLの知識はあるものの、実際にPerlでどうコードを書けば良いのか分からないので、Perlゼミのデータベース操作のページを見ながら実装をすすめました。 tutorial.perlzemi.com そして今回、もくもくしている自分の左隣には、Perlゼミの作成者の木本さんが!なんと贅沢な開発環境なんでしょう!
また、モダンなDB操作ならORマッパを使ったらいいよと色々アドバイスもいただき、なんと私のすぐ右の方には、 Perl製のシンプルさが特徴のORマッパ、Anikiの作成者かるぱねるらさんが!なんと頼もしい開発環境なんでしょう! metacpan.org
18時お楽しみの夕食タイム、今回は菊香荘の夕食を堪能しました。夕食後は参加者の皆さんとお酒を交えてワイワイと懇親会を。修学旅行の雰囲気で、夜中の1時頃まで楽しく話ました。
翌朝の朝食も豪華な旅館のお食事です。
朝食後は昼過ぎくらいまで各自もくもくと作業を進めました。1日目よりも2日目の方が作業効率が上がるようでした。次回キッカソンは2泊3日プランもありかという話も。 自分も普段家でプログラミングするよりも随分と作業が進みました。 集中してガッとやる環境、大切ですね。
続ける事で全国にたくさんの仲間ができるコミュニティ、Perl入学式。 今後のスケジュールはこんな感じです。
perl-entrance-osaka.connpass.com
perl-entrance-tokyo.connpass.com
perl-entrance-sapporo.connpass.com
perl-entrance-fukuoka.connpass.com
各地域まだまだ空き枠があるので、プログラミングを学びたい!と興味を持たれた方は参加してみて下さい。
また、受講生を卒業して、運営スタッフにも興味があるという方がおられましたら、気軽にスタッフに声をかけてみて下さい。
続・Acme大全への道
このエントリーは下記の記事へのアンサーです。 tomcha.hatenablog.jp
体調不良で残念な結果に終わったYAPC::Tokyo 2019でしたが、よかった事もありました。
makamakaさんに事前にお願いをして、Acme大全2018を遂に入手しました!
ページをめくって確認すると・・・
あった!!!
紙の書籍に自分のプログラムが載るってなかなか感動モノです! makamakaさん、ありがとうございました!
AcmeモジュールはCPANにモジュールを上げる良い入り口なので、何かモジュールのネタを持っている人はチャレンジしてみると良いと思います。
Acme大全掲載を目指しましょう!
<おまけ>
makamakaさんの会社、毎度おなじみのネコトーストラボさんのYAPCのノベルティ、0歳6ヶ月の娘が大変気に入っておりました。 こちらもありがとうございました。
ピザ会のお題のコードを書いてみた
帰りの新幹線で一人Perl会。 お題のコード書いてみた。
よく読むとリファレンスを使わない縛りもあったので、その回答はこちら。
YAPC::2019の感想ブログ
初めて参加したYAPC::2012から、ほぼ毎年参加してきましたが、今回は行きの新幹線で体調を崩してしまい、トークも一部しか見ることができず、前夜祭や懇親会も参加できず、次回リベンジしたい!!!となったYAPC体験でした。
体調不良で見たかったトーク全部を見ることができませんでしたが、見たトークで印象に残ったのが @songmu さんの
「多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと」。
続ける事、とにかく愚直に続ける事の大切さをしみじみと実感。とても感銘を受けました。
また、note103 さんのLTでは、同じ非エンジニアとしてとても刺激を受け、まだまだやらねばと思いました。YAPC::Fukuokaでトークをさせてもらって、自分の中ではやり切った感があったのですが、まだまだ頑張り続けなければと。引退宣言を撤回するスポーツ選手のようだなぁとセルフ突っ込み。
今回、懇親会や飲み会で久しぶりに会える方々とお話できるのを楽しみにしていただけに残念。
YAPC::Tokyo 2019 個人スポンサーチケット購入done.
— tomcha (@tomcha_) 2018年11月14日
YAPC::Tokyo 2019のチケットも買ったし、宿と新幹線も申し込み完了したので、後は家族の説得と仕事の有給申請通すだけだ!(難易度高いタスクばっかり残ってる)
— tomcha (@tomcha_) 2018年11月14日
今回は体調不良で残念だったので、是非とも次回YAPCでリベンジしたい! https://t.co/FHq9sM1xBh
— tomcha (@tomcha_) 2019年1月27日
最後に、スタッフの皆さんありがとうございました。全てのスタッフさんに感謝は当然のことながら、ベテランながらも運営コミットをされている@nekokakさんmagnoliakさんは本当に尊敬します。YAPC::Japan、本当に良いイベントです!
次回絶対リベンジだ!(要 : 有給と旅費の捻出と家族の説得)
あと、宣伝ですが次回Perl入学式in大阪は、2019/2/23開催です。
絶賛参加者募集中です!
そうだ YAPC,行こう!
YAPC::Tokyo 2019 も開催発表があってからずっと楽しみにしていて、チケット販売のお知らせを見つけてすぐ個人スポンサーの申し込みを済ませました。
YAPC::Tokyo 2019のチケットも買ったし、宿と新幹線も申し込み完了したので、後は家族の説得と仕事の有給申請通すだけだ!(難易度高いタスクばっかり残ってる)
— tomcha (@tomcha_) November 14, 2018
こんにちは、YAPC::Osakaで現地運営スタッフをしていました id:tomcha と申します。
初めてYAPCに参加したのは、2012年に東京大学で開催された YAPC::Asia Tokyo2012 でした。当時はPerl入学式に受講生として通っている途中で、まだPerlの基本文法を学んでいる途中でした。それ以降、YAPC::Asiaはファイナルの2015年まで、毎年参加しました。
もちろん、チケット、宿、交通費は全額自腹 && 開催日前後は有給休暇を取得して。
なんでそこまで?
それはもちろん、楽しいからです!
何が楽しいのだろう?
一番に思い浮かぶのは、"参加する人達が魅力的だから"です。
初めて行った時は顔見知りの人は皆無でしたが、毎年参加して懇親会へ出たりしているうちに顔見知りの人も増えてきました。特にトークに登壇した人からより詳しい話や裏話が聞ける懇親会は知り合いを増やすチャンス。そうやって知っている人を増やしていくうちに、YAPCがまるで年一回の顔合わせ会のようになっていきました。これも、参加してみる・話しかけてみる・色んなところに顔をだす! を続けたからですね。様々な世代の色々な人達と繋がれる、こんな素敵なことはないですよ!
そして次に思い浮かぶのは"色々な技術の話"です。
普段、自分はIT技術に触れる機会が極端に少ない分、少しでも理解できそうなトークや少しでも興味がありそうなトークを聞いてみて、へ〜、ほ〜、なんとなくこんな感じかなぁ〜と、その時は全部が全部分からずとも、なんとなく分かった様な気分になりながら聞いていました。
いくつかの過去のYAPCの動画はYoutuneで公開されていて、数年前の公開されているトークを見てみると、当時は全く理解できなかったトークが結構何を言っているか分かるようになっていたりします。数年前は基本文法を習っているレベルだった自分が、今ではORMとかMVCとか言われてもある程度分かるようになっていて、それは成長したって事なのかと実感します。
そして見る側だけでなく、2016年にリブートしたYAPC::JAPANでは、YAPC::Kansaiのコアスタッフとして裏側から参加したり、YAPC::Fukuokaではなんと登壇者として初のトークもさせて頂きました。本編参加も、懇親会も、スタッフ業も、登壇経験も、どれをとってもとても貴重な良い経験になりました。
ちなみに私はエンジニアではありません。そんなアマチュアな人でも楽しめて為になるカンファレンスですので、プロのエンジニアとして活躍している人やエンジニアを目指している人は、その何倍も楽しいし為になるはずです。
テックカンファレンスは色んなコミュニティで開催されています。その中でYAPCというカンファレンスは、色んな人達に是非足を運んでもらいたいという考えのもと、チケット代がとても安く設定されていると思います。まだ参加を迷っている方、これは行くしかないですね!!
チケットはこちらで販売中です。