AppKata: Tennis Scoring

29 views
Skip to first unread message

Patrick Bédat

unread,
Jan 15, 2012, 2:34:00 PM1/15/12
to Event based Components
Habe mal eine AppKata geschrieben und würde mich sehr über Feedback
freuen. Interessant wäre natürlich die Umsetzung in FD/EBC, aber noch
interessanter in OOP oder FP.

Werde diese vielleicht bald im Rahmen eines Seminars an meiner
Hochschule anbieten.

http://goo.gl/vgMbx

Ralf Westphal

unread,
Jan 15, 2012, 3:44:41 PM1/15/12
to event-based...@googlegroups.com
sehr cool!

damit ich aber nicht ins luschern komme, wäre es schön, die iterationen jeweils auf einer neuen seite beginnen zu lassen :-)
--
Ralf Westphal - One Man Think Tank
Hans-Henny-Jahnn-Weg 44
D-22085 Hamburg
Germany
Tel 0170-3200458
Email in...@ralfw.de

Patrick Bédat

unread,
Jan 15, 2012, 3:46:52 PM1/15/12
to Event based Components
Ha! Guter Einwand :D
> Email i...@ralfw.de

Ralf Westphal

unread,
Jan 18, 2012, 5:15:50 AM1/18/12
to Event based Components
Habe mich jetzt an die AppKata gemacht.
Macht Laune. Ist eine Herausforderung. Die darin versteckte Code Kata
KataTennis ist das kleinste Problem :-)

Für noch mehr Spaß würde ich mir allerdings etwas mehr Klarheit in der
Form wünschen:

* Wie schon gesagt, sollten die Iterationen jeweils auf einer neuen
Seite beginnen. Das ist ja mit Word kein Problem: Strg-N hilft :-)
(oder "Neue Seite vor Absatz" in der Absatzformatierung der
Überschriften)

* Eingaben und Ausgaben dürfen gern etwas deutlicher beschrieben
werden. Bei Iteration 1 weiß ich zum Beispiel nicht, wann "second
result" gezeigt werden soll: nach jedem Spiel, nach jedem Set, nach
dem Match? Ich habe mich nun entschieden, es nur am Ende eines Match
auszugeben.

Auch ist es merkwürdig, dass in "second result" die Überschriften "Set
1" usw. lauten, während darunter dann nur Aufschlaggewinne stehen,
d.h. der Verlauf eines Spiels. Ich habe mich daher entschieden, die
Überschrift so zu erweitern: "Set x, Game y".

Eine konkrete Ein/Ausgabe wie in anderen AppKatas wäre hilfreich, also
nicht nur eine Beschreibung, wie die Ausgabe aussehen sollte. AppKatas
sollten insofern Akzeptanz"testdaten" liefern.

Bei Iteration 2 ist mir zum Beispiel nicht klar, wie die "settings"
erfragt werden sollen. Auf der Kommandozeile übergeben oder bei
Programmstart interaktiv erfragen?

Auch weiß ich nicht, was mit der bisherigen Ausgabe passieren soll.
Die "match summary" soll unter der Liste der Spiele gezeigt werden
oder darüber oder stattdessen? Auch hier würde eine Beispielein/
ausgabe helfen.

Weiter habe ich noch nicht gelesen. Will mich ja nicht um den Spaß
bringen. Iteration 1 ist fertig. Iteration fange ich nun an.

Ralf Westphal

unread,
Jan 18, 2012, 6:13:00 AM1/18/12
to Event based Components
Eine Frage zu Iteration 2. Ich bin nicht mehr so vertraut mit den
Tenniszählregeln:

Bei Iteration 1 wurde ein Satz gewonnen, wenn ein Spieler mindestens 6
Spiele gewonnen hat und (!) zwei Spiele Vorsprung hat.
Beispiele: 6:0, 6:4, 7:5, aber nicht 6:5.
Habe ich das richtig verstanden?

Bei Iteration 2 soll alternativ die Entscheidung über Tie-Break
möglich sein. Das wird über die Settings erfragt. Wenn Tie-Break
gewünscht, dann wird wann ein Tie-Break gespielt? Es beginnt bei 6:6?
D.h. es gibt folgende Set-Verläufe:

5:4, 6:4 - Gewinn
6:5, 7:5 - Gewinn (ist das weiterhin korrekt, auch wenn mit Tie-Break
entschieden wird?)
6:5, 6:6 - Gewinn durch Tie-Break entscheiden, das Set-Ergebnis ist
dann 7:6

Und wie geht das mit dem Tie-Break. Dann wird wieder jeder Aufschlag
gezählt, aber nicht mehr 15, 30 usw., sondern 1, 2, 3... - oder?
Ein Tie-Break ist also ein Spiel mit veränderten Zählregeln, oder? Es
gewinnt, wer zuerst min. 7 Punkte und 2 Punkte Vorsprung hat, oder?

6:5, 7:5 - Gewinn
7:6, 8:6 - Gewinn
usw.

Eine Erläuterung der Regeln in der AppKata Aufgabe oder zumindest ein
Link auf ein Regelwerk wären hilfreich.

Patrick Bédat

unread,
Jan 18, 2012, 6:34:35 AM1/18/12
to Event based Components


On 18 Jan., 11:15, Ralf Westphal <ralf...@googlemail.com> wrote:
> Habe mich jetzt an die AppKata gemacht.
> Macht Laune. Ist eine Herausforderung. Die darin versteckte Code Kata
> KataTennis ist das kleinste Problem :-)
>
> Für noch mehr Spaß würde ich mir allerdings etwas mehr Klarheit in der
> Form wünschen:
>
> * Wie schon gesagt, sollten die Iterationen jeweils auf einer neuen
> Seite beginnen. Das ist ja mit Word kein Problem: Strg-N hilft :-)
> (oder "Neue Seite vor Absatz" in der Absatzformatierung der
> Überschriften)

Done

>
> * Eingaben und Ausgaben dürfen gern etwas deutlicher beschrieben
> werden. Bei Iteration 1 weiß ich zum Beispiel nicht, wann "second
> result" gezeigt werden soll: nach jedem Spiel, nach jedem Set, nach
> dem Match? Ich habe mich nun entschieden, es nur am Ende eines Match
> auszugeben.

Ich dachte "As a response the program will show you two results." sei
deutlich genug. Ich werde das "two" nochmal etwas hervorheben ;)

>
> Auch ist es merkwürdig, dass in "second result" die Überschriften "Set
> 1" usw. lauten, während darunter dann nur Aufschlaggewinne stehen,
> d.h. der Verlauf eines Spiels. Ich habe mich daher entschieden, die
> Überschrift so zu erweitern: "Set x, Game y".

Ja völlig richtig, habe ich angepasst.

>
> Eine konkrete Ein/Ausgabe wie in anderen AppKatas wäre hilfreich, also
> nicht nur eine Beschreibung, wie die Ausgabe aussehen sollte. AppKatas
> sollten insofern Akzeptanz"testdaten" liefern.

Alles klar. Testdaten machen die Aufgabe natürlich nachvollziehbarer.

>
> Bei Iteration 2 ist mir zum Beispiel nicht klar, wie die "settings"
> erfragt werden sollen. Auf der Kommandozeile übergeben oder bei
> Programmstart interaktiv erfragen?

Ich dachte der Satz "Upon starting the program the settings of the
match should be queried" macht das klar genug.
Andererseits will ich da auch nicht so sehr einschränken.

>
> Auch weiß ich nicht, was mit der bisherigen Ausgabe passieren soll.
> Die "match summary" soll unter der Liste der Spiele gezeigt werden
> oder darüber oder stattdessen? Auch hier würde eine Beispielein/
> ausgabe helfen.

Korrigiert. Ausschließlich match summary soll angezeigt werden.

Ralf Westphal

unread,
Jan 18, 2012, 6:48:43 AM1/18/12
to event-based...@googlegroups.com
Ich sehe leider keine Veränderungen bei dem PDF, das du hier verlinkst:


Ich dachte der Satz "Upon starting the program the settings of the
match should be queried" macht das klar genug.
Andererseits will ich da auch nicht so sehr einschränken.

Es geht nicht um Einschränkung, sondern um Klarheit. Das ist etwas anderes.
Klar ist sowohl "The settings should be entered by the user." wie "The settings can be either entered by the user or read from the command line - you choose."
Die zweite klare Formulierung ist allerdings weniger einschränkend.

Was willst du als Auftraggeber also?

Patrick Bédat

unread,
Jan 18, 2012, 7:02:26 AM1/18/12
to Event based Components


On 18 Jan., 12:13, Ralf Westphal <ralf...@googlemail.com> wrote:
> Eine Frage zu Iteration 2. Ich bin nicht mehr so vertraut mit den
> Tenniszählregeln:
>
> Bei Iteration 1 wurde ein Satz gewonnen, wenn ein Spieler mindestens 6
> Spiele gewonnen hat und (!) zwei Spiele Vorsprung hat.
> Beispiele: 6:0, 6:4, 7:5, aber nicht 6:5.
> Habe ich das richtig verstanden?

Bingo!

>
> Bei Iteration 2 soll alternativ die Entscheidung über Tie-Break
> möglich sein. Das wird über die Settings erfragt. Wenn Tie-Break
> gewünscht, dann wird wann ein Tie-Break gespielt? Es beginnt bei 6:6?
> D.h. es gibt folgende Set-Verläufe:
>
> 5:4, 6:4 - Gewinn
> 6:5, 7:5 - Gewinn (ist das weiterhin korrekt, auch wenn mit Tie-Break
> entschieden wird?)
> 6:5, 6:6 - Gewinn durch Tie-Break entscheiden, das Set-Ergebnis ist
> dann 7:6

Alles korrekt.
Bin leider selbst kein Tennis Spieler, aber Wikipedia sagt:
"Gleichstandsbrecher", Der Gewinner des Tie-Break entscheidet den Satz
mit 7:6 für sich.

>
> Und wie geht das mit dem Tie-Break. Dann wird wieder jeder Aufschlag
> gezählt, aber nicht mehr 15, 30 usw., sondern 1, 2, 3... - oder?
> Ein Tie-Break ist also ein Spiel mit veränderten Zählregeln, oder? Es
> gewinnt, wer zuerst min. 7 Punkte und 2 Punkte Vorsprung hat, oder?
>
> 6:5, 7:5 - Gewinn
> 7:6, 8:6 - Gewinn
> usw.

Oh ja das ist ein derber Schnitzer. Die Tie-Break regeln + Testdaten
gehören da auf jedenfall hinein!

Patrick Bédat

unread,
Jan 18, 2012, 7:07:45 AM1/18/12
to Event based Components
Hab die AppKata so weit mal aktualisiert. Danke schonmal für das
wertvolle Feedback!

Ulf Ninow

unread,
Jan 18, 2012, 9:59:55 AM1/18/12
to event-based...@googlegroups.com
Eine Anmerkung zu ersten Iteration:

"Clear the console before each output."

Das ist mit Java und Scala auf der Console ziemlich schwierig. Man kriegt das hin aber es wäre technisch nicht ganz sauber.

Ralf Westphal

unread,
Jan 18, 2012, 10:35:37 AM1/18/12
to event-based...@googlegroups.com
Vor allem aber: Was soll "clear the console before each output" heißen?
Warum auch "before"?
Und welcher Output?

Wenn ein Match gewonnen ist, wird das Programm ja eh beendet.
--
Ralf Westphal - One Man Think Tank
Hans-Henny-Jahnn-Weg 44
D-22085 Hamburg
Germany
Tel 0170-3200458

Ralf Westphal

unread,
Jan 19, 2012, 9:58:32 AM1/19/12
to Event based Components
Wer luschern will, der kann hier meine Flow-Diagramme für Iteration
1und 2 sehen:

https://cacoo.com/diagrams/cKT1Xh7LuiTpuNA0
https://cacoo.com/diagrams/omMOnkrrBWAVgx4w

Funktionseinheiten, die von einem Kasten umschlossen sind, habe ich in
einer Klasse zusammengefasst.
Funktionseinheiten, die einen fetteren Rand haben, haben mehr Gewicht.
Da spielt die Musik.

Hervorhebenswert: Ich habe mich dazu entschlossen, kein
Domänendatenmodell aufzubauen, sondern die Ergebnisse (Wer gewinnt
einen Aufschlag? Wer ein Set, ein Match?) in einem Eventstore zu
sammeln. Daraus wird am Ende der Ergebnisbericht generiert.
Das funktioniert für die beiden Iterationen gut, finde ich. Die
Anwendung von 1 nach 2 zu evolvieren, war simpel. Nur der Code für das
exakte Report-Layout macht meinen Spaß; deshalb hab ich den in
Iteration 2 auch ganz knapp gehalten. Es wäre für mich kein
Erkenntnisgewinn zu erwarten gewesen, hätte ich die Tabelle 100%
implementiert. Wichtig war für mich festtzustellen, ob dafür der
Eventstore ausreicht. Das tut er.

Iteration 3 muss jetzt etwas warten. Ich muss ein paar andere Dinge
erledigt. Die Kata hatte ich nur zwischengeschoben. (Aber auf einem
Hintergrundthread überlege ich aber, ob für Iteration 3 der Eventstore
immer noch eine gute Grundlage ist... :-)

In jedem Fall eine sehr interessante Aufgabe, die mich ins Grübeln
gebracht hat. Sich mit ihr zu beschäftigen, bringt die FD-Kunst voran,
würde ich sagen. Die Herausforderung: Wie mit Zustand umgehen?

On 18 Jan., 16:35, Ralf Westphal <ralf...@googlemail.com> wrote:
> Vor allem aber: Was soll "clear the console before each output" heißen?
> Warum auch "before"?
> Und welcher Output?
>
> Wenn ein Match gewonnen ist, wird das Programm ja eh beendet.
>
> Am 18. Januar 2012 15:59 schrieb Ulf Ninow <m...@fnumatic.de>:
>
> > Eine Anmerkung zu ersten Iteration:
>
> > "Clear the console before each output."
>
> > Das ist mit Java und Scala auf der Console ziemlich schwierig. Man kriegt
> > das hin aber es wäre technisch nicht ganz sauber.
>
> --
> Ralf Westphal - One Man Think Tank
> Hans-Henny-Jahnn-Weg 44
> D-22085 Hamburg
> Germany
> Tel 0170-3200458
> Email i...@ralfw.de
Reply all
Reply to author
Forward
0 new messages