Seit ein paar Tagen gibt es einen neuen Size Contest bei SPOJ: https://www.spoj.pl/problems/NOP/
Grundidee dabei: Ein bestimmtes Problem ist zu lösen und der dafür benötigte Code (Quelltext) soll so kurz wie möglich sein. In diesem Fall sind maximal 360 Bytes erlaubt, aber das in Python keine wirkliche Einschränkung bei dieser Aufgabenstellung (allerdings gibt es z.Zt. immerhin eine Lösung mit 356 Bytes - würde ich gerne mal sehen ... )
Da das zu lösenden Problem hier sehr überschaubar ist (und weit weniger anspruchsvoll als ein Großteil der SPOJ-Aufgaben), hat der ein oder andere ja vielleicht Lust, beim Wettrennen um den kürzesten Python-Code sein Glück zu versuchen.
Zwar werden wir mit Python gegen Perl (zumindest was die Kürze des Codes angeht) nicht ankommen und anscheinend lässt sich das gestellte Problem auch in Ruby äußerst kompakt umsetzen, aber vielleicht können wir Python ja auf Platz 3 der Rangliste halten - das ist jedenfalls der aktuelle Stand: https://www.spoj.pl/ranks/NOP/.
Falls jemand gerne mitmachen will, aber mit der Aufgabenstellung wg. des Englischen (oder aus anderen Gründen) nicht klarkommt, wird er sicher hier auch Hilfe finden können.
Konkret zur Aufgabenstellung: Der übergebene String wird über stdin aufgenommen und über stdout zurückgeliefert, d.h. - wenn ich nichts übersehe - ein raw_input() und ein print sind auf jeden Fall fällig (zumindest kenne ich bis jetzt keine kürzeren Möglichkeiten für die Ein-/Ausgabe bei SPOJ).
Und: Der Eingabestring scheint in diesem Fall ein Zeilenende-Zeichen zu haben, das von raw_input() nicht automatisch entfernt wird. Muss man sich also selbst drum kümmern.
Kurzer Prozess: Size Contest bei SPOJ
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Hab keine Lust mich bei SPOJ zu registrieren, aber ich mich mich mal daran versucht:
(74 Zeichen, aber nur mit den drei SPOJ-Beispielen getestet )
Mit python2.5 und RegEx krieg' ich's nicht kleiner, da muss wohl 'ne andere Lösung her.
gruß Jörg
(74 Zeichen, aber nur mit den drei SPOJ-Beispielen getestet )
Code: Alles auswählen
import re
print sum(3-len(p)for p in re.split("[A-Z]",raw_input())[1:-1])
gruß Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Kannst du vielleicht mal deine derzeitige Version posten, damit man einen Anhaltspunkt hat? Ich blicke bei dem Problem ehrlich gesagt nicht durch, aber ich bin sowieso nicht gut in solchen Dingen.
Funktioniert nicht für alle Fälle korrekt. Ein paar Beispiele mit der richtigen Lösung:b.esser-wisser hat geschrieben:Hab keine Lust mich bei SPOJ zu registrieren, aber ich mich mich mal daran versucht:
(74 Zeichen, aber nur mit den drei SPOJ-Beispielen getestet )Mit python2.5 und RegEx krieg' ich's nicht kleiner, da muss wohl 'ne andere Lösung her.Code: Alles auswählen
import re print sum(3-len(p)for p in re.split("[A-Z]",raw_input())[1:-1])
Code: Alles auswählen
AdacBdadDasdEfaFweGsd
2
EaEbFabG
5
AbcdefttgBCDE
12
ABDdasdfasdfsdfas
6
Code: Alles auswählen
AdacBdadDasdEfaFweGsd
2
EaEbFabG
5
AbcdefttgBCDE
4
ABDdasdfasdfsdfas
6
Code: Alles auswählen
print reduce(lambda x,y:x+(-(x+y)%4),[x for x,y in enumerate(raw_input()) if y.isupper()])
85 Zeichen...
Ich überleg die ganze Zeit, was ich noch kürzer kriegen könnte òo
Edit: 84 Zeichen, nach dem ich das eine Leerzeichen noch entfernt habe Oo
Mhm, hab noch das print vergessen... Ich depp. 90 Zeichen.
Zuletzt geändert von BlackVivi am Freitag 20. Februar 2009, 15:15, insgesamt 2-mal geändert.
Hier mein Ansatz (84 Zeichen):
Und bitte nicht auf PEP 8 hinweisen ...
Klaus
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
Klaus
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Stimmt, mein Code funktionierte nicht , sobald mehr als 3 Kleinbuchstaben hintereinander vorkommen
Korrektur:
("%4" wäre ja langweilig )
Sehe ich das richtig, dass der letzte "Befehl" nicht aufgefüllt werden muss?
Korrektur:
Code: Alles auswählen
import re;print sum(3-len(p)&3for p in re.split("[A-Z]",raw_input())[1:-1])
Sehe ich das richtig, dass der letzte "Befehl" nicht aufgefüllt werden muss?
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Den Algo selbst habe ich nicht gecheckt, aber der input soll ueber stdin kommen und nicht ueber einen Programmparameter. Also nimmst Du einfach raw_input und sparst Dir den import.kbr hat geschrieben:Hier mein Ansatz (84 Zeichen):
Und bitte nicht auf PEP 8 hinweisen ...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
Klaus
Weit ham wirs gebracht, Code Golfing im Python Forum...
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.
Ja, so ist es. Da dann nur noch "Parameter" folgen, ist da nichts mehr aufzufüllen.b.esser-wisser hat geschrieben:Stimmt, mein Code funktionierte nicht , sobald mehr als 3 Kleinbuchstaben hintereinander vorkommen
Korrektur:("%4" wäre ja langweilig )Code: Alles auswählen
import re;print sum(3-len(p)&3for p in re.split("[A-Z]",raw_input())[1:-1])
Sehe ich das richtig, dass der letzte "Befehl" nicht aufgefüllt werden muss?
Dein Code scheint jetzt richtig zu funktionieren, jedenfalls für die geposteten "testcases"; nach meiner Zählung 76 Bytes.
Edit: Sorry, 75 Bytes.
@kbr: Eingabe erfolgt über raw_input() nicht als Parameter. Und: Dein Algorithmus ist fehlerhaft. Ergebnis für obige testcases:
3
8
15
7
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...
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.
Ich sehe das eher als eine von vielen Möglichkeiten, die Leistungsfähigkeit einer Sprache zum Ausdruck zu bringen. Und ich finde bei < 100 Bytes darf PEP 8 ausnahmsweise auch mal außen vor bleiben ...name hat geschrieben:Da missbrauchen sie aber nicht eine Programmiersprache
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
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.
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...
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.