usaa24/cv1/program.c

78 lines
3.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
// Функція для перевірки еквівалентності символів за правилами Hack3r scr1pt
int isHack3rEquivalent(char c1, char c2) {
// Приведення до нижнього регістру для спрощення порівняння
c1 = tolower(c1);
c2 = tolower(c2);
// Таблиця замін символів згідно з правилами Hack3r scr1pt
if (c1 == c2) return 1; // Якщо символи однакові
if ((c1 == '0' && c2 == 'o') || (c1 == 'o' && c2 == '0')) return 1;
if ((c1 == '1' && c2 == 'i') || (c1 == 'i' && c2 == '1')) return 1;
if ((c1 == '2' && c2 == 'z') || (c1 == 'z' && c2 == '2')) return 1;
if ((c1 == '3' && c2 == 'e') || (c1 == 'e' && c2 == '3')) return 1;
if ((c1 == '4' && c2 == 'a') || (c1 == 'a' && c2 == '4')) return 1;
if ((c1 == '5' && c2 == 's') || (c1 == 's' && c2 == '5')) return 1;
if ((c1 == '7' && c2 == 't') || (c1 == 't' && c2 == '7')) return 1;
if ((c1 == '8' && c2 == 'b') || (c1 == 'b' && c2 == '8')) return 1;
return 0;
}
// Функція для перевірки, чи містить назва страви шуканий інгредієнт
int isHack3rMatch(const char *name, const char *search) {
int name_len = strlen(name);
int search_len = strlen(search);
// Перебір по назві страви
for (int i = 0; i <= name_len - search_len; i++) {
int match = 1; // Прапорець для перевірки відповідності
for (int j = 0; j < search_len; j++) {
if (!isHack3rEquivalent(name[i + j], search[j])) {
match = 0; // Якщо хоч один символ не збігається, не підходить
break;
}
}
if (match) return 1; // Якщо знайдено відповідність
}
return 0;
}
int main() {
char search[100]; // Шуканий інгредієнт
char name[100]; // Назва страви
char price[20]; // Ціна страви
int count = 0; // Лічильник оброблених страв
// Введення шуканого інгредієнта
printf("Задай шуканий інгредієнт:\n");
fgets(search, sizeof(search), stdin);
search[strcspn(search, "\n")] = 0; // Видаляємо новий рядок
printf("Задай меню:\n");
// Обробка кожної страви з меню
while (fgets(name, sizeof(name), stdin)) {
// Якщо не вдалося прочитати ціну або назву, перериваємо обробку
if (fgets(price, sizeof(price), stdin) == NULL || strlen(name) == 0) {
printf("Помилка при зчитуванні.\n");
break;
}
// Видаляємо нові рядки з кінця назви та ціни
name[strcspn(name, "\n")] = 0;
price[strcspn(price, "\n")] = 0;
// Якщо назва містить шуканий інгредієнт
if (isHack3rMatch(name, search)) {
printf("%s\n%s\n", name, price); // Виводимо назву та ціну
}
count++; // Збільшуємо лічильник оброблених страв
}
// Виведення кількості оброблених позицій
printf("Оброблено %d позицій.\n", count);
return 0;
}