FizzBuzz

Eigentlich sollte man denken, ist folgende Aufgabe nicht so schwer. Ich bin allerdings doch gescheitert. Schließlich wird die FizzBuzz Aufgabe oft bei Einstellungsgesprächen gestellt.

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Also zähle von 1 bis 100 hoch und teile die Zahl eben immer durch 3 = Fizz, durch 5 = Buzz und durch beides = FizzBuzz. Ansonsten gebe die Zahl korrekt aus.

Meine erste Rangehenweise war folgendermaßen:

i=1
for x in range(1, 100):
    if i/3:
        print "Fizz"
    if i/5:
        print "Buzz"
    if i/3 and i/5:
        print "FizzBuzz"
    else:
        print i
    i=i+1

Doch damit war schon einiges falsch:
1. Die Untersuchung auf FizzBuzz muss an aller erster Stelle kommen.
2. Für If Abfragen sollte das Ergebnis immer 0 sein, dass ist bei i/3 nicht unbedingt gegeben.

Letztendlich hat es dann geholfen die Reihenfolge zu ändern und darauf zu achten, dass ich eher Modulo (%) statt (/) verwende und das Ergebnis immer mit 0 zu deklarieren.
Also so:

for x in range(1, 101):
    if x % 3 == 0 and x % 5 == 0:
        print "FizzBuzz"
    elif x % 3 == 0:
        print "Fizz"
    elif x % 5 == 0:
        print "Buzz"
    else:
        print x

Das "i = 1" und die Hochzählerei "i = i + 1" kann man sich auch sparen, wenn man einfach die For Zählvariable nimmt. Diese wird bei jedem Schleifendurchlauf von alleine hochgezählt. Hätte ich bei VB.NET wohl auch gleich gemacht. Die Elif Passagen sind eigentlich auch logisch, hatte ich früher aber nicht so oft genutzt. :)
Gefunden habe ich diesen Lösungansatz bei Stackexchange

Eigentlich ist es ja alles gar nicht so schwer. Man muss nur die Eigenheiten der Sprache kennen und ein bisschen mathematisches Verständnis mitbringen.
Python habe ich bis vor einer halben Stunde noch gar nicht geschrieben, daher sind die fehlenden Eigenschaften verschmerzbar.

Natürlich kann man auch alles noch komprimieren, aber darum ging es mir hier nicht. Ich möchte den Code ja auch noch nachvollziehen können. :)

GPN 2013 - Anmeldung eröffnet

Letztes Jahr war ich das erste Mal auf der GPN (Gulasch Programmier Nacht) dabei und es hat mir richtig Spaß gemacht. Zwar war ich damals nur einen Tag (da am nächsten Tag mein Geburtstag war), doch immerhin. Ein bisschen Rumprobieren bei den "Sportsfreunden der Sperrtechnik" wie man Schlösser öffnet. Bei dem ersten richtig schweren Schlössern bin ich dann aber doch gescheitert, selbst nach einiger Zeit des Rumprobierens. :)
Die Vorträge waren dagegen richtig klasse. Es gab einige über Programmierthemen, aber auch einen Gamification-Vorschlag oder wie man die Erkenntnisse aus der ökologischen Landwirtschaft zentral sammelt. :)

Aber das allerbeste war dann doch das Gulasch. Richtig lecker.

Ab sofort kann man sich auch anmelden und ein T-Shirt reservieren. Das habe ich letztes Jahr doch verpennt und mich dann geärgert. Alles weitere wird dann hier zu lesen sein.

ToDo: Toffifee Buchstaben Generator

Vor einigen Jahren war ich noch ziemlich jung und etwas naiv, was die Programmierung angeht. Damals war ich auch ein großer Fan von den Toffifees und habe mal alle Buchstaben und Zahlen des Alphabets aus Toffifees nachgebaut und abfotografiert. Von nun war die Idee geboren und es gab den Toffifee Generator. Der Code ist anno 2006 entstanden und läuft (lief und läuft wieder) seitdem tadellos. 2008 hab ich mir im Anflug an Nostalgie auch meine alte Seite nochmal angepasst und somit auch den Toffifee Code erweitert.
Doch in den letzten Tagen habe ich mich gewundert, warum das Log plötzlich nicht mehr weiterzählt. Grund dafür war, dass die Logfiles vollgelaufen waren. Die Tage hatten die 2MB erreicht und somit konnte das Skript die Files nicht mehr schnell genug lesen und schreibt seit November 2011 keine Eingaben mehr rein. :)
Da ist schon der erste Punkt: Ich hatte damals noch keine Möglichkeit Datenbanken zu verwenden und so habe ich mir mit Textdateien ausgeholfen. Das funktioniert bis 3000 Zeilen auch einwandfrei, aber dann wird es irgendwann zu viel... Schließlich muss die Datei auch immer ausgegeben werden.

Ich hab mir also mal die Dateien vom Server geschnappt und wollte sie mit GEdit (auf Windows würde man Notepad++ sagen) öffnen und dieser ist damit erstmal ins Schnaufen gekommen. Danach mal via Konsole ins Verzeichnis gehüpft und die Datei mit vi geöffnet. Nach langem: "/0x" und "dd" und abschließendem ":wq!" habe ich zuerst einmal die Dateien gekürzt und die sinnlosen 0xE12335 Eingaben herausgelöscht. Da hat vermutlich irgendein Bot in der Vergangenheit gemeint, dass ich hinter dem Skript eine Datenbank habe, die man mal auf Sicherheitslücken abklopfen kann. Stattdessen wurden einfach immer sinnlose Logeinträge fabriziert. Aber nun sind die Logfiles auch wieder entsprechend kleiner und hängen auch wieder Aktuelle Einträge an.

Doch nun mal eine Frage an meine Leser:
- Wie würdet ihr das Toffifee Skript neu machen?
- Macht so eine Log-DB Sinn?

Mir schwebt so mal folgendes vor: Eine Eingabe mit einer Art Suchvorschlägen. So wie Google das zum Beispiel macht. Vielleicht auch das Ergebnis schon während der Eingabe anzeigen. Via Ajax kann man doch die Daten schnell vorladen lassen...
Die Möglichkeit kleine Rechnungen (1*1+2-3/3 = 2) einzutippen und auszugeben wäre auch cool. Mit PHP und meinem Code ist das irgendwie schwierig.

Welche Sprache nimmt man dafür am besten? Momentan ist alles in relativ schmalem PHP Code. Nimmt man dafür am besten Javascript oder geht auch was anderes?