Japanische Flagge /bzw. Kreis

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 16. Februar 2008, 13:52

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 ...
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 16. Februar 2008, 15:10

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))))
Zuletzt geändert von EyDu am Samstag 16. Februar 2008, 17:26, insgesamt 2-mal geändert.
lunar

Samstag 16. Februar 2008, 15:40

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 ;)
BlackJack

Samstag 16. Februar 2008, 17:36

@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. :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 16. Februar 2008, 18:53

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:
BlackJack

Samstag 16. Februar 2008, 19:19

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… ;-)
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 16. Februar 2008, 19:24

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 ;-)
BlackJack

Samstag 16. Februar 2008, 19:37

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. :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 16. Februar 2008, 21:34

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.
applegreen
User
Beiträge: 18
Registriert: Freitag 11. Mai 2007, 15:57
Wohnort: Berlin

Samstag 16. Februar 2008, 22:07

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!:(
Äpfelgrün sagt danke
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Samstag 16. Februar 2008, 22:14

Du bist was ganz besonderes, Apfel!
Wirklich. Ganz besonders.

Ohne dir zu Nahe treten zu wollen, aber...kannst du überhaupt denken? :roll:
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 16. Februar 2008, 22:59

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:
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 16. Februar 2008, 23:06

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Samstag 16. Februar 2008, 23:11

''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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 16. Februar 2008, 23:18

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
Antworten