Skip to content

Exercise 18 - Strings and Objects 2

// Der Märchenonkel kommt zu Ihnen mit einer Bitte.
// Es fällt ihm schwer sich immer wieder neue Geschichten auszudenken.
// Stattdessen möchte er ein Programm nutzen, um bestehende Geschichten abzuändern.
// Das Programm soll eine bestehende Geschichte in Form eines Textes (Datentyp string)
// einlesen. Außerdem bekommt es eine Reihe von Ersetzungen, die in dem Text durchgeführt werden sollen.
// Die Ersetzungen haben die Form "alter Text/neuer Text".
// Alle Vorkomnisse von "alter Text" in der Geschichte sollen mit "neuer Text" ersetzt werden.
// Es können mehrere Ersetzungen angegeben werden indem mehrere Ersetzungen jeweils mit
// Zeilenumbruch (\n) getrennt angeführt werden.
// Schreiben Sie eine Funktion storyGen(text, replacements)
// die den Text, sowie die durchzuführenden Ersetzungen als Parameter bekommt
// und einen neuen Text zurückliefert in dem die Ersetzungen durchgeführt wurden.
// Damit Sie Ihr Programm schöner strukturieren, schreiben Sie außerdem eine
// Hilfsfunktion readReplacements(replacements), das die Ersetzungen einliest
// und in ein Array aus Objekten umwandelt, mit dem die Funktion storyGen besser arbeiten kann.
// Wenn zum Beispiel diese Ersetzungen eingelesen werden:
// let replacements = "warm/kalt\noben/unten";
// wird daraus dieses Array:
// [ {before: "warm", after: "kalt"}, {before: "oben", after: "unten"}]
let data =
"Es war ein schöner Morgen, als ein alter Mann bei Bilbo anklopfte. " +
"Wir wollen hier keine Abenteuer, vielen Dank, wimmelte er den ungebetenen " +
"Besucher ab. Überhaupt, wie heißen Sie eigentlich? - Ich bin Gandalf, antwortete dieser." +
"Und damit dämmerte es Bilbo: Das Abenteuer hatte schon begonnen!";
let replacements = `Bilbo/Iron Man
Morgen/Abend
Gandalf/Groot`;
function readReplacements(replacements) {
// TODO
}
function storyGen(text, replacements) {
let rep = readReplacements(replacements);
// TODO
}
console.log(storyGen(data, replacements));
///////////////////////////////////////
// Erstelle eine JavaScript Funktion, die bestimmte Wörter in einem Text
// durch *-Zeichen zensiert.
// Die Funktion erhält den Text, sowie ein Array mit dem verbotenen Wörtern.
// filterMessage(message, blockedWords)
// Die verbotenen Wörter sollen durch eine Reihe von *-Zeichen ersetzt werden
// die genau so lange ist, wie das verbotene Wort.
const blockedWords = ["Hass", "Gewalt", "Diskriminierung"];
const message = "Ich bin gegen Hass und Gewalt, aber für Liebe und Frieden.";
// Gewünschte Ausgabe:
// "Ich bin gegen **** und ****** aber für Liebe und Frieden."
function filterMessage(message, blockedWords) {
// TODO
}
console.log(filterMessage(message, blockedWords));
////////////////////////////////////////////
// Erstelle eine Funktion, die überprüft wie stark ein Passwort ist.
// Um das zu ermitteln werden Punkte vergeben.
// Wenn das Passwort eine bestimmte Eigenschaft hat, erhält es dafür folgende Punkte:
// Das Passwort enthält Kleinbuchstaben: +1 Punkt
// Das Passwort enthält Großbuchstaben: +1 Punkt
// Das Passwort enthält Sonderzeichen: +1 Punkt
// Das Passwort ist mindestens 6 Zeichen lang: +1 Punkt
// Das Passwort ist mindestens 8 Zeichen lang: +1 Punkt
// Die folgende Datenstruktur enthält jeweils das Minimum an benötigten Punkten,
// für den jeweiligen Text, der von der Funktion als Bewertung zurückgegeben wird.
const passwordScore = [
{ min: 4, score: "excellent" },
{ min: 3, score: "good" },
{ min: 2, score: "ok" },
{ min: 0, score: "weak" },
];
// Folgende Auflistungen können verwendet werden.
const lowerChars = [
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"ä",
"ö",
"ü",
"ß",
];
const upperChars = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"Ä",
"Ö",
"Ü",
];
const specialChars = [
"!",
'"',
"#",
"$",
"%",
"&",
"'",
"(",
")",
"*",
"+",
",",
"-",
".",
"/",
":",
";",
"<",
"=",
">",
"?",
"@",
"[",
"\\",
"]",
"^",
"_",
"`",
"{",
"|",
"}",
"~",
];
function passwordStrength(pwd) {
// TODO
}
console.log(passwordStrength("hugo"));
console.log(passwordStrength("Hugo"));
console.log(passwordStrength("Hugo!"));
console.log(passwordStrength("HugoHugo!"));
////////////////////////////////////////////
// Schreibe eine Funktion analyseText(text, keywords)
// Die Funktion soll analysieren wie oft bestimmte Schlüsselworter (keywords)
// einem Text vorkommen.
// Bsp:
const text =
"In diesem Übungs-Text sollen bestimmte Schlüsselwörter wie JavaScript, Übung und Online gesucht werden und gezählt werden, wie oft sie vorkommen.";
const keywords = ["JavaScript", "Übung", "Online"];
// Gewünschtes Ergebnis:
// [
// { word: 'JavaScript', count: 1 },
// { word: 'Übung', count: 2 },
// { word: 'Online', count: 1 }
// ]
function analyseText(text, keywords) {
// TODO
}
const analyseResult = analyseText(text, keywords);
console.log(analyseResult);
////////////////////////////////////////////////////
// Eine URL besteht aus mehreren Bestandteilen.
// Am Beispiel der URL: "http://www.google.com:80/search"
// "http" ist das Protokoll (protocol).
// Es steht am Beginn und endet beim ersten Doppelpunkt
// "www.goole.com" ist der Server (server).
// Es steht nach dem ersten Doppelpunkt gefolgt von zwei Schrägstrichen
// und endet beim zweiten Doppelpunkt.
// "80" ist der Port (port).
// Es steht nach dem zweiten Doppelpunkt und endet beim ersten
// Schrägstrich nach dem zweiten Doppelpunkt.
// "/search" ist der Pfad (path).
// Es Beginnt beim ersten Schrägstrich nach dem zweiten Doppelpunkt.
// Schreibe eine Funktion, die eine beliebige URL einliest
// und in ein Objekt umwandelt, das den folgenden Aufbau hat:
// {
// protocol: "http",
// server: "www.google.com",
// port: "80",
// path: "search"
// }
function parseUrl(url) {
// TODO
}
const url = "http://www.google.com:80/search";
let urlParts = parseUrl(url) || {};
console.log(
"Protokoll:",
urlParts.protocol,
"Server:",
urlParts.server,
"Port:",
urlParts.port,
"Path:",
urlParts.path
);