Man programmiert ja auch keine Applikation für den ernsten Einsatz. Man löst mit einer Programmiersprache ein Problem. Das Problem ist diesmal nicht der Algorithmus selbst, sondern die Größe des Algorithmus Und alles was unter dem Perfektionismus liegt, ist'n Flaschenhals ;Pname hat geschrieben:Da missbrauchen sie aber nicht eine Programmiersprachenumerix hat geschrieben:Für zwischendurch ist das doch mal eine nette Abwechslung. Andere lösen Kreuzworträtsel. Oder Sudokus ...name hat geschrieben:Weit ham wirs gebracht, Code Golfing im Python Forum...
Kurzer Prozess: Size Contest bei SPOJ
Man loest ein nicht-existentes Problem, aber gut, wenns Spass machtBlackVivi hat geschrieben:Man löst mit einer Programmiersprache ein Problem. Das Problem ist diesmal nicht der Algorithmus selbst, sondern die Größe des Algorithmus
Hae? Nix verstehen...BlackVivi hat geschrieben:Und alles was unter dem Perfektionismus liegt, ist'n Flaschenhals ;P
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Das 2te beantwortet das erste. Stell dir vor - das Problem heißt: "Mach den Code so kurz wie möglich. Alles was länger ist als 0 Zeichen ist zu lang. Dann versucht man das Problem zu lösen Und zwar immer besser...name hat geschrieben:Man loest ein nicht-existentes Problem, aber gut, wenns Spass machtBlackVivi hat geschrieben:Man löst mit einer Programmiersprache ein Problem. Das Problem ist diesmal nicht der Algorithmus selbst, sondern die Größe des AlgorithmusHae? Nix verstehen...BlackVivi hat geschrieben:Und alles was unter dem Perfektionismus liegt, ist'n Flaschenhals ;P
Leistungsfähigkeit hat ja unterschiedliche Facetten. C als leistungsfähiger einzustufen als Python ist als allgemeine Aussage auch falsch, nur weil C Programme bei vergleichbaren Algorithmen schneller sind als Python-Programme.name hat geschrieben:Das finde ich aber ueberhaupt nicht. Das wuerde ja heissen das Perl leistungsfaehiger als Python ist, weil mit Perl laesst sich normalerweise besser golfen....numerix hat geschrieben:Ich sehe das eher als eine von vielen Möglichkeiten, die Leistungsfähigkeit einer Sprache zum Ausdruck zu bringen.name hat geschrieben:Da missbrauchen sie aber nicht eine Programmiersprache
Auch die Lesbarkeit eines Codes oder die Entwicklungsgeschwindigkeit sind Leistungsmerkmale und da spielt Python ja nachweislich auf den vorderen Plätzen mit.
Was die Kürze des Codes angeht, so ist Perl Python nun mal überlegen.
Seh ich zwar nicht so als Leistungsmerkmal, solang ich keine Romane schreiben mussnumerix hat geschrieben:Was die Kürze des Codes angeht, so ist Perl Python nun mal überlegen.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Naja, das geht jetzt ins Philosophische über: Ab wann gilt ein Problem als "existent"? Wenn es ein Kunden-Projekt ist, das Geld einbringt?name hat geschrieben:Man loest ein nicht-existentes Problem
Man denke nur mal an die zahlreichen Programmieraufgaben, die man zu lösen hat oder lösen will oder was auch immer, um eine Programmiersprache zu lernen. Da werden zuerst künstlich Probleme geschaffen, nur um sehen, ob man sie lösen kann. Sind die "nicht-existent"?
Und dieser Size-Contest ist zumindest so, dass man sich zunächst mit einem Problem auseinandersetzen muss (auch wenn es sehr überschaubar ist), dann einen Algorithmus entwickeln muss und dann überlegen kann, wie man den möglichst kurz bekommt.
Auch für Programmieranfänger ist diese konkrete Problemstellung nicht ungeeignet, weil man - zumindest, wenn die Lösungen dann offengelegt werden, was bei SPOJ an sich nicht so ist, aber hier im Forum ja anders gehandhabt werden kann - an einem solch kleinen Beispiel sehen kann, auf welche unterschiedlichen Weisen sich ein Problem lösen lässt.
Die Auseinandersetzung mit den verschiedenen Lösungen bringt in aller Regel auch einen Erkenntnisgewinn.
Wenn ich mal die beiden bisher geposteten funktionsfähigen Lösungen und meine eigene (noch nicht gepostete) Lösung nehme, dann ist jede in ihrem Ansatz völlig unterschiedlich. Und das finde ich spannend.
Hmm, entwickelt man da wirklich einen Algorithmus oder nimmt man nicht eher den der die Sprache anbietet der am wenigsten Zeichen braucht?numerix hat geschrieben:Und dieser Size-Contest ist zumindest so, dass man sich zunächst mit einem Problem auseinandersetzen muss (auch wenn es sehr überschaubar ist), dann einen Algorithmus entwickeln muss und dann überlegen kann, wie man den möglichst kurz bekommt.
Man kriegt dadurch leider sehr viele suboptimale Loesungen praesentiert, wo man als Anfaenger wieder nicht weiss dass und warum sie das sind.numerix hat geschrieben:Auch für Programmieranfänger ist diese konkrete Problemstellung nicht ungeeignet, weil man - zumindest, wenn die Lösungen dann offengelegt werden, was bei SPOJ an sich nicht so ist, aber hier im Forum ja anders gehandhabt werden kann - an einem solch kleinen Beispiel sehen kann, auf welche unterschiedlichen Weisen sich ein Problem lösen lässt.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Da habe ich aber was anderes raus:kbr hat geschrieben:Hier mein Ansatz (84 Zeichen):
Code: Alles auswählen
import sys N=p=0 for c in sys.argv[1]: if c<'a' and p:N+=4-p;p=0 p=(p+1)%4 print N
Code: Alles auswählen
>>> len("""import sys
... N=p=0
... for c in sys.argv[1]:
... if c<'a' and p:N+=4-p;p=0
... p=(p+1)%4
... print N""")
90
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Code: Alles auswählen
n=p=0
for c in raw_input()[1:]:
if c.islower():
p+=1
else:
n+=3-p%4
p=0
print n
Und ich stimme denen zu, die keinen Sinn darin sehen, das kürzest-mögliche Programm zu schreiben. Pythonprogramme erreichen doch meistens automatisch ein Längen/Lesbarkeits-Optimum
gruß Jörg
ps.: Zählen Leerzeichen/Tab's eigentlich mit?
falls ja:
Code: Alles auswählen
n=p=0
for c in raw_input()[1:]:
if c.islower():p+=1
else:n+=3-p%4;p=0
print n
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Juhu, Verstaerkung!b.esser-wisser hat geschrieben: Und ich stimme denen zu, die keinen Sinn darin sehen, das kürzest-mögliche Programm zu schreiben. Pythonprogramme erreichen doch meistens automatisch ein Längen/Lesbarkeits-Optimum
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Bei diesem size-contest: ja.b.esser-wisser hat geschrieben:ps.: Zählen Leerzeichen/Tab's eigentlich mit?
Es wird einfach die Gesamtzahl an Bytes gezählt, also das, was man als Dateigröße erhält, wenn man das Skript in eine Datei schreibt.
@kbr: Dein Programm berücksichtigt nicht die speziellen Zeilenenden (siehe das erste Posting im Thread).
Mag sein. Aber dafür gibt es dann ja die Könner hier im Forum, die einen darauf hinweisen.name hat geschrieben:Man kriegt dadurch leider sehr viele suboptimale Loesungen praesentiert, wo man als Anfaenger wieder nicht weiss dass und warum sie das sind.
Hallo kbr
Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:
Sind total 69 Zeichen
Gruss wuf
Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:
Code: Alles auswählen
N=p=0
for c in raw_input():
if c<'a' and p:N+=4-p;p=0
p=(p+1)%4
print N
Gruss wuf
Zuletzt geändert von wuf am Freitag 20. Februar 2009, 16:53, insgesamt 1-mal geändert.
Take it easy Mates!
Naja, das ist ja nicht wirklich Sinn der Sache. Ich finde Code-Golfing fuer Anfaenger einfach total ungeeignet. Falsche Loesungen lernen und dann von andren drauf hingewiesen werden is glaub ich keine paedagogisch hochwertige Lernmethode.numerix hat geschrieben:Dann ja die Könner hier im Forum, die einen darauf hinweisen.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Es sind 73 Bytes und mit der SPOJ-Original-Eingabe läuft es immer noch nicht ..wuf hat geschrieben:Hallo kbr
Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:Sind total 69 ZeichenCode: Alles auswählen
N=p=0 for c in raw_input(): if c<'a' and p:N+=4-p;p=0 p=(p+1)%4 print N
Gruss wuf
Hallo numerix,numerix hat geschrieben:@kbr: Dein Programm berücksichtigt nicht die speziellen Zeilenenden (siehe das erste Posting im Thread).
ich sehe keine speziellen Zeilenenden, weder in der Beschreibung bei SPOJ bezüglich des Inputs noch in den Daten die raw_input() selber liefert. Bei
Code: Alles auswählen
n = raw_input()
print len(n), n
print n[:-1]
Code: Alles auswählen
MacPro:~ klaus$ python nop2.py
abcde
5 abcde
abcd
@wuf: das ist exakt meine raw_input() Variante (bei mir mit Tabulatoren ).
Klaus
Für Python könnte ich mir höchstens Wettbewerbe vorstellen, wo man möglichst wenig Zeilen benutzen soll. Ich glaube, da kann die Sprache eher ihre Stärken ausspielen.
(Ich bitte, von möglichen Semikolon-Witzen abzusehen...)
(Ich bitte, von möglichen Semikolon-Witzen abzusehen...)
Eigentlich ist es mir auch egal. Von mir aus dann ebennumerix hat geschrieben:Dann sende es doch bei SPOJ mal ein ...kbr hat geschrieben:ich sehe keine speziellen Zeilenenden, weder in der Beschreibung bei SPOJ bezüglich des Inputs noch in den Daten die raw_input() selber liefert.
Code: Alles auswählen
n = raw_input()[:-1]
Interessanter finde ich zu sehen, welche Lösungsvorschläge andere posten.
Als finaler Code ergäbe sich dann, wenn man noch das Leerzeichen hinter "a" entfernt:kbr hat geschrieben:Eigentlich ist es mir auch egal. Von mir aus dann eben
oder irgendsowas.Code: Alles auswählen
n = raw_input()[:-1]
Code: Alles auswählen
n=p=0
for c in raw_input()[:-1]:
if c<'a'and p:n+=4-p;p=0
p=(p+1)%4
print n
Ich warte mal noch ein wenig ab und dann stelle ich alle funktionsfähigen geposteten Lösungen nochmal zusammen.kbr hat geschrieben:Interessanter finde ich zu sehen, welche Lösungsvorschläge andere posten.