Perl 5, 486 477 476 450 (+7 для -MImager
флага) = 457 байт
Благодаря Dada я сэкономил несколько байтов, используя функциональные new
вызовы и избавляясь от паренов, а также pop
вместо $ARGV[0]
конечной точки с запятой. Я сохранил еще немного, поместив $n=pop
его туда , где он впервые используется, и используя нотацию пространства имен Perl 4 с '
вместо ::
.
$i=new Imager xsize=>$n=pop,ysize=>$n;$h=$n/2;$s=$n*.6;$f=$n*.4;$c='color';($b,$r,$y,$g,$w)=map{new Imager'Color"#$_"}qw(4285f4 ea4335 fbbc05 34a853 fff);$i->box(filled=>1,$c,$w);$i->arc($c,$$_[0],r=>$h,d1=>$$_[1],d2=>$$_[2])for[$b,315,45],[$r,225,315],[$y,135,225],[$g,45,135];$i->circle($c,$w,r=>$n*.3,filled=>1);$i->box($c,$b,ymin=>$f,ymax=>$s,xmin=>$h,xmax=>$n*.9,filled=>1);$i->polygon($c,$w,x=>[$n,$n,$s],y=>[0,$f,$f]);$i->write(file=>'g.png')
Для этого требуется модуль Imager , который необходимо установить из CPAN. Принимает одно целое число в качестве аргумента командной строки. Изображение не сглажено, поэтому оно немного уродливо.
Скопируйте приведенный ниже код в файл g.pl. Нам нужно дополнительно +7 байтов для -MImager
флага, но это экономит несколько байтов, потому что нам это не нужно use Imager;
.
$ perl -MImager g.pl 200
Вот различные размеры:
N = 10
N = 100
N = 200
Абсолютно незатронутый код прост.
use Imager;
my $n = $ARGV[0];
my $i = Imager->new( xsize => $n, ysize => $n );
my $blue = Imager::Color->new('#4285f4');
my $red = Imager::Color->new('#ea4335');
my $yellow = Imager::Color->new('#fbbc05');
my $green = Imager::Color->new('#34a853');
my $white = Imager::Color->new('white');
$i->box( filled => 1, color => 'white' );
$i->arc( color => $blue, r => $n / 2, d1 => 315, d2 => 45 ); # b
$i->arc( color => $red, r => $n / 2, d1 => 225, d2 => 315 ); # r
$i->arc( color => $yellow, r => $n / 2, d1 => 135, d2 => 225 ); # y
$i->arc( color => $green, r => $n / 2, d1 => 45, d2 => 135 ); # g
$i->circle( color => $white, r => $n * .3, filled => 1 );
$i->box(
color => $blue,
ymin => $n * .4,
ymax => $n * .6,
xmin => $n / 2,
xmax => $n * .9,
filled => 1
);
$i->polygon( color => $white, x => [ $n, $n, $n * .6 ], y => [ 0, $n * .4, $n * .4 ] );
$i->write( file => 'g.png' );
Этот пост ранее имел код в форме выходного изображения. Поскольку это противоречит правилам игры в гольф, мне пришлось удалить его. Смотрите историю изменений, если вы хотите посмотреть. Я использовал Acme :: EyeDrops, чтобы создать это, с формой, которую я создал из изображения, созданного самой программой, которую я преобразовал в искусство ASCII. Код, который я запутал, уже был в гольфе, что можно увидеть, заменив первый eval
на a print
.