diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 00000000..cea4d3f4 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..3ea3947a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "c:/Users/toshiba/Desktop/appGIT/blanat", + "program": "c:/Users/toshiba/Desktop/appGIT/blanat/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..3e5eb956 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/submissions/Souka21/solution.py b/submissions/Souka21/solution.py new file mode 100644 index 00000000..cb219ae4 --- /dev/null +++ b/submissions/Souka21/solution.py @@ -0,0 +1,96 @@ +import csv + +MAX_PRICE = 100.00 +NUM_CHEAPEST_PRODUCTS = 5 + +def process_city_data(filename): + """Process input CSV file to extract city data. + + Args: + filename (str): The name of the input CSV file. + + Returns: + dict: A dictionary containing city data indexed by city names. + Each city entry contains: + 'total_price': Total price of all products in the city. + 'cheapest_products': List of tuples containing the names and prices of the cheapest products. + """ + cities = {} + + with open(filename, 'r') as file: + reader = csv.reader(file) + next(reader) # Skip header row + for row in reader: + city, product, price = row[0], row[1], float(row[2]) + if city not in cities: + cities[city] = {'total_price': 0, 'cheapest_products': []} + cities[city]['total_price'] += price + cities[city]['cheapest_products'].append((product, price)) + + return cities + +def find_cheapest_city(cities): + """Find the city with the lowest total price. + + Args: + cities (dict): A dictionary containing city data indexed by city names. + + Returns: + str: The name of the city with the lowest total price. + """ + min_city = min(cities, key=lambda city: cities[city]['total_price']) + return min_city + +def find_cheapest_products(cities, min_city): + """Find the cheapest products in a given city. + + Args: + cities (dict): A dictionary containing city data indexed by city names. + min_city (str): The name of the city for which to find the cheapest products. + + Returns: + list: A list of tuples containing the names and prices of the cheapest products. + """ + min_products = cities[min_city]['cheapest_products'] + min_products.sort(key=lambda x: x[1]) # Sort cheapest products by price + return min_products[:NUM_CHEAPEST_PRODUCTS] + +def write_output(filename, min_city, min_products): + """Write the output to a file. + + Args: + filename (str): The name of the output file. + min_city (str): The name of the city with the lowest total price. + min_products (list): A list of tuples containing the names and prices of the cheapest products. + """ + with open(filename, 'w') as file: + file.write(f"{min_city} {sum(product[1] for product in min_products):.2f}\n") + for product in min_products: + file.write(f"{product[0]} {product[1]:.2f}\n") + +def main(): + """Main function to execute the program.""" + input_filename = 'input.txt' + output_filename = 'output.txt' + + cities = {} + with open(input_filename, 'r') as file: + reader = csv.reader(file) + next(reader) # Skip header row + for row in reader: + city, product, price = row[0], row[1], float(row[2]) + if city not in cities: + cities[city] = {'total_price': 0, 'cheapest_products': []} + cities[city]['total_price'] += price + cities[city]['cheapest_products'].append((product, price)) + + min_city = min(cities, key=lambda city: cities[city]['total_price']) + min_products = cities[min_city]['cheapest_products'] + min_products.sort(key=lambda x: x[1]) # Sort cheapest products by price + min_products = min_products[:NUM_CHEAPEST_PRODUCTS] + + write_output(output_filename, min_city, min_products) + +if __name__ == "__main__": + main() +