4と9を含まない数列の500番目はいくつか?

昨日の夜やってたコマネチ大学数学科の問題。Perlで解く。自分なりに美しく書く。

#!/usr/bin/perl
use strict;
use warnings;
use List::MoreUtils qw/all/;

my @result =
    map $_->[0],
    grep { all { m/[^49]/ } @{ $_->[1] } }
    map [ $_, [split q//] ],
1..1000;

print $result[499];

シュワルツ変換を使った。all使わないでgrepだけで完結したいなぁ。結果がいくつになるかわからないのでとりあえず1000までを調べてるのも無駄だなぁ。

同じコードでも自分なりに美しく書くように意識するとプログラム力があがるんじゃないかと思いこんでみている。条件判定の状態数を減らせないか、とか。最近のお気に入りは三項演算子。まぁやりすぎると悲惨な目に遭うけど。