Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HW2 is completed #2

Merged
merged 1 commit into from
Jan 1, 2025
Merged

HW2 is completed #2

merged 1 commit into from
Jan 1, 2025

Conversation

timersha
Copy link
Owner

@timersha timersha commented Nov 11, 2024

Домашнее задание №2 «Распаковка строки»

Чек-лист студента (Что это?)

Критерии оценки

  • Пайплайн зелёный - 4 балла
  • Добавлены новые юнит-тесты - до 4 баллов
  • Понятность и чистота кода - до 2 баллов

Зачёт от 7 баллов

(cherry picked from commit f59425ac23dea20b40c10dee09b627a1e1068b77)
Copy link
Collaborator

@agneum agneum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спасибо за вариант решения. Хорошая работа
Итого: 8 баллов из 10. Принято

func Unpack(str string) (string, error) {
inputIndex := 0
resultIndex := 0
backslash := '\\'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Рекомендую для неизменяемых значений использовать константы

resultIndex := 0
backslash := '\\'
input := []rune(str)
result := make([]rune, 0, 200)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для итоговой строки рекомендую использовать strings.Builder

Comment on lines +23 to +25
if utf8.RuneCountInString(string(input)) == 0 {
return "", nil
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше проверить на исходной строке и до всех инициализаций

Comment on lines +32 to +33
for inputIndex <= inputLen {
r := input[inputIndex]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Гораздо проще и надежнее анализировать текущий и запоминать предыдущий символы, без обращения по индексу

Comment on lines +95 to +104
func nextIndex(sl *[]rune, index int) int {
slLen := math.Max(0, float64(len(*sl)-1))
nextIndex := index + 1
return int(math.Min(float64(slLen), float64(nextIndex)))
}

func previousIndex(sl *[]rune, index int) int {
slLen := math.Max(0, float64(len(*sl)-1))
previousIndex := index - 1
return int(math.Min(float64(slLen), math.Max(0, float64(previousIndex))))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, что в качестве аргумента можно использовать вычисленную длину и не передавать в функцию оригинальный слайс, ещё и по указателю.

Для поиска минимального и максимального значений, рекомендую использовать встроенные функции min и max

{input: `qwe\4\5`, expected: `qwe45`},
{input: `qwe\45`, expected: `qwe44444`},
{input: `qwe\\5`, expected: `qwe\\\\\`},
{input: `qwe\\\3`, expected: `qwe\3`},
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Будет здорово добавить собственных кейсов, расширяющих существующие сценарии тестирования

@timersha timersha merged commit da3bb9d into master Jan 1, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants