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.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

audax hat geschrieben:Ich glaub langsam auch an einen Troll. Wer macht in der Schule schon Python? Wir jedenfall hatten alle PHP.


Ja, wir haben sehr gelitten...
Python ist an Berliner Schulen sehr beliebt. Aber sonst finde ich das Benehmen auch etwas merkwürdig - wobei ich seinerzeit im Informatik-Unterricht auch einige Fälle hatte, die auf dem Schlauch standen - um es mal vorsichtig auszudrücken.

Noch eine Bitte, applegreen: Versuch nicht, zu Berlinern. Du kannst es nicht, es ist einfach nur penetrant.

Nichts für ungut ...
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Jan-Peer hat geschrieben:Python ist an Berliner Schulen sehr beliebt.
Ich will nach Berlin.

Obwohl...wenn man keinen Schimmer von der Theorie hinter dem Programmieren hat bringt einem Python auch nicht viel...
Das schöne ist ja gerade, dass man alle möglichen Paradigmen enorm gut umsetzen kann und das auch noch bei annehmbarer Performance, guter Anbindung an...alles und schöner Option zur Optimierung einzelner Programmteile.

Apfel: Mathe ist wichtig. Sehr wichtig. Vor allem das, was du momentan hast ist unglaublich wichtig. Lern das ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

@applegreen: So, jetzt wäre ich neugierig, wie denn eure Klasse so abgeschnitten hat. Hat tatsächlich niemand die Aufgabe gelöst?
applegreen
User
Beiträge: 18
Registriert: Freitag 11. Mai 2007, 15:57
Wohnort: Berlin

so also die formel hab ick jetzt schon mal raus bekommen durch den lehrer!
(Hat imme noch keiner raus bekommen)!
(wir machen auch erst weiter wenn min. 50% des Kurses das Geschaft hat)
also die Formel lautet
x²+y²=r²
Äpfelgrün sagt danke
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

applegreen hat geschrieben:x²+y²=r²
Wow, das ist ja der Satz von Pythagoras. Ähm, nicht das wir den schon vorher erwähnt hätten. Und ich glaube den hatte ich in der 10. Klasse auch schon gehabt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Sag mal, applegreen, auf welche Schule gehst du eigentlich? Nur mal so aus Interesse ...
applegreen
User
Beiträge: 18
Registriert: Freitag 11. Mai 2007, 15:57
Wohnort: Berlin

KWO is ne Real
und mein durchschnitt is 2,0
Äpfelgrün sagt danke
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

@Äppel: Nun lies doch einfach noch mal diesen Thread durch. Ganz in Ruhe. Laß' weg, was nicht mit der eigentlichen Frage zu tun hat. Male auf, was gesagt ist und meditiere drüber. Die Lösung steckt hier drin, nicht einfach, sondern mehrfach.

Viel Erfolg!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

@Äppel: Nun lies doch einfach noch mal diesen Thread durch. Ganz in Ruhe. Laß' weg, was nicht mit der eigentlichen Frage zu tun hat. Male auf, was gesagt ist und meditiere drüber. Die Lösung steckt hier drin, nicht einfach, sondern mehrfach.
Danke CM! Das ist zweifellos einer der wertvollsten Beiträge in diesem schon viel zu langen Thread!

Aber die Fortschritte von applegreen sind schon enorm, muss man sagen:

Er hat es geschafft, nicht mehr farbig und in Fettdruck zu schreiben; manchmal ist es sogar einigermaßen lesbares Deutsch.

Er hat es geschafft, den Mittelpunkt der 90x60 px großen Flagge zu bestimmen: 4,5/30

Er hat es geschafft aus der Höhe der Flagge von 60px und der Information, dass der Kreis einen Durchmesser von 3/5 der Höhe hat, den Durchmesser exakt zu bestimmen: 4 cm

Er kennt - nach eigener Aussage - den Satz des Pythagoras und hat ihn zur Bestimmung des Abstandes von P(x1|y1) zu M(x2|y2) erfolgreich angewendet: x1-y1 < r

Und er kennt jetzt - dank seines Lehrers - "DIE FORMEL", mit der der Rest sicher ein Klacks für ihn sein wird: x²+y² = r²

Dann dürfte das Programm ja in Kürze fertig sein. Glück auf!
BlackJack

Ich hätte da noch etwas schön kurzes ohne Pythargoras oder so'n hässlichen (mathemat|geometr)ischen Kram:

Code: Alles auswählen

import sys;w=sys.stdout.writelines;w('P3 90 60 1');t=[1];f=[0];N=[45]*13+[40,37, 
36,34,33,32,31,31,30]+[29]*3+[28]*5;w(x and ' 1'*3 or ' 1 0 0' for x in
sum((t*n+f*(45-n)*2+t*n for n in N+N[::-1]),[]))
:twisted:
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ich hätte da noch etwas schön kurzes ohne Pythargoras oder so'n hässlichen (mathemat|geometr)ischen Kram
Ja kurz ist es, das ist unbestreitbar.
Etwas unübersichtlich finde ich es, wenn man hinter den Semikolons kein Leerzeichen setzt, sonst geht es ...

Aber was soll es denn leisten?
Bei mir erzeugt es nur ein schwarzes Rechteck.
BlackJack

Das erzeugt ein PPM mit einem weissen Hintergrund und einer roten Scheibe. Und einen interessanten Testfall welche Software gültige PPMs lesen kann und welche nicht.

ImageMagick (display/convert), netpbm, xnview und `comix`: weiss + rote Scheibe

Konqueror und Gwenview: komplett schwarz

Gimp: schwarz + türkise Scheibe
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

ich seh nur 0 und 1 ...
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

BlackJack hat geschrieben:Gimp: schwarz + türkise Scheibe
Bei mir (gimp 2.4.4 aus Debian sid) ists weiß und eine rote Scheibe.
BlackJack

@meleniel: Das ist ein Bild im "PPM plain"-Format, das auf stdout ausgegeben wird. Wenn man es als Bild betrachten möchte, muss man die Ausgabe in eine Datei umleiten. Zum Beispiel 'japan.ppm'.

Das Format ist super simpel, so ziemlich das einfachste was man ohne eine Bibliothek in so ziemlich jeder Programmiersprache erzeugen kann. Erst kommt der Vorspann als 'Typ Breite Höhe Max-Wert'. Also in diesem Fall 'P3' für "PPM plain", Breite und Höhe sollte selbsterklärend sein, und dann der Maximalwert, der bei den Pixeldaten vor kommt. Danach folgen drei Werte pro Pixel für den Rot-, Grün-, und Blau-Anteil. Alles jeweils durch "whitespace"-Zeichen getrennt.

Kleine Korrektur+Kürzung des Quelltextes von oben, damit die Daten mit einem "whitespace" enden:

Code: Alles auswählen

import sys;w=sys.stdout.writelines;w('P3 90 60 1 ');t=[1];N=[45]*13+[40,37,36,
34,33,32,31,31,30]+[29]*3+[28]*5;w('1 %d %d '%(x,x) for x in
sum((t*n+[0]*(45-n)*2+t*n for n in N+N[::-1]),[]))
An der "Softwaretabelle" aus meinem letzten Beitrag ändert sich allerdings dadurch nichts.

@Trundle: Dann ist's in Gimp 2.4 also korrekt, ich hatte 2.2 ausprobiert.

@pütone: Ziel war nicht Übersichtlichkeit, sondern Kürze. :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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

@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

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