読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Compiler::Lexerで遊んでみた.

Compiler::Lexerというモジュールがあります. これは, mixiの@goccy54さんがgperlという「速度を重視したPerlの実装」を開発した際に作った, Perlの字句解析器をモジュール化したものです. たぶん.gperlについては, 去年のYAPC::Asia 2012で「Perlと出会い、Per…

Project Euler - Problem 33

Problem 33 '49/98'のような, 分子と分母に共通する数字(この場合, 9)を取り除いた時に, 取り除く前の数字と取り除いた後の数字が一致する(49/48 = 4/8)分数を探す問題です. ただし, 分数は1より小さい. 分子・分母ともに2桁の数. '30/50'のような, 明白なも…

Project Euler - Problem 32

Problem 32 ...今気づいたのですが, 日記の一覧を見ていると, オイラーの日記で投稿数を水増し(?)しているように見えます...よね. Project Euler解答系以外の記事を日記の一覧から探すときにちょっと不便なので, 来月からは月初めの投稿を「5月のProject Eule…

Project Euler - Problem 31

Problem 31 イギリスの硬貨, ポンドとペンス(1p, 2p, 5p, 10p, 20p, 50p, £1 = 100p, £2 = 200p)から, £2(2ポンド)を作る組み合わせがいくつかあるかを求める問題. use strict; use warnings; my $pattern = 0; my $target = 200; for (my $A = $target; $A …

Project Euler - Problem 30

Problem 30 なんだかんだで30問目まで到達ですね. もうちょっと頑張ってみましょう!さて, 今回の問題は, 各桁を5乗した数の和がもとの数と同じになるような数の和を求める問題. my $i = 1; while (1) { my $sum; $i++; $sum += 9 ** 5 for 1..$i; print "$i:…

Project Euler - Problem 29

Problem 29 2 答えを配列にpushしていくと, 「同じ項」を除去するのが面倒なので, 連想配列に格納していく形にしました. use strict; use warnings; use bigint; my %term; my $max = 100; for my $A (2..$max) { for my $B (2..$max) { $term{$A ** $B} = 1; …

Perl鍋でお鍋を食べてきた

新大阪コワーキングで開催されたPerl鍋 #4に行って来ました. 前回は確かキムチ鍋だった気がするのですが, 今回は味噌鍋でした.こんな感じで鍋を食ったり, コード書いたりする会です.今回は, 最近いじくり回しているApp::gitenvのリファクタリングをやってい…

Project Euler - Problem 28

Problem 28 どういう問題かを簡潔に説明するのがちょっと難しいので, 上記ページをご覧ください. use strict; use warnings; use bigint; my $answer = sum_diagonal(2) + sum_diagonal(4) + sum_diagonal(6) + sum_diagonal(8) + 1; print "$answer\n"; sub…

Project Euler - Problem 27

Problem 27 プログラミングのセンスもさることながら, 数学的センスも全っ然ないなあ... とヘコむ今日このごろです.問題としては, 「連続するnの値から素数を生成したとき最長の長さとなる二次式を求めよ」という感じ. 簡単に言えば, n^2+an+bについて, nを0か…

「Perl入学式in大阪 #1」をやってきました!

...というわけで, Perl入学式第2シーズンの始まりを告げる「Perl入学式in大阪 #1」を, 昨日4月13日に開催してきました. 講義内容 担当講師は第1回, ということで代表取締られ役として先陣を切らせて(?)頂きました.今回は第1回ということで, 恒例(?)の環境構築…

Project Euler - Problem 26

Problem 26 d use strict; use warnings; use Math::BigInt; for (reverse 1..1000) { my $n = Math::BigInt->new('1'.'0'x(2*$_))->bdiv($_)->bstr; if ($n =~ /(\d{2,}?)\1/ && length $1 == $_ - 1) { print "$_\n"; last; } } 1/dにおける循環節の長さは…

Project Euler - Problem 25

Problem 25 フィボナッチ数が1000桁を越える最初の項は何項目かを調べる問題. use strict; use warnings; use bigint; use Memoize; memoize('fibonacci'); my $length = 1000; my $n = 1; while (length fibonacci($n) < $length) { $n++; } print "$n\n"; …

BitcasaのカオスなPerlワンライナーを読み解いてみた.

Bitcasaのとあるページに書かかれているPerlのワンライナーがカオス! ...みたいなつぶやきを見つけたので, 自分なりに読み解いてみました. 勘違いしている部分や説明が間違っている部分が多数存在すると思われます. お気づきの方はtwitter等でご指摘頂ければ…

Project Euler - Problem 24

Problem 24 30までは頑張りたいです(震え声).今回の問題は, 0..9からなる順列をソートして並べたときの100万番目を求める問題です. forループを延々と回してもよいのですが, 時間がかかりそうですしシンプルではないので, こういう風に考えてみました.9! = 3…

Project Euler - Problem 23

Problem 23 問題を解くのが結構キツくなってきました. ...もうちょっと頑張ります.この問題は, 2つの過剰数の和で書き表すことができない整数の総和を求める問題. 過剰数とは, ある数の約数の和がその数よりも多いものを指すようです. で, 数学的な解析によ…

今更ですが, PerlCasual #05に行ってきた話を書きます

※スライド・感想ブログのまとめはこちらです.3月29日に渋谷ヒカリエのNHN Japanで開催された, PerlCasual #05に参加してきました.会場は会社のカフェスペース? っぽい場所だったのですが, 夜景が綺麗でとても良い会場でした.

Project Euler - Problem 22

Problem 22 テキスト処理系の問題. Perlの得意分野ですね!テキストには5000個以上の名前が書いてあって, リスト中の出現順と名前の各アルファベットのスコア(Aは1, Bは2...)をスコアとした時の全名前のスコアの和を求める, という問題です. 但しリスト中の出…

Project Euler - Problem 21

旅行中はお休みを頂いておりましたが, そろそろ復帰します. 4月1日より, 毎週月・水・金曜日に1問ずつProject Eulerの問題に取り組んでいきます.今後の予定ですが, ひとまず自分のスキル的に問題が解けなくなるか, 50問あたりに達した時点で, リファクタリング…

PerlCasual #05のスライド・感想ブログまとめ

まとめちゃって, いいですか? というか, なんか無意識にまとめていたのでとりあえず公開しておきます.※本記事でのスライド/感想ブログの紹介に問題がある場合は@__papix__までご連絡下さい. 紹介をとりやめさせて頂きます. ※基本的にtwitterで検索して掲載し…

九州大遠征 -Perl入学式出張版-

3月24日から26日にかけて, 宮崎大学でPerl入学式の出張版を開催しておりました.会場の宮崎大学. いわゆる, よくある国公立大学... という雰囲気でした.会場の様子. こんな感じで, Perlの基礎からMojoliciousを使った簡単なWebサービスの開発までを, 3日間か…

最近のPerl入学式の動き

ここ最近のPerl入学式や, それに関連するイベント等々の動きをまとめておきます. Perl入学式 in 大阪 4月から偶数月ごとに全6回開催します. 更に奇数月には, 前月と同じ内容を「補講」として開催します. つまり, 全6回x2で合計12回開催となります. 今回も, 「簡…

Perl鍋でAcme::VividredOperationというモジュールを書いた.

えー, 皆さん. ビビッドレッド・オペレーション見てますか? 私は見て... 見てました. ちゃうねん, 就活が忙しくて6話から消化できてへんねん...!まあそれはさておき, Perlを介してビビッドレッド・オペレーションの世界を体験できる(?), Acme::VividredOperati…

App::WithSoundにpull request投げた.

以前, 「App::WithSoundを魔改造して遊んだ」で実装したコードをpull requestしまして, 先ほどマージして頂きました.https://github.com/moznion/App--WithSound紆余曲折ありましたが, App::WithSoundというプロダクトに貢献することができたっぽいので良かっ…

実はAcme::SuddenlyDeathが0.04にバージョンアップしたりしていました.

拙作のAcme::SuddenlyDeathですが, 数日前に0.04にバージョンアップしています.http://search.cpan.org/~papix/Acme-SuddenlyDeath-0.04/ https://github.com/papix/Acme-SuddenlyDeath0.03でアホみたいにテストがコケていた原因を取り除きました. ついでに,…

App::WithSoundを魔改造して遊んだ

id:moznionくんとid:nkgt_chkonkさんが開発したApp::WithSound. いいっすね! 特にmoznionくんの紹介ブログ記事のタイトルやばいですね. 見た瞬間研究室で大爆笑ですよ.テストにコケる度にシーザーが死ぬ仕組みを作りました自分もさっそく入れてみて, シーザ…

Project Euler - Problem 20

Problem 20 100!の答えの各位の和を求める問題. use strict; use warnings; use bigint; my $factorial = 1; for (1..100) { $factorial *= $_; } my $sum = 0; $sum += $_ for split //, $factorial; print $sum; 手堅く実装. 余談: 後置forについて 後置fo…

Project Euler - Problem 19

Problem 19 20世紀中に, 月の始めが月曜日日曜日である日は何回あるか求める問題. とりあえず素直に実装してみた. use strict; use warnings; my @days = qw/ 31 28 31 30 31 30 31 31 30 31 30 31 /; my ($y, $m, $d) = (1900, 1, 1); my ($now, $sum) = (0…

Project Euler - Problem 18

Problem 18 根本から総当たりで解くのではなく, 葉から値が大きくなるように値を求めていくと, 楽に求められますね. use strict; use warnings; use Data::Section::Simple qw/ get_data_section /; my @rows = reverse map { [split/\s+/, $_] } split /\n/…

「Hachiouji.pm事件」に新たな展開が!?

ゆーすけべーさんがHachioji.pmの表記を間違えるという, いわゆる「Hachiouji.pm事件」に新たな展開が!?...とりあえずこちらをご覧ください. ほ... hokkadio...?_人人人人人人人_ > ほっかでぃお <  ̄^Y^Y^Y^Y^Y^ ̄ ...そういえば先日, Facebookで「りーお…

Project Euler - Problem 17

※先週は就活で忙しかった為, 1週間お休みさせて頂きました. ご了承下さい. Problem 17 1から1000までの数字を英単語で書いた時, 全部で何文字になるかを求める問題. とりあえず答えは出たけれど, もっとスマートに書けそう... use strict; use warnings; my …

Kansai.pm 第15回ミーティングのまとめ

※スライドまとめは下の方にあります.Kansai.pm 第15回ミーティングに参加した皆様, お疲れ様でした!前回のKansai.pmが確か2011年の年末くらいだったので, かれこれ1年数ヶ月ぶりのKansai.pmとなりました. 少し間が開いてしまった分, 参加者のPerl熱がいい感…

Project Euler - Problem 16

Problem 16 2 ^ 1000の各桁の和を求める問題. use strict; use warnings; use bigint; my $n = 2 ** 1000; my $sum = 0; $sum += $_ for (split //, $n); print "$sum\n"; とりあえず, シンプルに実装. ふと思ったけど, 2の1000乗はどっちで書くのがいいんだ…

続・Memoizeの話

簡単にメモ化を実現するMemoizeについては以前紹介しました. 今回はその話の続編... っぽい話です.Project EulerのProblem 14で, Memoizeを使って実装していたんですが, @bool_foolの兄から「Perlの実行速度遅すぎね?」とツッコミが入りました. # C 0.05s user…

Project Euler - Problem 15

Problem 15 20 x 20のマス目の左上から右上までを, 引き返しなしで行くルートは何通り存在するか, という問題. use strict; use warnings; use Memoize; memoize('check_route'); my @route; print check_route(20, 20) . "\n"; sub check_route { my ($x, $…

Acme::SuddenlyDeathのリファクタリング

拙作モジュールAcme::SuddenlyDeathを, 複数行の文字列に対応すべくいろいろ書き直していました. suddenly_death("Acme::SuddenlyDEath\n突然の死"); で, _人人人人人人人人人人_ > Acme::SuddenlyDeath < > 突然の死 <  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄こうい…

Project Euler - Problem 14

Problem 14 最長のコラッツ数列を求める問題. いい方針が浮かばなかったので, @bool_foolの兄にヘルプを求めました. use strict; use warnings; use Memoize; memoize('sequence'); sub sequence { my $n = shift; if ($n == 1) { return 1; } elsif ($n % 2…

Project Euler - Problem 13

Problem 13 50桁の数値100個を足して, その上位10桁を導く問題. bigint先生のおかげで簡単にできました. use strict; use warnings; use bigint; my $number = <

Project Euler - Problem 12

Problem 12 500個以上の約数を持つ最初の三角数を探す問題. use strict; use warnings; my $n = 1; my $triangular = 1; while (divisor_count($triangular) < 500) { $n++; $triangular += $n; } print "$triangular\n"; sub divisor_count { my $n = shift…

Project Euler - Problem 11

Problem 11 以下の格子から, 縦・横・斜めに連続する4つの数字の積から, 最大のものを見つける問題. use strict; use warnings; my $grid = <

CPANのアイコンを設定する

...為には, GravatarにCPANのメールアドレス(ID@cpan.org)を設定すればいいようです.@__papix__ Gravatarにcpanドメインのアドレスで登録したらできましたよー— 笹くれさん (@sasakure_kei) 2013年2月2日@__papix__ gravatarでcpan.orgのアドレスを登録すれ…

Project Euler - Problem 10

Problem 10 200万以下の素数の和を求める問題. use strict; use warnings; use bigint; my $sum; my @primes = (2); for (1..2_000_000) { $sum += $_ if is_prime($_); } print "$sum\n"; sub is_prime { my $n = shift; if($n < 2) { return 0; } elsif($n…

Project Euler - Problem 9

Problem 9 a + b + c = 1000 かつ a^2 + b^2 = c^2 を満たすa, b, cを求めてから, それらの積 abc を求める問題. use strict; use warnings; for my $a (1..1000) { for my $b (1..(1000 - $a)) { my $c = 1000 - $a - $b; if($a ** 2 + $b ** 2 == $c ** 2)…

Project Euler - Problem 6〜8

いっぱい解いちゃったのでいっぱい載せちゃいます. Problem 6 1から100の二乗の和と, 1から100の和の二乗の差を求める問題. use strict; use warnings; my $sum_square; my $square_sum; for (1..100) { $square_sum += $_ ** 2; $sum_square += $_; } $sum_…

plenv環境下でcpanmを使ってモジュールを導入した後にrehashを忘れて辛い

ので, こんなシェルスクリプトを書いて... #!/bin/sh cpanm $@ plenv rehash rehash cpanm-rehashという名前で保存して, 実行権限を与えて, .zshrcあたりで alias cpanm="~/hoge/cpanm-rehash"...としてあげると, いい感じに勝手にrehashしてくれて幸せにな…

「Namba.pm #1」を開催しました!

2013年初のNamba.pmである, 「Namba.pm #1」を開催しました! 参加者が4人と前回から半減以上で, どうなることやら... と思いましたが思った以上にどうにかなりましたね! ただ人数が少ない分, すぐにネタが尽きてしまって3時間くらいでお開きとなりました. 多分…

Project Euler - Problem 5

Problem 5 最初は総当たりで解こうと思ったのですが, かなり時間がかかってしまうので方針変更. 最終的にはこちらのページを参考に(参考というか, 書いてあったJavaのコードをPerlに書き直して...)実装しました. use strict; use warnings; use bigint; my $…

Project Euler - Problem 4

Problem 4 3桁×3桁の積で表される最大の回文積を求める問題. 「工夫がない」と言われればそれまでですが, 2重のforループでひたすら積を計算して, その答えと答えをreverseしたものと等しいなら回文積と判定しています. あとはその中で一番大きいものを保有し…

plenvを使ってみた.

追記: plenvのバージョンアップに伴い, 「続・plenvを使ってみた」という記事を書きました.@tokuhiromさんがplenvという, Perl 5のインストール管理ツールを開発されたそうです. ブログ記事やREADMEをまとめてみると, plenvの特徴は... Rubyのrbenvから影響を受…

Project Euler - Problem 3

Problem 3 素因数分解. いろいろ悩んだ結果, 王道というか, 素直に実装してみた感じです. use strict; use warnings; use Math::BigInt; my $n = Math::BigInt->new('600851475143'); print "$n:"; for (2..int($n->copy->bsqrt)) { while ($n->copy->bmod($…

Project Euler - Problem 2

Problem 2 フィボナッチ数列を使う問題. いい感じに先日のプロダクト(Memoizeを使ったフィボナッチ数の計算)を流用できそうですね! use strict; use warnings; use Memoize; memoize('fib'); my $sum = 0; my $n = 0; while (1) { my $fib = fib($n); last i…