Übungen / Aufgaben zu PHP
0 Lösungen
Ziffern Tag und Monat im Jahr
Ermittle für die Jahre 2001 bis 2022 jedes Datum, in dem die Ziffern der Felder Tag und Monat mit dem Feld Jahr übereinstimmen.
Die Lösung für das Jahr 2001 lautet:
02.01. -> 2001
20.01. -> 2001
01.02. -> 2001
10.02. -> 2001
02.10. -> 2001
20.10. -> 2001
Die Lösung für das Jahr 2001 lautet:
02.01. -> 2001
20.01. -> 2001
01.02. -> 2001
10.02. -> 2001
02.10. -> 2001
20.10. -> 2001
0 Lösungen
n kleinste Paarsummen als Array
Gegeben sind 2 sortierte Arrays (arr1, arr2) gleicher oder unterschiedlicher Länge
und eine Zahl (n) welche die maximale Anzahl der kleinsten auszugebenden Paarsummen vorgibt.
Jedes Array kann 1 bis zu 10.000 Zahlen der Größe +-1.000.000 beinhalten.
Der Wert für n soll nicht weniger als 1 und nicht mehr als 1.000 betragen.
Ziel soll es sein, die n kleinsten aller möglichen Paarsummen als Array zurückzugeben.
Beispiele:
arr1 = [1,2,3]; arr2 = [2,3,7]; n = 3
Lösung: [[1,2], [1,3], [2,2]], denn [1,2], [1,3], [1,7], [2,2], [2,3], [2,7], [3,2], [3,3], [3,7]
Summen: 3, 4, 8, 4, 5, 9, 5, 6, 10 => 3, 4, 4
arr1 = [1,1,2]; arr2 = [1,2,3]; n = 2
Lösung: [[1,1], [1,1]], denn [1,1], [1,2], [1,3], [1,1], [1,2], [2,3], [2,1], [2,2], [2,3]
Summen: 2, 3, 4, 2, 3, 5, 3, 4, 5
arr1 = [1,2]; arr2 = [-5]; n = 3
Lösung: [[1,-5], [2,-5]]
Summen: -4, -3
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Je nach Programmiersprache könne auch Vektoren, Listen, etc. verwendet werden.
Viel Spaß
und eine Zahl (n) welche die maximale Anzahl der kleinsten auszugebenden Paarsummen vorgibt.
Jedes Array kann 1 bis zu 10.000 Zahlen der Größe +-1.000.000 beinhalten.
Der Wert für n soll nicht weniger als 1 und nicht mehr als 1.000 betragen.
Ziel soll es sein, die n kleinsten aller möglichen Paarsummen als Array zurückzugeben.
Beispiele:
arr1 = [1,2,3]; arr2 = [2,3,7]; n = 3
Lösung: [[1,2], [1,3], [2,2]], denn [1,2], [1,3], [1,7], [2,2], [2,3], [2,7], [3,2], [3,3], [3,7]
Summen: 3, 4, 8, 4, 5, 9, 5, 6, 10 => 3, 4, 4
arr1 = [1,1,2]; arr2 = [1,2,3]; n = 2
Lösung: [[1,1], [1,1]], denn [1,1], [1,2], [1,3], [1,1], [1,2], [2,3], [2,1], [2,2], [2,3]
Summen: 2, 3, 4, 2, 3, 5, 3, 4, 5
arr1 = [1,2]; arr2 = [-5]; n = 3
Lösung: [[1,-5], [2,-5]]
Summen: -4, -3
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Je nach Programmiersprache könne auch Vektoren, Listen, etc. verwendet werden.
Viel Spaß
0 Lösungen
Ziffern durch Kleinbuchstaben ersetzen (right-shifting)
Gegeben ist ein String (Text) bestehend aus Kleinbuchstaben und den Ziffern 0 bis 9.
Die Buchstaben stehen an den geraden und die Ziffern an den ungeraden Stellen (zero-based).
Ziel soll es sein, jede Ziffer durch einen Buchstaben zu ersetzen, indem der vorangestellte Buchstabe
um den Wert der Ziffer gemäß Alphabet nach rechts verschoben wird (right-shifting).
Die Buchstaben bleiben dabei erhalten.
Bei der Erstellung des Ausgangs-Strings soll darauf geachtet werden, dass das Verschieben nicht über 'z' hinausgeht.
Beispiele:
s = "a1c1e1"
Lösung: "abcdef", denn
a >> 1 -> b
c >> 1 -> d
e >> 1 -> f
s = "a4b2c1d5"
Lösung: "aebdcddi", denn
a >> 4 -> e
b >> 2 -> d
c >> 1 -> d
d >> 5 -> i
Erstelle eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Wer möchte kann die Aufgabe dahingehend erweitern, dass über 'z' hinaus
verschoben wird und das Alphabet von vorne beginnt.
Viel Spaß
Die Buchstaben stehen an den geraden und die Ziffern an den ungeraden Stellen (zero-based).
Ziel soll es sein, jede Ziffer durch einen Buchstaben zu ersetzen, indem der vorangestellte Buchstabe
um den Wert der Ziffer gemäß Alphabet nach rechts verschoben wird (right-shifting).
Die Buchstaben bleiben dabei erhalten.
Bei der Erstellung des Ausgangs-Strings soll darauf geachtet werden, dass das Verschieben nicht über 'z' hinausgeht.
Beispiele:
s = "a1c1e1"
Lösung: "abcdef", denn
a >> 1 -> b
c >> 1 -> d
e >> 1 -> f
s = "a4b2c1d5"
Lösung: "aebdcddi", denn
a >> 4 -> e
b >> 2 -> d
c >> 1 -> d
d >> 5 -> i
Erstelle eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Wer möchte kann die Aufgabe dahingehend erweitern, dass über 'z' hinaus
verschoben wird und das Alphabet von vorne beginnt.
Viel Spaß
0 Lösungen
Stände von Koordinaten (Standort) im Umkreis von x km ermitteln
Erstelle eine Funktion, eventuell mit Hilfe einer Datenbank, welche über die Parameter Location (Latitude & Longitude) und Radius in Kilometer alle Städte in dem Umkreis mit den Koordinaten ausgibt.
Oder eine Liste mit den Koordinaten in diesem Umkreis. Somit können dann die Städte in einer GeoDatenbank ermittelt werden.
Oder eine Liste mit den Koordinaten in diesem Umkreis. Somit können dann die Städte in einer GeoDatenbank ermittelt werden.
1 Lösung
String abwechselnd neu anordnen
Gegeben ist ein String (Text) bestehend aus Kleinbuchstaben und Ziffern.
Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln.
D.h., auf einen Kleinbuchstaben darf kein Kleinbuchstabe und auf eine Ziffer keine weitere Ziffer folgen.
Die Reihenfolge der Zeichen-Gruppen (Kleinbuchstaben bzw. Ziffern) darf nicht verändert werden.
Sind beide Zeichengruppen gleich lang, ist es egal mit welchem Zeichen begonnen wird.
Gibt es keine Lösung, soll ein Leer-String zurückgegeben werden.
Beispiele:
s = "train1234"
Lösung: "t1r2a3i4n"
s = "1234567"
Lösung: "", da nur Ziffern
s = "abcdefg"
Lösung: "", da nur Buchstaben
s = "abcdef123"
Lösung: "", nicht abwechselnd möglich
s = "abcd1234"
Lösung: "a1b2c3d4" oder "1a2b3c4d"
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Viel Spaß
Ziel ist es diesen String neu anzuordnen, sodass sich Kleinbuchstaben und Ziffern abwechseln.
D.h., auf einen Kleinbuchstaben darf kein Kleinbuchstabe und auf eine Ziffer keine weitere Ziffer folgen.
Die Reihenfolge der Zeichen-Gruppen (Kleinbuchstaben bzw. Ziffern) darf nicht verändert werden.
Sind beide Zeichengruppen gleich lang, ist es egal mit welchem Zeichen begonnen wird.
Gibt es keine Lösung, soll ein Leer-String zurückgegeben werden.
Beispiele:
s = "train1234"
Lösung: "t1r2a3i4n"
s = "1234567"
Lösung: "", da nur Ziffern
s = "abcdefg"
Lösung: "", da nur Buchstaben
s = "abcdef123"
Lösung: "", nicht abwechselnd möglich
s = "abcd1234"
Lösung: "a1b2c3d4" oder "1a2b3c4d"
Schreibe eine Methode/Funktion, die obige Aufgabenstellung umsetzt.
Viel Spaß
0 Lösungen
String-Vergleich mit Rücktaste/Backspace
Gegeben sind zwei Strings (Texte) bestehend aus einer Anzahl (<100) Kleinbuchstaben (a-z) und
Backspaces (Rücktastenzeichen) welche hier als Hashtag/Raute (#) dargestellt werden.
Dabei können die Strings unterschiedlicher Länge sein.
Ziel soll es sein zu überprüfen, ob die beiden Strings (s1, s2) identisch sind.
Beispiele:
s1 = ab#c
s2 = ae#c
Lösung: true ("ac" == "ac"), denn Backspace löscht in s1 das b und in s2 das e
s1 = ab##
s2 = e#f#
Lösung: true ("" == ""), denn Backspace löscht in s1 zuerst das b und dann das a und in s2 zuerst das e und dann das f
s1 = a#c
s2 = ac#
Lösung: false ("c" != "a") , denn Backspace löscht in s1 das a und in s2 das c
s1 = ####
s2 = ###a#
Lösung: true
s1 = abcdefg
s2 = abcder#fr#g
Lösung: true
Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
Backspaces (Rücktastenzeichen) welche hier als Hashtag/Raute (#) dargestellt werden.
Dabei können die Strings unterschiedlicher Länge sein.
Ziel soll es sein zu überprüfen, ob die beiden Strings (s1, s2) identisch sind.
Beispiele:
s1 = ab#c
s2 = ae#c
Lösung: true ("ac" == "ac"), denn Backspace löscht in s1 das b und in s2 das e
s1 = ab##
s2 = e#f#
Lösung: true ("" == ""), denn Backspace löscht in s1 zuerst das b und dann das a und in s2 zuerst das e und dann das f
s1 = a#c
s2 = ac#
Lösung: false ("c" != "a") , denn Backspace löscht in s1 das a und in s2 das c
s1 = ####
s2 = ###a#
Lösung: true
s1 = abcdefg
s2 = abcder#fr#g
Lösung: true
Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
0 Lösungen
Reihenfolgeabhängige Teilsequenz(en)
Gegeben ist ein String (Text) der ausschließlich aus Kleinbuchstaben besteht.
Es soll überprüft werden, ob eine Sequenz - auch in Teilen - reihenfolgeabhängig im gegebenen String vorhanden ist.
Eine Teilsequenz kann auch aus nur einem einzelnen Zeichen bestehen.
Die Sequenz muss immer in der Gesamtheit überprüft werden (nicht nur Teile der Sequenz).
Beispiele:
Text = "abcdefg"
Sequenz ="ace"
Lösung: true; "abcdefg"
Text = "abcdefg"
Sequenz = "aec"
Lösung: false; alle Zeichen vorhanden, aber nicht in der richtigen Reihenfolge
Text = "abcdefg"
Sequenz = "atg"
Lösung: false; "t" nicht vorhanden
Schreibe eine Funktion/Methode, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
Es soll überprüft werden, ob eine Sequenz - auch in Teilen - reihenfolgeabhängig im gegebenen String vorhanden ist.
Eine Teilsequenz kann auch aus nur einem einzelnen Zeichen bestehen.
Die Sequenz muss immer in der Gesamtheit überprüft werden (nicht nur Teile der Sequenz).
Beispiele:
Text = "abcdefg"
Sequenz ="ace"
Lösung: true; "abcdefg"
Text = "abcdefg"
Sequenz = "aec"
Lösung: false; alle Zeichen vorhanden, aber nicht in der richtigen Reihenfolge
Text = "abcdefg"
Sequenz = "atg"
Lösung: false; "t" nicht vorhanden
Schreibe eine Funktion/Methode, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
1 Lösung
Buchstabenkiste (Wörter bilden)
In einer fiktiven Kiste befinden sich eine vorgegebene Menge an Steinen mit aufgedruckten Kleinbuchstaben (a-z).
Nun soll geprüft werden, ob sich ein vorgegebenes (auch fiktives) Wort mit den in der Kiste vorhandenen Steinen bilden lässt.
Sowohl das Wort als auch der Inhalt der Kiste werden als String (Text) übergeben.
Beispiele:
Wort = "mama"; Kiste = "mneamna"
Lösung: true
Wort = "papa"; Kiste = "aapq"
Lösung: false
Wort = "aabaacbaacbb"; Kiste = "bbaabaaccaaa"
Lösung: false
Achtung: die Wörter sollen aus bis zu 10.000 Zeichen (Kleinbuchstaben) bestehen können.
Erstelle eine Methode/Funktion, die für obige Aufgabenstellung true/false als Ergebnis liefert.
Viel Spaß
Nun soll geprüft werden, ob sich ein vorgegebenes (auch fiktives) Wort mit den in der Kiste vorhandenen Steinen bilden lässt.
Sowohl das Wort als auch der Inhalt der Kiste werden als String (Text) übergeben.
Beispiele:
Wort = "mama"; Kiste = "mneamna"
Lösung: true
Wort = "papa"; Kiste = "aapq"
Lösung: false
Wort = "aabaacbaacbb"; Kiste = "bbaabaaccaaa"
Lösung: false
Achtung: die Wörter sollen aus bis zu 10.000 Zeichen (Kleinbuchstaben) bestehen können.
Erstelle eine Methode/Funktion, die für obige Aufgabenstellung true/false als Ergebnis liefert.
Viel Spaß
0 Lösungen
Suche nach kreuzenden Linien beim Rundreiseproblem
Beim Rundreiseproblem (auch Traveling Salesman Problem (TSP) genannt) muss ein Rundreisender nacheinander N Orte besuchen ohne einen einzigen zweimal anzufahren. Die letzte Reiselinie soll ihn genau an seinen Start(Heimat)ort zurückführen. Gesucht ist der insgesamt kürzeste Reiseweg für die Runde.
In Bild 1 sind die zu besuchenden Orte schematisch durch blauer Kreise gekennzeichnet und die Reisestrecke durch einen roten Geradenzug. Es wird angenommen, dass es unabhängig von der Lage (den Koordinaten) der (hier 12) blauen Kreise keine Wegekreuzungen beim kürzesten Reiseweg geben kann. Ob das auch bereits mathematisch bewiesen oder nur eine Vermutung ist, entzieht sich meiner Kenntnis [ich wäre für einen entsprechenden Hinweis von einem mathematischen Fachmann sehr dankbar].
Wir wollen diese Annahme durch ein Simulationsprogramm zu widerlegen versuchen, d. h. Ortslagekonstellationen suchen, bei denen der kürzeste Reiseweg mindstens zwei Teilstrecken einhält, die sich kreuzen.
Da es bei N unterschiedlichen Orten insgesamt 0.5 * (N - 1)! verschiedene Rundreisewege der besagten Art gibt, ist man mit N >> 10 sehr schnell am Ende seiner Rechenkunst (selbst mit Hochleistungsrechnern). Es soll für die Simulation daher N maximal 12 sein, aber mindestens 4. Bei N = 4 kann man einfach zeigen, dass eine Rundreise mit Wegekreuzung immer länger ist als der einzige Weg ohne Kreuzung. Aber, gilt das auch für N > 4?
Die Kreuzungsfreiheit kann unter Nutzung der Lösung von Aufgabe Nr. 390 (bei c#) (Schnittpunkt zweier Geraden endlicher Länge) nachgewiesen werden. Insgesamt sollen etwa 1.000 zufällige Ortslagekonstellationen der N Orte erzeugt und hinsichtlich ev. vorhandener Kreuzungen untersucht werden.
Viel Spaß!
In Bild 1 sind die zu besuchenden Orte schematisch durch blauer Kreise gekennzeichnet und die Reisestrecke durch einen roten Geradenzug. Es wird angenommen, dass es unabhängig von der Lage (den Koordinaten) der (hier 12) blauen Kreise keine Wegekreuzungen beim kürzesten Reiseweg geben kann. Ob das auch bereits mathematisch bewiesen oder nur eine Vermutung ist, entzieht sich meiner Kenntnis [ich wäre für einen entsprechenden Hinweis von einem mathematischen Fachmann sehr dankbar].
Wir wollen diese Annahme durch ein Simulationsprogramm zu widerlegen versuchen, d. h. Ortslagekonstellationen suchen, bei denen der kürzeste Reiseweg mindstens zwei Teilstrecken einhält, die sich kreuzen.
Da es bei N unterschiedlichen Orten insgesamt 0.5 * (N - 1)! verschiedene Rundreisewege der besagten Art gibt, ist man mit N >> 10 sehr schnell am Ende seiner Rechenkunst (selbst mit Hochleistungsrechnern). Es soll für die Simulation daher N maximal 12 sein, aber mindestens 4. Bei N = 4 kann man einfach zeigen, dass eine Rundreise mit Wegekreuzung immer länger ist als der einzige Weg ohne Kreuzung. Aber, gilt das auch für N > 4?
Die Kreuzungsfreiheit kann unter Nutzung der Lösung von Aufgabe Nr. 390 (bei c#) (Schnittpunkt zweier Geraden endlicher Länge) nachgewiesen werden. Insgesamt sollen etwa 1.000 zufällige Ortslagekonstellationen der N Orte erzeugt und hinsichtlich ev. vorhandener Kreuzungen untersucht werden.
Viel Spaß!
0 Lösungen
Erzeugung einer Entfernungstabelle
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig N unterschiedliche Punkte P1, P2 ... PN. Die XY-Punktkoordinaten seien in Meter bemaßt.
Man schreibe eine Funktion, die P1 ... PN als Input annimmt und als Rückgabe eine Entfernungstabelle als (Double) N x N - Matrix ausgibt. D. h. die Hauptdiagonale ist mit Null besetzt und die Matrix ist bzgl. dieser symmetrisch.
Viel Spaß!
Man schreibe eine Funktion, die P1 ... PN als Input annimmt und als Rückgabe eine Entfernungstabelle als (Double) N x N - Matrix ausgibt. D. h. die Hauptdiagonale ist mit Null besetzt und die Matrix ist bzgl. dieser symmetrisch.
Viel Spaß!
1 Lösung
Binärzahl enthält maximal eine Folge von Einsen
Eine als String (Text) dargestellte Binärzahl (0 und 1) soll dahingehend geprüft werden,
ob sie maximal eine Folge von Einsen enthält. Die Länge der Folge ist beliebig.
Dabei kann die Binärzahl auch vorangestellte Nullen enthalten.
Beispiele:
b = "1100"
Lösung: wahr => 1100 (1 Folge)
b = "1010"
Lösung: falsch => 1010 (2 Folgen)
b = "00111000"
Lösung: wahr => 00111000 (1 Folge)
b = "10000001"
Lösung: falsch => 10000001 (2 Folgen)
Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
ob sie maximal eine Folge von Einsen enthält. Die Länge der Folge ist beliebig.
Dabei kann die Binärzahl auch vorangestellte Nullen enthalten.
Beispiele:
b = "1100"
Lösung: wahr => 1100 (1 Folge)
b = "1010"
Lösung: falsch => 1010 (2 Folgen)
b = "00111000"
Lösung: wahr => 00111000 (1 Folge)
b = "10000001"
Lösung: falsch => 10000001 (2 Folgen)
Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.
Viel Spaß
0 Lösungen
Schnittpunkt zweier Geraden endlicher Länge
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig vier unterschiedliche Punkte P1, P2, P3 und P4. Gedanklich verbinde man P1 und P2 mit einer geraden Linie L12 sowie P3 und P4 mit einer geraden Linie L34.
Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4.
Viel Spaß!
Man schreibe eine Funktion, die als Rückgabewert ausgibt, ob sich L12 und L34 schneiden in Abhändigkeit von den Anfangs-/Endpunkten P1 ... P4.
Viel Spaß!