| 

.NET C# Java Javascript Exception

Das Forum hat Geburtstag! Programmierwettbewerb

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Das Forum hat Geburtstag! Programmierwettbewerb

christian - 06.12.2008 13:46
Liebe Festgemeinde, <_42_52_ /> <_42_52_ /> das Groovy-Forum hat Geburtstag und wird heute genau ein Jahr alt! Ich bedanke mich bei allen, die dazu beitragen, dass dieses Forum mit Leben erfüllt und für uns alle nützlich ist! <_42_52_ /> <_42_52_ /> Um diesen Anlass zu feiern, gibt es einen kleinen Programmierwettbewerb. <_42_52_ /> <_42_52_ /> <_42_>Aufgabe für den Wettbwerb <_42_52_ /> <_42_52_ /> Schreibe ein Programm, dass das Rätsel Sudoku automatisch lösen kann. Dazu ist folgende einfache Schnittstelle zu implementieren: <_42_52_ /> <_50_52_45_ CLASS="bbcode">interface SudokuSolver{ /** Löst ein Sudoku-Rätsel * @param sudoku Die Feldinhalte werden von oben links nach unten rechts * hintereinander in die Liste geschrieben. Leere Felder enthalten eine 0. * @return Die Felder des gelösten Rätsels werden von oben links nach unten * rechts in die Liste geschrieben. */ public List solve(List sudoku); } <_42_52_ /> Das Rätsel aus dem <_41_ HREF="http://de.wikipedia.org/wiki/Sudoku" REL="nofollow">Sudoku-Artikel der Wikipedia würde als Liste z. B. so aussehen: <_42_52_ /> <_50_52_45_ CLASS="bbcode">List sudoku = [ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 5, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 6, 0, 8, 0, 0, 0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 4, 1, 9, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 0] <_42_52_ /> <_42_>Wer gewinnt? <_42_52_ /> <_42_52_ /> Zu jeweils 50 % gewertet werden: <_42_52_ /> * die Anzahl der Anweisungen, je weniger desto besser <_42_52_ /> * die Laufzeit, je kürzer desto besser (auf einem Prozessor mit zwei Kernen) <_42_52_ /> <_42_52_ /> Die Lösung muss im Programm stattfinden und darf nicht durch eine externe Bibliothek erledigt werden. Es sind nur pures Groovy und Sachen aus der API von Java SE erlaubt. Die Messung findet mit der zum Ende des Wettbewerbs neuesten Groovy-Version der 1.5-Linie statt. <_42_52_ /> <_42_52_ /> Lösungen sind bis zum 6. Januar 2009, 23:59:59 Forenzeit (MEZ, wird per NTP aktuell gehalten) als Antwort auf diesen Beitrag im Forum einzureichen. <_42_52_ /> <_42_52_ /> <_42_>Was gewinnt er oder sie? <_42_52_ /> <_42_52_ /> Für den ersten Platz lasse ich kleines Juwel unter den Groovy-Büchern springen. <_41_ HREF="http://www.pragprog.com/titles/sdgrvr/groovy-recipes" REL="nofollow">Groovy Recipes: Greasing the Wheels of Java von Scott Davis. (Versand bezahle ich nur bis zur EU-Grenze.) <_42_52_ /> <_42_52_ /> Und alle gewinnen hoffentlich neue Erkenntnisse und Spaß an der Sache! <_42_52_ /> <_42_52_ /> Der Spaß und die kreative Beschäftigung mit der Sprache Groovy sollen im Vordergrund stehen. <_42_52_ /> <_42_52_ /> <_42_>Anmerkungen <_42_52_ /> <_42_52_ /> Vor einiger Zeit hatte ich nach <_41_ HREF="http://www.groovy-forum.de/read.php?2,2953" REL="nofollow">Meinungen und Vorschlägen zum Programmierwettbewerb gefragt. Es waren durchaus originelle Aufgaben dabei, aber sie hätten eine doch nicht unerhebliche Einarbeitungszeit erfordert. Ich möchte aber, dass an diesem Wettbewerb auch jemand mit wenig Zeit teilnehmen kann, der sich nicht erst in ein komplexes Problem einarbeiten möchte. <_42_52_ /> <_42_52_ /> Diskutiert wurde auch über die Bewertungsgrundlage. Auch wenn die Performance nicht zu den Favoriten gehörte, halte ich sie trotzdem für ein wichtiges Kriterium, weil man sonst zwar schönen Code aber zur Laufzeit auch ganz schönen Mist produzieren kann. Da alle unter den gleichen Bedingungen arbeiten, ist auch niemand benachteiligt. Die Zahl der Anweisungen halte ich für eine gute Alternative zum einfachen Zählen der Zeilen, denn man kann eine Zeile auch ganz schön lang machen. Es soll auch niemand anfangen, Variablennamen für den Wettbewerb zu verkrüppeln. <_42_52_ /> <_42_52_ /> <_42_>Los geht's! <_42_52_ /> <_42_52_ /> Also dann viel Spaß! Legt euch ins Zeug und erzählt auch Kollegen und Freunden von dem Wettbewerb! <_42_52_ /> <_42_52_ /> Und überhaupt helft mit, das Forum bekannter zu machen, dann haben wir alle noch mehr davon! Setzt Links, empfehlt es Kollegen, veranstaltet einen Festumzug in eurer Stadt und so weiter ;-) Stichwort <_41_ HREF="http://de.wikipedia.org/wiki/Netzwerkeffekt" REL="nofollow">Netzwerkeffekt.<_42_52_ /> <_42_52_ /> Gruß <_42_52_ /> Christian<_42_52_ /> <_42_52_ /> <_42_52_ /> <_42_52_ /><_44_49_56_ CLASS="attachments"> Dateianhänge:<_42_52_ /> <_41_ HREF="http://groovy-forum.de/file.php/4/11/sudoku-raetsel.png">öffnen | <_41_ HREF="http://groovy-forum.de/file.php/download/4/11/sudoku-raetsel.png">Download - sudoku-raetsel.png (10.8 KB)<_42_52_ />


Re: Das Forum hat Geburtstag! Programmierwettbewerb

krey - 06.12.2008 18:02
Ich finde die Schnittstellendefinition nicht gelungen!
Es sollte lieber eine List zurückkommen, die alle Lösungen enthält!
Manchmal gibt es mehrere Lösungen.


Re: Das Forum hat Geburtstag! Programmierwettbewerb

krey - 08.12.2008 22:13
In dem man beispielsweise das Rätzel bruteforced ;) Danach hat man immer alle Lösungen!

Man könnte es lazy evaluating programmieren. Daher würde es erst bruteforcen, wenn es beim ersten Versuch nichts gefunden hat oder mehr als eine Lösung erwartet wird.


Re: Das Forum hat Geburtstag! Programmierwettbewerb

wilhelm.nagy@bfw.gv.at - 09.12.2008 11:20
Eine Verständnisfrage:

gilt eine Zuweisung als genau eine Anweisung ?

also
def x = [1,2,3] wird als 1 gezählt?

Um's auch spannender zu fragen was ist mit
def x = [1, zaehleallesmoegliche([1,2,undnochdieoffenen(1)]),9]

\^/ili
(Wilhelm Nagy)


Re: Das Forum hat Geburtstag! Programmierwettbewerb

christian - 09.12.2008 21:58
&#119;&#105;&#108;&#104;&#101;&#108;&#109;&#46;&#110;&#97;&#103;&#121;&#64;&#98;&#102;&#119;&#46;&#103;&#118;&#46;&#97;&#116; schrieb:
-------------------------------------------------------
> gilt eine Zuweisung als genau eine Anweisung ?
>
> also
> def x = [1,2,3] wird als 1 gezählt?

Korrekt.

> Um's auch spannender zu fragen was ist mit
> def x = [1, zaehleallesmoegliche([1,2,undnochdieoffenen(1)]),9]

Das besteht aus einer Zuweisung und zwei Funktionsaufrufen, macht also drei Anweisungen.

Andererseits könnte man die (implizite) Konstruktion der Liste ja auch noch als Anweisung auffassen. Ich tendiere gerade zu dieser Auffassung.

Gruß
Christian


Was zählt als Anweisung?

christian - 10.12.2008 09:25
Ich habe noch mal etwas über die Frage nachgedacht, was eine Anweisung ist, bzw. was im Wettbewerb als solche gelten soll.

Zitat
Meyers Lexikon
Anweisung, Informatik: in einer höheren Programmiersprache abgefasste Arbeitsvorschrift; Teil eines Programms, das dessen Zustand (z. B. Werte von Variablen) verändert.
[lexikon.meyers.de])

Zitat
Wikipedia
Eine Anweisung stellt eine in der Syntax einer Programmiersprache formulierte einzelne Vorschrift dar, die im Rahmen der Abarbeitung des Programms auszuführen ist.
[...]
Anweisungen sind üblicherweise Zuweisungen, Kontrollanweisungen (wie Sprünge, Schleifen und bedingte Anweisungen) und Prozeduraufrufe. Abhängig von der Programmiersprache sind teilweise auch Zusicherungen, Deklarationen, Klassen- und Funktionsdefinitionen Anweisungen.
[de.wikipedia.org])

Ein Anweisung befiehlt der Maschine also was zu tun ist.

Wilis Beispiel
def x = [1,2,3]
besteht also eigentlich aus 5 Anweisungen.
1. Erzeuge Liste
2. Erzeuge Integer
3. Erzeuge Integer
4. Erzeuge Integer
5. Weise Liste der Variable x zu

Man könnte aber auch festlegen, dass nur "sichtbare" Anweisungen zählen und die literale Deklaration eines Objekts wie z. B.
def a = "eins zwei drei"
def b = 1
def c = []
nicht als Anweisung zähl. In dem Beispiel wäre demnach jede Zeile nur eine Anweisung, nämlich eine Zuweisung.

Würde man hingegen Folgendes schreiben, müsste es auf jeden Fall als zwei Anweisungen gezählt werden.
List c = new ArrayList()

Aus meiner Sicht wäre sowohl die literale Deklaration als auch das explizite Erzeugen mit new eine Anweisung, die nur unterschiedlich geschrieben wird. Sachlich richtig wäre, beides als Anweisung zu werten. Andererseits ist "[]" eleganter als "new ArrayList()"; und Eleganz soll ja auch bei dem Wettbewerb herauskommen.

Mein Vorschlag ist, dass wir nur explizite Anweisungen zählen. Schließlich sind die im Hintergrund ausgeführten Anweisungen bei literaler Deklaration ja nicht sichtbar und im Hintergrund kann ja alles mögliche passieren, was man sonst noch mitzählen könnte. Wilis Beispiel
def x = [1,2,3]
wäre dann also nur eine Zuweisung.

Was meint ihr?

Gruß
Christian


Re: (;metrik

christian - 13.12.2008 17:37
Die Probleme mit der Metrik haben mich dazu gebracht, an dem ursprünglichen Verfahren mit dem Zählen der Anweisungen festzuhalten. Siehe Anweisungsdefinition von Sun

Gruß
Christian


Re: Die Messlatte liegt hoch!

krey - 31.12.2008 17:01
Die Lösung sieht stark nach Perl aus.
Schon fast Obfuscation ;)

Find ich nicht so klasse!


Wettbewerb ist beendet!

christian - 07.01.2009 10:09
Der Wettbewerb ist beendet. Eingereicht wurde leider keine Lösung. Damit kann man den Wettbewerb wohl als vollen Misserfolg werten.

Woran hat's gelegen? Hat die kompakte Lösung die Motivation geraubt? Was könnte man bei einem neuen Anlauf besser machen?

Gruß
Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Das Forum hat Geburtstag! Programmierwettbewerb" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.