Seite 5 von 9

Verfasst: Samstag 16. Februar 2008, 13:52
von numerix
Interessant, was die Bildbetrachter so alles (nicht) können. Nach einer Umwandlung in png sah es dann auch bei mir aus wie eine japanische Flagge.

Aber nochmal zu deinem Flaggenerzeugungsprogramm:
Die wie von Zauberhand ausgewählten Zahlen in N sind ja in Wahrheit eine Schummelei. Die Werte hast du doch mit einem anderen Programm vorher ausgerechnet (schätze ich mal); oder Pi-Mal-Daumen geschätzt, damit es rund aussieht.

Da finde ich ein Programm mit ein bisschen Pythagoras, auch wenn es länger wird, dann aber doch ehrlicher.

Interessant wäre aber, was applegreens Lehrer dazu sagt, wenn er mit DEM Quelltext im Unterricht aufläuft ...

Verfasst: Samstag 16. Februar 2008, 15:10
von EyDu
Ist vielleicht ein wenig länger geworden als BlackJacks Lösung... ;-) :

Code: Alles auswählen

import math, operator

def primes(to):
    r = [] 
    for i in range(2, to+1): 
        for p in r: 
            if i % p == 0: 
                break 
        else: 
            r.append(i)
    return r

width, height = map(lambda x:reduce(operator.mul,x), map(lambda (x,y): [x]+y, zip(primes(3), [primes(5)]*2)))

print "P3 %d %d 1" % (width, height)
print " ".join("".join(["0","".join((" ",(sum(map(lambda (a,(x,y)):-((a&2)-1)*(x-y)**2, enumerate(zip((j,i,height*3/5/2),(width/2,height/2,0)))))<0 and "1" or "0")))*2])
                       for i in (int(math.log(576460752303423488>>i, 2)) for (i,x) in enumerate(str(height)*(height/2)))
                       for j in (int(math.log(1237940039285380274899124224>>i, 2)) for (i,x) in enumerate(str(width)*(width/2))))

Verfasst: Samstag 16. Februar 2008, 15:40
von lunar
Na toll, jetzt muss ich mir für die nächste Perl vs. Python Diskussion neue Argumente suchen, "Python ist besser lesbar als Perl" habt ihr ja gerade entkräftet ;)

Verfasst: Samstag 16. Februar 2008, 17:36
von BlackJack
@pütone: Ich denke nicht, dass das Schummelei ist wenn man einfach eine "dynamische" Version immer weiter optimiert, in dem man Berechnungen durch ihren Wert ersetzt. Wenn die Masse 90x60 vorgegeben sind, kann man halt einiges durch Konstanten ersetzen.

Aber wenn Du `N` lieber zur Laufzeit berechnet haben möchtest, bitteschön:

Code: Alles auswählen

import sys;w=sys.stdout.writelines;w('P3 90 60 1 ');N=[45-int((324-y*y)**.5)
for y in range(18)]+[45]*12;w('1 %d %d '%(x,x) for x in
sum(([1]*n+[0]*(45-n)*2+[1]*n for n in N[::-1]+N),[]))
Ist sogar etwas kürzer (in Zeichen) als die letzte Version mit der "statischen" Liste. :-)

Verfasst: Samstag 16. Februar 2008, 18:53
von numerix
Ja, so gefällt es mir besser - jetzt kommt der Satz des Pythagoras ja doch noch zu seinem Recht.

Auf jeden Fall ist es für mich als Python-Neuling ein hilfreiches Stück Quellcode und beeindruckend zu sehen, welch mächtige Datentypen/Konstrukte Python mitbringt und wie ein Python-Meister damit umzugehen weiß. :shock:

Verfasst: Samstag 16. Februar 2008, 19:19
von BlackJack
Naja, real würde ich das wesentlich lesbarer und umfangreicher schreiben. Das ist ja absichtlich auf Kürze getrimmt, was für so kleine "code golf"-Spielereien ganz nett ist, aber sonst… ;-)

Verfasst: Samstag 16. Februar 2008, 19:24
von EyDu
BlackJack hat geschrieben:Das ist ja absichtlich auf Kürze getrimmt, was für so kleine "code golf"-Spielereien ganz nett ist, aber sonst… ;-)
Wobei die einfachste Lösung wohl noch kürzer sein dürfte ;-)

Verfasst: Samstag 16. Februar 2008, 19:37
von BlackJack
Jup, da komme ich auf 146 Zeichen. Poste ich jetzt mal nicht, weil das wahrscheinlich sogar bei einem Lehrer als Lösung durchgeht, bzw. auch Anfänger das soweit "verlängern" könnten, das sie eine Lösung für die Hausaufgabe hätten. :-)

Verfasst: Samstag 16. Februar 2008, 21:34
von numerix
Wobei die einfachste Lösung wohl noch kürzer sein dürfte
Jup, da komme ich auf 146 Zeichen
Jetzt habt ihr meinen Kampfgeist geweckt :evil: : Ich biete 126 Zeichen ...

Nachtrag: Nochmal etwas nachgebessert, jetzt sind es 120 Zeichen.

Verfasst: Samstag 16. Februar 2008, 22:07
von applegreen
wenn ick dat programm von BlackJack bei python rein haue
und es als ein .ppm datei abspeicher dann zeigt er mir nix an!
auch als png zeigt er mir nix an!
und wenn ick über dat program noch

Code: Alles auswählen

P3
# japan.ppm
90 60
255
eingeb zeigt er mir nur bunte punkte an!:(

Verfasst: Samstag 16. Februar 2008, 22:14
von audax
Du bist was ganz besonderes, Apfel!
Wirklich. Ganz besonders.

Ohne dir zu Nahe treten zu wollen, aber...kannst du überhaupt denken? :roll:

Verfasst: Samstag 16. Februar 2008, 22:59
von numerix
Wie wäre es mit einem Wettbewerb, bei dem der Thread mit dem größten Unterhaltungswert prämiert wird.
Dann hätte ich für Feb. 2008 schon eine erfolgversprechende Nominierung für den "Thread Of The Month". :lol:

Verfasst: Samstag 16. Februar 2008, 23:06
von Leonidas
pütone hat geschrieben:Nachtrag: Nochmal etwas nachgebessert, jetzt sind es 120 Zeichen.
Also ich hätte eine Lösung anzubieten, die mit 0 Zeichen auskommt. Einfach einen Interpreter für die Japanische-Flaggen-Sprache, Japflag schreiben und diesen Interpreter auf leere Dateien (0 Byte) ausführen ;) Solche Programme können in beliebiger Anzahl mit dem Generatortool ``touch`` unter Unix schnell erstellt werden.

Verfasst: Samstag 16. Februar 2008, 23:11
von Jan-Peer
''donottouch'' ist sogar noch besser, weil man da zumindest ein paar extrem hilfreiche Fehlermeldungen erhält. :P

Ansonsten wäre es langsam mal Zeit für 'Codesnippets' oder besser noch ein sticky 'Offtopic' :D

Verfasst: Samstag 16. Februar 2008, 23:18
von EyDu
Leonidas hat geschrieben:Einfach einen Interpreter für die Japanische-Flaggen-Sprache, Japflag schreiben und diesen Interpreter auf leere Dateien (0 Byte) ausführen ;).
Ich würde es JFlag nennen, um auf den Java-Zug mit aufzuspringen. Irgendwie muss man das Ding doch auch vermarkten :P