DER Programmierwettbewerb 
Aufgaben

Hier findest du neben den Aufgaben der vergangenen Programmierwettbewerbe die Ergebnisse des letzten Coding Contest. Unser Dank geht an alle Teilnehmer, die sich der Herausforderung gestellt haben.

5. Coding Contest

Beim fünften Coding Contest konnten die Teilnehmer zwischen mehreren Kategorien und Aufgaben wählen.

 

Es standen zur Wahl:

 

PHP, Backend-Entwicklung für Apps und Java, Ruby oder C#.

 

In den Bereichen gab es unterschiedliche Aufgaben.

 

 

 

 

 

Kategorie PHP

Aufgabe der Kategorie PHP (powered by Netresearch)

 

Objektverwaltung mit Google Drive

Die Programmieraufgabe für den fünften Coding Contest im Bereich PHP-Entwicklung beschäftigt sich mit der Google Spreadsheets API sowie der Datenvisualisierung mittels eines Kartendienstes.

Ausgangslage

Eine sehr breit aufgestellte Agentur verwaltet schon seit vielen Jahren Objekte, die tageweise ausgeliehen werden können. Die Mitarbeiter sind nicht sehr bewandert im Umgang mit modernen Webapplikationen und möchten ihre Objekte gerne weiterhin mittels Kalkulationstabellen pflegen. Bisher konnten die Belegungsdaten nur telefonisch erfragt werden. Das soll sich nun ändern, alle Objekte sollen mit Standort und Belegungsstatus online verfügbar gemacht werden. Die Google Spreadsheets existieren bereits, unter den Mietobjekten befinden sich – ganz klassisch – Ferienwohnungen und Kraftfahrzeuge, aber auch Bohrmaschinen und Hundesitter. Allen Objekten ist gemein, dass sie durch eine Bezeichnung, Standortkoordinaten und Paare aus (Datum, Belegungsstatus) beschrieben werden können.

Aufgabe

Die Aufgabe ist in mehrere Meilensteine zerlegt. Für die Teilnahme genügt das Erreichen des ersten Meilensteins (“Basis”). Alle weiteren Features sind optional. Gern gesehen sind eigene Ideen. Insbesondere die Informations-Visualisierung lässt Spielraum für Kreativität.

Darstellung der Objekte auf einer Karte (Basis)

Grundlegende Aufgabe der Applikation ist es, die Daten aus dem Spreadsheet zu lesen, zu verarbeiten und auf einer Karte (OSM, Google Maps, Bing) darzustellen. Mindestens gefordert ist dabei die Anzeige der Objektbezeichnung sowie des Belegungsstatus des heutigen Tages.

Erweiterung Frontend

Interessant für den Benutzer der Applikation ist, welche Objekte an einem Ort zu einem bestimmten Datum verfügbar sind. Er sollte also (a) einen Ort / eine PLZ eingeben können, der dann in der Karte fokussiert wird. Zusätzlich sollte er (b) ein Datum oder einen Datumsbereich wählen können, woraufhin der Belegungsstatus der Objekte auf der Karte aktualisiert wird. Um das Grundrauschen zu minimieren, können außerdem (c) diejenigen Objekte auf der Karte per Umschalter ausgeblendet werden, die zu dem gewählten Zeitraum nicht verfügbar sind. Hilfreich für den Benutzer wäre auch, (d) Zusatzinformationen (Adresse, nächstes unbelegtes Datum oder ähnliches) zu den aktuell im Kartenausschnitt befindlichen Objekten in einer
nebenstehenden Tabelle anzuzeigen.

Schreibender Zugriff auf Spreadsheets

Eine weitere Ausbaustufe der Objektverwaltung beinhaltet eine einfache Buchung. Objekte, die für ein Datum als unbelegt markiert sind, sollen über das Web-Frontend als “belegt” markiert werden können. Im einfachsten Fall wird dabei das Belegungsstatus-Flag im Spreadsheet umgelegt. Optional können auch Zeitpunkt der Buchung oder Name des Buchenden via Frontend erfasst und in das Spreadsheet übertragen werden.

Anforderungen und Hinweise

Vorgegeben sind ausschließlich die Programmiersprache PHP für den API-Zugriff sowie der Einsatz eines öffentlichen Git-Repositorys zur Versionsverwaltung. Zwingend erforderlich ist nur der als “Basis” deklarierte Teil der Aufgabenstellung. An den weiteren Features kann sich der Teilnehmer nach Belieben und Interesse (auch partiell) bedienen.

 

Für die Bearbeitung steht dir das vorgefasste Spreadsheet als .ods zur Verfügung. Dieses lädst du dir in Google-Drive als Spreadsheet hoch und kannst damit arbeiten. Mit Abgabe deiner Lösung setzt du den Zugriff für das Dokument auf "Jeder, der über den Link verfügt" und stellst ihn uns in deiner Repository-URL mit zur Verfügung.

Bei Abgabe der Aufgabe ist die Repository-URL zu übermitteln. Wenn nicht selbsterklärend, sollte dort auch eine Installationsanleitung (README) zu finden sein. Hier können bei Bedarf auch sonstige Anmerkungen (Feature-Liste, Bedienungsanleitung, etc.) enthalten sein. Darüber hinaus ist zur Teilnahme die Wahl der Mittel völlig frei, Frameworks oder Bibliotheken können natürlich eingesetzt werden.

Kategorie Backend-Entwicklung für Apps

Aufgabe der Kategorie Backend-Entwicklung für Apps (powered by Apinauten GmbH)

 

Ausgangslage

 

Backend as a Service ist eine neue neue Technologie, die Entwicklungsprozesse beim Erstellen von Backends deutlich vereinfacht. Für das Entwickeln und Hosten von Backends waren bis vor kurzem noch Spezialkenntnisse in verschiedenen Gebieten notwendig. Backend as a Service ermöglicht die Konfiguration und das Hosten von Backends über eine leicht zu bedienende Web-Oberfläche. Häufig benötigte Fuktionalitäten im Backend werden von BaaS-Anbietern als Module zur Verfügung gestellt. Beispiele für solche zusätzlichen Module sind:

  • Senden von Push-Mitteilungen
  • Importieren und Exportieren von Daten (z.B. Formate CSV, XML)
  • Synchronisieren von XML-Schnittstellen
  • Verbinden einer App mit Social Media-Accounts (z.B. Facebook, Twitter)
  • Synchronisation mit CMS (z.B. Wordpress)
  • Messaging, Chat

 

Aufgabe

 

Im Rahmen des Contests soll für iOS oder Android eine App erstellt werden, die Daten mit einem Backend austauscht. Das Backend soll mit Hilfe des BaaS-Anbieters apiomat.com aufgesetzt werden. Der Einsatz der vorgefertigten Module ist erwünscht aber keine Pflicht.

 

 

Anforderung

 

Ziel ist eine App, die in einen der App-Stores eingestellt werden kann. Die Rechte für die App bleiben bei dem Entwickler.

Kategorie Java, Ruby oder C#

Aufgabe der Kategorie Jave, Ruby oder C# (powered by ThoughtWorks)

 

Coding Contest 2013: DNA Sequencing

 

Please read the description of the problem thoroughly and then create a program to solve it. For the solution, we request that you use Java, Ruby, or C#.

 

You may not use any external libraries to solve this problem, but you may use external libraries or toolsfor building or testing purposes. Specifically, you may use unit-testing libraries or build tools available foryour chosen language (e.g., JUnit, Ant, NUnit, Rspec, Rake, etc.).

 

System security is very important to us and certain file extensions will be blocked for security purposes,resulting in delays to your review. You should NOT include any executable attachments, including thosewith .exe or .lib extensions. We need to be able to run and build your code ourselves, so please submityour code as a zipped file of source code and supporting files, without any compiled code. If you’resubmitting in C#, please do not submit your code as a .msi file.

 

Please include a brief explanation of your design and assumptions, along with your code, as well asdetailed instructions to run your application.

 

We assess a number of things including the design aspect of your solution and your object orientedprogramming skills. While this is a small problem, we expect you to submit what you believe isproduction-quality code; code that you’d be able to run, maintain, and evolve. You don’t need to goldplate your solution, however we are looking for something more than a bare-bones algorithm.

 

• There must be a way to supply the application with the input data via text file.

• The application must run.

• You should provide evidence that your solution works correctly against the supplied test data.

 

Coding problem: DNA Sequencing

 

Design a program that can analyze a DNA sequence for patterns.

 

DNA consists of long strands of nucleotides. Each nucleotide has a nucleobase. There are only fourprimary nucleobases in all DNA: cytosine, guanine, adenine and thymine, abbreviated s C, G, A and Trespectively. DNA for an organism can be represented as a long sequence of just these four letters.

 

You have to write a program that analyzes a given DNA sequence for the occurrence of specific patterns.

 

This is a 1000-nucleobase long segment of the DNA sequence of a 35-year-old female of unspecified race:

 

ggaatttagggagttcccacattgcccagacgactcgtatagaattggtagttggccatg
cgtccatatcacaaagacacagtccctggccgaccacactgtaaccacgaatatgcccta
tcgtacgggttgggatgcacttttgagttatacgcgctcgaatctatgcccagtacacat
ggtgccgacacctaactaggcagtgaggggcactcagacctgacatgagcggaagaaaga
acccgcgggggccccacgacgtagcggcgacggctcaaccaatgccccgcccctttcata
aggccaagcggactgggctttcgcccgagtctaaacccactgtatttaccattcatagtc
aacagagggactttcaaaattcctaaactggttactgactaagaggaatcctcgcgctaa
tgaagacaacctccatagaggtcaaatggcgcgcagttgacttcagtattgaccttcttc
agggtcccccatctttgatacttcacttatggacccggccaccgtgagttgaatcccggc
gtccctcgcgtccccaacacagacaatatttttacgtgtccaagggcggaaagtgacgag
gtgagaactggcgccgcgagaccggcccgatttctaataggcgggatagagatctgcccg
acgcatttcacttgtagtcactcacggtatgactgtgcatgcactgaccgtcgctggcgt
gtctttaatttaagctaggcttgacgtggagtgcagaatgaccatgttcaaggtgcttcg
gggctatatacttgggataaacgcgatcctgcggagtagcgtcgagaacaccgactgccg
aatgtacaatccgcgtgacaatgccgaggctcgagatatcacttgaactgcgggcgaatc
gattcgagagcccgatcgttaacaagtcgtcggctgtagccaataatatcttggttttag
atcttgagtgtgggggcgtttacttaaccatccgaacgcg

 

Answer the following questions:

 

1. Three distinct sequences of "GGG" within any 1000-nucleobases signify an elevated riskto acquiring Tyberius syndrome. Based on the given DNA segment, is this female at suchrisk?

 

2. The sequence "CAG" followed by exactly one "C" or one "G" and then not followed by Tin the next 2 slots signifies brown eyes. Does this female have brown eyes?

 

3. How many of each nucleobase does this segment have?

 

4. What's the location of the first occurrence of the sequence "CTAG" in the given segment(assume nucleobases are numbered from 1 to 1000).

 

In-Office Extension:

 

Here's some additional information about DNA:

 

Each nucleobase has a complementary nucleobase. A and T are complementary; C and G arecomplementary. A sequence is complementary to another sequence if it has the complementarynucleobases in the reverse order. For example, the complementary sequence to TTAC is GTAA.

 

Adenine and guanine belong to the double-ringed class of molecules called purines (abbreviated as R).Cytosine and thymine are pyrimidines (abbreviated as Y).

 

Answer the following:

 

1. Does this segment have more purines than pyrimidines?

 

2. Four purines followed by four pyrimidines have been shown to have a strong correlationwith the early onset of Frømingen's dischrypsia. Does this DNA strand show evidence forthis correlation?

 

3. What's the complementary sequence for the entire 1000-nucleobase segment?

4. Coding Contest
1. Wahlaufgabe
Thema: Computerspielfunktion

Pong, das Urspiel der Videospiele, wurde vor 40 Jahren veröffentlicht und ist das erste weltweit populäre Videospiel. Das simple Spielprinzip erinnert an Tischtennis: Auf dem Bildschirm bewegt sich ein Punkt hin und her, zwei Spieler steuern jeweils einen senkrechten Strich, der nach oben und unten verschoben werden kann. Trifft der Punkt nicht den senkrechten Strich, erhält der Gegner einen Punkt.

 
Aufgabe:

Implementiere entweder den Server (der die Kontrolle über das Spielfeld und die Bewegung des Balles hat) oder aber einen Client (die KI, die selbstständig entscheidet, wohin das Paddel bewegt werden soll).

 

Die Umsetzung erfolgte mit PHP oder JavaScript.

 
2. Wahlaufgabe
Thema: Framework

Häufig werden Daten für Geschäftsanwendungen nicht per Hand eingegeben, sondern aus anderen Systemen importiert. Ein einfaches und übliches Format für solche Daten ist csv (character separated values).

 
Aufgabe:

Um eine hohe Datenqualität im Zielsystem zu gewährleisten, soll der Inhalt der zu importierenden Daten auf Gültigkeit geprüft werden. Finde daher ein aus Java ansprechbares Validierungsframework, das den in deinen Augen besten Kompromiss bietet. Verbessere es an den Stellen, die dir noch nicht gefallen. Kombiniere bestehende Technologien zu etwas Neuem und Besseren. Oder erstelle gleich dein eigenes Framework.

 

Die Umsetzung erfolgte mit Java.

 

3. Wahlaufgabe
Thema: Serveranwendung

Für das Testen von Webanwendungen werden oft größere Mengen an gültigen E-Mail-Adressen benötigt, die der Tester für den Funktionstest einsetzen kann. Es gibt bekannte Dienste (http://spamgourmet.com, http://www.mailinator.com oder http://dudmail.com), die aber alle die vom Kunden geforderte Geheimhaltung verletzen und zusätzlich die E-Mailadresse des Testers einer möglichen Spamflut aussetzen.

 
Aufgabe:

Implementiere eine Serveranwendung, die es erlaubt, temporäre Emailadressen zu erzeugen und eine Weiterleitung auf eine reguläre/permanente Email-Adresse festzulegen. Jeder Nutzer soll auf dieser Applikation einen Account haben und seine Test-E-Mails konfigurieren können.

Die Domains des E-Mailserver sind natürlich fest, nur der lokale Teil der E-Mail ist frei konfigurierbar.

 

Die Umsetzung erfolgte mit Java.

3. Coding Contest
Thema: Digitale Bibliothek

Du sollst eine Web Applikation schreiben, die zur Verwaltung von Büchern dient - ganz im Sinne einer digitalen Bibliothek. Bei den Features hast du freie Hand - es ist also deine Kreativität gefragt! Wer die Web Applikation mit einer API ausstattet, kann zusätzliche Punkte bekommen.

 

Die Umsetzung erfolgt mit PHP oder Python.

2. Coding Contest
1. Wahlaufgabe  

Thema: Schuldenverrechnung
Ziel ist gewesen, eine Webapplikation zu erstellen, mit der mehrere Personen ihre Schulden miteinander verrechnen können. Die Applikation sollte bestimmte Features haben (Benutzerregistrierung, Login, Eintragen neuer Schulden gegenüber einem anderen Benutzer, Bestätigung von Schulden, Bezahlen bzw. Löschen von Schulden)
 
Beispiel:
Die Netresearch Kollegen haben sich für einen Weihnachtsbummel gegenseitig Geld geborgt: Sebastian schuldet Maik 3 Euro, der wiederum Christian 4,50 Euro schuldet. Christian bekommt auch noch 3,75 Euro von Sebastian. Maiks Schulden und Guthaben werden miteinander verrechnet, so dass Christian von Sebastian 6,75 Euro bekommt, und Maik Christian nur noch 1,50 Euro schuldet.

 
2. Wahlaufgabe 

Thema: Verknüpfung zweier Webapplikationen mit API
Ein Script, welches z.B. per Cronjob periodisch gestartet wird, fragt Daten aus der einen Applikation ab und packt sie in die andere. Dabei musste beachtet werden, dass die zu verknüpfenden Applikationen Open Source sind.

Beispiele:
1. Nachrichten in einer status.net-Instanz (z.B. identi.ca) werden automatisch in Diaspora eingestellt.

2. Per Sternchen markierte Feedeinträge in Tiny Tiny RSS werden automatisch in SemanticScuttle gebookmarkt. 

1. Coding Contest
Thema: Verarbeitung und Visualisierung öffentlich verfügbarer Daten über Leipzig

Die Datenpunkte - z.B. eine Pressemitteilung oder eine Nachricht - sollten durch intelligente Verknüpfung und Darstellung übersichtlich angezeigt werden und Zusammenhänge deutlich gemacht werden. URLs, die als Datenquelle genutzt werden konnten, wurden angegeben.

Beispiel

Die Pressemitteilungen der Polizei Leipzig werden aggregiert und nach Orten bzw. Straßennamen durchsucht. Die Orte werden dann auf einer Karte (OpenStreetMap, Google Maps) dargestellt und bekommen nach Schwere der Straftat einen größeren Kreis. Das Ganze könnte zeitlich in einer Animation ablaufen, so dass ältere Mitteilungen langsam verblassen und Neue aufpoppen.

Ergebnisse

Wir haben für euch Screenshots der Gewinnerprojekte der vergangenen Coding Contests erstellt und den jeweiligen Projektnamen zum entsprechenden Code bei Github verlinkt.

4. Coding Contest
1. Platz Kategorie PHP - Falk Müller

Falk hat mit seinem Projekt "Pong" den ersten Platz in der Kategorie PHP belegt. Hervorzuheben sind die eingebundenen Funktionen und Besonderheiten wie zum Beispiel AJAX Crawled URLs, Animation / Sound, CSS3-Optimierung und Long Polling.

 
Screenshot

 

1. Platz Kategorie Java I - Aleksej Tokarev

Aleksej hat mit seinem Projekt "CSV Validator" den ersten Platz in der Kategorie Java I belegt. Der CSV Validator repräsentiert eine Java-Bibliothek, die zum Überprüfen von csv (character separated values)-Dateien eingesetzt werden kann.

 

1. Platz Kategorie Java II - Manuel Mauky

Manuel hat mit seinem Projekt "TmpMail" den ersten Platz in der Kategorie Java II belegt. Die Webanwendung ermöglicht dem Nutzer sich mit seiner privaten Email-Adresse zu registrieren und anschließend beliebig viele Temporäre Email-Adressen zu erstellen, die er z.B. für die Registrierung in Online-Foren, Shops oder ähnliches verwenden kann. Damit muss er nicht seine private Email-Adresse im Internet bekannt machen. Wird eine Email an die Temporäre Email-Adresse gesendet, so wird diese an die private Email-Adresse des Nutzers weitergeleitet.

1. Platz Kategorie JavaScript - Team Marius Butz und Martin Erichsen

Marius und Martin haben mit ihrem Projekt "Pong" den ersten Platz in der Kategorie JavaScript belegt.

 

Screenshot

3. Coding Contest
1. Platz Kategorie PHP - Daniel Böttcher

Daniel hat mit seinem Projekt "Digital Library" den ersten Platz in der Kategorie PHP belegt. Besonders hervorzuheben sind die vielen Echtdaten, die Lagerverwaltung, PDF-Ausgaben und der Checkout.

 
Screenshots

Startseite

 

 

 

Checkout

 

2. Platz Kategorie PHP - Jan Ziehme

Jan hat den zweiten Platz in der Kategorie PHP belegt. 

3. Platz Kategorie PHP - Daniel Schmidt & Thomas Steinert

Daniel und Thomas haben als Team am Wettbewerb teilgenommen und mit ihrem Projekt "Buchfink" den dritten Platz der Kategorie PHP belegt. Besonders hervorzuheben ist die Einbindung der Google-Books-API. 

 
Screenshots

Login

 

 

 

Zusatzinfos zum Buch

 

1. Platz Kategorie Python - Martin Czygan

Martin hat mit seinem Projekt "Kollektions" den ersten Platz in der Kategorie Python belegt. Besonders hervorzuheben sind die sehr ausführliche Dokumentation, das aufgeräumte Design und die Benutzerverwaltung im Frontend, der Import von Büchern über die ISBN-Eingabe sowie das Vorhandensein einer API.

 
Screenshots

Startseite

 

 

 

Newsfeed

 

2. Platz Kategorie Python - Marcus Nitzschke

Marcus hat mit seinem Projekt "CodingContest 2012" den zweiten Platz in der Kategorie Python belegt. Besonders hervorezuheben sind das Diagramm für Models, die Benutzung der staticfiles App und das Vorhandensein einer Test Suite.

 
Screenshots

Startseite

 

 

 

Zusatzinfos zum Buch

 

3. Platz Kategorie Python - Michael Rudolf

Michael hat mit seinem Projekt "BookZ!" den dritten Platz in der Kategorie Python belegt. Besonders hervorzuheben ist die gute Aufteilung der Apps und die Benutzerverwaltung im Frontend.

 
Screenshots

Usage

 

 

 

Bücherliste

 

Dein Ansprechpartner bei Netresearch

Annett Kretzschmar

Tel.: 0341/47842-235

E-Mail