Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:ffprg2-2020:soi [2020/09/24 09:24] – created Ivo Blöchligerlehrkraefte:blc:informatik:ffprg2-2020:soi [2020/10/20 20:43] (current) – [Aufgabe 2, Geheimcode] Ivo Blöchliger
Line 1: Line 1:
 +====== Vorbereitung auf die Informatik-Olympiade ======
 +Siehe https://soi.ch/contests/2021/round1/ für die Aufgaben.
 +
 +====== Input/Output ======
 +Es geht darum, die Datenfiles einzulesen. Das soll direkt vom "Standard Input" erfolgen. Dazu müssen Zahlen und eventuell Strings korrekt geparst werden.
 +
 +Hier ein Vorschlage für die erste Aufgabe (stairrace):  
 +<code python>
 +import sys
 +
 +# Problem loesen
 +
 +def loesen(case, lang, links, rechts):
 +    # Loesung ausgeben
 +    print("Case #%d: %d" % (case, 42));
 +
 +
 +# Daten einlesen
 +# Alle print-statements müssen natürlich noch raus...
 +
 +ntest = int(sys.stdin.readline())
 +print("Es gibt %d Test-Fälle" % ntest)
 +for test in range(ntest):
 +    print("Testfall %d" % test)
 +    lang = int(sys.stdin.readline())
 +    links = [int(d) for d in sys.stdin.readline().split()]
 +    print(links)
 +    rechts = [int(d) for d in sys.stdin.readline().split()]
 +    print(rechts)
 +    print("Lösung:")
 +    loesen(test, lang, links, rechts)
 +    print("-"*20)
 +
 +</code>
 +Ausführen mit
 +  python stairrace.py < beispiel2.txt
 + 
 +
 +Und das gleiche in C++:
 +<code c++>
 +#include <iostream>
 +
 +using namespace std;
 +
 +void solve(int fall, int lang, int links[], int rechts[]) {
 +        cout << "Case #" << fall << " 42" << endl;
 +
 +}
 +
 +int main() {
 +        int n;
 +        cin >> n;
 +        cout << "Testcases : " << n << endl;
 +        for (int c=0; c<n; c++) {
 +                cout << "Testcase " << c << endl;
 +                int lang;
 +                cin >> lang;
 +                int hoch[2][lang];
 +                for (int seite=0; seite<2; seite++) {
 +                   for (int h=0; h<lang; h++) {
 +                           cin >> hoch[seite][h];
 +                           cout << hoch[seite][h] << " ";
 +                   }
 +                   cout << endl;
 +                }
 +                solve(c, lang, hoch[0], hoch[1]);
 +        }
 +
 +        return 0;
 +}
 +</code>
 +Übersetzen auf der Konsole (Terminal) mit
 +  g++ parse.cpp -o parse
 +und Ausführen mit
 +  ./parse < beispiel2.txt
 +wobei die in der Datei beispiel2.txt die Eingabe steht.
 +
 +
 +===== Aufgabe 1, Treppenlauf =====
 +Hinweis: Den Eingabe-Files sind die Lösungen angehängt, sollten aber vom Solver einfach ignoriert werden (weil nach allen Test-Cases).
 +
 +
 +  * Mehr Test-Cases für Teilaufgabe 3: {{ :lehrkraefte:blc:informatik:ffprg2-2020:stairrace3.txt |}} und {{ :lehrkraefte:blc:informatik:ffprg2-2020:stairrace3b.txt |}}
 +  * Mehr Test-Cases für Teilaufgabe 4 (ohne Gewähr für die Korrektheit): {{ :lehrkraefte:blc:informatik:ffprg2-2020:stairrace4.txt.gz |}}
 +
 +
 +===== Aufgabe 4, Batterie flicken =====
 +  * Teilaufgabe 3, {{ :lehrkraefte:blc:informatik:ffprg2-2020:a4-t3.txt |TestCases mit möglichen Lösungen}}