POO-ITBA / 2024_01

Consultas 1C 2024
0 stars 0 forks source link

Ejercicio 2 Segundo Parcial 2022 2C #19

Open Martin192003 opened 3 months ago

Martin192003 commented 3 months ago

Hola profe, qué tal? Hablo para consultarle si esta resolución del ejercicio que hice es correcta o si hay algo mal. Lo probé con el tester y me devuelve lo que tendría que devolver, pero vi que lo que hice es distinto a lo que se plantea en las resoluciones, así que quería consultarlo. Muchas gracias y disculpe las molestias.


public class MultilingualDictionary{
    private final Language lenguaje;
    private final Map<String, Map<Language,String>> mapa=new HashMap<>();

    public MultilingualDictionary(Language lenguaje){
        this.lenguaje=lenguaje;
    }

    public MultilingualDictionary addTranslation(String word, Language toTranslate, String translation){
        if(toTranslate.equals(this.lenguaje)){
            throw new IllegalArgumentException(String.format("Cannot add %s translations", toTranslate));
        }
        if(mapa.getOrDefault(word, new HashMap<>()).containsKey(toTranslate)){
            return this;
        }
        mapa.putIfAbsent(word, new EnumMap<>(Language.class));
        mapa.get(word).putIfAbsent(toTranslate,translation);
        return this;
    }

    public String getTranslation(String word, Language idioma){
        if(!mapa.getOrDefault(word, new HashMap<>()).containsKey(idioma)){
            throw new IllegalArgumentException(String.format("No %s translation for %s",idioma, word));
        }
        return mapa.getOrDefault(word, new HashMap<>()).get(idioma);
    }

    public int translationsCount(Language idioma){
        int resp=0;
        for(String word: mapa.keySet()){
            if(mapa.get(word).containsKey(idioma)){
                resp++;
            }
        }
        return resp;
    }

    public int removeTranslations(Language idioma){
        int resp=translationsCount(idioma);
        for(String word: mapa.keySet()){
            if(mapa.get(word).containsKey(idioma)){
                mapa.get(word).remove(idioma);
            }
        }
        return resp;
    }

}
fmeola commented 3 months ago

Hola @Martin192003 La implementación no es eficiente porque tus implementaciones de translationsCount y removeTranslations hacen recorridos mientras que en la solución publicada no. Está muy bien que hayas usado mapa de mapas pero es importante cuál es la clave del primer mapa y cuál es la clave del segundo porque te condiciona a que algunas operaciones sean directas y otras hagan recorridos. Vos tenés que ver que te piden en el ejercicio y ajustar tu implementación para optimizar lo que te piden.

Martin192003 commented 3 months ago

Perfecto profe, ahí corrijo eso entonces, muchas gracias!!