24. kasu praktikoa: urkatuaren jokoa

      Urkatua izeneko jokoa ohiko denbora-pasa izaten zen eskola garaian. Jolaskidetako batek ezkutuko hitz bat aukeratu, eta besteak hitz hori zein den asmatu behardu, aldiro letra bat aukeratuz. Hitz ezkutuak aukeratutako letra baldin badauka, letra hori zenbat aldiz eta zein posiziotan azaltzen den adierazi beharko zaio
jolaskideari. Huts eginez gero, urkamendirako pauso bat emango da gorputzeko zati bat marraztuz. Jokoa amaitzen da hitzaren letra guztiak asmatzean, edo gorputz osoa irudikatu ondoren urkatua gelditzen denean.
      Ariketa honetan ordenagailua izango dugu aurkari. Ez du urkarik marraztuko, baina 7 aukera emango dizkigu ezkutuko hitza asmatzeko. Horretaz gain, pauso bakoitzean ahalegin kopurua, asmatutako letrak eta zein letra erabili ditugun adierazi beharko digu.
      Programak argumentu bat jasoko du komando-lerrotik: hitz ezkutuak aukeratzeko erabiliko duen hiztegi-fitxategiaren izena. Lanak erraztearren, lerro bakoitzeko hitz bat gordetzen duen fitxategia erabiliko dugu, xuxen.txt.
      Hona hemen urkatua.pl programaren erabileraren adibidea:

>perl urkatua.pl xuxen.txt
_ _ _ _ _ _ _ _ _
7 aukera gelditzen zaizkizu
Idatzi karaktere bat (erabilitakoak ): a
Ez dauka a karaktererik
_ _ _ _ _ _ _ _ _
6 aukera gelditzen zaizkizu
Idatzi karaktere bat (erabilitakoak a): e
Badauka e karakterea
_ e _ _ _ _ _ _e_
6 aukera gelditzen zaizkizu
Idatzi karaktere bat (erabilitakoak a e):

>

     Hona guk osatutako algoritmoa:

1. Zabaldu fitxategia
2. Hiztegi fitxategitik hitz bat aukeratu ausaz.
3. Gorde hitza karakterez karaktere @hitza array-an
4. Begizta: 7 akats egin edo hitza asmatu bitartean
      4.1. Erabiltzaileari letra bat idazteko eskatu $karak
      4.2. Konprobatu ezkutuko hitzak $karak letra daukan ala ez
               foreach $karHitz (@hitza) {
                  baldin ($karHitz == $karak) {
                           Hitzak badu $karak letra
                  }
               }
      4.3. Huts egin badu… akats kopurua eguneratu eta mezua bistaratu
      4.4. Asmatu badu… letraren posizioak pantailan erakutsi
5. Hitzaren letra guztiak asmatu diren ala ez egiaztatu
      5.1. Asmatu badu… zorionak!
      5.2. Ez badu asmatu… hitz ezkutua erakutsi

     Honela itzuli dugu aurreko algoritmoa Perl lengoaiara:

urkatua.pl
 #!/usr/local/bin/perl
 use warnings;
 use strict;
 # Komando-lerrotik hiztegi-fitxategiaren izena jaso
 my $fitx = $ARGV[0];
 # Fitxategia zabaldu
 open (FITX, $fitx) or
      die(“Ezin $fitx fitxategia zabaldun”);
 # Gorde fitxategia @hiztegia array-an
 my @hiztegia = <FITX>;
 # Hiztegiko hitz bat aukeratu zoriz
 # $#hiztegia: @hiztegia-ren azken indizea
 # rand($#hiztegia): 0 eta $#hiztegia arteko zorizko
 # zenbaki bat
 my $hitza = $hiztegia[rand($#hiztegia)];
 chomp($hitza);
 # hitza karaktere zerrenda bihurtu
 my @hitza = split(//, $hitza);
# Jokoan erabilitako karaktereak gordetzeko array-a
 my @ibilitakoak;
 # Hitza asmatzeko aukera kopurua
 my $aukerak = 7;
 # Asmatutako letra kopurua
 my $asmatuak = 0;
 # 1 asmatu, 0 huts
 my $igarri = 0;
 # Teklatutik karaktere bat jasotzeko
 my $karak;
 # Asmatutako letrak
 my @aurkituak;
 # @aurkituak array-a hasieratu
 for (my $i=0; $i<=$#hitza; $i++) {
        $aurkituak[$i] = “_”;
 }
 # Jarraitu jokoan aukera guztiak erre edo hitza
 # asmatu bitartean
 while (($aukerak > 0) && ($asmatuak < length($hitza))) {
        print(“@aurkituakn”);
        print (“$aukerak aukera gelditzen zaizkizun”);
        print(“Idatzi karaktere bat (erabilitakoak
                   @ibilitakoak): “);
        $karak = <STDIN>;
        chomp($karak);
        # Gorde karakterea erabilitakoen zerrendan
        push(@ibilitakoak, $karak);
        $igarri = 0;
        # Konprobatu ezkutuko hitzak $karak karakterea daukan
        # Karaktere berbera behin baino gehiagotan izan
        # dezake ezkutuko hitzak
        for (my $i = 0; $i <= $#hitza; $i++){
                 if ($hitza[$i] eq $karak) {
                        # Asmatutako karaktere kopurua gehitu
                        $asmatuak++;
                        # Asmatutako karaktereen array-ean dagokion
                        # posizioan idatzi
                        $aurkituak[$i] = $karak;
                        # Jatorrizko hitzetik karakterea ezabatu
                        $hitza[$i] = “_”;
                        $igarri = 1;
                 }
        }
                 if ($igarri) {
              print(“nBadauka $karak karaktereann”);
       }
         else {
                print(“nEz dauka $karak karaktereriknn”);
                $aukerak–;
         }
}
if ($asmatuak == length($hitza)) {
    print(“ZORIONAK! $hitza zen gure hitz sekretuan”);
}
else {
    print(“Ez duzu asmatu: $hitza zen gure hitz sekretuan”);
}
close(FITX);

Jaitsi   urkatua.pl   fitxategia

Utzi erantzuna

Zure e-posta helbidea ez da argitaratuko. Beharrezko eremuak * markatuta daude