Il sistema di messaggistica scolastico deve ricavare il nome e il cognome dei docenti a partire dall’indirizzo email. Ogni indirizzo di posta elettronica è composto dal nome e dal cognome del docente separati da un punto e dal domino nel formato:
<nome>.<cognome>@edu.ti.ch
Scrivi la classe/programma MailParser
che, dato l’indirizzo di posta elettronica del docente memorizzato in una costante, stampi a terminale i relativi nome e cognome. Il formato dell’output deve rispettare rigorosamente quello proposto nei seguenti esempi:
Per “HAiEiE.braZoRf@edu.ti.ch” il programma stampa:
Email: HAiEiE.braZoRf@edu.ti.ch
Nome: Haieie
Cognome: Brazorf
Per “Mickey.Mouse@edu.ti.ch”:
Email: Mickey.Mouse@edu.ti.ch
Nome: Mickey
Cognome: Mouse
Per “vladimir.harkonnen@edu.ti.ch”:
Email: vladimir.harkonnen@edu.ti.ch
Nome: Vladimir
Cognome: Harkonnen
Un sistema di gestione del personale deve generare una sigla associata ad ogni dipendente secondo un formato standardizzato. Il formato prevede che la sigla di ogni persona sia composta da 4 caratteri e un numero intero:
Scrivi la classe Java HashGenerator
che, dati nome e cognome memorizzati in due costanti, stampi a terminale la relativa sigla. Il formato dell’output deve rispettare rigorosamente quello proposto nei seguenti esempi:
Per un impiegato di nome “HAiEiE” e cognome “bRaZorF”:
Nome: HAiEiE
Cognome: bRaZorF
Sigla: BfHe13
Per un impiegato di nome “Mickey” e cognome “Mouse”:
Nome: Mickey
Cognome: Mouse
Sigla: MeMy11
Per un impiegato di nome “vladimir” e cognome “harkonnen”:
Nome: vladimir
Cognome: harkonnen
Sigla: HnVr17
Un sistema di gestione del personale deve generare una sigla associata ad ogni dipendente secondo un formato standardizzato. Il formato prevede che la sigla di ogni persona sia composta da 6 caratteri:
Scrivi la classe Java HashBuilder
che, dati nome e cognome memorizzati in due costanti, stampi a terminale la relativa sigla. Il formato dell’output deve rispettare rigorosamente quello proposto nei seguenti esempi:
Per un impiegato di nome “HAiEiE” e cognome “braZoRf”:
Cognome: braZoRf
Nome: HAiEiE
Sigla: HaebrF
Per un impiegato di nome “Mickey” e cognome “Mouse”:
Cognome: Mouse
Nome: Mickey
Sigla: MiymsE
Per un impiegato di nome “vladimir” e cognome “harkonnen”:
Cognome: harkonnen
Nome: vladimir
Sigla: VlrheN
Scrivi il programma Unvowelator
che riceve degli argomenti da linea di comando e poi li stampa privandoli delle vocali.
Ad esempio per gli argomenti "In una tiepida notte estiva."
il programma stampa:
n n tpd ntt stv.
Scrivi il programma HelloPeople
che riceve N
nomi come argomenti da linea di comando e poi stampa altrettanti omini stilizzati. Sotto ogni omino compare il relativo nome.
Ad esempio per "Luigi Michele"
il programma stampa due omini:
\o/ \o/
| |
/ \ / \
Luigi Michele
Invece per "Simone Luigi Pincopallino Michele Joe"
:
\o/ \o/ \o/ \o/ \o/
| | | | |
/ \ / \ / \ / \ / \
Simone Luigi Pincopallino Michele Joe
Se non vengono forniti argomenti, il programma termina senza stampare niente.
Scrivi il programma FarfallinatoreInterattivo
che chiede all’utente di inserire una frase e poi la codifica in alfabeto farfallino (se non conosci l’alfabeto farfallino vedi wikipedia).
Esempio:
Inserire una frase: Il mattino ha l'oro in bocca
Ifil mafattifinofo hafa l'oforofo ifin bofoccafa
Oppure:
Inserire una frase: ciao come va
cifiafaofo cofomefe vafa
Scrivere la classe Asciigator
che chiede all’utente di digitare un stringa di testo e poi stampa ogni carattere contenuto nella stringa introdotta e il relativo codice Unicode (in decimale e in esadecimale).
Ad esempio per ABCDEF1234567890
il programma produce l’output seguente:
Introdurre un testo:
ABCDEF1234567890
char: 'A' 'B' 'C' 'D' 'E' 'F' '1' '2' '3' '4' '5' '6' '7' '8' '9' '0'
dec: 65 66 67 68 69 70 49 50 51 52 53 54 55 56 57 48
hex: 41 42 43 44 45 46 31 32 33 34 35 36 37 38 39 30
Mentre per Hello world!
:
Introdurre un testo:
Hello world!
char: 'H' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' '!'
dec: 72 101 108 108 111 32 119 111 114 108 100 33
hex: 48 65 6c 6c 6f 20 77 6f 72 6c 64 21
L’ISBN-13 azionabile è un codice composto secondo il modello:
ISBN A 10.###.#######/###
Ad esempio:
ISBN A 10.978.8889637/418
Dove la sequenza di #
rappresenta 13 cifre (12 cifre di codice + 1 cifra di controllo).
La cifra di controllo si calcola in base al valore delle 12 cifre precedenti con il seguente algoritmo numerico:
Ad esempio per il codice ISBN A 10.978.8843025/34
:
9 * 1 + 7 * 3 + 8 * 1 + 8 * 3 + 8 * 1 + 4 * 3 + 3 * 1 + ... + 4 * 3 = 117
117 diviso 10 da resto 7
10 - 7 = 3
la cifra di controllo sarebbe 3 (quindi il codice completo sarebbe ISBN A 10.978.8843025/343
).
Scrivi il programma ActionableIsbnChecker
che chiede all’utente di inserire un codice ISBN-13 azionabile e ne verifica la correttezza.
I prefissi ISBN
, A
e 10
, i punti, lo slash e gli spazi ('.'
, '/'
e ''
) sono opzionali, se vengono omessi il programma esegue comunque la verifica.
Il codice e la cifra di controllo devono essere presenti e validi, altrimenti il programma stampa un messaggio di errore.
Se il codice non è valido, il messaggio stampato è Codice non valido
. Se la cifra di controllo non è valida ([1;10]
) il messaggio di errore è Cifra di controllo non valida
.
Se l’utente inserisce un codice con il formato ammesso, il programma ne verifica la bontà controllando la corrispondenza tra codice e cifra di controllo. Se corrispondono il programma termina stampando il messaggio Codice verificato!
, altrimenti stampa Codice errato
.
Scrivi un decodificatore capace decifrare una stringa in alfabeto farfallino.
Esempio:
>java DeFarfallinatore Lefe frafagofolefe sofonofo mafatufurefe
Le fragole sono mature
Scrivi il programma Farfallinatore
che codifichi una stringa introdotta dall’utente in alfabeto farfallino (se non conosci l’alfabeto farfallino vedi wikipedia).
Esempio:
>java Farfallinatore Tanto va la gatta al lardo
Tafantofo vafa lafa gafattafa afal lafardofo
Scrivi la classe WordShaker
che chiede all’utente di inserire una frase e poi la stampa scambiando il primo con in secondo carattere, il terzo con il quarto, il quinto con il sesto e via dicendo. Se il numero di caratteri è dispari l’ultimo carattere viene stampato nella sua posizione originale.
Qualche esempio:
cane
diventa acen
gatto
diventa agtto
tanto va la gatta al lardo
diventa attn oavl aagtt alal raod
abcde
diventa badce
Esempio di output:
Inserire una frase: Asta la vista!
sAatl aivts!a
Scrivi la class SentenceSplitter
che chiede all’utente di inserire una frase e poi la stampa alternandone i caratteri su due righe come mostrato negli esempi seguenti.
Esempio di output:
Inserire una frase: cane
c n
a e
oppure:
Inserire una frase: mele cotogne
m l o o n
e e c t g e
o ancora:
Inserire una frase: Tanto va la gatta al lardo.
T n o v a g t a a a d .
a t a l a t l l r o
Scrivi la classe DoubleCounter
che chiede all’utente di inserire una parola e stampa il conteggio delle coppie caratteri consecutivi uguali (non sensibile alle maiuscole) contenute nella parola. Qualche esempio:
cane
il conteggio vale 0
gatto
vale 1
(tt
)caMmMicia
vale 2
(Mm
e mM
)abbacchio
vale 2
(bb
e cc
)Ooteca
vale 1
(Oo
)Esempio di output:
Inserire una parola: Zzzzummm
Coppie: 5
Scrivi la classe TextFormatter
contenente il metodo:
public static String reformat(Path source)
Tale metodo legge il contenuto di un file di testo e lo ritorna formattandolo secondo le regole seguenti:
' '
) all’inizio e alla fine del testo'.'
, ','
, ';'
, ':'
, '!'
, '?'
)Ad esempio per un file contenente il testo:
John,Malkovich?John : Malkovich!!! !
John Malkovich !? !?John;Malkovich . . .
il metodo reformat
ritorna la stringa:
John, Malkovich? John: Malkovich!!!! John Malkovich!?!? John; Malkovich...
Da Wikipedia:
“Il cifrario di Cesare è uno dei più antichi algoritmi crittografici di cui si abbia traccia storica. È un cifrario a sostituzione monoalfabetica in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell’alfabeto. Questi tipi di cifrari sono detti anche cifrari a sostituzione o cifrari a scorrimento a causa del loro modo di operare: la sostituzione avviene lettera per lettera, scorrendo il testo dall’inizio alla fine.” … ” In particolare, Cesare utilizzava uno spostamento di 3 posizioni (la chiave era dunque 3” …
Ad esempio, applicando la chiave 3: 'a'
diventa 'd'
, 'b'
diventa 'e'
, 'c'
diventa 'f'
e via dicendo:
Carattere originale | 'a' |
'b' |
'c' |
'd' |
'e' |
… | 'x' |
'y' |
'z' |
---|---|---|---|---|---|---|---|---|---|
Codifica con chiave 3 | 'd' |
'e' |
'f' |
'g' |
'h' |
… | 'a' |
'b' |
'c' |
Applicando invece la chiave 5 'a'
diventa 'f'
, 'b'
diventa 'g'
… eccetera:
Carattere originale | 'a' |
'b' |
'c' |
'd' |
'e' |
… | 'x' |
'y' |
'z' |
---|---|---|---|---|---|---|---|---|---|
Codifica con chiave 5 | 'f' |
'g' |
'h' |
'i' |
'j' |
… | 'c' |
'd' |
'e' |
Scrivi la classe Java CifrarioDiCesare
che contenga due metodi utili rispettivamente per codificare e decodificare una stringa:
public static String codifica(String testo, int chiave)
public static String decodifica(String codice, int chiave)
Scrivi la classe StringTool
contenente i metodo seguenti:
public static String longest(String a, String b)
Ritorna la stringa più lunga tra a
, b
. Ad esempio longest("cane","gatto")
ritorna la stringa gatto
, mentre longest("abcdef","gatto")
ritorna abcdef
.
public static String alternate(String a, String b, int times)
Ritorna una stringa di testo contenente le stringhe a
e b
alternate times
volte. Ad esempio alternate("*","-",5)
ritorna la stringa *-*-*-*-*-
, mentre alternate("va","Ja",2)
ritorna la stringa vaJavaJa
.
public static String concatenate(int a, int b, int c, char separator, char terminator)
Ritorna una stringa contenente l’elenco dei valori dei parametri a
, b
e c
. I valori sono separati dal carattere separator
e la lista è terminata dal carattere terminator
. Ad esempio concatenate(1,2,3,';','.')
ritorna la stringa 1;2;3.
, mentre concatenate(10,20,30,'_','!')
ritorna la stringa 10_20_30!
.w
Scrivi il programma CharCounter
che calcola la frequenza dei caratteri alfabetici contenuti in un file di testo. Il percorso del file è fornito come primo argomento da linea di comando. Il programma legge il contenuto del file e stampa il conteggio dei caratteri (case insensitive) e il tempo impiegato. Ad esempio, per un file contenente il testo seguente:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
il programma stampa:
'a': 29
'b': 3
'c': 16
'd': 19
'e': 38
'f': 3
'g': 3
'h': 1
'i': 42
'j': 0
'k': 0
'l': 22
'm': 17
'n': 24
'o': 29
'p': 11
'q': 5
'r': 22
's': 18
't': 32
'u': 29
'v': 3
'w': 0
'x': 3
'y': 0
'z': 0
Parse time: 6ms
Se il percorso fornito come primo argomento non è valido (non esiste, non è leggibile), il programma stampa il messaggio "Error reading <file>"
e termina.
Se non vengono forniti argomenti il programma stampa il messaggio "Usage: java CharCounter <file>"
.
Per verificare il buon funzionamento del tuo programma puoi usare la Divina commedia e cronometrare il tempo impiegato (usa System.currentTimeMillis()
per misurare il tempo).
Scrivi il programma ButterFyler
utile per codificare un file di testo (UTF-8) in alfabeto farfallino e salvarlo in un file di destinazione (se non conosci l’alfabeto farfallino vedi wikipedia).
La classe deve contenere il metodo encode
che codifica il file source
e lo salva nel file dest
:
public static void encode(Path source, Path dest)
Per verificare il buon funzionamento del tuo programma prova a codificare la Divina commedia e a cronometrare il tempo impiegato per la codifica (usa System.currentTimeMillis()
per misurare il tempo).
Scrivi il gioco interattivo MorraCinese
. Il programma chiede di inserire il punteggio massimo, poi il gioco comincia. Vince chi raggiunge prima il punteggio massimo.
1
per carta, 2
per sasso, 3
per forbice).1
per carta, 2
per sasso, 3
per forbice).0
per continuare, 1
per terminare).0
il programma ricomincia dal punto 1.1
il programma termina.Esempio:
Oppure, se la vostra console supporta Unicode:
Scrivi il programma interattivo Butterflyzer
che permetta di codificare e decodificare messaggi in alfabeto farfallino.
'c'
per codificare, 'd'
per decodificare, 'q'
per terminare),'q'
il programma termina.'c'
, chiede all’utente di digitare una stringa di testo da codificare e poi stampa il messaggio codificato.'d'
, chiede all’utente di digitare il messagio da decodificare e poi stampa il testo decodificato.Esempio:
$ java Butterflyzer
Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: x
Scelta non valida 'x'
Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: c
Inserire testo da codificare: Tanto va la gatta al lardo
Messaggio codificato: Tafantofo vafa lafa gafattafa afal lafardofo
Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: d
Messaggio da decodificare: Lefe frafagofolefe sofonofo mafatufurefe
Testo decodificato: Le fragole sono mature
Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: q
$
Scrivi la classe AdvancedStringTool
contenente i metodi desctitti in seguito:
public static boolean isLetter(char c)
Ritorna true
se il carattere c
è una lettera, mentre ritorna false
In caso contrario.
public static boolean isConsonant(char c)
Ritorna true
se il carattere c
è una consonante, false
altrimenti.
public static boolean isVowel(char c)
Ritorna true
se c
è una vocale, mentre ritorna false
in tutti gli altri casi.
public static int countVowels(String text)
Ritorna il numero di vocali presenti nella stringa text
. Ad esempio countVowels("NOOOOOO")
ritorna 6.
public static int countConsonants(String text)
Tale metodo ritorna il numero di consonanti presenti nella stringa text
. Ad esempio countConsonants("NOOOOOO")
ritorna 1.
public static String vowelize(String text)
Ritorna una stringa contenente solamente le vocali della stringa text
. Ad esempio vowelize("casa")
ritorna "aa"
, mentre vowelize("lunotto")
ritorna "uoo"
.
public static boolean isAlternative(String s)
Tale metodo ritorna true se la stringa s
contiene consonanti e vocali alternate (es. isAlternative("patata")
ritorna true
).
public static int countInString(String text, char c)
Tale metodo conta quante volte il carattere c
è presente nella stringa text
.
public static boolean isAnagram(String firstWord, String secondWord)
Ritorna true
se firstWord
è un anagramma di secondWord
, altrimenti ritorna false
. Esempio isAnagram("calendario","locandiera")
ritorna true
.
Scrivi la classe NameFramer
contenente il metodo:
pubic static String frameName(String name, char c, int width)
che ritorna una stringa contenente la stringa name
incorniciata nel carattere c
utilizzato con uno spessore width
.
Ad esempio frameName("Piero",'*',2)
ritorna la stringa:
*********
*********
**Piero**
*********
*********
mentre frameName("Andrea",'$',1)
ritorna la stringa:
$$$$$$$$
$Andrea$
$$$$$$$$