drunkVoodoo
Anmeldungsdatum: 17. November 2004
Beiträge: 66
Wohnort: $HOME
|
So Webseiten-GUIs etc. sind wohl interessant, aber wenn ich scripting-contest höre, denke ich eher an so eine Art Denksportaufgabe, nicht an Anwendungen (siehe z.B. Ruby Quiz – speziell die 7-Segmentanzeige), also kurze, knackige Progrämmchen, in denen man mal so richtig seine Problemlösungskompetenz (geiles Wort, wa?) austoben kann. Frage ist: 1) Wo holt man die Aufgaben her? 2) Wie wird schiedsgerichtet? Für 2 könnte z.B. ich einen meiner Testserver zur Verfügung stellen, und man lässt die scripte in einer Art Arena gegeneinander laufen und das Schnellste gewinnt, oder man stellt z.B. eine Web-Crawling-Aufgabe und Gewinner ist das Skript, das als erstes eine Mail mit den verlangten Resultaten an eine spezielle Mailadresse schickt... Eigentlich sind die Möglichkeiten endlos ... man muss doch irgendwie proggend Spass haben können.
|
blackbird
(Themenstarter)
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
Goil. Sowas hat wirklich was. Ein User, der nicht teilnimmt soll seinen Vorschlag liefern. Gepostet wird dann im Wiki.
|
drunkVoodoo
Anmeldungsdatum: 17. November 2004
Beiträge: 66
Wohnort: $HOME
|
Wo wir gerade von sowas reden ... die Seite vom ICFP-Contest 2005 (International Conference on Functional Programming) ist oben ... die haben mal wieder ne tolle Idee (fast zu nah am richtigen Leben): Am 24. Juni wird die Aufgabe bekannt gegeben, man hat 3 Tage Zeit seine Lösung einzuschicken. Dann, 2 Wochen später wird eine Änderung der Spezifikation bekanntgegeben, und man hat einen Tag Zeit sein Programm anzupassen! Das ist mal ein Contest ☺ (Obwohl das Conference on Functional Programming heisst, kann man Lösungen in jeder Sprache einsenden)
|
Pharao
Anmeldungsdatum: 23. Dezember 2004
Beiträge: 174
Wohnort: Hirschhorn
|
es ist zwar einfach, aber wenn ich Performance vergleichen wollt... *g* Aufgabe: Ein Bild mit hilfe einer Tabelle darstellen in HTML. Ihr erzeugt also eine Tabelle mt 1x1 Pixel großen Spalten und Zeilen und färbt jede Zelle so ein, dass zum Schluss ein Bild entsteht. Ich habe das ganze schon mit einem Hochhaus gesehen... die Datei war fast 3MB groß zum schluss. Die Aufgabe des Scriptes ist, dass man bei bestimmten Bereichen im Bild die Farbe ändern kann. Also z.B. mach das Hochhaus blau. Bewertung: Qualität des Bildmotivs / Schwierigkeitsgrad für das Einfärben eines Ausschnittes und die Geschwindigkeit in der dies geschieht und zurückgeliefert wird. Wahl der Waffen: Jede Scriptsprache ist erlaubt, dass Ergebnis muss als HTML-Datei zurückgeliefert werden und darf als Quelltext nur eine Tabelle mit den nötigen "Farbinformationen" enthalten. Ob Client-Server-Prinzip (für die die glauben es würde helfen), CGI-Script, PHP oder JavaScript, hauptsache die Anforderungen werden erfüllt. Mein Vorschlag. //EDIT ein Freund hat das Bild gerade hochgeladen http://s35.yousendit.com/d.aspx?id=0YMQXWRO8FV2F09M6W440JN8V4
|
blackbird
(Themenstarter)
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
Pharao hat geschrieben: es ist zwar einfach, aber wenn ich Performance vergleichen wollt... *g* Aufgabe: Ein Bild mit hilfe einer Tabelle darstellen in HTML. Ihr erzeugt also eine Tabelle mt 1x1 Pixel großen Spalten und Zeilen und färbt jede Zelle so ein, dass zum Schluss ein Bild entsteht. Ich habe das ganze schon mit einem Hochhaus gesehen... die Datei war fast 3MB groß zum schluss. Die Aufgabe des Scriptes ist, dass man bei bestimmten Bereichen im Bild die Farbe ändern kann. Also z.B. mach das Hochhaus blau. Bewertung: Qualität des Bildmotivs / Schwierigkeitsgrad für das Einfärben eines Ausschnittes und die Geschwindigkeit in der dies geschieht und zurückgeliefert wird. Wahl der Waffen: Jede Scriptsprache ist erlaubt, dass Ergebnis muss als HTML-Datei zurückgeliefert werden und darf als Quelltext nur eine Tabelle mit den nötigen "Farbinformationen" enthalten. Ob Client-Server-Prinzip (für die die glauben es würde helfen), CGI-Script, PHP oder JavaScript, hauptsache die Anforderungen werden erfüllt. Mein Vorschlag. //EDIT ein Freund hat das Bild gerade hochgeladen http://s35.yousendit.com/d.aspx?id=0YMQXWRO8FV2F09M6W440JN8V4
Sowas ähnliches hab ich mal gemacht: http://www.active-4.com/downloads.php?downloadFile&cat=programs&id=1 Aber ist eine Windowsversion. Sowas ist aber sehr leicht. Man muss nur den vorigen Wert speichern und überprüfen, ob der nachfolgende Bildpunkt gleich oder ähnlich ist. Die Idee mit dem Wettbewerb, den DrunkenVoodoo erwähnt hat, klingt spannend. Aber ich glaube für sowas bin ich noch nicht gut genug. Aber sowas im kleinen wäre zumindest was Lustiges. 😛
|
drunkVoodoo
Anmeldungsdatum: 17. November 2004
Beiträge: 66
Wohnort: $HOME
|
Ich hätte da ein paar Ideen für Grundregeln: 1. Es muss mit der Standardinstallation der Sprache gehen 2. Es dürfen keine externen Programme aus der Scriptsprache heraus aufgerufen werden (damit fällt das HTML-Bild glaube ich leider flach) 3. Nachdem eine Aufgabe gestellt wurde, dürfen 48 Stunden keine Kommentare oder Lösungen gepostet werden (hab ich jetzt schamlos vom Ruby-Quiz geklaut, macht aber Sinn – so hat jeder, der will, Zeit sich in Ruhe mit der Aufgabe zu beschäftigen) Speziell 3. wäre zu diskutieren, mir persönlich geht es mehr um elegante, interessante oder kurze (Golf) als um schnelle Lösungen. blackbird: Muss ja nicht gleich die Lösung des Halteproblems sein ☺
|
blackbird
(Themenstarter)
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
drunkVoodoo hat geschrieben: 1. Es muss mit der Standardinstallation der Sprache gehen
Gute Idee. Bei Ruby und Python müsste man nur festlegen, was Standard ist. (buildin?) drunkVoodoo hat geschrieben: 2. Es dürfen keine externen Programme aus der Scriptsprache heraus aufgerufen werden (damit fällt das HTML-Bild glaube ich leider flach)
Aber man könnte die erstellte Datei als Ausgabe sehen. drunkVoodoo hat geschrieben: 3. Nachdem eine Aufgabe gestellt wurde, dürfen 48 Stunden keine Kommentare oder Lösungen gepostet werden (hab ich jetzt schamlos vom Ruby-Quiz geklaut, macht aber Sinn – so hat jeder, der will, Zeit sich in Ruhe mit der Aufgabe zu beschäftigen)
Das ist glaube ich Pflicht. drunkVoodoo hat geschrieben: Speziell 3. wäre zu diskutieren, mir persönlich geht es mehr um elegante, interessante oder kurze (Golf) als um schnelle Lösungen.
Jup. Weniger Code ist aber meistens auch schnellerer Code (GargabeCollection vorausgesetzt) drunkVoodoo hat geschrieben: blackbird: Muss ja nicht gleich die Lösung des Halteproblems sein ☺
EInverstanden 😉
|
drunkVoodoo
Anmeldungsdatum: 17. November 2004
Beiträge: 66
Wohnort: $HOME
|
Gute Idee. Bei Ruby und Python müsste man nur festlegen, was Standard ist. (buildin?)
Standarddistribution der Sprache. (Muss man für Ruby unter Debian allerdings 34 Pakete installieren – frage mich immer noch, welchen Hirnriss der Maintainer da hatte...)
Jup. Weniger Code ist aber meistens auch schnellerer Code
Nein. Code der weniger Objekte konstruieren muss, ist schnellerer Code. Kürzerer Code ist meistens eine Übung im Schrägdenken und Sprachkenntnis (oft eine Art Schwanzvergleich unter ProggerInnen), trotzdem meistens sehr kuhl und lehrreich (Sprachinterna, Algorithmen etc.). Kleines Beispiel in Java (von letztem Wochenende)... Ein Bekannter wollte von uns nur eine kleine Programmieraufgabe erklärt haben, hat allerdings einen tieferen Einblick in die Funktion einer for-Schleife bekommen, als ihm lieb gewesen wäre, aber schaut selbst: (Der Code gibt die Quadratzahlen von 1 aufwärts aus, solange das Quadrat kleiner als 666 ist) // Eine Koproduktion von drunkVoodoo und Ralle nach einigen Bier und viel Java
public class Quadrat
{
public static void main (String[] args)
{
for (int z=1,q=1;q<=666;System.out.println(q),q=++z*z);
}
} Aber genug Selbstbeweihräucherung jetzt, worum es wirklich ging, war so viel Spass wie möglich beim Erstellen und Testen des Codes zu haben (und Bier zu trinken, aber das ist was anderes). Nachtrag: Ich habe übrigens vergessen zu erwähnen, dass wir dabei das Erklären der Aufgabe irgendwie völlig vergessen hatten ☺
|
blackbird
(Themenstarter)
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
drunkVoodoo hat geschrieben: ...
for (int z=1,q=1;q<=666;System.out.println(q),q=++z*z);
...
Sowas finde ich lustig. Aber Java ist nicht wirklich meine Lieblingssprache 😛 In Python nicht so elegant wegen dem fehlenden Inkrementsoperator (heißt das so?) #!/usr/bin/env python
# -*- coding: utf-8 -*-
i=1;q=1;
while q<666: q=i**2; i+=1; print q
|
drunkVoodoo
Anmeldungsdatum: 17. November 2004
Beiträge: 66
Wohnort: $HOME
|
Meine auch nicht... aber es sollte nicht um die Sprachen gehen, sondern um die Ideen hinter deren Design und um die Algorithmen - da fängt der Spass an. Übrigens dräut da in mir eine Idee für einen interessanten Programmiercontest ... (Un)kenntnis in den bekannten Programmier-/Skriptsprachen hätte sogar gar nicht viel damit zu tun – ich denk mal darüber nach.
|
drunkVoodoo
Anmeldungsdatum: 17. November 2004
Beiträge: 66
Wohnort: $HOME
|
Jetzt zum Beispiel nicht unbedingt kürzer (wenn ich richtig zähle ein Zeichen mehr) und leicht gemogelt, aber eleganter:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
for q in [z**2 for z in range(1,26)]:
print q Wenn dieser Schnipsel dein Verständnis von Python verbessert, war's das doch schon wert, oder? 😉
Edit: Nee, eins weniger! Leerzeichen und Kommentare nicht mitgezählt ist meins 36 Zeichen, und deins 37 – Nja, nja, nja! ☺
|
Ronnie
Anmeldungsdatum: 24. Dezember 2004
Beiträge: 138
Wohnort: Darmstadt
|
blackbird hat geschrieben:
In Python nicht so elegant wegen dem fehlenden Inkrementsoperator (heißt das so?)
Wieso in Python geht es sogar noch eleganter mit List-Comprehension:
from math import sqrt
[x**2 for x in range(sqrt(666))] Oder in Perl:
print $_**2,"\n" for (1..(sqrt(666)));
|
blackbird
(Themenstarter)
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
Ronnie hat geschrieben: blackbird hat geschrieben:
In Python nicht so elegant wegen dem fehlenden Inkrementsoperator (heißt das so?)
Wieso in Python geht es sogar noch eleganter mit List-Comprehension:
from math import sqrt
[x**2 for x in range(sqrt(666))] Oder in Perl:
print $_**2,"\n" for (1..(sqrt(666)));
Leider falsch. for s in [a**2 for a in xrange(1,666) if a**2<666]: print s Schaut schon richtiger aus. Aber ist länger. Außerdem nicht elegant. Es müsste eine Endlosliste geben. While bringt auch nichts, weil es keine variable initialiert wie die for schleife by java und Konsorten.
print [a**2 for a in xrange(1,666) if a**2<666] Würde es eigentlich auch tun.
|
blackbird
(Themenstarter)
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
Wenn ich mich nicht verrechnet habe dürfte aber das gehen:
from math import sqrt
for a in [(a+1)**2 for a in xrange(sqrt(666))]: print a oder kürzer aber langsamer:
from math import sqrt
print [(a+1)**2 for a in range(sqrt(666))]
|
Ronnie
Anmeldungsdatum: 24. Dezember 2004
Beiträge: 138
Wohnort: Darmstadt
|
Ein simples +1 hätte es auch getan: [x**2 for x in range(sqrt(666)+1)] Nachtrag: Deine Lösung geht auch, schließt aber die Null aus der Ergebnissmenge aus.
|