Nopan heittelyä

Enec 24.02.08 21:35

Nopea Perlikäännös nopanheittokoodista ja SVG:llä kaavion piirtämisestä, joka on Javamuodossaan täällä: http://mureakuha.com/koodikirjasto/1056

 Tekstiversio  Arvo: 2 (2 ääntä)  Äänestä: +  -
#!/usr/bin/perl -w
=moo

Täysin ajan puutteessa tehty, lähinnä SVG:n luomista "harjoittelin" tässä.
POhjana käytetty Entropian samaan ideaan perustuvaa Javapätkää täältä:
http://mureakuha.com/koodikirjasto/1056

(c) Joeli Hokkanen, 2008
     <cene @ fix.fi>
=cut
use strict;

print "Content-type: image/svg+xml\n\n"; # kerrotaan selaimelle, että tulossa on svg

my $max;
my $heittokerrat = 500;              # kuinka monesti heitetään
my @heitot;    # Heittojen silmälukujen esiintymiskerrat
my @alut;       # Palkkien alkupisteiden säilytys
my @korkeudet; # Palkkien korkeudet

$heitot[rand 6]++ for (1 .. $heittokerrat)# heitetään nopat

for (@heitot) { $max = $_ if ($_ > $max); }  # etsitään eniten heitetty luku

my $yksikko = int(400 / $max);               # lasketaan palkin korkeuden yksikkö

@korkeudet = map { $_ * $yksikko } @heitot# lasketaan palkkien korkeudet
@alut = map { 400 - $_ } @korkeudet;         # ja alkamispisteet

# tulostetaan itse kuvan header
print qq{<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<svg xmlns="http://www.w3.org/2000/svg" width="640" height="480">};

# ja lopulta piirretään palkit
for (my $i = 0, my $g = 10; $i < 6; $i++, $g += 60) {
  print qq{
  <rect x="$g" y="$alut[$i]" width="50" height="$korkeudet[$i]" rx="5"
    style="fill:#ff0000; stroke:#000000;stroke-width:2px;" />
  <text x="$g" y="420" style="font-weight: bold">} , $i + 1 , qq{ </text>
  <text x="$g" y="440"> $heitot[$i] kpl</text>};
}
print qq{
  <text x="10" y="460">Yhteensä: $heittokerrat heittoa</text>
</svg>};
 

Enec 21:36 24.2.08 
Näyttää bugaavan toi kuhan hilighteri, =jotain kun aloittaa monirivisen kommentin, joka kestää aina =cut asti.

Tää on testattavissa kokonaisuudessaan viidelläsadalla nopalla täällä:
http://cene.ath.cx/noppa.pl
editoitu: 15:30 26.2.08
snake 15:26 26.2.08 

Perl
my @heitot =( "0", "0", "0", "0", "0", "0" );    # Heittojen silmälukujen esiintymiskerrat
my @alut =("0", "0", "0", "0", "0", "0" );       # Palkkien alkupisteiden säilytys
my @korkeudet =( "0", "0", "0", "0", "0", "0" ); # Palkkien korkeudet
 

Miksi nuo on merkkijonoja, kun niitä kuitenkin käytetään lukuina?

Ja jos tykkää funktionaalisesta tyylistä, niin parista silmukasta pääsee eroon:

Perl
@korkeudet = map { $_ * $yksikko } @heitot;
@alut = map { 400 - $_ } @korkeudet;
Enec 21:32 6.5.08 
(Myöhäinen) kiitos vinkeistä, snake!

Nyt kun taas jaksoin Perliin enemmän paneutua niin korjasin nuo pikkuviat ja muutenkin karsin turhia looppeja yms pois. Olipa sekaan päässyt neljä muuttujaakin, joita ei välttämättä olisi missään tarvinnut.