たつをの ChangeLog : 2015-05-11

これ、やってみた。

- 1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に
http://www.softantenna.com/wp/software/5-programming-problems/
(元記事: Five programming problems every Software Engineer should be able to solve in less than 1 hour)

問題1、問題2、問題3は簡単すぎなので飛ばして問題4と問題5に挑戦。

問題4:
正の整数のリストを与えられたとき、数を並び替えて可能な最大数を返す関数を記述せよ。例えば、[50, 2, 1, 9]が与えられた時、95021が答えとなる

最初は単純に数値を文字列として降順にソートするだけと思ってシンプルなワンライナーを書いてみた。
perl -le 'print join "", reverse sort @ARGV' 50 2 1 9

しかし、"10 1 15" が "15101" となってしまう。正しくは "15110" なのに。"10" と "1" の場合、つまり桁が異なるときの比較が問題。そこで、"10" と "1" の比較は先頭の数字を末尾にくっつけた "10111111..." と "11111111..." で比較することにした。直してみたのがこれ。
perl -le '
print join "", reverse sort {
my $t=substr($a, 0, 1);
$t != substr($b, 0, 1) ?
  ($a cmp $b) :
  ($a.($t x length($b)) cmp $b.($t x length($a)))
} @ARGV' 50 5 55 1 10 11 9

正解をみてみたらもっとシンプルで、"10" と "1" の比較はを "101" ("10"+"1") と "110" ("1"+"10") の比較で解決してた。なるほどなあ。合理的でエレガントだ。

問題5:
1,2,...,9の数をこの順序で、"+"、"-"、またはななにもせず結果が100となるあらゆる組合せを出力するプログラムを記述せよ。例えば、1 + 2 + 34 - 5 + 67 - 8 + 9 = 100となる

こちらは総当たりしただけ。
"123456789" の各数字の間に入るのは、"+" か "-" か "" (なにもなし) の3種類。
なので3の8乗 (6561) 個のパターンがあるだけ。
再帰とかじゃなく、単に0から6560までの6561個の数を3進数に変換する処理で実装。
perl -le '
for (0..3**8) {
  my $s = 1;
  my $n = $_;
  for (2..9) {
    $s .= ("+", "-", "")[$n % 3].$_;
    $n /= 3;
  }
  print $s if eval($s) == 100;
}'
ワンライナー:
perl -le 'for(0..3**8){$s=1;$n=$_;for(2..9){$s.=("+","-","")[$n%3].$_;$n/=3}print $s if eval($s)==100}'

というか、問題4と問題5は問題1,2,3の結果を踏まえてプログラムを書くのが正しい流れだったのかも。

2015年5月11日のヲハニュースをお届けします。



Amazon.co.jp: 村上さんのところ コンプリート版 eBook: 村上 春樹, フジモト マサル: Kindleストア
村上作品に関する素朴なクエスチョンから、日常生活のお悩み、ジャズ、生き方、翻訳小説、社会問題、猫、スワローズ、そして珍名ラブホテルまで--。期間限定サイト「村上さんのところ」に寄せられた37465通の質問・相談メールに、村上春樹が3か月半にわたって続けた回答は、およそ3500問! そのすべてを完全収録し、ウェブサイト掲載時と同様の横組みスタイルで再現。単行本8冊分の愉しみを、スマホやパソコン、タブレットや電子書籍端末にダウンロードして、手軽にたっぷり楽しめるコンプリート版! 7月下旬〜8月発売予定。

何が不足しているので、貧困な子どもに普通の大人が「おせっかい」できないのか?(みわよしこ) - 個人 - Yahoo!ニュース
私は正直なところ、冒頭で紹介した朝日新聞社説に対して、
「ブラックホール化した/しかねない貧困状態の人が身近にいた経験を持っていたら、こんなことを簡単に書けるわけはないのでは?」
と思いました。

子どもがいない人の子育て論や親はこうあるべきだ論は微妙である : ブロガーかさこの「好きを仕事に」
体験をしたことのない人の正論は参考にはなるけど、説得力に欠ける。
「べき論」「べし論」の話です。体験にもいろんなレベルやカテゴリがあって一概には言えないけど、多くの場合はその通りかと。

【画像】アメリカの子供のDNA鑑定番組クッソワロタwwww:キニ速
ゲスさがウケるか。

驚異の治療、3Dプリンターを使って赤ちゃんの呼吸を脅かす重病を治し切った | Medエッジ
おお。

NHK NEWS WEB 里親制度 普及阻む“壁”
なる。

いい加減に、血液型でなんか分類した気になるのは、やめたらどうでしょうか。 - Yukibou's Hideout on Hatena
いまだに根強いよね。

この10の言葉使いをやめれば文章の説得力が大きく増すのに | jMatsuzaki
仕事の文書ならともかく、個人の趣味的なブログだったら気にしないなあ。

「丁寧な暮らし」とかしてる奴は滅亡しろよ: やまもといちろうBLOG(ブログ)
「上質な暮らし」もあるでよ。

Amazon.co.jp: チャンスの神様と出会う方法 (何かを成し遂げたい人に贈る30のヒント): 村川 智博, 「元気が出る本」出版部: 本

献本いただきました。ありがとうございます。
成功事例の一つのふりかえり本ですね。
前髪しかないと言われるチャンスの神様をつかまえろ!

たつをの ChangeLog
Powered by chalow