Forum: Italian Ruby user group Calcolo del codice fiscale

Posted by ilgu G. (ilgu)
on 2013-01-24 16:21
Ebbene si, mi affido al calcolo del caro codice fiscale :D
L'ho fatto tante volte a scuola, mi sembrava giusto farla anche adesso.
Apro questa discussione per segnalarvi eventuali dubbi che non riesco a
risolvere, e il primo è arrivato praticamente subito.

Devo togliere le vocali dal cognome, e ho pensato di usare il metodo
split, ma da solo mi rendo conto che la soluzione  da me provata è una
baggianata:

puts "Inserisci il tuo cognome: "
cognome = gets.chomp.downcase

cognome = cognome.split("a","e","i","o","u");

Ovviamente mi da problemi con gli argomenti del metodo.
Ho usato split per dividere la data, e li nessun problema :(

puts "Data di nascita: (GG/MM/AAAA)"
data = gets.chomp
data = data.split("/")
giorno = data[0]
mese = data[1]
anno = data[2]
Posted by Ju Liu (Guest)
on 2013-01-24 16:27
(Received via mailing list)
Il metodo split serve per splittare una stringa in un array, composto da
pezzi delimitati dal separatore che gli passi.

Per togliere le vocali da una stringa, userei qualche variazione di 
gsub,
tipo:

stringa.gsub(/[aeiou]/i, '')

Nota per che in questo modo non elimini i vari caratteri accentati, 
quindi
c' ancora un po' di lavoro da fare ;)

Ciao,

    Ju

--*
*M.Sc. Ju Liu
Card: http://zerp.ly/ju-liu
--
Societ Cooperativa weLaika - Impresa Sociale
Corso Vigevano 14/B, 10154 Torino (TO), Italy
http://welaika.com - info@welaika.com


2013/1/24 ilgu G. <gurnaz@live.it>
Posted by Andrea Pavoni (apeacox)
on 2013-01-24 16:31
(Received via mailing list)
Il giorno 24/gen/2013, alle ore 16:21, ilgu G. <gurnaz@live.it> ha 
scritto:
> cognome = cognome.split("a","e","i","o","u");


usa #gsub, Luke:

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub

...
cognome = cognome.gsub(/[aeiou]/,'')
...

documentazione per #split:

http://www.ruby-doc.org/core-1.9.3/String.html#met...


--
http://andreapavoni.com
Posted by ilgu G. (ilgu)
on 2013-01-24 16:31
Vi ringrazio! Per ora evito i vari controlli su accentate, doppi cognomi
o altro, magari li implemento alla fine quando riesco ad ottenere già
qualcosa di tangibile :)
Posted by David Welton (Guest)
on 2013-01-24 16:32
(Received via mailing list)
> cognome = cognome.gsub(/[aeiou]/,'')

Per il codice fiscale, y viene considerato una vocale?

--
David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/
Posted by ilgu G. (ilgu)
on 2013-01-24 16:36
Sapevo fosse una semiconsonante, ma onestamente non saprei come viene 
collocata, devo informarmi :)
Posted by gabriele renzi (Guest)
on 2013-01-24 16:38
(Received via mailing list)
2013/1/24 ilgu G. <gurnaz@live.it>:
> cognome = gets.chomp.downcase
>
> cognome = cognome.split("a","e","i","o","u");
>
> Ovviamente mi da problemi con gli argomenti del metodo.
> Ho usato split per dividere la data, e li nessun problema :(



aggiungo una cosa a quel che ti hanno scritto gli altri,,
Qua l'errore che ti dava , immagino, perch split prende un argomento
solo, il separatore.
Ma puoi comunque usarlo, passandogli come separatore la regexp per le
vocali, cio

    >> "gabriele".split(/[aeiou]/)
    => ["g", "br", "", "l"]

che per ti da un risultato che  comunque poco utile e  ti conviene
usare #gsub :)



--
twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com
Posted by Andrea Pavoni (apeacox)
on 2013-01-24 16:44
(Received via mailing list)
si, ci sono inoltre delle altre regole (che non ricordo), per esempio se 
un tizio si chiamasse: Pio Pope si applicano regole diverse perch non ci 
sono sufficienti consonanti :-)

A.


Il giorno 24/gen/2013, alle ore 16:36, ilgu G. <gurnaz@live.it> ha 
scritto:

> Sapevo fosse una semiconsonante, ma onestamente non saprei come viene
> collocata, devo informarmi :)
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

--
http://andreapavoni.com
Posted by Riccardo Tacconi (rtacconi)
on 2013-01-24 16:47
"riccardo".split(//).each {|char| puts char if "aieou".include?(char)}
Posted by ilgu G. (ilgu)
on 2013-01-24 16:48
gabriele renzi wrote in post #1093547:
> 2013/1/24 ilgu G. <gurnaz@live.it>:
>> cognome = gets.chomp.downcase
>>
>> cognome = cognome.split("a","e","i","o","u");
>>
>> Ovviamente mi da problemi con gli argomenti del metodo.
>> Ho usato split per dividere la data, e li nessun problema :(
>
>
>
> aggiungo una cosa a quel che ti hanno scritto gli altri,,
> Qua l'errore che ti dava , immagino, perch split prende un argomento
> solo, il separatore.
> Ma puoi comunque usarlo, passandogli come separatore la regexp per le
> vocali, cio
>
>     >> "gabriele".split(/[aeiou]/)
>     => ["g", "br", "", "l"]
>
> che per ti da un risultato che  comunque poco utile e  ti conviene
> usare #gsub :)
>
>
>
> --
> twitter: @riffraff
> blog (en, it): www.riffraff.info riffraff.blogsome.com
> work: circleme.com

Thanks! :)

Si, per l'algoritmo sto guardando su wikipedia :D
Ero partito bello sparato, ma mi conviene farmi pezzo per pezzo, perchè 
ogni componente ha le sue regole
Posted by David Welton (Guest)
on 2013-01-24 17:10
(Received via mailing list)
Posted by Stefano Pigozzi (Guest)
on 2013-01-24 17:13
(Received via mailing list)
2013/1/24 ilgu G. <gurnaz@live.it>
>
> cognome = gets.chomp.downcase
> cognome = cognome.split("a","e","i","o","u")
>

Il modo idiomatico per splittare una stringa in Ruby sulla base di un
pattern qualunque  il metodo scan della standard library. Ad esempio:

"stringa".scan(/[^aeiou]{1}/)

Ciao
Stefano
Posted by gabriele renzi (Guest)
on 2013-01-24 17:24
(Received via mailing list)
2013/1/24 Stefano Pigozzi <stefano.pigozzi@gmail.com>:
> 2013/1/24 ilgu G. <gurnaz@live.it>
>>
>> cognome = gets.chomp.downcase
>> cognome = cognome.split("a","e","i","o","u")
>>
>
> Il modo idiomatico per splittare una stringa in Ruby sulla base di un
> pattern qualunque  il metodo scan della standard library. Ad esempio:
>
> "stringa".scan(/[^aeiou]{1}/)

perch {1} ?
Sar che non son tanto sveglio, ma penso non serva.



--
twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com
Posted by Stefano Pigozzi (Guest)
on 2013-01-24 17:35
(Received via mailing list)
2013/1/24 gabriele renzi <rff.rff@gmail.com>

> 2013/1/24 Stefano Pigozzi <stefano.pigozzi@gmail.com>:
> perch {1} ?
> Sar che non son tanto sveglio, ma penso non serva.


Sei sveglissimo, ho fatto di corsa :) {1}  superfluo per produrre
raggruppamenti di un solo carattere. E' invece carino per produrre 
gruppi
di n caratteri con {n}.
Posted by ilgu G. (ilgu)
on 2013-01-24 17:41
Cerco di destreggiarmi tra le risposte, anche se non è facile riuscire a
capire tutto al volo :D

Per il cognome ho fatto così, troppo articolato?

puts "Inserisci il tuo cognome: "
cognome = gets.chomp.downcase
cognome = cognome.gsub(/ /,'')
cognome_vocali = cognome.gsub(/[bcdfghyjlmnpqrstvwz]/,'')
cognome_consonanti = cognome.gsub(/[aeiou]/,'')
puts cognome_vocali
puts cognome_consonanti

if   cognome.length<3
     cognome_ok = cognome_consonanti + cognome_vocali + "xx"
     cognome_ok = cognome_ok.slice!(0..2)

  else
    if  cognome_consonanti.length < 3
        cognome_ok = cognome_consonanti + cognome_vocali
        cognome_ok = cognome_ok.slice!(0..2)

      else if
             cognome_ok = cognome_consonanti.slice!(0..2)
           end
    end


end

puts cognome_ok
gets
Posted by Sergio Berisso (Guest)
on 2013-01-24 18:04
(Received via mailing list)
Il giorno 24 gennaio 2013 17:41, ilgu G. <gurnaz@live.it> ha scritto:

> puts cognome_vocali
>
>
Non ho controllato la logica.

Comunque un piccolo consiglio :)

Per uno script al volo imparando ruby va bene.
Ma per fare un vero programma --> pensalo ad oggetti

Practical Object Oriented Design in Ruby http://goo.gl/RLa7P
Design Patterns in Ruby http://goo.gl/bCuLP

Meno if e pi class :)
http://matteo.vaccari.name/blog/archives/127

S.
Posted by ilgu G. (ilgu)
on 2013-01-24 18:24
Devo sviluppare la giusta mentalità giusta, sono più abituato a fare 
giri assurdi piuttosto che a "semplificarmi" la vita :(
Posted by Fabrizio Regini (freegenie)
on 2013-01-24 18:40
(Received via mailing list)
Sto recuperando un "plugin" che avevo fatto un paio d'anni fa per il 
calcolo del codice fiscale con Rails. Gli do una pulita e lo carico su 
github. Dubito che sia compatibile con la 3.2, ma a fini didattici pu 
essere interessante.

-f
Posted by Matteo Collina (Guest)
on 2013-01-25 13:40
(Received via mailing list)
Ti consiglio di studiare: http://pragprog.com/book/achbd/the-rspec-book
Ti spiega un modo  "sano" di lavorare.

Ciao,

Matteo


Il giorno 24 gennaio 2013 17:24, ilgu G. <gurnaz@live.it> ha scritto:
Posted by Sergio Berisso (Guest)
on 2013-01-25 13:48
(Received via mailing list)
Il giorno 25 gennaio 2013 13:39, Matteo Collina
<matteo.collina@gmail.com>ha scritto:

> Ti consiglio di studiare: http://pragprog.com/book/achbd/the-rspec-book
> Ti spiega un modo  "sano" di lavorare.
>

:-)

+1

Aggiungo
http://www.amazon.com/Test-Driven-Development-Kent...
http://www.growing-object-oriented-software.com/
http://www.amazon.com/Refactoring-Improving-Design...

Gli esempi non sono in ruby ma aiutano ;)

S.
Posted by Andrea Forni (Guest)
on 2013-01-25 14:30
(Received via mailing list)
2013/1/25 Sergio Berisso <sergio.berisso@gmail.com>

> > Ti consiglio di studiare: http://pragprog.com/book/achbd/the-rspec-book
> > Ti spiega un modo  "sano" di lavorare.
>
> +1
>

+1


> Aggiungo
> http://www.growing-object-oriented-software.com/


Questo libro, anche se  Java, mi sento di stra-consigliarlo: mi ha 
aperto
gli occhi sul TDD e sul come scrivere "buoni" test.

 Andrea
Posted by Luca P. (luca_p)
on 2013-01-25 14:47
(Received via mailing list)
E qualunque cosa dica un certo DHH, ignoralo. :-)
+1 per il TDD, ti cambia la vita!
--
Luca Pradovera
luca.pradovera@gmail.com
+39 346 4296868



Il giorno 24/gen/2013, alle ore 18:24, ilgu G. <gurnaz@live.it> ha 
scritto:
Posted by Sergio Berisso (Guest)
on 2013-01-25 14:53
(Received via mailing list)
Il giorno 25 gennaio 2013 14:46, Luca Pradovera
<luca.pradovera@gmail.com>ha scritto:

> E qualunque cosa dica un certo DHH, ignoralo. :-)
>

Che dice ?
Forse me lo sono perso.

Per DHH il TDD non serve ?

Che poi magari ci sono casi particolari dove non si usa, non siamo
integralisti
:-)


> +1 per il TDD, ti cambia la vita!
>

Sui progetti da mantenere (a lungo) nel tempo decisamente consigliato.

S.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.