LINUX.ORG.RU

Говорили что Перл старый, ни на что не способный язык. Проверим?

 , , , ,


9

4

Говорили что Перл старый, ни на что не способный язык. Проверим?

Задачка:

Необходимо для каждой пары слов получить новое слово, так, чтобы окончание первого совпадало с началом второго, например, шлакоблок + окунь = шлакоблокунь. Это слово надо вывести в стандартный поток вывода.Если слова возможно соединить несколькими способами, надо выбрать тот, что обеспечивает максимальную общую часть, например папа + папаха = папаха (а не папапаха). Необходимо написать последнее условие.

Я просто взял практически первое попавшаяся задание.

На Перле программа заняла 5 строк не считая ввода-вывода. С вводом-выводом - 7 строк.

А как у вас? На ваших Супер-пупер языках?

Перемещено xaizek из general

Перемещено hobbit из talks



Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от demensdeum

В условиях есть что-то про нулевую длину?

А что ЕЩЁ можно сделать в данном случае?

А вообще для программиста начинать с нуля должно быть совершенно естественно.

Miguel ★★★★★
()
Ответ на: комментарий от ugoday

Замерил время для всех моих решений на наборе «шлакоблок + окунь петух + тухлятина дырявый + сарай папа + папаха»

Время в секундах
С++ (regex_replace) - 0.000482
C++ (substr, compare) - 0.000106
C (strncpy, strncmp) - 0.000062

Си быстрее всех получился, регулярка текущая медленее всех.

C++ Regex - https://gitlab.com/demensdeum/wordcross/-/blob/main/cppRegex/wordcross.cpp
C++ https://gitlab.com/demensdeum/wordcross/-/blob/main/
C https://gitlab.com/demensdeum/wordcross/-/tree/main/c

demensdeum
()
Последнее исправление: demensdeum (всего исправлений: 1)
Ответ на: комментарий от demensdeum

Следовать спецификации.

Нулевая длина вполне в спецификацию укладывается. Как ещё можно ей следовать?

Miguel ★★★★★
()
Ответ на: комментарий от demensdeum

«Единичной длины» там тоже нет.

И я ещё раз задаю вопрос: как именно ЕЩЁ можно следовать спецификации в случае «дырявый + сарай»?

Miguel ★★★★★
()
Ответ на: комментарий от kompospec

Нет, в любом случае, если только предметом обсуждения не является, собственно, само по себе образование.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Используйте TDD - напишите тест для двух условий, все что не входит в эти условия - не должно быть реализовано.

Условие 1 - «Необходимо для каждой пары слов получить новое слово, так, чтобы окончание первого совпадало с началом второго»
Условие 2 - Если слова возможно соединить несколькими способами, надо выбрать тот, что обеспечивает максимальную общую часть, например папа + папаха = папаха (а не папапаха). Необходимо написать последнее условие.
Со-но «дырявый + сарай» не проходит ни по первому условию, ни по второму.

demensdeum
()
Ответ на: комментарий от demensdeum

Используйте TDD

TDD — говно.

Если только не имеется в виду «Type Driven Development»

Со-но «дырявый + сарай» не проходит ни по первому условию, ни по второму.

То есть, этого варианта в тестах не будет вообще?

Почему же тогда вы считаете, что данная реализация — неправильная.

И да, где в спецификации сказано, что «начало» и «окончание» не может быть нулевой длины?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

То есть, этого варианта в тестах не будет вообще?

Конечно он есть, очевидно что результирующая строка не может быть больше или равна длине суммы длины слов, это выходит из условия 1 спецификации.

demensdeum
()
Последнее исправление: demensdeum (всего исправлений: 1)
Ответ на: комментарий от demensdeum

Конечно он есть

Отлично, и ЧТО в нём?

очевидно что результирующая строка не может быть больше или равна длине суммы длины слов, это выходит из условия 1 спецификации.

Нет, не очевидно, и нет, не выходит.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

В тесте проверятся

что результирующая строка не может быть больше или равна длине суммы длины слов

Отлично, и где написано, что это должно быть слово?

Все есть в задаче

слово, так, чтобы окончание первого совпадало с началом второго

demensdeum
()
Последнее исправление: demensdeum (всего исправлений: 1)
Ответ на: комментарий от demensdeum

Первое условие вообще неправильно звучит. Чтобы совмещались совпадающие части конца первого слова и начала второго - было бы понятно.
Можно просто сказать сразу - неверная постановка задачи и не делать ничего. Проблемы проверить одно условие совпадения нет. Там должно было быть написано, что даются слова у которых совпадают начало второго и конец первого, а не то, что должны совпадать у заданных слов.
Получить слово, чтобы совпадали конец первого и начало второго слова - звучит бредово, так как от полученного слова никак начало и конец исходных слов не меняется.

xmikex ★★★★
()
Ответ на: комментарий от demensdeum

Все есть в задаче

Да. И там про то, что начало/окончание должно быть словом — нету. Вы сами процитировали, что в задаче написано, там НЕТ такого требования.

Miguel ★★★★★
()
Ответ на: комментарий от xmikex

Первое условие вообще неправильно звучит.

Да. Но если уж применять common sense, так применять.

Miguel ★★★★★
()
Ответ на: комментарий от demensdeum

может имелось ввиду найти слово, у которого начало совпадает с началом первого слова, а конец с концом второго? То есть реальное слово, что-то значащее.

xmikex ★★★★
()
Последнее исправление: xmikex (всего исправлений: 1)
Ответ на: комментарий от demensdeum

получить новое слово

Отлично, это про финальный результат, но не про само «начало» или «окончание».

Miguel ★★★★★
()
Ответ на: комментарий от demensdeum

Здесь даже нет слова «слово», вы правда думаете, что это хоть как-то свидетельствует в вашу пользу?

Miguel ★★★★★
()

Может в этой задаче имеется ввиду машинное слово, и решать надо было на ассемблере m68k? Срочно нужен perl2nasm

demensdeum
()
Ответ на: комментарий от demensdeum

Кстати я нагнал, измерял с отладкой, быстрее всех получился C++ (substr, compare) - 0.000016

demensdeum
()
Последнее исправление: demensdeum (всего исправлений: 1)
Ответ на: комментарий от demensdeum

Что что?)

Как этот пример относится к нашей дискуссии вообще? Как пример, в котором есть перекрытие ненулевой длины вообще относится к обсуждаемому случаю, когда такового нет?

И, кстати, что, всё-таки, должно быть в том тесте?

Miguel ★★★★★
()
Ответ на: комментарий от demensdeum

Потому что

Вопросы были «как» и «что».

это спецификация, ей надо следовать

Отлично. И как ЭТА часть спецификации — а именно, примеры — относится к обсуждаемому случаю, когда нет перекрытия ненулевой длины?

И что должно быть в тесте на этот случай?

Miguel ★★★★★
()

Говорили что Перл старый, ни на что не способный язык.

так говорили те, кто не мог в контекст. К сожалению таких всё больше и больше.

ukr_unix_user ★★★★
()
Ответ на: комментарий от Miguel

А вот вы что спрашиваете, это пример условия 1, которое четко описано, там нет никаких перекрытий ненулевой длины, не минусовой длины и т.д. Есть конкретный кейс, критерии его корректности, пример реализации по критериям корректности.

demensdeum
()
Ответ на: комментарий от demensdeum

это пример условия 1, которое четко описано

Вообще-то, нет. Описано достаточно нечётко — как правильно заметил xmikex — но, в принципе, понятно.

там нет никаких перекрытий ненулевой длины

Именно. Поэтому что нулевая, что ненулевая длина — годятся одинаково.

минусовой длины

Это как?

критерии его корректности

Замечательно. И ГДЕ именно «критерии корректности» запрещают пустую строку в качестве «начала» и «окончания»?

И что таки должно быть в тесте на этот случай?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

И ГДЕ именно «критерии корректности» запрещают пустую строку в качестве «начала» и «окончания»?

слово, так, чтобы окончание первого совпадало с началом второго, например, шлакоблок + окунь = шлакоблокунь

И что таки должно быть в тесте на этот случай?

А никаких граничных пограничных случаев нет, есть условие 1 по которому пишется тест:

результирующая строка не может быть больше или равна длине суммы длины слов

demensdeum
()
Последнее исправление: demensdeum (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.