Libertà vo cercando, ch'è sì cara, come sa chi per lei vita rifiuta

Categoria: script

Controllo automatico della connessione rimanente, per rete 3 (tre.it)

Script per il controllo automatico (dalle 8:00 alle 23:00 ogni 30 min) della connessione  rimanente con l’abbonamento 3. In caso il valore sia inferiore ad uno preimpostato (500MB) invia un email d’allerta. E’ necessario essere connessi con la 3.

L’unica versione funzionante è la selenium, che necessita Firefox.

Ma con qualche piccola modifica sono sicuro che riusciate ad utilizzare Chrome se preferite, o a reindirizzarlo sul sito del vostro provider.

Se è effettivamente utile fatemelo sapere che si può migliorare facilmente. 🙂

Data mining – 2014 homeworks solutions

Homeworks solutions (pdf + code).

  1. Homework 1 – Sol
  2. Homework 2 – Sol
  3. Homework 3 – Sol
  4. Homework 4 – Sol
  5. Homework 5 – Sol
  6. Homework 6 – Sol

Algorithm Design / Theoretical Computer Science – 2015 – Homeworks solutions

Hi

Since often in the homeworks the questions are similar to those of the previous years, here there are my solutions.
It costed us weeks of work, too much for dying forgotten in my hard disk.

Site course

  • Homework 2 :  Solution
    Themes : Set Cover, partial set cover, max cover, linear programmming (LP), integer linear programming (ILP), maximum weight matching, game theory, approximation, steiner tree, minimum spanning tree.

For the Latex version of the solutions please donate and I will send it to you with joy. 🙂


Stop forgetting seen episodes

I don’t have good memory.. so often I click ( and start watching ) on tv-series episodes already seen.. and it can take a while before I realize it..

That’s how I resolved :

On Chrome ( on Firefox it’s very similar)

  • open the page with the links
  • open the Developer Tools (Ctrl+Maiusc+I on Chrome) or right-click on the body of the page and select Inspect Element
  • click on the + on the right ( new style rule) and add these 2 blocks:adding a new rule in chrome developer tools

a{
background-color: white;
}

a:visited {
background-color: black;
}

If the background isn’t white change the colors as you wish. But remember that it isn’t a permanent solution, it works as long as you keep the window open!

That’s all 😉

Primo script in Prolog

SWI-Prolog è la versione qui utilizzata.
Sistema: Ubuntu 13.04.
Strumenti: Gedit, Terminale.
Per installarlo : sudo apt-get install swi-prolog

Prolog is a declarative programming language. This means that in prolog, you do not write out what the computer should do line by line, as in procedural languages such as C and Java . The general idea behind declarative languages is that you describe a situation. Based on this code, the interpreter or compiler will tell you a solution. In the case of prolog, it will tell you whether a prolog sentence is true or not and, if it contains variables, what the values of the variables need to be.

Piccolo script per iniziare a conoscere il Prolog

largeFamily.pl

% database familiare
% iniziamo da lontano definendo un insieme di esseri umani..

human(john).
human(david).
human(gino).
human(bobbysolo).
human(karen).
human(gloria).
% ora separiamoli in base al sesso :
sex(john, man). % maschietti
sex(david, man).
sex(gino, man).
sex(bobbysolo, man).
sex(karen, woman). % femminucce
sex(sasha, woman).
sex(gloria, woman).
% iniziamo a definire le coppie
partner(john, gloria).
partner(david, britney).
partner(gino, topino).
partner(john, karen).
haveChild(john, sasha). % genitori
%haveChild(john, david).
% john,karen -> sasha,bobbysolo -> rocco,brigitte -> moana
haveChild(karen, sasha).
haveChild(gloria, david).
haveChild(sasha, rocco).
haveChild(bobbysolo, rocco).
haveChild(rocco, moana).
haveChild(brigitte, moana).
% definiamo ora delle funzioni che controllino se
% - A sia il padre di B
isFather(A, B) :- sex( A, man), haveChild(A,B).
% - A sia la madre di B
isMother(A, B) :- sex( A, woman), haveChild(A,B).
% - F e M siano padre a madre di A
parents(A, F, M) :- isFather(F, A), isMother(M,A).
% - A sia un avo di B
ancestor(A,B) :- haveChild(A,B).
ancestor(A,B) :- haveChild(A,X), ancestor(X,B). % non senti puzza di ricorsione ?
% - uno dei due è il padre/madre, il figliastro, il fratello/astro o un progenitore
areRelatives(A,B) :- isFather(A,B) | isFather(B,A) | isMother(A,B) | isMother(B,A);
partner(A,C), haveChild(C,B);
partner(C,A), haveChild(C,B);
haveChild(C,A), haveChild(D,B), ( partner(C,D); partner(D,C) );
ancestor(A,B); ancestor(B,A).

Mentre queste sono delle possibili interrogazioni da terminale

?- isFather(john,_).
true.
?- isFather(john,B).
B = david.
?- parents(david,Father,Mother).
Father = john,
Mother = gloria ;
false.

?- ancestor(john, Discendente).
Discendente = sasha ;
Discendente = rocco ;
Discendente = moana ;
false.

?- areRelatives(gloria, sasha).
true .
?- areRelatives(john,david).
true .
?- areRelatives(karen, moana).
true ;

[Python3.1] Trova la pepita 2.0 !

Ed ecco la seconda versione del gioco più appasionante del momento!
Tutti lo vogliono!
Migliorato con la collaborazione di Risca.
Controlla che sia ancora l’ultima versione qui !

  • Migliorata grafica schema;
  • risolto problemi di rilevamento vicinanza alla pepita;
  • inseriti indici numerici del campo;
  • memorizzazione e visualizzazione dei tentativi falliti;
  • eliminata la possibilità di fare più volte lo stesso errore;

 

#! /usr/bin/env python3.1
# -*- coding: utf-8 -*-
"""
Gioco dimostrativo creato per l'Accademia debianizzati.

Copyright 2011 risca
Copyright 2011 TuxErrante

GPLv2 or later

"""

import sys
import random

errore = []
benvenuto = "\n \n \n \n \n \nBenvenuto nella miniera TuxErrante & Risca co.!\n\
Sarò lieto di condividere con te il nostro oro, a patto che \
tu riesca a trovarlo!\n\
Hai {0} cariche di esplosivo e {1} cave da esplorare.\n\
Sei pronto?\nEcco lo schema del cantiere\n"
#pepita = [-10, -10]
def stampaCantiere(campo,pepita=[-10,-10], errore=[]):
# se passo la pepita allora deve controllare cella per cella
# quale sia quella giusta dove metterla
print("-"*50)
print(" ", end=' ')
for i in range(campo):
if i < 9:
print("{} ".format(i+1), end=' ')
else:
print("{}".format(i+1), end=' ')
print()
for r in range(campo):
if r < 9:
print(' {}'.format(r + 1), end=' ')
else:
print(r + 1, end=' ')
for c in range(campo):
if [r , c] in errore:
print(" O ",end='')
elif r == pepita[0] and c == pepita[1]:
print(" X ",end='')
else:
print(" . ",end='')
print() # manda a capo per ogni nuova riga



def trovaPepita(tent,campo):
"""\nCrea una matrice di dimensione campo*campo dove pone una 'pepita' in modo
casuale attraverso la funzione randomint(), che bisognerà cercare di trovare
per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di
uno, ci avvertirà della vicinanza. \n
Puo' essere invocato senza argomenti, nel caso in cui i valori di default
saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove
il numero dei tentativi deve essere inferiore al numero delle cave."""
if tent >= campo * campo:
exit(" Così non si puo' giocare! ")
print(benvenuto.format(tent,campo*campo))
# prendi le coordinate della pepita casualmente tra 0
# e la dimensione del campo-1
pepita = [random.randint(0,campo-1), random.randint(0,campo-1)]
stampaCantiere(campo) # stampa il campo vuoto
while tent > 0:
bangx = input("\n Inserisci le coordinate in cui vuoi piazzare la mina \
comprese tra [1 ..{}] \n x = ".format(campo))
bangy = input(" y = ")
if not bangx.isnumeric() or not bangy.isnumeric():
print(" Inserisci delle coordinate numeriche per favore! \n")
continue
else:
bangx, bangy = int(bangx), int(bangy)
bangx -= 1
bangy -= 1
if bangx < 0 or bangx >= campo or bangy < 0 or bangy >= campo:
print(" Per favore inserisci delle coordinate corrette ! \n \
Ricorda che quelli che hai in mano sono esplosivi !! \n")
continue
else: # coordinate inserite ammissibili
if (pepita[0] == bangx) and (pepita[1] == bangy):
# svela dove è la pepita !
print("coordinate segrete {},{}".format(pepita[0],pepita[1]))
stampaCantiere(campo,pepita,errore)
exit(" Complimenti!! L'hai trovata! Siamo ricchiiiii \n \
Ci devi una percentuale, ricordatelo!!")
elif ([bangx,bangy] in errore):
print(" errare è umano perseverare è diabolico!")
continue
else: # dice se si è lontani o meno dalla pepita
tent -=1
errore.append([bangx, bangy]) # inserisco nella lista errori
print("\n")
stampaCantiere(campo,[-10,-10],errore)
testX = abs(pepita[0] - bangx)
testY = abs(pepita[1] - bangy)
if (testX == 1 or testX == 0) and (testY == 1 or testY == 0):
print(" Ci sei vicino !!")
else:
print(" No, no, non ci siamo. \n")
if tent >= 1:
print(" Dai ritenta !!")
else:
print("\n Peccato che abbia finito l'esplosivo !!\n Ecco dov'era :")
stampaCantiere(campo,pepita,errore)




# chiamata della funzione principale
# se viene chiamata senza argomenti gli verranno passati di default 6 e 6
# chiamare lo script con '-h' per vedere la documentazione
if len(sys.argv) == 3:
trovaPepita(int(sys.argv[1]), int(sys.argv[2]))
elif len(sys.argv) == 2 and sys.argv[1] == '-h':
print (trovaPepita.__doc__)
else:
trovaPepita(6,6)

  • puoi trovarlo anche qui

[Python3.1] Trova la pepita !

Un piccolo gioco in python3.1, giusto per prenderci la mano con la chiamata di funzioni, le doctype e per mettere a frutto un’idea nata nel bus per fornire materiale all’Accademia 🙂

Vai all’ultima versione!

#! /usr/bin/env python3.1
# -*- coding: utf-8 -*-
import sys
import random

def stampaCantiere(campo,pepita=None):
# se passo la pepita allora deve controllare cella per cella
# quale sia quella giusta dove metterla
if pepita != None:
for r in range(campo):
for c in range(campo):
if r == pepita[0] and c == pepita[1]:
print("|X|",end='')
else:
print("|_|",end='')
print()
# altrimenti fai una stampa veloce
# separo i due casi per evitare di eseguire sempre del codice molto pesante
else:
for i in range(campo):
print("|_|"*campo)



def trovaPepita(tent,campo):
"""\nCrea una matrice di dimensione campo*campo dove pone una 'pepita' in modo
casuale attraverso la funzione randomint(), che bisognerà cercare di trovare
per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di
uno, ci avvertirà della vicinanza.

Puo' essere invocato senza argomenti, nel caso in cui i valori di default
saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove
il numero dei tentativi deve essere inferiore al numero delle cave."""

if tent>=campo*campo:
exit(" Così non si puo' giocare! ")
print("\n Benvenuto nella miniera di TuxErrante ! \n Sarò lieto di \
condividere con te il mio oro, a patto che tu riesca a trovarlo!\n \
Hai {0} cariche di esplosivo e {1} cave da esplorare. \n \
Sei pronto ? \n Ecco lo schema del cantiere \n".format(tent,campo*campo))
# prendi le coordinate della pepita casualmente tra 0 e la dimensione del campo-1
pepita=[random.randint(0,campo-1),random.randint(0,campo-1)]
stampaCantiere(campo) # stampa il campo vuoto

while tent>0:
bangx = input("\n Inserisci le coordinate in cui vuoi piazzare la mina \
comprese tra [0 ..{}] \n x = ".format(campo-1))
bangy = input(" y = ")
if not bangx.isnumeric() or not bangy.isnumeric():
print(" Inserisci delle coordinate numeriche per favore! \n")
continue
else:
bangx, bangy = int(bangx), int(bangy)
if bangx < 0 or bangx >= campo or bangy < 0 or bangy >= campo:
print(" Per favore inserisci delle coordinate corrette ! \n \
Ricorda che quelli che hai in mano sono esplosivi !! \n")
continue
else: # coordinate inserite ammissibili
if (pepita[0] == bangx) and (pepita[1] == bangy):
# svela dove è la pepita !
print(" coordinate segrete {},{}".format(pepita[0],pepita[1]))
stampaCantiere(campo,pepita)
exit(" Complimenti!! L'hai trovata! Siamo ricchiiiii !!")
else: # dice se si è lontani o meno dalla pepita
tent -=1
if abs(pepita[0] - bangx) == 1 or abs(pepita[1] - bangy) == 1:
print(" Ci sei vicino !!")
else:
print(" No, no, non ci siamo. \n")
if tent >= 1:
print(" Dai ritenta !!")
else:
print(" Peccato che abbia finito l'esplosivo !! \n Ecco dov'era :")
stampaCantiere(campo,pepita)


# chiamata della funzione principale
# se viene chiamata senza argomenti gli verranno passati di default 6 e 6
# chiamare lo script con '-h' per vedere la documentazione
if len(sys.argv) == 3:
trovaPepita(int(sys.argv[1]), int(sys.argv[2]))
elif len(sys.argv) == 2 and sys.argv[1] == '-h':
print (trovaPepita.__doc__)
else:
trovaPepita(6,6)



rubrica.sh

Gestione di una semplice rubrica, con menù di modifica e salvataggio in un file esterno.

#! /bin/bash
# ES. 6
# gestione rubrica telefonica e output nel file rubrica
clear
empty(){
echo " ERR: Il file rubrica non esiste o è vuoto! "
return
}

checkNum(){
[[ $1 =~ ^([0-9]+)$ ]] && return 0;
echo " ERR: \"$1\" non è un numero intero!" && return 1;
}

thereIs () {
[[ -z `egrep ":($1)" rubrica` ]] && echo " \"$1 \" non presente! " && continue
return
}

# scelta menu
echo
PS3="inserisci la scelta: "
select scelta in visualizza inserimento eliminazione cerca_Cognome cerca_Nome Help fine
do
case $REPLY in
1) # visualizza
echo
if [ -s rubrica ]
then
more rubrica
else empty
fi
echo
;;
2) # inserisci INSERIRE CONTROLLI
echo
echo " Inserimento nuovo campo : "
printf "\n Nome: "
read nome
printf " Cognome: "
read cognome
err=0
while [ $err -eq 0 ]
do
printf " Numero: "
read num
checkNum $num
[[ $? -eq 0 ]] && err=1
done

echo "$cognome:$nome:$num" >> rubrica
sort rubrica > temp | mv temp rubrica
;;
3) # elimina
echo
echo -e " eliminazione di un record \n"
printf " inserisci nome: "
read nome
printf " inserisci cognome: "
read cognome
if [ -s rubrica ]
then
# cotrollo esistenza campo
[[ -z `egrep "^($cognome):($nome)" rubrica` ]] && echo " campo \"$cognome:$nome\" non presente " && break
egrep -v "^($cognome):($nome)" rubrica > temp
mv temp rubrica
echo " eliminazione eseguita."
else empty
fi
echo
;;
4) # ricerca cognome
echo
if [ -s rubrica ]
then
printf " inserisci il cognome: "
read cognome
thereIs $cognome
echo && egrep "^($cognome)" rubrica && echo
else empty
fi
echo
;;
5) # ricerca nome
echo
if [ -s rubrica ]
then
printf " inserisci il nome: "
read nome
thereIs $nome
echo && egrep ":($nome)" rubrica && echo
else empty
fi
echo
;;
6)
echo " HELP "
echo "1. visualizza il contenuto di rubrica "
echo "2. inserisci un nuovo record "
echo "3. eliminazione di un record "
echo "4. ricerca per cognome"
echo "5. ricerca per nome "
echo "6. questo help"
echo "7. esci"
;;
7) exit 0 ;;
*) echo " Inserisci un valore adeguato!" ;;
esac

done
exit 0

# gio 29 ott 2009 12:19:55 CET
# tux_errante

clock.sh

Semplice script bash che implementa funzioni cronologiche.
Sostituire la riga 71 : “echo ripetizione” con l’operazione che si voglia eseguire.


#! /bin/bash
#clock.sh 1) sveglia: esegue un comando ad un ora inserita
# 2) timer : per un intervallo dà un messaggio ongi x secondi
clear

ora=0000 # le funzioni non possono ritornare un valore > 255 !

check(){
while true
do
read ora
[[ $ora =~ ^(([0-1][0-9])|((2)[0-4]))([0-5][0-9])$ ]] && ora=$ora && return
printf " ERR Formato errato: inserisci un numero da [0 a 24][0 a 59] : "

done
exit 0
}

getInt(){ # controlla che i parametri immessi siano numeri
while true
do
read a
if [[ $a =~ ^([0-9]+)$ ]]
then
return $a
else
printf " devi inserire un numero: "
fi
done
exit -1
}

PS3="inserisci la scelta: "
echo
select scelta in sveglia timer help esci
do
case $REPLY in
1) echo -e "\n Modalità sveglia : ora attuale `date +%H%M` "
printf "\n inserisci ora nel fomato hhmm : "
check

while true
do
[[ $ora -eq `date +%H%M` ]] && echo -e " SVEGLIA !! \n" && exit 0
sleep 1
done
;;
2)
echo -e "\n Impostazione timer \n"
printf " inserisci valore intervallo massimo in secondi "
getInt
i=$?

printf " inserisci valore periodo "
getInt
p=$?

start=`date +%s`
let max="$start + $i" # tempo massimo
k=1
now=`date +%s`
# ho dovuto introdurre la variabile now perchè inserendo il comando date nell'until
# e nell'if dava risultati differenti a seconda dell'istantein cui venivano processati
# così invece ho fregato lo scheduler ;)
until [ $now -gt $max ] # finchè non raggiungo il tempo massimo
do
if [ $now -eq $(($start + $p)) ] # finchè non raggiungo il tempo+periodo
then
start=`date +%s`
echo "ripetizione $k"
let k+=1
fi
now=`date +%s`
done
printf " Intervallo scaduto \n\n"
exit 0
;;
3)
echo -e " \t Help "
echo " 1) SVEGLIA: esegue una determinata azione solo allo scadere dell'ora scelta."
echo " 2) TIMER: esegue una determinata azione allo scadere di ogni intervallo, all'interno di un certo periodo."
echo " 3) Help: spero ti sia d'aiuto."
echo " 4) Esci."
;;
4) break;;
*) echo " Non hai fatto una scelta valida ";;
esac
done
exit 0

#gio 22 ott 2009 19:14:38 CEST
# Alessandro Affinito

Powered by WordPress & Theme by Anders Norén