#!/usr/bin/env perl
# script che cerca numeri di cinque cifre tali da avere:
# - la prima cifra che indica il numero di zeri totali presente nel numero
# - la seconda cifra che indica il numero di uno totali nel numero...
# faccio un ciclo fra tutti i numeri di cinque cifre:
# (potrei scartarne a priori ma per ora non lo faccio)
for ($numero = 10000; $numero <= 99999; $numero++) {
#devo verificare le cifre. Posso metterle tutte in un array così:
$lunghezza = length($numero); # so che ho 5 cifre, ma rendo l'algoritmo generalizzabile non
# dandolo per scontato
$verificatore = 0; # azzero una variabile che uso per verificare che il numero sia corretto
# DEVO azzerarla prima del ciclo successivo
for ($i = 0; $i < $lunghezza; $i++) {
$cifra = substr($numero, $i, 1); # recupero la cifra "i-esima";
$copia_numero = $numero; # creo una copia di "numero" per non interferire col primo ciclo for
$copia_numero =~s/$i//g; # rimuovo dal numero tutte le cifre pari alla "i"
$totale_cifre = $lunghezza - length($copia_numero);
if ($totale_cifre == $cifra) {
$verificatore++; # se la cifra i-esima è corretta aumento di uno il contatore "verificatore"
}
}
#adesso ho verificato tutte le cifre. il numero è ok solo se tutte le cifre lo erano:
if ($verificatore == $lunghezza) {
print "Numero: $numero\n";
}
}