МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЗАПОРІЗЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
МАТЕМАТИЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА ПРОГРАМНОЇ ІНЖЕНЕРІЇ
Дисципліна «Практикум з програмування»
Лабораторна робота № 1
Виконала: студентка групи 6.1210-2пі
Мірошник Діана
Перевірила: Викладач
Ткаченко Ірина Григорівна
Запоріжжя
2022
Завдання
Варіант 8.
Технічні вимоги: Ім'я файлу: b
Ім'я файлу для вхідних даних: input.txt Ім'я файлу для вихідних даних: output.txt
Час виконання кожного тесту: 2 сек.
Археологи знайшли в розкопках довгий лист Мебіуса з набраними на ньому літерами (лист Мебіуса не має початку і кінця, тобто немає верху і низу і всі символи розташовуються начебто на одній стороні). Якщо відзначити початок, можна знайти одне й те саме кілька разів. Так як лист Мебіуса не має початку і кінця, то символи можуть бути як на початку рядка, так і наприкінці. Тому, при пошуку рядка необхідно всі символи циклічно зрушувати вліво, забираючи символ з кінця і переставляючи його на перше місце, щоб їх можна було прочитати з початку рядка. Визначте, скільки разів на цьому аркуші зустрічається заданий набір символів і скільки разів при пошуку потрібно зробити циклічний зсув символу вліво.
Формат вхідних даних
У першому рядку записано символи, знайдені на аркуші Мебіуса в заданому порядку (їх може бути від 2 до 10 000), у другому – набір символів для пошуку.
Формат вихідних даних
В один рядок через пропуск вивести кількість повторень і найменшу кількість циклічних зрушень вліво при пошуку заданого набору символів. Вважати великі і малі літери різними.
Приклади
input.txt
|
output.txt
|
абракадабра бра
|
2 10
|
абрикос коса
|
1 3
|
Результати роботи програми:
Приклад 1.
Вхідний файл:
Вихідний файл:
Консоль:
Приклад 2.
Вхідний файл:
Вихідний файл:
Консоль:
Приклад 3.
Вхідний файл:
Вихідний файл:
Консоль:
Код програми:
import codecs
from copy import deepcopy
file = {
"PATH": "C:\\",
"INPUT_NAME": "input.txt",
"OUTPUT_NAME": "output.txt"
}
#зчитування даних з вхідного файлу
fileData = codecs.open(file["PATH"] + file["INPUT_NAME"], "r", encoding='utf-8').readlines()
fileData = list(map(lambda x: x.replace("\n", "").replace("\r",""), fileData))
word = list(fileData.pop(0))
key = fileData.pop(0) #символи для пошуку
length = len(key)
res = [] #список для запису повторень
count, count1 = 0,0
startword = deepcopy(word)
#цикл для переміщення символу і пошуку кількості повторень
while True:
if key[0] == word[0]:
count1 += 1
for j in range(length):
if key[j] == word[j]:
res.append(word[j])
finalcount = deepcopy(count)
word.insert(0, word.pop()) #переміщуємо символ на початок
if startword == word: #якщо повернулися до початкового набору символів, вийти з циклу
break
count += 1
#запис значень у файл
file = open(file["PATH"] + file["OUTPUT_NAME"], "w")
file.write(f'{count1} {finalcount}')
file.close()
print("Кількість циклічних зрушень вліво:", finalcount)
print('Кількість повторень:', count1)
Достарыңызбен бөлісу: |