Skip to content

Commit eddee34

Browse files
xerufYoEnte
andauthored
book/entwicklung: add python docs (#108)
* moved: java dedicated files into sub folder * change: python as official supported * add: python documentation * add: rule set for nice code style * fix: remove indexing numbers in files, adapt links purpose was lexicographical ordering in file system, but this could be annoying when adding files * fix: another two glossary links Co-authored-by: YoEnte <anthonyroeder@live.de> Co-authored-by: YoEnte <67060214+YoEnte@users.noreply.github.com>
1 parent 9756292 commit eddee34

25 files changed

+735
-56
lines changed

hyperbook/book/entwicklung/abgabe.md

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: Computerspieler abgabefertig machen
3-
index: 9
3+
index: 3
44
---
55

66
# Computerspieler abgabefertig machen
@@ -9,23 +9,34 @@ Damit das :t[Wettkampfsystem]{#contest} mit dem :t[Computerspieler]{#player} arb
99
muss er als ausführbares Programm in ein ZIP-Archiv verpackt werden.
1010

1111
Je nach Programmiersprache, in der der Spieler entwickelt wurde,
12-
sind unterschiedliche Schritte notwendig. </br>
13-
Für Java siehe [hier](Anleitung-Abgabe.md).
12+
sind unterschiedliche Schritte notwendig.
1413

1514
:::alert{info}
1615
In der Regel enthält die Spielervorlage alle nötigen Instruktionen zum Packen.
1716
:::
1817

1918
### Offizielle Spielervorlagen
20-
- [Java](https://github.com/software-challenge/backend/blob/main/player/configuration/README.md)
21-
- [Ruby](https://github.com/software-challenge/client-ruby/blob/main/README.md)
19+
20+
#### Java
21+
Anleitungen finden sich in der
22+
[Readme](https://github.com/software-challenge/backend/blob/main/player/configuration/README.md)
23+
des Repositories, und ergänzend dazu: [Hier](java/Anleitung-Abgabe.md) in der Dokumentation.
24+
25+
#### Python
26+
Eine Anleitungen dafür gibt es in der [Dokumentation](python/7-spieler-abgeben.md).
2227

2328
### Inoffizielle Spielervorlagen
29+
<!--
2430
- [C#](https://github.com/jnccd/socha-client-csharp/blob/master/README.md)
2531
- [C++](https://github.com/Estugon/sc-penguins-cpp/blob/main/README.md)
2632
- [Python](https://github.com/FalconsSky/socha-python-client/blob/master/README.md)
2733
- [Rust](https://github.com/fwcd/socha-client-rust-2023/blob/main/README.md)
2834
- [Swift](https://github.com/matthesjh/sc23-swift-client/blob/main/README.md)
35+
- [Ruby](https://github.com/software-challenge/client-ruby/blob/main/README.md)
36+
-->
37+
Für die aktuelle Saison gibt es bisher keine inoffiziellen Spielervorlagen.
38+
39+
## Generelles zum Upload
2940

3041
Das Hochladen des Spielers im Wettkampfsystem wird detailliert
3142
unter :t[Wettkampfsystem->Computerspieler]{#contest.computerspieler} beschrieben.
Lines changed: 79 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
name: Idee implementieren
3-
index: 8
3+
index: 2
44
---
55

66
# Eine Idee implementieren
77

88
Man hat einige Spiele absolviert und sich eine gute Strategie
99
ausgedacht. Damit hat man zwar schon einen wichtigen Teil der Arbeit
1010
geleistet, aber irgendwie muss dem
11-
[Computerspieler](software/client) noch beigebracht werden, nach
11+
:t[Computerspieler]{#player} noch beigebracht werden, nach
1212
dieser Strategie zu spielen.
1313

1414
Anhand einer kleinen Aufgabe soll gezeigt werden, wie man eine Idee
@@ -34,53 +34,87 @@ zunächst beschreiben, wie man als Mensch vorgehen würde.
3434

3535
3. Die kleinste Karte ist jetzt an der richtigen Position.
3636

37-
4. Führe die Schritte nochmal für den Reststapel (ohne die sortierten
37+
4. Führe die Schritte immer wieder für den Reststapel (ohne die sortierten
3838
Karten) aus.
3939

4040
### Idee implementieren
4141

4242
Nachdem man seine Idee formal niedergeschrieben hat, kann sie ganz
4343
leicht in ein Programm überführt werden:
4444

45-
/**
46-
* Das Array a[] symbolisiert den Stapel der unsortierten Karten. Dabei steht
47-
* eine Zahl immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
48-
* dass es sich um eine kleinere Karte handelt.
49-
*
50-
* start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
51-
*/
52-
public static void sortiere(int[] a, int start) {
53-
//Position der kleinsten Karte
54-
int pos = start;
55-
56-
// Gehe Array durch und merke die Position der kleinsten Karte
57-
for (int i = start+1; i < a.length; i++) {
58-
// Wenn eine kleinere Karte gefunden wurde...
59-
if (a[i] < a[pos]) {
60-
61-
... neue Position merken
62-
pos = i;
63-
}
64-
}
65-
66-
// kleinste Karte mit erster Karte des Reststapels tauschen
67-
int temp = a[start]; // erste Karte merken
68-
a[start] = a[pos]; // kleinste Karte nach vorne bringen
69-
a[pos] = temp; // gemerkte Karte in die Mitte des Stapels schreiben
70-
71-
// Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden
72-
if (start < a.length) {
73-
sortiere(a, start+1);
74-
}
75-
}
76-
77-
- Gehe den Stapel durch und merke die Position, an der sich die
78-
kleinste Karte befindet.
79-
80-
- Tausche die Position der kleinsten Karte mit der untersten Karte im
81-
Stapel.
82-
83-
- Die kleinste Karte ist jetzt an der richtigen Position.
84-
85-
- Führe die Schritte nochmal für den Reststapel (ohne die sortierten
86-
Karten) aus.
45+
#### Java
46+
47+
```java
48+
/**
49+
* Das Array a[] symbolisiert den Stapel der unsortierten Karten. Dabei steht
50+
* eine Zahl immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
51+
* dass es sich um eine kleinere Karte handelt.
52+
*
53+
* start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
54+
*/
55+
public static void sortiere(int[] a, int start) {
56+
// Position der kleinsten Karte
57+
int pos = start;
58+
59+
// Gehe Array durch und merke die Position der kleinsten Karte
60+
for (int i = start+1; i < a.length; i++) {
61+
// Wenn eine kleinere Karte gefunden wurde...
62+
if (a[i] < a[pos]) {
63+
64+
// ... neue Position merken
65+
pos = i;
66+
}
67+
}
68+
69+
// kleinste Karte mit erster Karte des Reststapels tauschen
70+
int temp = a[start]; // erste Karte merken
71+
a[start] = a[pos]; // kleinste Karte nach vorne bringen
72+
a[pos] = temp; // gemerkte Karte in die Mitte des Stapels schreiben
73+
74+
// Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden
75+
if (start < a.length) {
76+
sortiere(a, start+1);
77+
}
78+
}
79+
```
80+
81+
#### Python
82+
83+
```python
84+
# Die Liste a symbolisiert den Stapel der unsortieren Karten als Zahlen repräsentiert.
85+
# Dabei steht eine immer für eine spezielle Karte. Eine kleinere Zahl bedeutet,
86+
# dass es sich um eine kleinere Karte handelt.
87+
#
88+
# start gibt die Position an, wo der Reststapel beginnt (am Anfang: start = 0)
89+
#
90+
# Beachte: in Python müssen Datentypen nicht explizit angegeben werden, es hilft aber
91+
# möglicherweise bei der Entwicklung
92+
def sortiere(a: list[int], start: int):
93+
# Position der kleinsten Karte
94+
pos = start
95+
96+
# Gehe die Liste durch und merke die Position der kleinsten Karte
97+
for i in range(start + 1, len(a)):
98+
# Wenn eine kleinere Karte gefunden wurde...
99+
if a[i] < a[pos]:
100+
101+
# ... neue Position merken
102+
pos = i;
103+
104+
# kleinste Karte mit erster Karte des Reststapels tauschen
105+
temp = a[start]; # erste Karte merken
106+
a[start] = a[pos]; # kleinste Karte nach vorne zum sortierten Bereich bringen
107+
a[pos] = temp; # gemerkte Karte in die Mitte des Stapels schreiben
108+
109+
# Wenn es noch einen Reststapel gibt, soll dieser weitersortiert werden,
110+
# ansonsten gebe die sortierte Liste zurück
111+
if start < len(a) - 1:
112+
return sortiere(a, start+1);
113+
else:
114+
return a
115+
```
116+
117+
## Weiterführende Links
118+
119+
Wir haben hier den Sortieralgorithmus [Selection Sort](https://de.wikipedia.org/wiki/Selectionsort)
120+
rekursiv implementiert.

hyperbook/book/entwicklung/index.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ die den Start mit der Entwicklung erleichtern soll.
1313
## Die richtige Programmiersprache
1414

1515
Am einfachsten ist es natürlich,
16-
eine der offiziellen Spielervorlagen (Java, Ruby, Python) als Basis zu nutzen,
16+
eine der offiziellen Spielervorlagen (Java, Python) als Basis zu nutzen,
1717
allerdings könnt ihr auch eigene Clients in anderen Sprachen schreiben.
1818
Das ist mit mehr Arbeit verbunden,
1919
aber wenn ihr eine Sprache besonders gerne nutzt oder Vorteile seht,
@@ -51,3 +51,11 @@ welches man bei Galileo Computing als
5151
[Open-Book](http://openbook.galileocomputing.de/javainsel)
5252
kostenlos online betrachten und herunterladen kann.
5353
Man kann es dort ebenfalls als gedruckte Ausgabe bestellen.
54+
55+
### Python
56+
57+
Für Python gibt es eine direkt von der Python Organisation bereit gestellte Dokumentation.
58+
Diese ist für die Version 3.12.8 [hier](https://docs.python.org/3.12/) verfügbar und enthält auch ein Python-Tutorial.
59+
Wem das etwas unübersichtlich vorkommt, kann sich auch die bekannte Plattform [w3schools](https://www.w3schools.com/python/)
60+
zum Thema Python anschauen. Beide Ressourcen sind auf Englisch, aber es lassen sich sowohl im Text,
61+
als auch im Videoformat, viele weitere Einführungen in die Sprache Python im Internet finden.

hyperbook/book/entwicklung/Anleitung-Abgabe.md renamed to hyperbook/book/entwicklung/java/Anleitung-Abgabe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: Anleitung für Abgabe
3-
index: 10
3+
index: 9
44
---
55

66
# Computerspieler abgabefertig machen (Anleitung für Export aus der IDE für Java)
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
name: Java
3+
index: 8
4+
expanded: false
5+
---

hyperbook/book/entwicklung/installation-von-java.md renamed to hyperbook/book/entwicklung/java/installation-von-java.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: Installation von Java
3-
index: 5
3+
index: 1
44
---
55

66
# Installation von Java
File renamed without changes.

0 commit comments

Comments
 (0)