Лабораторна робота №1 Виконала: студентка групи 1210-2пі Мірошник Діана Перевірила: Викладач Ткаченко Ірина Григорівна



Дата08.05.2023
өлшемі58,9 Kb.
#91072
түріЛабораторна робота

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЗАПОРІЗЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
МАТЕМАТИЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА ПРОГРАМНОЇ ІНЖЕНЕРІЇ

Дисципліна «Практикум з програмування»


Лабораторна робота № 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)

Достарыңызбен бөлісу:




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет