#!/usr/bin/perl use strict ; use warnings ; # # Genera gruppi di Numeri e Lettere # da trascodificare in tastiera: # se decodificato bene, il programma va avanti # in caso contrario, ripete lo stesso gruppo # # Autore: Franco, IK7XJA, Giugno 2022 # Sito: https://www.ik7xja.it/xja/linux_cw.shtml # my $WPM = $ARGV[0] ; if (!$WPM) { $WPM = 25 ; } my $LUN = $ARGV[1] ; if (!$LUN) { $LUN = 3 ; } my $Continua = 1 ; my $Genera = 1 ; my $Parola = '' ; my ($Tempo_start, $Tempo_fine, $Errori, $Gruppi_totali, $Gruppi_decodificati) = () ; print "Scrivi le lettere che ascolti; premi: #Q per USCIRE #R per ripetere Lancia con ./indovina_parola.pl o modifica a runtime con (ad esempio): #W25 per impostare a 25 WPM #L9 per impostare lunghezza parola a 9 caratteri WPM = $WPM; Lunghezza = $LUN\n\n"; $Tempo_start = time() ; while ($Continua) { if ($Genera) { $Parola = &genstr($LUN) ; my $Comando = qq{echo "$Parola" | cw -w $WPM} ; my $Res = qx{$Comando} ; $Gruppi_totali++ ; } my $InputUtente = ; chomp $InputUtente; $InputUtente = uc($InputUtente) ; if ($InputUtente eq "#R") { my $Comando = qq{echo "$Parola" | cw -w $WPM} ; my $Res = qx{$Comando} ; $Genera = 0 ; $Errori++ ; } elsif ($InputUtente eq "#Q") { $Continua = 0 ; } elsif ($InputUtente =~ /^\#W(\d{2})$/) { $WPM = $1 ; print "--> Velocita ora a $WPM WPM\n" ; my $Comando = qq{echo "$Parola" | cw -w $WPM} ; my $Res = qx{$Comando} ; $Genera = 0 ; } elsif ($InputUtente =~ /^\#L(\d{1})$/) { $LUN = $1 ; print "--> Lunghezza gruppi ora a $LUN car.\n" ; $Genera = 1 ; } elsif ($InputUtente eq $Parola) { my $Comando = qq{echo "ok " | cw -w $WPM} ; my $Res = qx{$Comando} ; $Genera = 1 ; $Gruppi_decodificati++ ; } else { my $Comando = qq{echo "no $Parola" | cw -w $WPM} ; my $Res = qx{$Comando} ; $Genera = 0 ; $Errori++ ; } } $Tempo_fine = time() ; my $Durata = $Tempo_fine - $Tempo_start ; my $Minuti = 0 ; if ($Durata > 60) { $Minuti = int($Durata / 60) ; my $Secondi = $Durata%60 ; $Durata = "$Minuti min e $Secondi sec.\n\n" ; } else { $Durata = "0 min e $Durata sec.\n\n" ; } print " - Generati $Gruppi_totali gruppi\n - errori e ripetizioni: $Errori\n - gruppi decodificati: $Gruppi_decodificati\n" ; print "Durata del test: $Durata" ; exit ; sub genstr { # Genera una stringa con numeri casuali my $lung = shift; # Lunghezza dell stri8nga da generare my @Car=('A'..'Z','0'..'9'); my $Rstr = "" ; foreach (1..$lung) { $Rstr .= $Car[rand @Car]; } return $Rstr; }