Dag: 4
SprÄk: Javascript.
FortsÀtter pÄ temat C i Javascript. Dagens övning var inte svÄr men en aning omstÀndig. Hade nog egentligen föredragit en aning mer komplicerade, men kortare, övningar. Typ https://www.codewars.com/. FortsÀtter det sÄhÀr lÀr snart uppgifterna ta lite mer tid Àn jag har möjlighet att lÀgga, tyvÀrr.
Vore vÀldigt intressant att se koden frÄn de som löst den hÀr uppgiften pÄ sex minuter...
(function () {
startCode();
function startCode() {
fetchInput();
}
async function fetchInput() {
var response = await fetch('input.txt');
var text = await response.text();
calculatePartOne(text);
calculatePartTwo(text);
}
function containsKey(passport, key) {
for (var i = 0; i < passport.length; i++) {
if (passport[i].startsWith(key)) { return true; }
}
return false;
}
function containsValidKey(passport, key) {
for (var i = 0; i < passport.length; i++) {
if (passport[i].startsWith(key)) {
var data = passport[i].split(":");
if (key == "byr:" && parseInt(data[1]) >= 1920 && parseInt(data[1]) <= 2002) {
return true;
}
else if (key == "iyr:" && parseInt(data[1]) >= 2010 && parseInt(data[1]) <= 2020) {
return true;
}
else if (key == "eyr:" && parseInt(data[1]) >= 2020 && parseInt(data[1]) <= 2030) {
return true;
}
else if (key == "hgt:") {
var number = data[1].substring(0, data[1].length - 2);
var unit = data[1].substring(data[1].length - 2);
if (unit == "cm") {
if (parseInt(number) >= 150 && parseInt(number) <= 193) {
return true;
}
}
else if (unit == "in") {
if (parseInt(number) >= 59 && parseInt(number) <= 76) {
return true;
}
}
}
else if (key == "hcl:") {
var regex = /^#[0-9a-f]{6}$/g;
if (regex.test(data[1])) {
return true;
}
}
else if (key == "ecl:" &&
(data[1] == "amb" ||
data[1] == "blu" ||
data[1] == "brn" ||
data[1] == "gry" ||
data[1] == "grn" ||
data[1] == "hzl" ||
data[1] == "oth")) {
return true;
}
else if (key == "pid:") {
var regex = /^[0-9]{9}$/g;
if (regex.test(data[1])) {
return true;
}
}
}
}
return false;
}
function calculatePartOne(text) {
var sequence = text.split('\n\n');
var passport = [];
var okPassports = 0;
for (var i = 0; i < sequence.length; i++) {
if (sequence[i].length > 0) {
passport[i] = sequence[i].split(/[\s]+/);
if (containsKey(passport[i], "byr:") &&
containsKey(passport[i], "iyr:") &&
containsKey(passport[i], "eyr:") &&
containsKey(passport[i], "hgt:") &&
containsKey(passport[i], "hcl:") &&
containsKey(passport[i], "ecl:") &&
containsKey(passport[i], "pid:")) {
okPassports++;
}
}
}
console.log("Part one ok passports: " + okPassports);
}
function calculatePartTwo(text) {
var sequence = text.split('\n\n');
var passport = [];
var okPassports = 0;
for (var i = 0; i < sequence.length; i++) {
if (sequence[i].length > 0) {
passport[i] = sequence[i].split(/[\s]+/);
if (containsValidKey(passport[i], "byr:") &&
containsValidKey(passport[i], "iyr:") &&
containsValidKey(passport[i], "eyr:") &&
containsValidKey(passport[i], "hgt:") &&
containsValidKey(passport[i], "hcl:") &&
containsValidKey(passport[i], "ecl:") &&
containsValidKey(passport[i], "pid:")) {
okPassports++;
}
}
}
console.log("Part two valid passports: " + okPassports);
}
}
)();