diff --git a/C/1dvelocitysimulator/main.c b/C/1dvelocitysimulator/main.c index 0a9ee10..5b0c967 100644 --- a/C/1dvelocitysimulator/main.c +++ b/C/1dvelocitysimulator/main.c @@ -1,168 +1,168 @@ -#include -#include -#include -#include -#define LINE_LENGTH 100 - -void C() -{ - printf("\nCheck\n"); - return; -} - -void printAcceleration(int acceleration) -{ - printf("The value of acceleration is: %d\n", acceleration); - system("PAUSE"); - return; -} - -void pauseSystem() { system("PAUSE"); } - -void clearScreen() -{ - system("CLS"); - return; -} - -void pauseForASecond() -{ - Sleep(1000); - return; -} - -void pauseForGivenTime(float given_time) -{ - Sleep(fabs(given_time * 1000)); - return; -} - -float calculateVelocity(float starting_velocity, unsigned int physics_time, int *acceleration) -{ - return (*acceleration) * physics_time + starting_velocity; -} - -int calculateDisplacement(float starting_velocity, int *acceleration, unsigned int physics_time) -{ - return starting_velocity * physics_time + ((1 / 2) * (*acceleration) * (physics_time ^ 2)); -} - -void printXPosition(int position) -{ - printf("\nx position is: %d\n", position); - return; -} - -void printClock(unsigned int *time) -{ - printf("%d seconds passed\n", *time); - return; -} - -float calculateStopTime(float velocity) { return 1 / velocity; } - -void printLine(int position) -{ - clearScreen(); - for (int i = -(LINE_LENGTH / 2); i < LINE_LENGTH / 2; i++) - { - if (i == position) - printf("x"); - else - printf("-"); - } - return; -} - -void printVelocity(float velocity) -{ - printf("Velocity is: %f\n", velocity); - return; -} - -int calculateTimePassed(float velocity) -{ - if (velocity >= 1 || velocity <= -1) - return 1; - else - { - printf("Time passed is: %f\n", fabs(1 / velocity)); - return fabs(1 / velocity); - } -} - -void printAllInfo(int position, unsigned int *time, float *velocity) -{ - pauseForGivenTime(calculateStopTime(*velocity)); - printLine(position); - printXPosition(position); - *time += calculateTimePassed(*velocity); - printClock(time); - printVelocity(*velocity); - // pauseForASecond(); - return; -} - -float chooseVelocity() -{ - float velocity; - printf("Write velocity of the object in m / s: "); - scanf("%f", &velocity); - return velocity; -} - -int chooseAcceleration() -{ - int acceleration; - printf("Choose acceleration of the object in m / (s ^ 2):"); - scanf("%d", &acceleration); - return acceleration; -} - -int outOfLine(int position) -{ - if ((position < LINE_LENGTH / 2) && (position > -1 * (LINE_LENGTH / 2))) - { - return 0; - } - else - return 1; -} - -void moveUntillOutOfLine(int position, unsigned int *time) -{ - while (!outOfLine(position)) - { - float velocity = chooseVelocity(); - float *Pvelocity = &velocity; - position += calculateDisplacement(velocity, 0, 1); - printAllInfo(position, time, Pvelocity); - } - return; -} - -void moveUntillOutOfVelocity(int position, int *acceleration, unsigned int *time) -{ - float velocity = 0; - float *Pvelocity = &velocity; - while (!outOfLine(position)) - { - position += calculateDisplacement(velocity, acceleration, 1); - printXPosition(position); - pauseSystem(); - velocity = calculateVelocity(velocity, 1, acceleration); - printAllInfo(position, time, Pvelocity); - } - return; -} - -int main() -{ - int position = 0, acceleration = -1; - int *Pacceleration = &acceleration; - unsigned int time = 0; - unsigned int *Ptime = &time; - moveUntillOutOfLine(position, Ptime); - // moveUntillOutOfVelocity(position, Pacceleration, Ptime); - return 0; -} +#include +#include +#include +#include +#define LINE_LENGTH 100 + +void C() +{ + printf("\nCheck\n"); + return; +} + +void printAcceleration(int acceleration) +{ + printf("The value of acceleration is: %d\n", acceleration); + system("PAUSE"); + return; +} + +void pauseSystem() { system("PAUSE"); } + +void clearScreen() +{ + system("CLS"); + return; +} + +void pauseForASecond() +{ + Sleep(1000); + return; +} + +void pauseForGivenTime(float given_time) +{ + Sleep(fabs(given_time * 1000)); + return; +} + +float calculateVelocity(float starting_velocity, unsigned int physics_time, int *acceleration) +{ + return (*acceleration) * physics_time + starting_velocity; +} + +int calculateDisplacement(float starting_velocity, int *acceleration, unsigned int physics_time) +{ + return starting_velocity * physics_time + ((1 / 2) * (*acceleration) * (physics_time ^ 2)); +} + +void printXPosition(int position) +{ + printf("\nx position is: %d\n", position); + return; +} + +void printClock(unsigned int *time) +{ + printf("%d seconds passed\n", *time); + return; +} + +float calculateStopTime(float velocity) { return 1 / velocity; } + +void printLine(int position) +{ + clearScreen(); + for (int i = -(LINE_LENGTH / 2); i < LINE_LENGTH / 2; i++) + { + if (i == position) + printf("x"); + else + printf("-"); + } + return; +} + +void printVelocity(float velocity) +{ + printf("Velocity is: %f\n", velocity); + return; +} + +int calculateTimePassed(float velocity) +{ + if (velocity >= 1 || velocity <= -1) + return 1; + else + { + printf("Time passed is: %f\n", fabs(1 / velocity)); + return fabs(1 / velocity); + } +} + +void printAllInfo(int position, unsigned int *time, float *velocity) +{ + pauseForGivenTime(calculateStopTime(*velocity)); + printLine(position); + printXPosition(position); + *time += calculateTimePassed(*velocity); + printClock(time); + printVelocity(*velocity); + // pauseForASecond(); + return; +} + +float chooseVelocity() +{ + float velocity; + printf("Write velocity of the object in m / s: "); + scanf("%f", &velocity); + return velocity; +} + +int chooseAcceleration() +{ + int acceleration; + printf("Choose acceleration of the object in m / (s ^ 2):"); + scanf("%d", &acceleration); + return acceleration; +} + +int outOfLine(int position) +{ + if ((position < LINE_LENGTH / 2) && (position > -1 * (LINE_LENGTH / 2))) + { + return 0; + } + else + return 1; +} + +void moveUntillOutOfLine(int position, unsigned int *time) +{ + while (!outOfLine(position)) + { + float velocity = chooseVelocity(); + float *Pvelocity = &velocity; + position += calculateDisplacement(velocity, 0, 1); + printAllInfo(position, time, Pvelocity); + } + return; +} + +void moveUntillOutOfVelocity(int position, int *acceleration, unsigned int *time) +{ + float velocity = 0; + float *Pvelocity = &velocity; + while (!outOfLine(position)) + { + position += calculateDisplacement(velocity, acceleration, 1); + printXPosition(position); + pauseSystem(); + velocity = calculateVelocity(velocity, 1, acceleration); + printAllInfo(position, time, Pvelocity); + } + return; +} + +int main() +{ + int position = 0, acceleration = -1; + int *Pacceleration = &acceleration; + unsigned int time = 0; + unsigned int *Ptime = &time; + moveUntillOutOfLine(position, Ptime); + // moveUntillOutOfVelocity(position, Pacceleration, Ptime); + return 0; +} diff --git a/C/fps/README.md b/C/fps/README.md index d89404a..d11a890 100644 --- a/C/fps/README.md +++ b/C/fps/README.md @@ -1,6 +1,7 @@ # Simple OpenGL FPS (C + FreeGLUT) A tiny first-person demo using legacy OpenGL (compat) and FreeGLUT: + - Move with WASD, hold Tab or Q to sprint - Aim with mouse (captured by default). Press M to toggle capture - Shoot with Left Mouse or Space. Hit the red cube to score; it respawns @@ -24,9 +25,11 @@ make -C C/fps run ``` If your distro uses different package names, install the equivalents of: + - libgl1, libglu1, freeglut (dev headers) ## Notes + - This uses old-school fixed-function OpenGL for simplicity and broad compatibility. - Mouse is confined via glutWarpPointer; press M if you need to release it. - SDL2 is used only for simple procedurally generated sound effects (shoot, hit, game over). diff --git a/C/imageViewer/.vscode/settings.json b/C/imageViewer/.vscode/settings.json index 80ef480..631ffc4 100644 --- a/C/imageViewer/.vscode/settings.json +++ b/C/imageViewer/.vscode/settings.json @@ -11,21 +11,21 @@ "C_Cpp.default.compilerPath": "/usr/bin/gcc", "C_Cpp.clang_format_style": "file", "C_Cpp.clang_format_fallbackStyle": "LLVM", - + "files.associations": { "*.h": "c", "*.c": "c" }, - + "editor.formatOnSave": true, "editor.tabSize": 4, "editor.insertSpaces": true, "editor.rulers": [100], - + "clang-tidy.executable": "clang-tidy", "clang-tidy.checks": [ "clang-diagnostic-*", - "clang-analyzer-*", + "clang-analyzer-*", "bugprone-*", "cert-*", "misc-*", @@ -33,7 +33,7 @@ "portability-*", "readability-*" ], - + "cppcheck.enable": true, "cppcheck.standard": ["c99"], "cppcheck.suppress": [ diff --git a/C/imageViewer/SECURITY.md b/C/imageViewer/SECURITY.md index 0c65d3d..2de4a61 100644 --- a/C/imageViewer/SECURITY.md +++ b/C/imageViewer/SECURITY.md @@ -7,7 +7,7 @@ The imageviewer project uses secure coding practices with proper bounds checking ### Why These Warnings Appear The static analyzer flags standard C library functions like: -- `memcpy()` - suggests using `memcpy_s()` +- `memcpy()` - suggests using `memcpy_s()` - `snprintf()` - suggests using `snprintf_s()` - `strncpy()` - suggests using `strncpy_s()` diff --git a/C/imageViewer/install_arch.sh b/C/imageViewer/install_arch.sh index f983792..5ef01be 100755 --- a/C/imageViewer/install_arch.sh +++ b/C/imageViewer/install_arch.sh @@ -112,16 +112,16 @@ install_dependencies() { build_imageviewer() { print_step "Building imageviewer..." - + # Check if we're in the right directory if [[ ! -f "main.c" ]] || [[ ! -f "Makefile" ]]; then print_error "main.c or Makefile not found. Please run this script from the imageViewer directory." exit 1 fi - + # Clean any previous builds make clean 2>/dev/null || true - + # Build the project if make; then print_success "Build completed successfully" @@ -129,35 +129,35 @@ build_imageviewer() { print_error "Build failed" exit 1 fi - + # Verify the binary was created if [[ ! -f "imageviewer" ]]; then print_error "imageviewer binary not found after build" exit 1 fi - + print_success "imageviewer binary created" } install_binary() { print_step "Installing imageviewer to ${INSTALL_DIR}..." - + # Create install directory if it doesn't exist sudo mkdir -p "${INSTALL_DIR}" - + # Copy the binary sudo cp imageviewer "${INSTALL_DIR}/" sudo chmod +x "${INSTALL_DIR}/imageviewer" - + print_success "imageviewer installed to ${INSTALL_DIR}/imageviewer" } create_desktop_entry() { print_step "Creating desktop entry..." - + # Create applications directory if it doesn't exist sudo mkdir -p "${DESKTOP_FILE_DIR}" - + # Create desktop file sudo tee "${DESKTOP_FILE_DIR}/imageviewer.desktop" > /dev/null << EOF [Desktop Entry] @@ -179,10 +179,10 @@ EOF create_simple_icon() { print_step "Creating application icon..." - + # Create icon directory if it doesn't exist sudo mkdir -p "${ICON_DIR}" - + # Create a simple text-based icon (SVG) sudo tee "${ICON_DIR}/imageviewer.svg" > /dev/null << 'EOF' @@ -201,7 +201,7 @@ EOF update_desktop_database() { print_step "Updating desktop database..." - + if command -v update-desktop-database &> /dev/null; then sudo update-desktop-database "${DESKTOP_FILE_DIR}" 2>/dev/null || true print_success "Desktop database updated" @@ -212,11 +212,11 @@ update_desktop_database() { set_default_image_viewer() { print_step "Setting imageviewer as default image viewer..." - + # List of MIME types for images local mime_types=( "image/jpeg" - "image/jpg" + "image/jpg" "image/png" "image/bmp" "image/gif" @@ -224,34 +224,34 @@ set_default_image_viewer() { "image/tif" "image/webp" ) - + # Set default application for each MIME type for mime_type in "${mime_types[@]}"; do if command -v xdg-mime &> /dev/null; then xdg-mime default imageviewer.desktop "$mime_type" 2>/dev/null || true fi done - + # Also update MIME database if available if command -v update-mime-database &> /dev/null; then sudo update-mime-database /usr/share/mime 2>/dev/null || true fi - + print_success "imageviewer set as default image viewer" } test_installation() { print_step "Testing installation..." - + # Check if binary is in PATH if command -v imageviewer &> /dev/null; then print_success "imageviewer is available in PATH" - + # Show version/help echo -e "${BLUE}Running imageviewer --help equivalent:${NC}" echo "Usage: imageviewer " echo "Supported formats: JPG, JPEG, PNG, BMP, GIF, TIF" - + # Test default application association if command -v xdg-mime &> /dev/null; then local default_app=$(xdg-mime query default image/jpeg 2>/dev/null) @@ -261,7 +261,7 @@ test_installation() { print_warning "Default image viewer association may not have been set correctly" fi fi - + else print_error "imageviewer not found in PATH. Installation may have failed." exit 1 @@ -311,10 +311,10 @@ main() { echo -e "${BLUE}ImageViewer Installation Script for Arch Linux${NC}" echo "==============================================" echo - + check_arch check_permissions - + # Show what the script will do echo -e "${YELLOW}This script will:${NC}" echo " 1. Install SDL2 dependencies via pacman" @@ -323,7 +323,7 @@ main() { echo " 4. Create a desktop entry" echo " 5. Set imageviewer as default image viewer" echo - + install_dependencies build_imageviewer install_binary diff --git a/C/imageViewer/lint.sh b/C/imageViewer/lint.sh index 8a095d1..6bd2613 100755 --- a/C/imageViewer/lint.sh +++ b/C/imageViewer/lint.sh @@ -1,5 +1,5 @@ -# Lint script for imageViewer project #!/bin/bash +# Lint script for imageViewer project set -e @@ -29,25 +29,25 @@ print_error() { # Check if required tools are installed check_tools() { print_step "Checking required tools..." - + local missing_tools=() - + if ! command -v clang-tidy &> /dev/null; then missing_tools+=("clang-tidy") fi - + if ! command -v cppcheck &> /dev/null; then missing_tools+=("cppcheck") fi - + if ! command -v clang-format &> /dev/null; then missing_tools+=("clang-format") fi - + if [ ${#missing_tools[@]} -ne 0 ]; then print_error "Missing required tools: ${missing_tools[*]}" print_step "Installing missing tools..." - + # Check if we're on Arch Linux if command -v pacman &> /dev/null; then sudo pacman -S --needed clang cppcheck @@ -60,14 +60,14 @@ check_tools() { exit 1 fi fi - + print_success "All required tools are available" } # Run clang-tidy run_clang_tidy() { print_step "Running clang-tidy analysis..." - + if [ -f ".clang-tidy" ]; then clang-tidy main.c -- -I/usr/include/SDL2 -D_REENTRANT 2>/dev/null || { print_warning "clang-tidy found issues (see output above)" @@ -78,26 +78,26 @@ run_clang_tidy() { print_warning "clang-tidy found issues (see output above)" } fi - + print_success "clang-tidy analysis completed" } # Run cppcheck run_cppcheck() { print_step "Running cppcheck analysis..." - + cppcheck --enable=all --check-level=exhaustive --suppress=missingIncludeSystem \ --quiet --std=c23 main.c || { print_warning "cppcheck found issues (see output above)" } - + print_success "cppcheck analysis completed" } # Check code formatting check_formatting() { print_step "Checking code formatting..." - + if [ -f ".clang-format" ]; then if clang-format --dry-run --Werror main.c 2>/dev/null; then print_success "Code formatting is correct" @@ -113,7 +113,7 @@ check_formatting() { # Run basic compile check compile_check() { print_step "Running compile check..." - + # Try to compile with extra warnings if gcc -Wall -Wextra -Wpedantic -std=c99 -O2 \ $(pkg-config --cflags sdl2 2>/dev/null || echo "-I/usr/include/SDL2") \ @@ -132,27 +132,27 @@ compile_check() { # Check for common C issues check_common_issues() { print_step "Checking for common C issues..." - + local issues=0 - + # Check for TODO/FIXME comments if grep -n "TODO\|FIXME\|XXX\|HACK" main.c 2>/dev/null; then print_warning "Found TODO/FIXME comments" issues=$((issues + 1)) fi - + # Check for potential buffer overflows if grep -n "strcpy\|strcat\|sprintf\|gets" main.c 2>/dev/null; then print_warning "Found potentially unsafe string functions" issues=$((issues + 1)) fi - + # Check for magic numbers (basic check) if grep -E "\b[0-9]{3,}\b" main.c | grep -v "printf\|#define" 2>/dev/null; then print_warning "Found potential magic numbers" issues=$((issues + 1)) fi - + if [ $issues -eq 0 ]; then print_success "No common issues found" fi @@ -163,31 +163,31 @@ main() { echo -e "${BLUE}C Language Linter for imageViewer Project${NC}" echo "==========================================" echo - + # Check if we're in the right directory if [ ! -f "main.c" ]; then print_error "main.c not found. Please run this script from the imageViewer directory." exit 1 fi - + check_tools echo - + compile_check echo - + run_clang_tidy echo - + run_cppcheck echo - + check_formatting echo - + check_common_issues echo - + print_success "Linting completed!" echo echo -e "${BLUE}Available commands:${NC}" diff --git a/C/imageViewer/main.c b/C/imageViewer/main.c index 35f32fd..4ef169b 100644 --- a/C/imageViewer/main.c +++ b/C/imageViewer/main.c @@ -1415,4 +1415,4 @@ static int save_processed_image(const ImageViewer *viewer) { printf("Saved %s image: %s\n", any_trim ? "trimmed" : "rotated", out_path); } return 1; -} \ No newline at end of file +} diff --git a/C/imageViewer/uninstall_arch.sh b/C/imageViewer/uninstall_arch.sh index e993cfc..8780e31 100755 --- a/C/imageViewer/uninstall_arch.sh +++ b/C/imageViewer/uninstall_arch.sh @@ -34,7 +34,7 @@ print_error() { remove_files() { print_step "Removing imageviewer files..." - + # Remove binary if [[ -f "${INSTALL_DIR}/imageviewer" ]]; then sudo rm "${INSTALL_DIR}/imageviewer" @@ -42,7 +42,7 @@ remove_files() { else print_warning "Binary not found at ${INSTALL_DIR}/imageviewer" fi - + # Remove desktop entry if [[ -f "${DESKTOP_FILE_DIR}/imageviewer.desktop" ]]; then sudo rm "${DESKTOP_FILE_DIR}/imageviewer.desktop" @@ -50,7 +50,7 @@ remove_files() { else print_warning "Desktop entry not found" fi - + # Remove icon if [[ -f "${ICON_DIR}/imageviewer.svg" ]]; then sudo rm "${ICON_DIR}/imageviewer.svg" @@ -62,11 +62,11 @@ remove_files() { reset_default_associations() { print_step "Resetting default image viewer associations..." - + # List of MIME types for images local mime_types=( "image/jpeg" - "image/jpg" + "image/jpg" "image/png" "image/bmp" "image/gif" @@ -74,7 +74,7 @@ reset_default_associations() { "image/tif" "image/webp" ) - + # Reset default application for each MIME type for mime_type in "${mime_types[@]}"; do if command -v xdg-mime &> /dev/null; then @@ -89,13 +89,13 @@ reset_default_associations() { fi fi done - + print_success "Default image viewer associations reset" } update_desktop_database() { print_step "Updating desktop database..." - + if command -v update-desktop-database &> /dev/null; then sudo update-desktop-database "${DESKTOP_FILE_DIR}" 2>/dev/null || true print_success "Desktop database updated" @@ -108,7 +108,7 @@ main() { echo -e "${BLUE}ImageViewer Uninstallation Script${NC}" echo "=================================" echo - + # Show what will be removed echo -e "${YELLOW}This script will remove:${NC}" echo " - ${INSTALL_DIR}/imageviewer" @@ -117,11 +117,11 @@ main() { echo echo -e "${YELLOW}Note: Dependencies (SDL2 libraries) will NOT be removed.${NC}" echo - + remove_files reset_default_associations update_desktop_database - + echo echo -e "${GREEN}ImageViewer has been successfully uninstalled!${NC}" echo diff --git a/C/lichess_random_engine/micro_max.c b/C/lichess_random_engine/micro_max.c index fa410f0..7806d1f 100644 --- a/C/lichess_random_engine/micro_max.c +++ b/C/lichess_random_engine/micro_max.c @@ -747,4 +747,4 @@ int main(int argc, char **argv) printf("}\n"); free(arr); return 0; -} \ No newline at end of file +} diff --git a/C/lichess_random_engine/movegen.h b/C/lichess_random_engine/movegen.h index c60814b..d91973a 100644 --- a/C/lichess_random_engine/movegen.h +++ b/C/lichess_random_engine/movegen.h @@ -69,4 +69,4 @@ int in_check(const Position *pos, Color side); int gen_moves(const Position *pos, Move *moves, int max_moves, int captures_only); int gen_moves_pseudo(const Position *pos, Move *moves, int max_moves, int captures_only); -#endif // MOVEGEN_H \ No newline at end of file +#endif // MOVEGEN_H diff --git a/C/lichess_random_engine/search.h b/C/lichess_random_engine/search.h index b707b4d..b943946 100644 --- a/C/lichess_random_engine/search.h +++ b/C/lichess_random_engine/search.h @@ -21,4 +21,4 @@ int evaluate(const Position *pos); // Negamax alpha-beta returning score in centipawns from side-to-move perspective. int alphabeta(Position pos, int depth, int alpha, int beta, PrincipalVariation *pv); -#endif // SEARCH_H \ No newline at end of file +#endif // SEARCH_H diff --git a/C/misc/generatingWordsEndingWIthalka.c b/C/misc/generatingWordsEndingWIthalka.c index 1a417bb..df443e6 100644 --- a/C/misc/generatingWordsEndingWIthalka.c +++ b/C/misc/generatingWordsEndingWIthalka.c @@ -1,12 +1,12 @@ -#include - -const int NUMBER_FOR_POLISH_SMALL_L = 136; - -int main(void) -{ - for (char i = 'a'; i < 'z' + 1; ++i) - { - printf("%ca%cka\n", i, NUMBER_FOR_POLISH_SMALL_L); - } - return 0; -} +#include + +const int NUMBER_FOR_POLISH_SMALL_L = 136; + +int main(void) +{ + for (char i = 'a'; i < 'z' + 1; ++i) + { + printf("%ca%cka\n", i, NUMBER_FOR_POLISH_SMALL_L); + } + return 0; +} diff --git a/C/misc/randomJPG/.gitignore b/C/misc/randomJPG/.gitignore new file mode 100644 index 0000000..c35775a --- /dev/null +++ b/C/misc/randomJPG/.gitignore @@ -0,0 +1,4 @@ +*.jpeg +*.jpg +generated_images*/* +generate_images diff --git a/C/misc/randomJPG/Readme.md b/C/misc/randomJPG/Readme.md new file mode 100644 index 0000000..508191d --- /dev/null +++ b/C/misc/randomJPG/Readme.md @@ -0,0 +1,6 @@ +Did you ever need to generate random jpg images with huge file size? Now you can! \\ +Compilation: Install libjpeg-dev \\ +sudo apt-get install libjpeg-dev \\ +Run make \\ +make \\ +Run ./generate_images diff --git a/C/misc/split/.gitignore b/C/misc/split/.gitignore new file mode 100644 index 0000000..075ea8d --- /dev/null +++ b/C/misc/split/.gitignore @@ -0,0 +1 @@ +split diff --git a/C/opening_learner/README.md b/C/opening_learner/README.md index 31176c2..33ce054 100644 --- a/C/opening_learner/README.md +++ b/C/opening_learner/README.md @@ -18,9 +18,11 @@ Run: ``` Tips: + - ESC clears selection. - Press `m` to cycle to a stored mistake position and practice the best move there. - If you play Black, the board flips so Black is at the bottom. Notes: + - Rendering avoids TTF dependency; pieces are clear, high-contrast geometric glyphs. diff --git a/C/scrapeWebsite/.gitignore b/C/scrapeWebsite/.gitignore new file mode 100644 index 0000000..76fcb53 --- /dev/null +++ b/C/scrapeWebsite/.gitignore @@ -0,0 +1,65 @@ +# JPEG +*.jpg +*.jpeg +*.jpe +*.jif +*.jfif +*.jfi + +# JPEG 2000 +*.jp2 +*.j2k +*.jpf +*.jpx +*.jpm +*.mj2 + +# JPEG XR +*.jxr +*.hdp +*.wdp + +# Graphics Interchange Format +*.gif + +# RAW +*.raw + +# Web P +*.webp + +# Portable Network Graphics +*.png + +# Animated Portable Network Graphics +*.apng + +# Multiple-image Network Graphics +*.mng + +# Tagged Image File Format +*.tiff +*.tif + +# Scalable Vector Graphics +*.svg +*.svgz + +# Portable Document Format +*.pdf + +# X BitMap +*.xbm + +# BMP +*.bmp +*.dib + +# ICO +*.ico + +# 3D Images +*.3dm +*.max + +scrape diff --git a/C/tests/generatingPolishLettersOnWindowsTerminal.c b/C/tests/generatingPolishLettersOnWindowsTerminal.c index a85765c..d69be9a 100644 --- a/C/tests/generatingPolishLettersOnWindowsTerminal.c +++ b/C/tests/generatingPolishLettersOnWindowsTerminal.c @@ -1,10 +1,10 @@ -#include -#include -#include - -int main() -{ - printf("Henlo\n"); - sleep(20); - return 0; -} +#include +#include +#include + +int main() +{ + printf("Henlo\n"); + sleep(20); + return 0; +} diff --git a/CPP/SFMLEngine/readme.md b/CPP/SFMLEngine/readme.md new file mode 100644 index 0000000..7d43375 --- /dev/null +++ b/CPP/SFMLEngine/readme.md @@ -0,0 +1,5 @@ +# Textures and Audio used: + +## Space Game Starter Set by [hc](https://opengameart.org/users/hc) - https://opengameart.org/content/space-game-starter-set + +## 100 seamless textures by [Mitch Featherston](http://pdtextures.blogspot.com/) (Submitted by [Clint Bellanger](https://opengameart.org/users/clint-bellanger) - https://opengameart.org/content/100-seamless-textures diff --git a/CPP/miscelanious/Pi/main.cpp b/CPP/miscelanious/Pi/main.cpp new file mode 100644 index 0000000..9c91a24 --- /dev/null +++ b/CPP/miscelanious/Pi/main.cpp @@ -0,0 +1,25 @@ +#include +#include +#include + +const unsigned long long int ITERATIONS = 10000; + +long double getPi() +{ + long double pi = 4; + bool negative = 1; + for(unsigned int i = 3; i < ITERATIONS; i += 2) + { + if(negative) pi -= 4.0 / i; + else pi += 4.0 / i; + negative = !negative; + } + std::cout << std::setprecision(2000) << pi << std::endl; + return pi; +} + +int main() +{ + getPi(); + return 0; +} diff --git a/CPP/miscelanious/brydz/brydz.cpp b/CPP/miscelanious/brydz/brydz.cpp new file mode 100644 index 0000000..b58b483 --- /dev/null +++ b/CPP/miscelanious/brydz/brydz.cpp @@ -0,0 +1,410 @@ +#include +#include + +const std::vector ATUTY = {"BA", "Trefl", "Karo", "Kier", "Pik"}; +const bool A_ID = 0; +const bool B_ID = 1; +const std::vector GRACZE = {}; +const std::vector PO_PARTII {"Nikt", GRACZE[A_ID], GRACZE[B_ID], "Obaj Gracze"}; +const int DOMYSLNE_LEWY = 6; +const int BEZ_ATUTU_ID = 1; +const int TREFL_ID = 2; +const int KARO_ID = 3; +const int KIER_ID = 4; +const int PIK_ID = 5; +const int SZLEMIK = 6; +const int SZLEM = 7; +const int CYKL_PO_PARTII = 4; +const int MAKSYMALNY_LEW = 7; +const int MINIMALNY_LEW = 1; +const int ILOSC_LEW = 13; + +void print(const std::string s) +{ + std::cout << s << std::endl; +} + +void tabela(std::vector punktyA, std::vector punktyB) +{ + + std::cout << "Numer Gry" << " Po Partii" << " " << GRACZE[A_ID] << " " << GRACZE[B_ID] << std::endl; + for(int i = 0; i < punktyA.size(); i++) + { + + std::cout << i + 1 << " " << PO_PARTII[i % CYKL_PO_PARTII] << " " << punktyA[i] << " " << punktyB[i] << std::endl; + } +} + +void lwyAtut(int lwy, int atut) +{ + if(lwy == SZLEMIK) + { + print("Wybrano szlemik!"); + return; + } + if(lwy == SZLEM) + { + print("Wybrano szlema!"); + return; + } + std::cout << "Wybrano kontrakt: " << lwy << " " << ATUTY[atut - 1] << std::endl; +} + +int zagraneLwy() +{ + int lwy; + bool flagaLwy; + do + { + flagaLwy = 0; + print("Ile lew?"); + char lwyC; + std::cin >> lwyC; + lwy = lwyC - '0'; + if(lwy < MINIMALNY_LEW) + { + print("Podales za malo lew!"); + flagaLwy = 1; + } + + if(lwy > MAKSYMALNY_LEW) + { + print("Podales za duzo lew!"); + flagaLwy = 1; + } + }while(flagaLwy); + return lwy; +} + +int zagranyAtut(int lwy) +{ + int atut; + bool flagaAtut; + if(lwy > 6) return 1; + do + { + flagaAtut = 0; + print("Jaki atut?"); + print("1 - BA"); + print("2 - Trefl"); + print("3 - Karo"); + print("4 - Kier"); + print("5 - Pik"); + char atutC; + std::cin >> atutC; + atut = atutC - '0'; + if(atut < 1 || atut > 5) + { + print("Wybrales zla liczbe!"); + flagaAtut = 1; + } + }while(flagaAtut); + return atut; +} + +bool zagranaKontra() +{ + char kontraC = '0'; + print("Czy zostala zagrana kontra?"); + print("1 - TAK"); + print("0 - NIE"); + std::cin >> kontraC; + bool kontraBool = kontraC - '0'; + return kontraBool; +} + +bool zagranaRekontra() +{ + char rekontraC = '0'; + print("Czy zostala zagrana rekontra?"); + print("1 - TAK"); + print("0 - NIE"); + std::cin >> rekontraC; + bool rekontraBool = rekontraC - '0'; + return rekontraBool; +} + +void stanGry(int lwy, int atut, bool kontraBool, bool rekontraBool, int ktoraGra, int ktoKontrakt) +{ + std::cout << "Kontrakt Wygrali: " << GRACZE[ktoKontrakt] << std::endl; + lwyAtut(lwy, atut); + if(kontraBool) + { + if(rekontraBool) print("Zostala zagrana REkontra!"); + else print("Zostala zagrana Kontra!"); + } + std::cout << "Po partii sa: " << PO_PARTII[ktoraGra % 4] << std::endl; +} + +int ktoKontrakt() +{ + char ktoKontraktC; + print("Kto wygral Kontrakt?"); + std::cout << "1. " << GRACZE[A_ID] << std::endl; + std::cout << "2. " << GRACZE[B_ID] << std::endl; + std::cin >> ktoKontraktC; + int ktoKontraktI = ktoKontraktC - '1'; + std::cout << "ktoKontraktI " << ktoKontraktI; + return ktoKontraktI; +} + +int ileWpadek() +{ + std::string ileWpadekS; + print("ile lew wygrali obroncy?"); + std::cin >> ileWpadekS; + int ileWpadek = stoi(ileWpadekS); + return ileWpadek; +} + +void punkty(std::vector &punktyA, std::vector &punktyB, int lwy, int atut, bool kontraBool, bool rekontraBool, +int ktoraGra, int ktoKontraktI, bool rozgrywajacyWygral, int wpadki) +{ + int sumaPunktow = 0; + if(rozgrywajacyWygral) + { + int zdobyteLewy = ILOSC_LEW - wpadki - DOMYSLNE_LEWY; + int nadrobki = zdobyteLewy - lwy; + int punktyZaLew; + std::cout << "wartosc kontraBool: " << kontraBool << "; wartosc rekontraBool: " << rekontraBool << std::endl; + + // Lewy Deklarowane + if(atut == TREFL_ID || atut == KARO_ID) + { + print("kontrakt TREFL lub KARO kazda karta kontraktowa za 20"); + punktyZaLew = 20; + if(kontraBool) + { + print("kontra TREFL lub KARO, kazda karta kontraktowa za 40"); + punktyZaLew = 40; + } + if(rekontraBool) + { + print("rekontra TREFL lub KARO, kazda karta kontraktowa za 80"); + punktyZaLew = 80; + } + + std::cout << "Ilosc lew w kontrakcie: " << lwy << " do punktow dodaje sie " << lwy * punktyZaLew << std::endl; + sumaPunktow += (lwy * punktyZaLew); + } + + if(atut == KIER_ID || atut == PIK_ID) + { + print("kontrakt KIER lub PIK, kazda kontraktowa 30"); + punktyZaLew = 30; + if(kontraBool) + { + print("kontra KIER lub PIK, kazda kontraktowa za 60"); + punktyZaLew = 60; + } + if(rekontraBool) + { + print("rekontra KIER lub PIK, kazda kontraktowa za 120"); + punktyZaLew = 120; + } + + std::cout << "Ilosc lew w kontrakcie: " << lwy << " do punktow dodaje sie " << lwy * punktyZaLew << std::endl; + sumaPunktow += (lwy * punktyZaLew); + } + + if(atut == BEZ_ATUTU_ID) + { + punktyZaLew = 30; + print("kontrakt BEZ_ATUTU, pierwsza lewa za 40, kazda nastepna za 30"); + sumaPunktow = 40; + if(kontraBool) + { + print("kontrakt BEZ_ATUTU, pierwsza lewa za 80, kazda nastepna za 60"); + sumaPunktow = 80; + punktyZaLew = 60; + } + if(rekontraBool) + { + print("kontrakt BEZ_ATUTU, pierwsza lewa za 160, kazda nastepna za 120"); + sumaPunktow = 160; + punktyZaLew = 120; + } + sumaPunktow += ( (lwy - 1) * punktyZaLew); + } + + bool czyRozgrywajacyPoPartii = ( ( (ktoraGra % CYKL_PO_PARTII) - 1) == ktoKontraktI || ktoraGra % CYKL_PO_PARTII == 3); + + if(lwy == SZLEMIK) + { + if(czyRozgrywajacyPoPartii) sumaPunktow += 750; + else sumaPunktow += 500; + } + + if(lwy == SZLEM) + { + if(czyRozgrywajacyPoPartii) sumaPunktow += 1500; + else sumaPunktow += 1000; + } + + + + bool dograna = (sumaPunktow >= 100); + if(dograna) + { + if(czyRozgrywajacyPoPartii) sumaPunktow += 500; + else sumaPunktow += 300; + }else sumaPunktow += 50; + + // Nadrobki + + if(!kontraBool && !rekontraBool) + { + int punktyZaNadrobki = punktyZaLew; + sumaPunktow += nadrobki * punktyZaNadrobki; + } + if(kontraBool && !rekontraBool) + { + int punktyZaNadrobki = 100; + if(czyRozgrywajacyPoPartii) punktyZaNadrobki = 200; + sumaPunktow += nadrobki * punktyZaNadrobki; + } + + if(kontraBool && rekontraBool) + { + + int punktyZaNadrobki = 200; + if(czyRozgrywajacyPoPartii) punktyZaNadrobki = 400; + sumaPunktow += nadrobki * punktyZaNadrobki; + } + + if(kontraBool && !rekontraBool) sumaPunktow += 50; + + if(kontraBool && rekontraBool) sumaPunktow += 100; + std::cout << "Rozgrywajacy zdobyl: " << sumaPunktow << std::endl; + if(ktoKontraktI == A_ID) + { + punktyA.push_back(sumaPunktow); + punktyB.push_back(0); + } + else + { + punktyB.push_back(sumaPunktow); + punktyA.push_back(0); + } + return; + }else + { + int zebraneLewy = ILOSC_LEW - wpadki; + int lewyWpadkowe = (lwy + DOMYSLNE_LEWY) - zebraneLewy; + int sumaPunktow = 0; + bool broniacyPoPartii = ( ((ktoraGra % CYKL_PO_PARTII) - 1) == !ktoKontraktI || ktoraGra % CYKL_PO_PARTII == 3); + if(broniacyPoPartii) + { + + if(!kontraBool && !rekontraBool) + { + sumaPunktow = 100; + for(int i = 1; i < lewyWpadkowe; i++) + { + if(i < 4) sumaPunktow += 100; + else sumaPunktow += 0; + } + } + + if(kontraBool && !rekontraBool) + { + sumaPunktow = 200; + for(int i = 1; i < lewyWpadkowe; i++) + { + if(i < 4) sumaPunktow += 300; + else sumaPunktow += 0; + } + } + + if(kontraBool && rekontraBool) + { + sumaPunktow = 400; + for(int i = 1; i < lewyWpadkowe; i++) + { + if(i < 4) sumaPunktow += 600; + else sumaPunktow += 0; + } + } + }else + { + if(!kontraBool && !rekontraBool) + { + sumaPunktow = 50; + for(int i = 1; i < lewyWpadkowe; i++) + { + if(i < 4) sumaPunktow += 50; + else sumaPunktow += 0; + } + } + + if(kontraBool && !rekontraBool) + { + sumaPunktow = 100; + for(int i = 1; i < lewyWpadkowe; i++) + { + if(i < 4) sumaPunktow += 200; + else sumaPunktow += 100; + } + } + + if(kontraBool && rekontraBool) + { + sumaPunktow = 200; + for(int i = 1; i < lewyWpadkowe; i++) + { + if(i < 4) sumaPunktow += 400; + else sumaPunktow += 200; + } + } + } + std::cout << "Broniacy zdobyli: " << sumaPunktow << std::endl; + if(ktoKontraktI == A_ID) + { + punktyB.push_back(sumaPunktow); + punktyA.push_back(0); + } + else + { + punktyA.push_back(sumaPunktow); + punktyB.push_back(0); + } + return; + + } +} + + +bool gra() +{ + bool koniecGry = 0; + std::vector punktyA; + std::vector punktyB; + do{ + int ktoraGra = 0; + tabela(punktyA, punktyB); + int ktoKontraktI = ktoKontrakt(); + int lwy = zagraneLwy(); + int atut = zagranyAtut(lwy); + bool kontraBool = zagranaKontra(); + bool rekontraBool = 0; + if(kontraBool) rekontraBool = zagranaRekontra(); + stanGry(lwy, atut, kontraBool, rekontraBool, ktoraGra, ktoKontraktI); + int wpadki = ileWpadek(); + int zebraneLewy = ILOSC_LEW - wpadki; + + bool rozgrywajacyWygral = 1; + if( zebraneLewy >= lwy + DOMYSLNE_LEWY) rozgrywajacyWygral = 1; + else rozgrywajacyWygral = 0; + punkty(punktyA, punktyB, lwy, atut, kontraBool, rekontraBool, ktoraGra, ktoKontraktI, rozgrywajacyWygral, wpadki); + print("Czy koniec gry? 1 - TAK, 0 - NIE"); + std::cin >> koniecGry; + }while(!koniecGry); + tabela(punktyA, punktyB); + return 0; +} + +int main() +{ + while(gra()); + return 0; +} diff --git a/CPP/miscelanious/calculateShotsDarts/basic.cpp b/CPP/miscelanious/calculateShotsDarts/basic.cpp new file mode 100644 index 0000000..e41c8b0 --- /dev/null +++ b/CPP/miscelanious/calculateShotsDarts/basic.cpp @@ -0,0 +1,91 @@ +#ifndef BASIC_CPP +#define BASIC_CPP + +#include +#include +#include +#include + +void print(const std::string s) { std::cout << s << std::endl; } +void printErrorStringContainsNotNumber(const std::string s) +{ + std::cout << "string: \"" << s + << "\" contains character different than number " << std::endl; +} + +void printNumberTooLow(const int number, const int min) +{ + std::cout << "number: " << number + << " is too low. Minimal number is: " << min << std::endl; +} + +void printNumberTooHigh(const int number, const int max) +{ + std::cout << "number: " << number + << " is too high. Maximal number is: " << max << std::endl; +} + +void printNotValidStringLength(const std::string s, const int desiredLength) +{ + std::cout << "String: \"" << s << "\" is too short/too long, it is: " + << s.length() << " characters long but should be: " << desiredLength + << " characters long " << std::endl; +} + +void printInvalidCharacter(const char c, const char desiredCharacter) +{ + std::cout << "[ " << c << " ] Is invalid character, expected: [ " + << desiredCharacter << " ]" << std::endl; +} + +void printContainsIllegalCharacter( const std::string s, + const char illegalCharacter ) +{ + std::cout << "String: " << s << " consists of illegal sign: [" + << illegalCharacter << "]!" << std::endl; +} + + +bool numberTooLow(const int number, const int min) +{ + if(number < min) + { + printNumberTooLow(number, min); + return 1; + } + return 0; +} + +bool numberTooHigh(const int number, const int max) +{ + if(number > max) + { + printNumberTooHigh(number, max); + return 1; + } + return 0; +} + +bool containsIllegalCharacter(const std::string s, const char illegalCharacter) +{ + if( s.find(illegalCharacter) != std::string::npos) + { + printContainsIllegalCharacter(s, illegalCharacter); + return 1; + } + return 0; +} + + +void e() +{ + print("Poor man breakboint"); +} + + +bool charIsNumber(const char c) +{ + return c >= '0' && c <= '9'; +} + +#endif diff --git a/CPP/miscelanious/calculateShotsDarts/main.cpp b/CPP/miscelanious/calculateShotsDarts/main.cpp new file mode 100644 index 0000000..2834c11 --- /dev/null +++ b/CPP/miscelanious/calculateShotsDarts/main.cpp @@ -0,0 +1,89 @@ +#ifndef MAIN_CPP +#define MAIN_CPP + +#include +#include +#include +#include "basic.cpp" + +std::vector fillVector(const int min, const int max) +{ + std::vector newVector; + for(int i = min; i <= max; i++) + { + newVector.push_back(i); + } + return newVector; +} + +const int MAX_SPOT = 20; +const int MIN_SPOT = 1; +const std::vector NORMAL_POINTS = fillVector(MIN_SPOT, MAX_SPOT); + +std::vector multiplyVector(const std::vector v, int multiplyBy) +{ + std::vector newVector; + for(unsigned int i = 0; i < v.size(); i++) + { + newVector.push_back(v.at(i)*multiplyBy); + } + return newVector; +} + +const std::vector DOUBLE_POINTS = multiplyVector(NORMAL_POINTS, 2); +const std::vector TRIPLE_POINTS = multiplyVector(NORMAL_POINTS, 3); +const int MAX_ONE_HIT = TRIPLE_POINTS.at(TRIPLE_POINTS.size() - 1); +const int THROWS_IN_ONE_HIT = 3; +const int MAX_POINTS_TURN = THROWS_IN_ONE_HIT * MAX_ONE_HIT; +const int STARTING_POINTS = 501; +const int FINAL_POINTS = 0; + + +bool validString(const std::string s) +{ + for(unsigned int i = 0; i < s.length(); i++) + { + if(!charIsNumber(s.at(i))) + { + printErrorStringContainsNotNumber(s); + return 0; + } + } + return 1; +} + +bool validNumberInput(const std::string input, const int min, const int max) +{ + if(!validString(input)) return 0; + int inputInt = std::stoi(input); + if(numberTooLow(inputInt, min)) return 0; + if(numberTooHigh(inputInt, max)) return 0; + return 1; +} + +bool validInput(const std::string s) +{ + if(s.length() > 3) return 0; + if(!validNumberInput(s, FINAL_POINTS, STARTING_POINTS)) return 0; + return 1; +} + +std::vector requiredShoots(const int pointsLeft) +{ + +} + + +int main() +{ + print("Enter points left: "); + std::string pointsLeft; + do{ + getline(std::cin, pointsLeft); + }while(!validInput(pointsLeft)); + int pointsLeftInt = std::stoi(pointsLeft); + requiredShoots(pointsLeftInt); + return 0; +} + +#endif diff --git a/CPP/miscelanious/findIntegerPercentageValue/main.cpp b/CPP/miscelanious/findIntegerPercentageValue/main.cpp new file mode 100644 index 0000000..0ff9355 --- /dev/null +++ b/CPP/miscelanious/findIntegerPercentageValue/main.cpp @@ -0,0 +1,60 @@ +#include +#include + +const int PERCENTAGE = 44; +const float PERCENTAGE_DENOMINATOR = 100; +const int NUMBERS_TO_CHECK = 200; +const bool DEBUG = 0; + +bool isInteger(const float number) +{ + return number == std::floor(number); +} + +void printIsInteger(const int i, const int inputPercentage, + const float calculatedPercentage) +{ + std::cout << i << "*" << inputPercentage << "% is an integer number: " + << i*calculatedPercentage << std::endl; +} + +void printDebug(const int i, const float calculatedPercentage) +{ + std::cout << "i = " << i << std::endl; + std::cout << i*calculatedPercentage << std::endl; +} + +void isIntegerLoop( const bool debugOn = DEBUG, + const int maxNumber = NUMBERS_TO_CHECK, + const int inputPercentage = PERCENTAGE ) +{ + float actualPercentage = inputPercentage / PERCENTAGE_DENOMINATOR; + for(int i = 1; i <= maxNumber; i++) + { + if(isInteger(i*actualPercentage)) + { + printIsInteger(i, inputPercentage, actualPercentage); + } + else if(debugOn) printDebug(i, actualPercentage); + } +} + +void printStartingMessage(const int maxNumber = NUMBERS_TO_CHECK, + const int inputPercentage = PERCENTAGE) +{ + std::cout << "For max number = " << maxNumber + << "; and a percentage: " << inputPercentage + << "; Found following integer numbers: " << std::endl; +} + +void mainFunctions() +{ + printStartingMessage(); + isIntegerLoop(); +} + +int main() +{ + mainFunctions(); + return 0; +} diff --git a/CPP/miscelanious/howManyValidISBNNumbersAreThere/11.cpp b/CPP/miscelanious/howManyValidISBNNumbersAreThere/11.cpp new file mode 100644 index 0000000..2e0d8c6 --- /dev/null +++ b/CPP/miscelanious/howManyValidISBNNumbersAreThere/11.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include + +#ifndef CHECK_ISBN_CPP +#define CHECK_ISBN_CPP + + +const bool DEBUG = 0; +const int ISBN_LENGTH = 10; +const int CHECK_NUMBER = 11; +const unsigned long long int HIGHEST_ISBN = 9999999999; + + +void printVector(std::vector v) +{ + for(unsigned int i = 0; i < v.size(); i++) + { + std::cout << v[i] << "; "; + } +} + +void print(const std::string printMe) +{ + std::cout << printMe << std::endl; +} + +void e() +{ + print("PRINT"); +} + +bool checkInput(const std::string input) +{ + if(input.length() != ISBN_LENGTH) + { + print("Your number is too short/too long"); + return 0; + } + for(int i = 0; i <= ISBN_LENGTH - 1; i++) + { + if(input.at(i) < '0' || input.at(i) > '9') + { + print("Your number consists of illegal characters"); + return 0; + } + } + return 1; +} + +std::vector stringToIntVector(const std::string input) +{ + std::vector vector; + for(int i = input.length() - 1; i >= 0; i--) + { + vector.push_back(input.at(i) - '0'); + } + return vector; +} + +std::vector userISBN() +{ + std::string input; + do{ + std::cout << "Enter the ISBN number (10 digits): "; + getline(std::cin, input); + }while(!checkInput(input)); + return stringToIntVector(input); +} + + + + +bool checkISBN(const std::vector isbn) +{ + int sum = 0, t = 0; + for(int i = 0; i < ISBN_LENGTH; i++) + { + t += isbn[i]; + sum += t; + } + + /*if(DEBUG) + { + if(!(sum % CHECK_NUMBER)) print("^^^ VALID NUMBER ^^^"); + } */ + + return !(sum % CHECK_NUMBER); +} + +std::vector intToVector(unsigned long long int number) +{ + std::vector numbers; + while(number > 0) + { + numbers.push_back(number % 10); + number /= 10; + } + std::reverse(numbers.begin(), numbers.end()); + + return numbers; +} + + + +int checkAll() +{ + int sum = 0; + std::ofstream file; + file.open("ISBN.txt"); + for(unsigned long long int i = HIGHEST_ISBN; i >= 1; i--) + { + //if(DEBUG) std::cout << i << std::endl; + if( checkISBN(intToVector(i)) ) + { + ++sum; + file << std::to_string(i) << "\n"; + } + } + file << "There are " << sum << " valid ISBN numbers\n"; + file.close(); + return sum; +} + +int main() +{ + checkAll(); + return 0; +} + +#endif diff --git a/CPP/miscelanious/howOftenDoesCharOccur.cpp b/CPP/miscelanious/howOftenDoesCharOccur.cpp new file mode 100644 index 0000000..38877cc --- /dev/null +++ b/CPP/miscelanious/howOftenDoesCharOccur.cpp @@ -0,0 +1,48 @@ +#include +#include + + +struct charOccurence +{ + char c; + int occurrence; +}; + +void printCharOccurenceVector(const std::vector v) +{ + std::cout << "["; + for(unsigned int i = 0; i < v.size(); i++) + { + std::cout << "(\"" << v.at(i).c << "\", " << v.at(i).occurrence << ")" << (i + 1 == v.size() ? "" : ", "); + } + std::cout << "]" << std::endl; + +} + + +int main() +{ + std::vector list; + std::string userInput = "aaaabbbcca"; + charOccurence newCharOccurence; + newCharOccurence.c = userInput.at(0); + newCharOccurence.occurrence = 1; + for(unsigned int i = 1, j = 1; i < userInput.length(); i++) + { + char newCharacter = userInput.at(i); + if(newCharacter != newCharOccurence.c) + { + list.push_back(newCharOccurence); + j = 1; + newCharOccurence.c = newCharacter; + newCharOccurence.occurrence = j; + + }else + { + newCharOccurence.occurrence++; + } + } + list.push_back(newCharOccurence); + printCharOccurenceVector(list); + return 0; +} diff --git a/CPP/miscelanious/markovChainGenerator/basic.cpp b/CPP/miscelanious/markovChainGenerator/basic.cpp new file mode 100644 index 0000000..55072f0 --- /dev/null +++ b/CPP/miscelanious/markovChainGenerator/basic.cpp @@ -0,0 +1,177 @@ +#ifndef BASIC_CPP +#define BASIC_CPP + +#include +#include +#include +#include + +void print(const std::string s) { std::cout << s << std::endl; } + +int charToInt(const char c) { return c - '0'; } + +void e() { print("Poor man breakboint"); } + +bool charIsNumber(const char c) { return c >= '0' && c <= '9'; } + +void printStringNewLine(const std::string s) +{ + std::cout << "string: " << std::endl; + std::cout << "\"" << s << "\"" << std::endl; +} + +void printStringContainsNotNumbers(const std::string s, const int position) +{ + printStringNewLine(s); + std::cout << "contains character different than number at position: " << position + << "; this character is: " << s.at(position) << std::endl; +} + +void printStringContainsNumbers(const std::string s, const int position) +{ + printStringNewLine(s); + std::cout << "contains number at postion: " << position + << "; this number is: " << s.at(position) << std::endl; +} + +void printNumberTooLow(const int number, const int min) +{ + std::cout << "number: " << number + << " is too low. Minimal number is: " << min << std::endl; +} + +void printNumberTooHigh(const int number, const int max) +{ + std::cout << "number: " << number + << " is too high. Maximal number is: " << max << std::endl; +} + +void printNotValidStringLength(const std::string s, const int desiredLength) +{ + printStringNewLine(s); + std::cout << "is too short/too long, it is: " + << s.length() << " characters long but should be: " << desiredLength + << " characters long " << std::endl; +} + +void printInvalidCharacter(const char c, const char desiredCharacter) +{ + std::cout << "[ " << c << " ] Is invalid character, expected: [ " + << desiredCharacter << " ]" << std::endl; +} + +void printContainsIllegalCharacter( const std::string s, + const char illegalCharacter ) +{ + printStringNewLine(s); + std::cout << " consists of illegal sign: [" + << illegalCharacter << "]!" << std::endl; +} + + +bool numberTooLow(const int number, const int min) +{ + if(number < min) + { + printNumberTooLow(number, min); + return 1; + } + return 0; +} + +bool numberTooHigh(const int number, const int max) +{ + if(number > max) + { + printNumberTooHigh(number, max); + return 1; + } + return 0; +} + +bool containsIllegalCharacter(const std::string s, const char illegalCharacter) +{ + if( s.find(illegalCharacter) != std::string::npos) + { + printContainsIllegalCharacter(s, illegalCharacter); + return 1; + } + return 0; +} + +void printStringVector(const std::vector vector) +{ + for(unsigned int i = 0; i < vector.size(); i++) print(vector.at(i)); +} + +bool stringContainsNotNumbers(const std::string s) +{ + for(unsigned int i = 0; i < s.length(); i++) + { + if(!charIsNumber(s.at(i))) + { + printStringContainsNotNumbers(s, i); + return 1; + } + } + return 0; +} + +bool stringContainsNumbers(const std::string s) +{ + for(unsigned int i = 0; i < s.length(); i++) + { + if(charIsNumber(s.at(i))) + { + printStringContainsNumbers(s, i); + return 1; + } + } + return 0; +} + +bool validStringLength(const std::string s, const int desiredLength) +{ + int stringLength = s.length(); + if(stringLength != desiredLength) + { + printNotValidStringLength(s, desiredLength); + return 0; + } + return 1; +} + +bool validCharacter(const char inputC, const char desiredC) +{ + if(inputC != desiredC) + { + printInvalidCharacter(inputC, desiredC); + return 0; + } + return 1; +} + +void vectorToFile(const std::vector strings, std::ofstream &file) +{ + for(unsigned int i = 0; i < strings.size(); i++) + { + file << strings.at(i) << std::endl; + } +} + +std::vector fileToVector(std::ifstream &file, + std::vector strings) +{ + std::string line; + if(file.is_open()) + { + while(getline(file, line)) + { + strings.push_back(line); + } + file.close(); + } + return strings; +} + +#endif diff --git a/CPP/miscelanious/markovChainGenerator/loremIpsum.txt b/CPP/miscelanious/markovChainGenerator/loremIpsum.txt new file mode 100644 index 0000000..f496d37 --- /dev/null +++ b/CPP/miscelanious/markovChainGenerator/loremIpsum.txt @@ -0,0 +1,11 @@ + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris fermentum ac mi quis porta. Aenean vehicula dolor sed leo tristique, ut semper sem sagittis. Nam et faucibus urna. Nam ut neque vitae nisl blandit euismod. Morbi et odio eget ante egestas tempor. Aenean vehicula quis lectus et convallis. Quisque dictum, augue ut ultricies elementum, felis quam rhoncus purus, accumsan tincidunt nunc orci vel nulla. Quisque eros est, tempus nec erat pellentesque, accumsan maximus massa. Aliquam non ante in ex fringilla vehicula in eu magna. Sed aliquet egestas tincidunt. Mauris at libero et nulla mollis bibendum accumsan id metus. Vestibulum ornare nibh ac cursus posuere. Proin efficitur fermentum sapien sit amet porta. + +Maecenas luctus neque sed aliquam iaculis. Maecenas turpis metus, fermentum et vehicula eu, consequat ac nisi. Curabitur porta mauris vel nisi vehicula scelerisque. Mauris dolor ex, mattis sit amet porta quis, consectetur volutpat velit. Maecenas sit amet vehicula metus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum ligula mauris, iaculis in porttitor in, viverra quis est. Sed mattis, turpis non facilisis interdum, sem risus volutpat lacus, sed molestie metus tellus vel diam. In nec eleifend ipsum. Donec auctor, dolor fringilla laoreet hendrerit, est tortor luctus nunc, et malesuada lorem diam quis sem. In hac habitasse platea dictumst. Interdum et malesuada fames ac ante ipsum primis in faucibus. + +Mauris mollis massa ac massa laoreet posuere. In ullamcorper nunc eu lobortis facilisis. Mauris et risus non ipsum tempus mattis eget a enim. In congue faucibus ante quis iaculis. Vestibulum dictum ultricies augue sed auctor. Maecenas ut mattis leo. Suspendisse quis nisl et elit congue consequat. Fusce tincidunt lacus a tellus lobortis, et tristique diam lacinia. + +Aliquam congue enim justo, ac scelerisque risus pharetra quis. Curabitur nec tincidunt nunc, in molestie magna. Maecenas quis tincidunt orci. Ut rutrum ut ex rhoncus accumsan. Nunc sed ligula hendrerit, venenatis urna sit amet, commodo ante. Mauris ac urna viverra, fringilla turpis eu, ornare turpis. Curabitur sodales, sapien sed tristique tristique, dolor leo mollis est, at blandit neque est id mi. + +Donec euismod venenatis mauris non bibendum. Duis tellus eros, maximus vel tristique at, congue nec lorem. Vivamus cursus, magna quis lacinia blandit, leo magna varius libero, at pharetra velit metus id massa. Quisque ullamcorper erat eget lacus rhoncus, id imperdiet orci tempus. Sed placerat rutrum vehicula. Suspendisse at sodales dui. Praesent tortor est, ornare vitae cursus sed, hendrerit nec justo. Nam at rhoncus lacus, vitae lobortis nunc. Nunc ac ligula et mauris consequat laoreet. Proin id nulla porttitor, rhoncus massa vel, pretium odio. Aenean in purus velit. Phasellus molestie luctus blandit. Integer nec auctor risus, eu molestie odio. Aliquam ipsum urna, eleifend non ultricies sit amet, blandit sed risus. Pellentesque vitae gravida lacus, vel pellentesque nisi. diff --git a/CPP/miscelanious/markovChainGenerator/main.cpp b/CPP/miscelanious/markovChainGenerator/main.cpp new file mode 100644 index 0000000..15f2036 --- /dev/null +++ b/CPP/miscelanious/markovChainGenerator/main.cpp @@ -0,0 +1,138 @@ +#ifndef MAIN_CPP +#define MAIN_CPP + +#include +#include +#include +#include "basic.cpp" + +struct wordOccurences +{ + std::string word; + int occurences; +} + +struct previousWords +{ + std::string word; + std::vector previousWords; +}; + +struct wordProbabiliy +{ + std::string previousWord; + std::string nextWord; + float probability; +} + +bool validInput(const std::string userInput) +{ + if(stringContainsNumbers(userInput)) return 0; + return 1; +} + +std::vector divideIntoWords(const std::string userInput) +{ + std::vector words; + int inputLength = userInput.length(); + int wordLength = 0; + for(int i = 0; i < inputLength; i++) + { + if(userInput.at(i) == ' ') + { + words.push_back(userInput.substr(i - wordLength, wordLength)); + wordLength = 0; + }else wordLength++; + + if(i + 1 == inputLength) + { + words.push_back(userInput.substr(i - wordLength + 1, wordLength + 1)); + wordLength = 0; + } + } + return words; +} + +int wordRepeats(const std::vector wordsList, const std::string word) +{ + int wordsSize = wordsList.size(); + for(int i = 0; i < wordsSize; i++) + { + if(wordsList.at(i).word == word) return i; + } + return -1; +} + +bool alreadyExists(const std::vector wordsList, const std::string s) +{ + for(unsigned int i = 0; i < wordsList.size(); i++) + { + if(s == wordsList.previousWOrds + } +} + +std::vector getWordsAndTheirPrevious(const std::vector words) +{ + std::vector wordsList; + int wordsSize = words.size(); + for(int i = 1; i < wordsSize; i++) + { + previousWords temp; + temp.word = words.at(i); + wordOccurences tempTwo; + tempTwo.word = words.at(i - 1)); + tempTwo.occurences = 1; + temp.previousWords.push_back(tempTwo); + int position = wordRepeats(wordsList, temp.word); + if(position == -1) + { + wordsList.push_back(temp); + }else + { + + wordsList.at(position).previousWords.push_back(temp.previousWords.at(0)); + } + } + return wordsList; +} + +void printPreviousWord(const previousWords word) +{ + std::cout << "The word is \"" << word.word << "\" Words before it are: " << std::endl; + for(unsigned int i = 0; i < word.previousWords.size(); i++) + { + print(word.previousWords.at(i)); + } +} + + +void printPreviousWordsVector(const std::vector v) +{ + for(unsigned int i = 0; i < v.size(); i++) + { + printPreviousWord(v.at(i)); + } +} + +std::vector getWordProbability(const std::vector wordsList) +{ + std::vector probalityVector; + for(unsigned int i = 0; i - 1 < wordsList.size(); i++) + { + pro + } +} + +int main() +{ + std::string userInput; + do{ + getline(std::cin, userInput); + }while(!validInput(userInput)); + std::vector words = divideIntoWords(userInput); + std::vector prev = getWordsAndTheirPrevious(words); + printPreviousWordsVector(prev); + return 0; +} + +#endif diff --git a/CPP/miscelanious/mutiplicationWithoutStar/multiplication.cpp b/CPP/miscelanious/mutiplicationWithoutStar/multiplication.cpp new file mode 100644 index 0000000..8c0bc0b --- /dev/null +++ b/CPP/miscelanious/mutiplicationWithoutStar/multiplication.cpp @@ -0,0 +1,27 @@ +#include + + +int multiplication(int a, int b) +{ + int answer = 0; + for(int i = 0; i < a; i++) + { + answer += b; + } + if(answer != a*b) + { + std::cout << "There is a mistake in your code!" << std::endl; + return -1; + } else return answer; +} + +int main() +{ + int a,b; + std::cout << "Enter number a" << std::endl; + std::cin >> a; + std::cout << "Enter number b" << std::endl; + std::cin >> b; + std::cout << multiplication(a, b) << std::endl; + return 0; +} diff --git a/CPP/miscelanious/quickchallenges.cpp b/CPP/miscelanious/quickchallenges.cpp new file mode 100644 index 0000000..f0ab290 --- /dev/null +++ b/CPP/miscelanious/quickchallenges.cpp @@ -0,0 +1,96 @@ +#include +#include + +int sumStartEnd(int start, int end) +{ + int sum = 0; + for(int i = start; i <= end; i++) + { + sum += i; + } + return sum; +} + +int main() +{ + std::cout << "Krzysztof" << std::endl; + for(int i = 700; i >= 200; i -= 13) std::cout << i << std::endl; + std::vector array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + // if SECOND means 0, 1, TWO + std::cout << array[2] << std::endl; + // if SECOND means 1, TWO + std::cout << array[1] << std::endl; + std::cout << sumStartEnd(0, 1000); + + std::string userName; + std::cout << std::endl; + getline(std::cin, userName); + if(userName == "Jack") std::cout << "Hi Jack!" << std::endl; + else std::cout << "Hello, " << userName << std::endl; + + for(int i = 0; i <= 100; i++) + { + if(i % 2 == 0) std::cout << i << " is an even number" << std::endl; + else std::cout << i << " is an odd number" << std::endl; + } + + bool flag = 1; + for(int i = 0; i <= 100; i++) + { + if(flag) std::cout << i << " is an even number" << std::endl; + else std::cout << i << " is an odd number" << std::endl; + flag = -flag; + } + + for(int i = 0; i <= 100; i += 2) std::cout << i << " is an even number " << std::endl; + for(int i = 1; i <= 99; i += 2) std::cout << i << " is an odd number " << std::endl; + + for(int i = 1, j = 1; j <= 12; i++) + { + std::cout << i * j << " "; + + if(i == 12) + { + i = 1; + j++; + std::cout << std::endl; + } + } + + std::cout << std::endl; + std::string sentence; + getline(std::cin, sentence); + std::vector words; + std::string temp; + for(unsigned int i = 0; i < sentence.length(); i++) + { + if(sentence.at(i) == ' ' || i + 1 == sentence.length()) + { + if(i + 1 == sentence.length()) temp.push_back(sentence.at(i)); + words.push_back(temp); + temp = ""; + }else temp.push_back(sentence.at(i)); + + } + + for(unsigned int i = 0; i < words.size(); i++) + { + std::cout << words[i] << std::endl; + } + + int score; + char project; + std::vector GRADES = {'F', 'C', 'B', 'A'}; + std::cin >> score; + std::cout << std::endl; + std::cin >> project; + std::cout << std::endl; + bool doneProject = 0; + if(project == 'Y') doneProject = 1; + if(score < 50) std::cout << GRADES[0 + doneProject]; + else if(score < 70) std::cout << GRADES[1 + doneProject]; + else if(score < 90) std::cout << GRADES[2 + doneProject]; + else std::cout << GRADES[3]; + + +} diff --git a/CPP/miscelanious/randomDevice/main.cpp b/CPP/miscelanious/randomDevice/main.cpp new file mode 100644 index 0000000..6213e5c --- /dev/null +++ b/CPP/miscelanious/randomDevice/main.cpp @@ -0,0 +1,10 @@ +#include +#include + +int main() { + std::random_device rd; + std::uniform_real_distribution dist(1.0, 10.0); + + for (int i=0; i<16; ++i) + std::cout << dist(rd) << "\n"; +} diff --git a/CPP/miscelanious/reverseString.cpp b/CPP/miscelanious/reverseString.cpp new file mode 100644 index 0000000..34e4810 --- /dev/null +++ b/CPP/miscelanious/reverseString.cpp @@ -0,0 +1,22 @@ +#include +#include +#include + +int main() +{ + std::string userString; + getline(std::cin, userString); + int sLength = userString.length(); + std::string tempString = userString; + for(int i = 0; i < sLength/2; i++) + { + char temp = tempString[sLength - 1 - i]; + tempString[sLength - 1 - i] = tempString[i]; + tempString[i] = temp; + } + reverse(userString.begin(), userString.end()); + bool correct = tempString == userString; + std::cout << correct << std::endl; + std::cout << tempString << std::endl; + return 0; +} diff --git a/CPP/miscelanious/solveQuadraticEquation.cpp b/CPP/miscelanious/solveQuadraticEquation.cpp new file mode 100644 index 0000000..56195ba --- /dev/null +++ b/CPP/miscelanious/solveQuadraticEquation.cpp @@ -0,0 +1,48 @@ +#include +#include +#include + +const std::string ENTER = "Enter quadratic equation constants: "; +const std::string WHAT_TO_INPUT = "a, b, c as in: ax^2 + bx + c = 0"; +const std::string START = ENTER + WHAT_TO_INPUT; + +void print(const std::string s) { std::cout << s << std::endl; } + +float getDelta(float a, float b, float c) +{ + return b*b - 4*a*c; +} + +float calculateFirstTerm(float a, float b, float delta) +{ + return (-b - sqrt(delta))/(2*a); +} + +float calculateSecondTerm(float a, float b, float delta) +{ + return (-b + sqrt(delta))/(2*a); +} + +int main() +{ + print(START); + float a, b, c; + std::cin >> a; + std::cin >> b; + std::cin >> c; + float delta = getDelta(a, b, c); + if(delta < 0) + { + print("delta smaller than 0"); + return -1; + } + + float x_1 = calculateFirstTerm(a, b, delta); + float x_2 = calculateSecondTerm(a, b, delta); + print("Solutions:"); + std::cout << "x_1 = " << x_1 << std::endl; + std::cout << "x_2 = " << x_2 << std::endl; + return 0; + + +} diff --git a/CPP/miscelanious/tictactoe/tictactoe.cpp b/CPP/miscelanious/tictactoe/tictactoe.cpp new file mode 100644 index 0000000..4583dc3 --- /dev/null +++ b/CPP/miscelanious/tictactoe/tictactoe.cpp @@ -0,0 +1,111 @@ +#include +#include + +void printField(std::vector &field) +{ + std::cout << std::endl; + for(int i = 0; i < 9; i++) + { + if(i % 3 == 0) std::cout << std::endl; + if(field[i] == 0) std::cout << "-"; + else if(field[i] == 1) std::cout << "X"; + else if(field[i] == 2) std::cout << "O"; + } + std::cout << std::endl; +} + + +unsigned int chooseField(unsigned int playerNumber, std::vector &field) +{ + unsigned int chosenField; + do + { + std::cout << "player " << playerNumber << " choose a field:" << std::endl; + std::cin >> chosenField; + }while(field[chosenField] != 0); + return chosenField; +} + +bool vertical(unsigned int playerNumber, std::vector &field) +{ + if((field[0] == playerNumber && field[1] == playerNumber && field[2] == playerNumber) + || (field[3] == playerNumber && field[4] == playerNumber && field[5] == playerNumber) + || (field[6] == playerNumber && field[7] == playerNumber && field[8] == playerNumber)) + { + return 1; + }else return 0; +} + +bool horizontal(unsigned int playerNumber, std::vector &field) +{ + if((field[0] == playerNumber && field[3] == playerNumber && field[6] == playerNumber) + || (field[1] == playerNumber && field[4] == playerNumber && field[7] == playerNumber) + || (field[2] == playerNumber && field[5] == playerNumber && field[8] == playerNumber)) + { + return 1; + }else return 0; +} + +bool across(unsigned int playerNumber, std::vector &field) +{ + if((field[0] == playerNumber && field[4] == playerNumber && field[8] == playerNumber) + || (field[2] == playerNumber && field[4] == playerNumber && field[6] == playerNumber)) + { + return 1; + }else return 0; +} + +bool checkPlayerWin(unsigned int playerNumber, std::vector &field) +{ + if(vertical(playerNumber, field)) return 1; + if(horizontal(playerNumber, field)) return 1; + if(across(playerNumber, field)) return 1; + else return 0; +} + +unsigned int checkIfWin(std::vector &field) +{ + if(checkPlayerWin(1, field)) return 1; + else if(checkPlayerWin(2, field)) return 2; + else return 0; +} + +bool checkIfFilled(std::vector &field) +{ + bool filled = 1; + for(int i = 0; i < 9; i++) + { + if(field[i] == 0) + { + filled = 0; + return filled; + } + } + return filled; +} + +bool turn(unsigned int playerNumber, std::vector &field, bool *filled, unsigned int *whoWon) +{ + field[chooseField(playerNumber, field)] = playerNumber; + printField(field); + *whoWon = checkIfWin(field); + *filled = checkIfFilled(field); + if(*whoWon != 0 || *filled != 0) return 1; + else return 0; +} + +int main() +{ + std::vector field = {0, 0, 0, 0, 0, 0, 0, 0, 0}; + unsigned int whoWon = 0; + bool filled = 0; + + while(whoWon == 0 || filled == 0) + { + if(turn(1, field, &filled, &whoWon)) break; + if(turn(2, field, &filled, &whoWon)) break; + } + if(!filled) std::cout << "Player " << whoWon << " Won!" << std::endl; + else std::cout << "DRAW!" << std::endl; + return 0; +} diff --git a/CPP/miscelanious/tierListConverter/tierListConverter.cpp b/CPP/miscelanious/tierListConverter/tierListConverter.cpp new file mode 100644 index 0000000..03eb7ce --- /dev/null +++ b/CPP/miscelanious/tierListConverter/tierListConverter.cpp @@ -0,0 +1,89 @@ +#include +#include +#include + +const std::vector TIERS = {"Abhorrent", "Bad", "Mid", "Good", "Top", "God Tier"}; +const float TIER_BASE = TIERS.size(); + +void print(std::string const s) +{ + std::cout << s << std::endl; +} + +bool errorUserInput(std::string userInput) +{ + if(userInput.find("/") == std::string::npos) + { + print("No '/' was found!"); + return 1; + } + + size_t positionOfSlash = userInput.find("/"); + std::string nominatorS = userInput.substr(0, positionOfSlash); + + try + { + float nominator = stof(nominatorS); + }catch ( std::invalid_argument ) + { + print("No number was found before the slash!"); + return 1; + } + + std::string denominatorS = userInput.substr(positionOfSlash + 1, userInput.length() - 1); + + try + { + float denominator = stof(denominatorS); + if(denominator == 0) + { + print("You cannot divide by 0!"); + return 1; + } + }catch ( std::invalid_argument ) + { + print("No number was found after the slash!"); + return 1; + } + + return 0; +} + +std::string convertToTier(float nominator, float denominator) +{ + float fraction = nominator / denominator; + int tierIndex; + for(int i = TIER_BASE; i > 0; i--) + { + if(fraction >= ( i / TIER_BASE)) + { + tierIndex = i - 1; + break; + } + } + if(tierIndex == 0 & fraction > (1.1/10.0)) return TIERS[1]; + return TIERS[tierIndex]; +} + + +int main() +{ + std::string userScore; + do + { + print("Enter your score in a format: numberOne/numberTwo"); + getline(std::cin, userScore); + }while(errorUserInput(userScore)); + + size_t positionOfSlash = userScore.find("/"); + std::string nominatorS = userScore.substr(0, positionOfSlash); + + + float nominator = stof(nominatorS); + std::string denominatorS = userScore.substr(positionOfSlash + 1, userScore.length() - 1); + + + float denominator = stof(denominatorS); + print(convertToTier(nominator, denominator)); + return 0; +} diff --git a/CPP/miscelanious/xGoesTo0/xgoes.cpp b/CPP/miscelanious/xGoesTo0/xgoes.cpp new file mode 100644 index 0000000..4253c21 --- /dev/null +++ b/CPP/miscelanious/xGoesTo0/xgoes.cpp @@ -0,0 +1,11 @@ +#include + +int main() +{ + int x = 10; + while (x-- > 0) + { + printf("%d;", x); + } + return 0; +} diff --git a/CPP/miscelanious/yousuckatcards/Bernouli/bernouli.cpp b/CPP/miscelanious/yousuckatcards/Bernouli/bernouli.cpp new file mode 100644 index 0000000..674cd2c --- /dev/null +++ b/CPP/miscelanious/yousuckatcards/Bernouli/bernouli.cpp @@ -0,0 +1,22 @@ +// bernoulli_distribution +#include +#include + +int main() +{ + const int nrolls=10000; + + std::random_device rd; + std::mt19937 gen(rd()); + std::bernoulli_distribution distribution(0.5); + + int count=0; // count number of trues + + for (int i=0; i +#include + +int main() { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_real_distribution<> dis(0, 1); + + for(int i = 0; i < 10; i++) { + + std::cout << dis(gen) << std::endl; + }return 0; +} diff --git a/CPP/miscelanious/yousuckatcards/makefile b/CPP/miscelanious/yousuckatcards/makefile new file mode 100644 index 0000000..3c53a78 --- /dev/null +++ b/CPP/miscelanious/yousuckatcards/makefile @@ -0,0 +1,2 @@ +yousuckatcards: + g++ -Wall -Wextra -pedantic yousuckatcards.cpp diff --git a/CPP/miscelanious/yousuckatcards/yousuckatcards.cpp b/CPP/miscelanious/yousuckatcards/yousuckatcards.cpp new file mode 100644 index 0000000..e8ee143 --- /dev/null +++ b/CPP/miscelanious/yousuckatcards/yousuckatcards.cpp @@ -0,0 +1,127 @@ +#include +#include +#include + +const int SEQUENCE_LENGTH = 3; + +const bool BOT_WON = 0; +const bool PLAYER_WON = 1; +const int NOBODY_WON = 2; + +void print(std::string const s) +{ + std::cout << s << std::endl; +} + +bool validSequence(std::string const s) +{ + if(s.size() != SEQUENCE_LENGTH) + { + print("Sequence too long"); + return false; + } + if( (s[0] != 'B' && s[0] != 'R') || + (s[1] != 'B' && s[1] != 'R') || + (s[2] != 'B' && s[2] != 'R')) + { + print("Sequence consists of illegal signs!"); + return false; + } + return true; +} + +std::string playerChoice() +{ + std::string playerSequence; + do + { + std::cin >> playerSequence; + } + while(!validSequence(playerSequence)); + return playerSequence; +} + +std::string botChoice(std::string const playerSequence) +{ + std::string botSequence; + if(playerSequence[1] == 'B') botSequence.push_back('R'); + else botSequence.push_back('B'); + botSequence.push_back(playerSequence[0]); + botSequence.push_back(playerSequence[2]); + return botSequence; +} + +int compareGeneratedAndPlayers(std::string playerSequence, std::string botSequence, std::string generatedSequence) +{ + int generatedSequenceLength = generatedSequence.length(); + std::string sequenceToCompare = generatedSequence.substr(generatedSequenceLength - SEQUENCE_LENGTH, generatedSequenceLength); + if(sequenceToCompare.compare(playerSequence) == 0) return PLAYER_WON; + if(sequenceToCompare.compare(botSequence) == 0) return BOT_WON; + else return NOBODY_WON; +} + +bool game(std::string playerSequence, std::string botSequence) +{ + std::string generatedSequence; + std::random_device rd; + std::mt19937 gen(rd()); + std::bernoulli_distribution distribution(0.5); + for(int i = 0; i < SEQUENCE_LENGTH; i++) + { + if(distribution(gen)) generatedSequence.push_back('R'); + else generatedSequence.push_back('B'); + } + + while(compareGeneratedAndPlayers(playerSequence, botSequence, generatedSequence) == NOBODY_WON) + { + if(distribution(gen)) generatedSequence.push_back('R'); + else generatedSequence.push_back('B'); + } + + print(generatedSequence); + if(compareGeneratedAndPlayers(playerSequence, botSequence, generatedSequence) == PLAYER_WON) return PLAYER_WON; + else return BOT_WON; +} + +void score(int playerWins, int botWins) +{ + std::cout << "Player won: " << playerWins << " times!" << std::endl; + std::cout << "Bot won: " << botWins << " times!" << std::endl; +} + + + +int main() +{ + int playerWins = 0; + int botWins = 0; + do + { + print("Do you want to play the game? 1 - yes, 0 - no"); + bool continue_ = 1; + std::string playerInput; + std::cin >> playerInput; + if(playerInput[0] == '1') continue_ = 1; + else continue_ = 0; + if(!continue_) break; + std::string playerSequence; + print("Write three colors sequence created from 52 cards from the deck (26 Black, 26 Red), write B for Black and R for Red"); + playerSequence = playerChoice(); + std::string botSequence = botChoice(playerSequence); + print("Bot has chosen this sequence:"); + print(botSequence); + if(game(playerSequence, botSequence)) + { + print("You won!"); + playerWins++; + score(playerWins, botWins); + } + else + { + print("Bot won!"); + botWins++; + score(playerWins, botWins); + } + }while(1); + return 1; +} diff --git a/CPP/tests/howCppHandlesDivision.cpp b/CPP/tests/howCppHandlesDivision.cpp new file mode 100644 index 0000000..1e3f2d5 --- /dev/null +++ b/CPP/tests/howCppHandlesDivision.cpp @@ -0,0 +1,8 @@ +#include + +int main() +{ + float X = 1/2; + std::cout << X << std::endl; + return 0; +} diff --git a/TS/battery-status/README.md b/TS/battery-status/README.md index b25f8cf..15865a7 100644 --- a/TS/battery-status/README.md +++ b/TS/battery-status/README.md @@ -15,5 +15,6 @@ npm run dev Then open the printed local URL (default http://localhost:5173). Notes: + - The Battery Status API may be unavailable or disabled in some browsers for privacy reasons. In that case, the app will show a helpful message. -- On laptops it typically works in Chromium-based browsers; mobile support varies. \ No newline at end of file +- On laptops it typically works in Chromium-based browsers; mobile support varies. diff --git a/TS/battery-status/package.json b/TS/battery-status/package.json index 2ed28e9..d3e5565 100644 --- a/TS/battery-status/package.json +++ b/TS/battery-status/package.json @@ -4,9 +4,9 @@ "private": true, "type": "module", "scripts": { - "dev": "vite", - "typecheck": "tsc --noEmit", - "build": "vite build", + "dev": "vite", + "typecheck": "tsc --noEmit", + "build": "vite build", "preview": "vite preview --strictPort --port 5173" }, "dependencies": { @@ -14,7 +14,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-react": "^4.3.1", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "typescript": "^5.5.4", diff --git a/TS/champions_leauge_scores/README.md b/TS/champions_leauge_scores/README.md index d0eb6cb..5b85a6b 100644 --- a/TS/champions_leauge_scores/README.md +++ b/TS/champions_leauge_scores/README.md @@ -1,12 +1,13 @@ # Champions League Live Scores (React + TS) This app displays live and today's UEFA Champions League results. It uses: + - React + TypeScript (Vite) for the frontend - A tiny Express proxy server that calls football-data.org to fetch match data ## Setup -1) Create a `.env` file in `TS/champions_leauge_scores/`: +1. Create a `.env` file in `TS/champions_leauge_scores/`: ``` FOOTBALL_DATA_API_KEY=your_api_token_here @@ -15,7 +16,7 @@ PORT=8787 Sign up at https://www.football-data.org/ to get a free API token. Free tier has rate limits. -2) Install dependencies and run both servers: +2. Install dependencies and run both servers: ``` npm install @@ -26,9 +27,11 @@ npm run dev - API Proxy: http://localhost:8787 ## Notes + - Live endpoint: `GET /api/live` - Today endpoint: `GET /api/matches` (uses today's date by default) - Edit polling intervals in `src/App.tsx` if needed. ## License -MIT \ No newline at end of file + +MIT diff --git a/TS/champions_leauge_scores/package.json b/TS/champions_leauge_scores/package.json index 3a0fc12..58e4a7f 100644 --- a/TS/champions_leauge_scores/package.json +++ b/TS/champions_leauge_scores/package.json @@ -4,29 +4,29 @@ "private": true, "type": "module", "scripts": { - "dev": "concurrently \"vite\" \"npm:server:dev\"", + "dev": "concurrently \"vite\" \"npm:server:dev\"", "build": "vite build", "preview": "vite preview", - "server:dev": "tsx watch server/src/server.ts" + "server:dev": "tsx watch server/src/server.ts" }, "dependencies": { "axios": "^1.7.2", "dotenv": "^16.4.5", - "cors": "^2.8.5", + "cors": "^2.8.5", "express": "^4.19.2", "react": "^18.3.1", "react-dom": "^18.3.1" }, "devDependencies": { - "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-react": "^4.3.1", "@types/express": "^4.17.21", - "@types/cors": "^2.8.17", + "@types/cors": "^2.8.17", "@types/node": "^20.12.12", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "concurrently": "^8.2.2", - "ts-node-dev": "^2.0.0", - "tsx": "^4.19.2", + "ts-node-dev": "^2.0.0", + "tsx": "^4.19.2", "typescript": "^5.4.5", "vite": "^5.3.3" } diff --git a/TS/two-inputs/angular.json b/TS/two-inputs/angular.json new file mode 100644 index 0000000..60bd5d4 --- /dev/null +++ b/TS/two-inputs/angular.json @@ -0,0 +1,92 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "two-inputs": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/two-inputs", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": ["src/favicon.ico", "src/assets"], + "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "two-inputs:build:production" + }, + "development": { + "buildTarget": "two-inputs:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "two-inputs:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": ["zone.js", "zone.js/testing"], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": ["src/favicon.ico", "src/assets"], + "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.scss" + ], + "scripts": [] + } + } + } + } + } +} diff --git a/TS/two-inputs/package.json b/TS/two-inputs/package.json new file mode 100644 index 0000000..642045d --- /dev/null +++ b/TS/two-inputs/package.json @@ -0,0 +1,40 @@ +{ + "name": "two-inputs", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.0.0", + "@angular/cdk": "^17.3.5", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/material": "^17.3.5", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/router": "^17.0.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.0.3", + "@angular/cli": "^17.0.3", + "@angular/compiler-cli": "^17.0.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.2.2" + } +} diff --git a/TS/two-inputs/src/app/app.component.html b/TS/two-inputs/src/app/app.component.html new file mode 100644 index 0000000..a6a7a6e --- /dev/null +++ b/TS/two-inputs/src/app/app.component.html @@ -0,0 +1,30 @@ + + min + + + + max + + + + step + + + + targetValue + +
+ + inputOne + + + + +
+ + inputTwo + + + + +
diff --git a/TS/two-inputs/src/app/app.component.ts b/TS/two-inputs/src/app/app.component.ts new file mode 100644 index 0000000..2db98d5 --- /dev/null +++ b/TS/two-inputs/src/app/app.component.ts @@ -0,0 +1,138 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterOutlet } from '@angular/router'; +import { MatInputModule } from '@angular/material/input'; +import {MatButtonModule} from '@angular/material/button'; +import { FormsModule } from '@angular/forms'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [CommonModule, RouterOutlet, MatInputModule, FormsModule, MatButtonModule], + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + inputOne: number | null = null; // Default initialization to 50 + inputTwo: number | null = null; // Default initialization to 50 + min: number | null = 100; + max: number | null = 250; + step: number | null = 25; + targetValue: number | null = 325; + indexOne: number = 0; + indexTwo: number = 0; + possibleValues: Array<[number, number]> | null = []; + + constructor() { + this.possibleValues = AppComponent.findValidPairs(this.step, this.min, this.max, this.targetValue); + } + + ngOnInit() { + this.possibleValues = AppComponent.findValidPairs(this.step, this.min, this.max, this.targetValue); + } + + public updateInput() { + this.possibleValues = AppComponent.findValidPairs(this.step, this.min, this.max, this.targetValue); + } + + private changeIndex(currentValue: number, direction: boolean) { + this.possibleValues = AppComponent.findValidPairs(this.step, this.min, this.max, this.targetValue); + const length = this.possibleValues?.length; + if(typeof length !== "undefined") { + if(direction) { + if(currentValue + 1 > length - 1) { + return 0; + } + return currentValue + 1; + } else { + if(currentValue - 1 < 0) { + return length - 1; + } + return currentValue - 1; + } + } else { + console.error(`appComponent, changeIndex, length is undefined!`, length); + } + return currentValue; + } + + updateTwoValue() { + if(this.possibleValues !== null) { + this.inputOne = this.possibleValues[this.indexOne][0]; + if(typeof this.inputOne !== "undefined" && this.inputOne !== null) { + const result = AppComponent.findCorrespondingValue(this.possibleValues, this.inputOne); + if(result !== null) { + [this.inputTwo, this.indexTwo] = result; + return; + } + console.error(`result is null!`); + } + console.error(`this.inputOne is null or undefined!: `, this.inputOne, this.possibleValues, this.indexOne); + } + } + + upOne() { + this.indexOne = this.changeIndex(this.indexOne, true); + this.updateTwoValue(); + } + + downOne() { + this.indexOne = this.changeIndex(this.indexOne, false); + this.updateTwoValue(); + } + + upTwo() { + this.indexTwo = this.changeIndex(this.indexTwo, true); + if(this.possibleValues !== null) { + this.inputTwo = this.possibleValues[this.indexTwo][1]; + const result = AppComponent.findCorrespondingValue(this.possibleValues, this.inputTwo); + if(result !== null) { + [this.inputOne, this.indexOne] = result; + } + } + } + + downTwo() { + this.indexTwo = this.changeIndex(this.indexTwo, false); + if(this.possibleValues !== null) { + this.inputTwo = this.possibleValues[this.indexTwo][1]; + const result = AppComponent.findCorrespondingValue(this.possibleValues, this.inputTwo); + if(result !== null) { + [this.inputOne, this.indexOne] = result; + } + } + } + + private static findCorrespondingValue(pairs: Array<[number, number]>, number: number): [number, number] | null { + for (let index = 0; index < pairs.length; index += 1) { + if (pairs[index][0] === number) { + return [pairs[index][1], index]; // Return n2 if the given number matches n1 + } else if (pairs[index][1] === number) { + return [pairs[index][0], index]; // Return n1 if the given number matches n2 + } + } + console.error("No corresponding value found for the provided number in the pairs.", pairs, number); + return null; // Return null if no matching number is found +} + + private static findValidPairs(x: number | null, y: number | null, z: number | null, ml: number | null): Array<[number, number]> | null { + if (x === null || y === null || z === null || ml === null) { + console.error("findValidPairs, some value is null"); + return null; + } + + const results: Array<[number, number]> = []; + + // Iterate through possible values of n1, which must be multiples of x, at least y, and not more than z + for (let n1 = y; n1 <= ml - y && n1 <= z; n1 += x) { + let n2 = ml - n1; + // Ensure n2 is also a multiple of x, n2 >= y, and n2 <= z + if (n2 % x === 0 && n2 >= y && n2 <= z) { + results.push([n1, n2]); + } + } + + return results; +} + +} diff --git a/TS/two-inputs/tsconfig.app.json b/TS/two-inputs/tsconfig.app.json new file mode 100644 index 0000000..84f1f99 --- /dev/null +++ b/TS/two-inputs/tsconfig.app.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/TS/two-inputs/tsconfig.json b/TS/two-inputs/tsconfig.json new file mode 100644 index 0000000..d9ae4ec --- /dev/null +++ b/TS/two-inputs/tsconfig.json @@ -0,0 +1,29 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": ["ES2022", "dom"] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/TS/two-inputs/tsconfig.spec.json b/TS/two-inputs/tsconfig.spec.json new file mode 100644 index 0000000..47e3dd7 --- /dev/null +++ b/TS/two-inputs/tsconfig.spec.json @@ -0,0 +1,9 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["jasmine"] + }, + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +}