Hatena::Grouparaistudy

iwasekiの日記

2008-05-01

世界のナベアツPerlで挑戦する はてなブックマーク - 世界のナベアツにPerlで挑戦する - iwasekiの日記

流行に乗り遅れてる感があるが(゚ε゚)キニシナイ!!


にぽたんさんが書いたのとか他の人のもちらほら見たけど、正直出力結果が気に入らない。プログラム初心者向けの問題として捉えるとにぽたんさんのはかなり高度な答えで( ゚Д゚)って感じだった。Perl使ってワンライナーもすごいと思う。どっちも今のオレには書けないすごいコードだ。


・・・けど、出力結果がナベアツじゃないじゃん!すごいコードだけどナベアツじゃないじゃん!

ってことで万年Perl勉強中のオレが、オレのオレによるオレのためのコードを書いちゃるわい!ということで、最初に書いたのがこれ。

#!/usr/bin/perl

use strict;
use warnings;

my %aho_hash = (
        "0" => "",
        "1" => "い~ち",
        "2" => "にぃ~",
        "3" => "さぁ~ん",
        "4" => "よぉ~ん",
        "5" => "ごぉ~",
        "6" => "ろぉ~く",
        "7" => "しぃ~ち",
        "8" => "はぁ~ち",
        "9" => "きゅぅ~",
        "10" => "じゅぅ",
        "20" => "にじゅぅ",
        "30" => "さんじゅぅ",
);

foreach (1..40){
        if ($_ % 3 == 0|| $_ =~ /3/ ){
                        my $huta = int($_ / 10);
                        my $juu = 10;

                        if($huta < 1){
                                $juu = 0;
                        }
                        if($huta < 2){
                                $huta = 0;
                        }


                        my $ichi = int($_ % 10);
                        print "$aho_hash{$huta}"."$aho_hash{$juu}"."$aho_hash{$ichi}\n";
        }else{
                print "$_\n";
        }
}
print "おもろ~!!\n";

if文のネストが気に入らない。でid:czk-htnさんに色々聞いて書き直したのがこれ。

#!/usr/bin/perl

use strict;
use warnings;

my %aho_hash = (
        "0" => "",
        "1" => "い~ち",
        "2" => "にぃ~",
        "3" => "さぁ~ん",
        "4" => "よぉ~ん",
        "5" => "ごぉ~",
        "6" => "ろぉ~く",
        "7" => "しぃ~ち",
        "8" => "はぁ~ち",
        "9" => "きゅぅ~",
        "10" => "じゅぅ",
);

foreach (1..40){
        if($_ % 3 == 0 || $_ =~ /3/ ){
                my $huta = int($_ / 10);
                my $hito = int($_ % 10);

                #もし$hutaが1以下だったら$juuに0、そうでなければ10を代入(三項演算子)
                my $juu = $huta < 1 ? "0" : "10";
                $huta = 0 if $huta < 2;

                print "$aho_hash{$huta}"."$aho_hash{$juu}"."$aho_hash{$hito}\n";
        }else{
                print "$_\n";
        }
}
print "おもろ~!!\n";

現状のオレの能力だと、これぐらいが読みやすくてそれなりにスマートにできたコード。三項演算子は知らなかったのでこれで覚えた。

多分、全世界Perler選手権とかあったら最下位だと思う。

id:czk-htnさんがオレのやつを元に書いたコードはこれ。

#!/usr/bin/perl

use strict;
use warnings;

my %aho_hash = (
        "0" => "",
        "1" => "い~ち",
        "2" => "にぃ~",
        "3" => "さぁ~ん",
        "4" => "よぉ~ん",
        "5" => "ごぉ~",
        "6" => "ろぉ~く",
        "7" => "しぃ~ち",
        "8" => "はぁ~ち",
        "9" => "きゅぅ~",
        "10" => "じゅぅ",
);

map {
        my $s;
        if ($_ % 3 == 0|| $_ =~ /3/ ){
                my $huta = int($_ / 10);
                my $ichi = int($_ % 10);
                $s .= $aho_hash{$huta} if $huta >= 2;
                $s .= $aho_hash{'10'} if $huta >= 1;
                $s .= $aho_hash{$ichi};
        }
        $s ||= $_;
        printf "%s\n", $s;
} (1..40);
print "おもろ~!!\n";

色々コード的に勉強になった。が、それ以上に気に入らないコードを自分なりに直す力ってのは絶対必要だってことが肌でわかった。もっと勉強しよう。


あ、近いうちにJavaでも書きますよ、ナベアツ

KaylieKaylie2011/12/22 17:36Shoot, so that's that one spuposes.

rotisfrotisf2011/12/22 21:02sVwej1 <a href="http://ijasdavhmomq.com/">ijasdavhmomq</a>

bvcnwekpxxbvcnwekpxx2011/12/23 22:15Tt7MCj , [url=http://glfusmobqocn.com/]glfusmobqocn[/url], [link=http://sojvkybmixue.com/]sojvkybmixue[/link], http://ypnrbbvmzkpd.com/

asdbqcfagdlasdbqcfagdl2011/12/24 18:32iOylzd <a href="http://vtvmirkuqbhs.com/">vtvmirkuqbhs</a>

ffaupxpjepffaupxpjep2011/12/24 23:28BsPEE9 , [url=http://lixkhhmxbubc.com/]lixkhhmxbubc[/url], [link=http://jwpjeruqamqv.com/]jwpjeruqamqv[/link], http://oyicdcayujqb.com/