Solució al repartidor de subvencions
Sun, Dec 27, 2015He decidit provar com es pot resoldre el problema de repartir subvencions en Groovy i realment la quantitat de línies és molt menor que en Java …
Faig servir una expressió regular inicial per separar el nom del nen, que no interessa per res, i la resta ho faig com els alumnes ho intenten fer tot (amb split)
def regex = ~/^([^:]+): (.*)/
Després només cal separar els personatges entre ells a partir del guió (-):
def quiRegala = regals.split(" - ").
Per cada línia miro quin personatge li ha portat regals i l’incremento la quantitat de regals (en el mapa personatges). Per comptar els regals només cal comptar les comes :-)
int numregals = ((personatge[1] =~ /,/).count) + 1
Queda una cosa com aquesta:
def regex = ~/^([^:]+): (.*)/
def personatges = [:]
int totalRegals = 0
new File('subvencions4.txt').eachLine { line ->
(line =~ regex).each { tot2, nen, regals ->
def quiRegala = regals.split(" - ").each {
def personatge = it.split(":")
def nom = personatge[0]
int numregals = ((personatge[1] =~ /,/).count) + 1
if (!personatges.containsKey(nom)) {
personatges[nom] = numregals
} else {
personatges[nom] += numregals
}
totalRegals += numregals
}
}
}
println personatges
personatges.each { println "${it.key} : ${it.value/totalRegals*100}" }
M’encanta la idea dels closures de Groovy i la senzillesa en el tractament de llistes i mapes que proporciona