Skip to content

Wstęp do programowania - Wydział Matematyki, Informatyki i Matematyki Uniwersytetu Warszawskiego

License

Notifications You must be signed in to change notification settings

witek-formanski/WDP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wstęp do programowania

WDP* MIM UW

Test poziomujący

Ćwiczenia

Ćwiczenia I: Wstęp

  • [zad. 1.] stopień parzystości
  • [zad. 2.] odwracanie kolejności cyfr w liczbie
  • [zad. 3.] podłoga z pierwiastka; suma kolejnych liczb nieparzystych
  • [zad. 4.] szukanie następnej liczby, która w zapisie binarnym nie ma dwóch jedynek koło siebie
  • [zad. 5.] zliczanie wszystkich liczb rzadkich mniejszych od danej liczby
  • is_prime: [zad. 6.] sprawdzanie czy liczba jest pierwsza (C) ✅🔬
  • encode_in_one_integer: [zad. 7.] kodowanie pary liczb naturalnych jako liczbę naturalną (C)
  • modulo: [zad. 8.] czy pierścień reszt modulo n zawiera nietrywialne pierwiastki z 1 (C) ✅
  • count_zeros: [zad. 10.] ile jest zer na końcu n! (C)
  • count_ones: [zad. 12.] ile jest jedynek w zapisie binarnym liczby n (C)

Ćwiczenia III: Zadania na tablice

  • [zad. 1.] $n^{3}$
  • [zad. 2.] $n^{4}$
  • [zad. 3.]
    • $\frac{1}{n^{4}}$
    • $\frac{1}{n^{2}}$
  • [zad. 6.] znajdź minimalną liczbę ruchów potrzebnych do uzyskania danej konfiguracji wież Hanoi
  • [zad. 8.] cykl deterministycznej funkcji
  • [zad. 2.]
  • [zad. 3.]
  • [zad. 4.]
    • zad_4: autor: @pixelkubek (C++) ❌
    • zad_4: autor: @MrD4rkne (C++) ✅
  • [zad. 5.]
    • katastrofy stos indeksów, które wskazują na rosnące elementy (C++) ✅🔬
    • wtc_ms: autor: @MrD4rkne (C++) ✅
  • [zad. 6.]
    • zad_6: autor: @pixelkubek (C++) ✅
  • [zad. 7.] stos indeksów
  • [zad. 8.]
    • zad_8: autor: @pixelkubek (C++) ❌
  • [zad. 9.]
    • zad_9: autor: @pixelkubek (C) ✅
    • zad9_ms: autor: @MrD4rkne (C++) ✅
  • [zad. 10.]
  • [zad. 11.]
    • zad_11: autor: @pixelkubek (C++) ❌ (gorsza zlozonosc dla powtarzajacych sie elementow)
  • [zad. 12.]

Ćwiczenia VII: Zastosowanie sortowania

  • [zad. 1.]
    • bars O(n logn) znaleźć medianę, potem abs(t[i] - median) dla każdego elementu (C++)
    • bars_linear O(n) liniowe znajdowanie mediany (C++)
    • median_of_medians (C++)
    • zad1_ms: autor: @MrD4rkne (C++) ✅
    • zad1_jc: autor: @pixelkubek (C++)
  • [zad. 2.]
    • contains_triangle O(n), wystarczy sprawdzić trójki elementów dla indeksów k = j + 1 = i + 2 (C++)
    • zad2_ms: autor: @MrD4rkne (C++) ✅
    • zad2_jc: autor: @pixelkubek (C++)
  • [zad. 3.]
    • zad3_jc: autor: @pixelkubek (C++)
    • zad3_ms: autor: @MrD4rkne (C++) ✅
  • [zad. 4.]
  • [zad. 5.]
  • [zad. 6.] ilu maksymalnie kolegów Tomka może popłynąć na k-dniowy rejs (koledzy mogą się "teleportować")
  • [zad. 7.] ilu maksymalnie dni może trwać rejs, w którym bierze udział k kolegów Tomka (koledzy nie mogą się zamieniać)
    • zad_7: pomysł: @lbozyk, autor: @pixelkubek ✅

Ćwiczenia VIII: Listy i drzewa

Ćwiczenia IX: Find-union i grafy

  • [zad. 1.] skarbonki z kluczykami - graf cykliczny
  • [zad. 2.]
  • [zad. 3.]
  • [zad. 4.]
    • zad4_ms autor: @MrD4rkne (C++) ✅
  • [zad. 5.]
  • [zad. 6.]
    • zad6_ms autor: @MrD4rkne (C++) ✅
  • [zad. 7.]
    • zad7_ms autor: @MrD4rkne (C++) ✅
  • [zad. 8.]
    • zad8_ms autor: @MrD4rkne (C++) ✅
  • [zad. 9.] wyspy - graf macierz
    • islands 📝
    • wyspy: zlicza maksymalny rząd wyspy na mapie używając BFS+deque
    • zad9_ms autor: @MrD4rkne (C++) ✅
  • [zad. 10.] polaczenie
  • [zad. 11.]
  • [zad. 12.]
  • [zad. 13.]

Ćwiczenia X: Backtracking

Ćwiczenia XII: Programowanie zachłanne

Laboratoria

Laboratorium II: Gra w skakanie (NWD)

Zadania zaliczeniowe z laboratoriów

Kolokwia

Kolokwium I 2012/2013

  • [zad. 2.]
  • [zad. 1.]
    • zad1_jc: autor: @pixelkubek (C++) ✅
    • zad1_ms: autor: @MrD4rkne (C++) ✅
  • [zad. 2.]
  • [zad. 1.]
  • [zad. 2.]
    • zad2_ms: autor: @MrD4rkne (C++) ✅
  • [zad. 1.]
    • islands O(n logn) sortowanie indeksów względem oryginalnych wartości, liniowe "zalewanie" wysp (C++) ✅
    • zad1_ms: autor @MrD4rkne (C++) ✅
  • [zad. 2.]

Inne

Legenda

✅ skończony program (da się go uruchomić i wydaje się, że działa poprawnie)
❌ program z wykrytym bugiem
🔬 program przechodzący testy
📝 koncepcja bez implementacji

Instrukcja korzystania

Zostań kontrybutorem!

Jeśli rozwiązałeś zadanie innym sposobem, zaimplementowałeś nierozwiązane wcześniej zadanie lub po prostu chcesz się podzielić swoim kodem - nie krępuj się, wrzuć kod na repo. Razem stwórzmy bazę różnych rozwiązań i źródło do nauki dla każdego! Moje rozwiązania często nie są najoptymalniejsze, więc jeśli masz lepszy pomysł na zadanie, twój wkład będzie tym bardziej cenny.

Gdzie wrzucić kod (i testy)?

Jeżeli już zdecydujesz się podzeilić swoim kodem, umieść go w folderze src, w odpowiednim podfolderze - np. src/cw1/zad1. Idealnie, gdybyś do kodu dołączył testy - ostatecznie pliki .IN i .OUT powinny się znaleźć w folderze tests, zachowując dalszą ścieżkę analogiczną z plikiem z kodem (w tym przykładzie tests/cw1/zad1).

Jak napisać testy?

Jeśli twój program to power_of_two.c, to testy powinny nazywać się power_of_two0.in, power_of_two0.out, power_of_two1.in, power_of_two1.out... i powinieneś je umieścić w folderze c. Oczywiście pliki .IN zawierają input, a pliki .OUT oczekiwany output. Po każdym pushu na branch main testy automatycznie się uruchomią i ich wyniki będziesz mógł zobaczyć w szczegółach odpowiedniej githubowej akcji. Wszystkie testy odpalają się po skompilowaniu pliku z restykcyjnymi opcjami - dla kodów w C: configs/options, a dla C++: configs/optionsCpp.

Generowanie testów z CSV

Jeżeli jesteś leniwy i nie chce ci się dla każdego programu tworzyć ręcznie serii plików, możesz wpisać pary input-output do CSVki. Dla programu power_of_two.c będzie to przykładowo:

3,8
11,2048
12,4096

Następnie możesz skorzystać ze skryptu test_generator.py w folderze scripts, aby wygenerować pliki do testowania:

foo@WDP:~$ py scipts/test_generator.py other/power_of_two.csv power_of_two.c

Ręczne konfigurowanie testów

Jeżeli masz bardziej skomplikowany program, który przykładowo wymaga wskazania headera podczas kompilacji, możesz samodzielnie skonfigurować cały proces w .github/workflows/ci_pipeline.yml. Najlepiej, jeśli testy wrzucisz wtedy do folderu tests/manual.

Jak korzystać ze skryptów?

Szczególnie jeśli chcesz ręcznie skonfigurować testy, możesz potrzebować skorzystać ze skryptów. Wszystkie znajdują się w folderze scripts.

Skrypt compiler.py kompiluje kod napisany w C (z restrykcyjnymi opcjami configs/options) lub w C++ (z configs/optionsCpp).

foo@WDP:~$ py scipts/compiler.py src/power_of_two.c
foo@WDP:~$ py scipts/compiler.py src/power_of_two.cpp

Skrypt tester.py uruchamia podaną liczbę testów dla danego pliku. Uwaga! Należy podać numer ostatniego testu (czyli o jeden mniej niż jest testów, bo numerację zaczynamy od zera). Jeżeli chcesz przetestować program power_of_two i mamy testy (pliki .IN i .OUT w folderach odpowiednich dla rozszerzenia) o numerach 0, 1, 2, to napisz:

foo@WDP:~$ py scipts/tester.py src/power_of_two.c 2
foo@WDP:~$ py scipts/tester.py src/power_of_two.cpp 2

Jeżeli nasz kod wymaga niestandardowej kompilacji i testy do niego znajdują się w folderze tests/manual, wtedy napisz:

foo@WDP:~$ py scipts/tester.py src/power_of_two.c 2 manual

Skrypt test_detector.py służy do automatycznego wykrywania testów i najlepiej zrozumieć jego działanie, zaglądając do .github/workflows/ci_pipeline.yml.

Skrypt space_to_underscore.sh zamienia spacje na znaki podkreślenia w folderze problems.

About

Wstęp do programowania - Wydział Matematyki, Informatyki i Matematyki Uniwersytetu Warszawskiego

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages