Vorstellungsgespräch

greenowa13

Neues Mitglied
Hallo Leute ich habe in 10 Tagen einen Vorstellungsgespräch in einem IT Firma mit null IT Kentnisse. Ich habe eine Aufgabe bekommen wo ich mich drauf vorbereiten soll , und ich möchte es mithilfe von Java lösen.... könnt ihr mir bitte helfen ?

Hier ist die Aufgabenstellung , die Importdatei ist zu lang aber ist genau wie auf dem Beispiel.

Validieren von Reisepässen:
Eine Importdatei enthält mehrere Datensätze (Reisepässe). Jeder Datensatz enthält mehrere Felder. Zuerst muss geprüft werden, welche der Datensätze überhaupt gültig sind.

Folgende Felder können in einem Importdatensatz enthalten sein:

byr (Birth Year)
iyr (Issue Year)
eyr (Expiration Year)
hgt (Height)
hcl (Hair Color)
ecl (Eye Color)
pid (Passport ID)
cid (Country ID)


Die Datensätze werden als Datei geliefert (Die Eingabe-Datei).
Jeder Datensatz wird durch eine Menge von Schlüssel:Wert Paaren dargestellt, welche durch Leerzeichen oder ein Zeilenende getrennt sind.
Datensätze an sich werden durch Leerzeilen getrennt.

Ein Datensatz ist gültig, wenn alle oben genannten Felder darin enthalten sind. Hier ist ein Beispiel des Inhalts einer Importdatei:

ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
byr:1937 iyr:2017 cid:147 hgt:183cm

iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
hcl:#cfa07d byr:1929

hcl:#ae17e1 iyr:2013
eyr:2024
ecl:brn pid:760753108 byr:1931
hgt:179cm

hcl:#cfa07d eyr:2025 pid:166559648
iyr:2011 ecl:brn hgt:59in


In dem Beispiel sind also 4 Datensätze enthalten. Davon ist nur der erste Datensatz gültig. Beim 2. Datensatz fehlt das Feld „hgt“. Beim 3. Datensatz fehlt das Feld „cid“ und beim 4. Datensatz fehlen die Felder „cid“ und „byr“.

Aufgabe:

Mit der angehängten Eingabe-Datei:

1. Wie viele gültige Datensätze sind darin enthalten?
2. Wie viele gültige Datensätze gibt es, wenn das Feld “cid“ optional ist, also enthalten sein darf, aber nicht muss?
3. Wie viele gültige Datensätze gibt es, wenn das Feld „cid“ nicht enthalten sein darf, also alle Datensätze mit diesem Feld ungültig sind (Um gültig zu sein, müssen natürlich trotzdem alle anderen Felder enthalten sein)?

Hinweise:

1. Es ist auch erlaubt, statt von der Datei einzulesen, einen statischen String mit dem Inhalt der Datei zu verwenden.
2. Es gibt insgesamt 279 Datensätze.
3. Bei Aufgabe 1 sind weniger als die Hälfte der Datensätze gültig. Aber es sind mehr als 100.
4. Bei Aufgabe 2 sind fast doppelt so viele Datensätze gültig, als in Aufgabe 1
5. Bei Aufgabe 3 sind (logischerweise) weniger Datensätze gültig als in Aufgabe 1. Es sind aber immer noch mehr als 100
 

M.L.

Top Contributor
In Kurzfassung geht es darum den Rechner (also eine Ansammlung elektrisch leitfähigen Materials) Resultate nach eigenen Vorstellungen liefern zu lassen (<- wobei das WIE durchaus einen hohen Änderungsgrad haben kann). Und "mit Leuten reden" tut man auch im VG: YT, thenativeweb, Playlist "Jobtalk" (Zettel und Stift mitnehmen und -geeignet- nutzen kann übrigens auch nicht schaden...)

I.Z. mit Java könnte man Schlagwörter wie BufferedReader, Streams, Regex, ...recherchieren
 

mihe7

Top Contributor
Hallo Leute ich habe in 10 Tagen einen Vorstellungsgespräch in einem IT Firma mit null IT Kentnisse. Ich habe eine Aufgabe bekommen wo ich mich drauf vorbereiten soll , und ich möchte es mithilfe von Java lösen.... könnt ihr mir bitte helfen ?
Was heißt "helfen"? Ist das eine Ausbildungsstelle?

Und was die Aufgabe betrifft: kannst Du einen Algorithmus schreiben? Also eine "Schritt für Schritt"-Anleitung (kein Code), nach der man das Problem notfalls auch per Hand lösen könnte?
 

Oneixee5

Top Contributor
Hallo Leute ich habe in 10 Tagen einen Vorstellungsgespräch in einem IT Firma mit null IT Kentnisse. Ich habe eine Aufgabe bekommen wo ich mich drauf vorbereiten soll , und ich möchte es mithilfe von Java lösen.... könnt ihr mir bitte helfen ?
Das wird dir nichts nützen. Du kannst nicht in 10 Tagen Java lernen und verstehen, inklusive der API's, Bibliotheken, Konzepte und und ...
Ich bezweifle, dass du in der Frist den Code verstehen, erklären, übersetzen und ausführen kannst. Ich denke es wäre besser, wenn du erst mal ein paar Grundlagen lernst und evtl. ein paar Kurse machst. Für Anfänger ist systematisches und verständliches Vorgehen wichtig. Auch Java wird, wie alles andere, immer komplexer, das schüttelt man nicht einfach so aus dem Ärmel.

Java:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;

public class Main {

    static class Passport {

        // @formatter:off
        private static final Set<String> REQUIRED_FIELDS =
                Set.of("byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid", "cid");
        private static final Set<String> REQUIRED_FIELDS_WITHOUT_CID =
                Set.of("byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid");
        // @formatter:on

        private Map<String, String> passportData;

        Passport(String rawPassportData) {
            this.passportData = convertToMap(Objects.requireNonNullElse(rawPassportData, "").trim());
        }

        @Override
        public String toString() {
            return this.passportData.toString();
        }

        private static Map<String, String> convertToMap(String rawPassportData) {
            Map<String, String> passportFields = new HashMap<>();
            String[] fields = rawPassportData.split("[ \n]");
            for (String field : fields) {
                // Inhalt von field wird hier nicht weiter geprüft! - mögliche Fehlerquelle!
                String[] keyValue = field.split(":");
                passportFields.put(keyValue[0], keyValue[1]);
            }
            return passportFields;
        }

        Set<String> getKeys() {
            return this.passportData.keySet();
        }

        boolean isValid() {
            return isValid(validate());
        }

        boolean isValid(Predicate<Passport> validator) {
            return validator.test(this);
        }

        // Ein Datensatz ist gültig, wenn alle Felder ("byr", "iyr", "eyr", "hgt",
        // "hcl", "ecl", "pid", "cid") darin enthalten sind.
        //
        // Es ist nicht angegeben, ob der Wert eines Feldes ungleich null oder "" sein
        // muss!
        // Es ist nicht angegeben, ob ob zusätzliche Felder enthalten sein dürfen.
        // Es ist nicht angegeben, ob Groß-/Kleinschreibung geprüft werden muss.
        // -> also wird das alles nicht berücksichtigt
        private static Predicate<Passport> validate() {
            return v -> v.getKeys().containsAll(REQUIRED_FIELDS);
        }

        static Predicate<Passport> validateWithOptionalCid() {
            return v -> v.getKeys().containsAll(REQUIRED_FIELDS_WITHOUT_CID);
        }

        static Predicate<Passport> validateWithoutCid() {
            return v -> v.getKeys().containsAll(REQUIRED_FIELDS_WITHOUT_CID) && !v.getKeys().contains("cid");
        }

    }

    public static void main(String[] args) {
        final String fileContent;
        try {
            fileContent = Files.readString(Paths.get("target/classes/data.txt"));
        } catch (IOException e) {
            System.err.println("Datei konnte nicht geöffnet werden!");
            e.printStackTrace();
            return;
        }

        List<Passport> passports = splitIntoPassports(fileContent);

        outputValidPassports(passports);
        outputValidPassportsWithOptionalCid(passports);
        outputValidPassportsWithoutCid(passports);

        passports.forEach(System.out::println);
    }

    private static List<Passport> splitIntoPassports(String content) {
        String[] lines = content.split("\\n\\h*\\n");
        List<Passport> result = new ArrayList<>();
        for (String line : lines) {
            result.add(new Passport(line));
        }
        return result;
    }

    private static void outputValidPassports(List<Passport> passports) {
        long validPassports = passports
                .stream()
                .filter(Passport::isValid)
                .count();
        System.out.format("Gültige Datensätze: %s%n", validPassports);
    }

    private static void outputValidPassportsWithOptionalCid(List<Passport> passports) {
        long validPassportsWithOptionalCid = passports
                .stream()
                .filter(p -> p.isValid(Passport.validateWithOptionalCid()))
                .count();
        System.out.format("Gültige Datensätze, wenn das Feld “cid“ optional ist: %s%n", validPassportsWithOptionalCid);
    }

    private static void outputValidPassportsWithoutCid(List<Passport> passports) {
        long validPassportsWithoutCid = passports
                .stream()
                .filter(p -> p.isValid(Passport.validateWithoutCid()))
                .count();
        System.out.format("Gültige Datensätze, wenn das Feld “cid“ nicht enthalten sein darf: %s%n",
                validPassportsWithoutCid);
    }

}

Ergebnis:
Code:
Gültige Datensätze: 1
Gültige Datensätze, wenn das Feld “cid“ optional ist: 2
Gültige Datensätze, wenn das Feld “cid“ nicht enthalten sein darf: 1
{hcl=#fffffd, iyr=2017, hgt=183cm, pid=860033327, byr=1937, ecl=gry, eyr=2020, cid=147}
{hcl=#cfa07d, iyr=2013, pid=028048884, byr=1929, ecl=amb, cid=350, eyr=2023}
{hcl=#ae17e1, iyr=2013, hgt=179cm, pid=760753108, byr=1931, eyr=2024, ecl=brn}
{hcl=#cfa07d, iyr=2011, hgt=59in, pid=166559648, eyr=2025, ecl=brn}
 

Neue Themen


Oben