|
Задача: Помогите разобрать однострочный код. | ☑ | ||
---|---|---|---|---|
0
0xHelpPls
03.08.22
✎
03:36
|
Привет, нашел тему в архиве, которая отвечает на первую часть моего вопроса (ссылка на тему - v8: задача подсчета количества слов в строке
Очень понравился ответ (39) на 3 странице от пользователя Deon, а именно: Слов = СтрЧислоВхождений ( СтрЗаменить( СтрЗаменить(СокрЛП(Стр), " ", "ЭтаПрабэл"), "таПрабэлЭ", ""), "ЭтаПрабэл") + 1; Цитата Deon "Это хрень которая посчитает тебе количество слов в строке, разделенных любым количеством пробелов." Помогите, пожалуйста, разобрать почему код Deon'a справляется с два и более пробелами, а тот, который представлен снизу - нет. Слов = СтрЧислоВхождений ( СтрЗаменить(СокрЛП(Стр), " ", "ЭтаПрабэл"), "ЭтаПрабэл") + 1; Я не понимаю, что происходит в тот момент, когда мы добавляем СтрЗаменить( ... "таПрабэлЭ", ""), я не понимаю, почему просто переносим первую букву в слове ЭтаПрабэл и дальше делаем замену на пустую строку (""), что происходит в этот момент? Спасибо! |
|||
1
0xHelpPls
03.08.22
✎
04:05
|
Спустя пару десятков минут решил раскидать на "бумажке":
Стр="Почему я настолько туп"; "ПочемуЭтаПрабэлЭтаПрабэлЭтаПрабэля...." Получается, что первый "пробел" у нас заменяется на "ЭтаПрабэл", а дальше идёт на замену в пустую строчку "таПрабэлЭ" то есть "Почему"ЭтаПрабэл"ЭЭя"... и когда переходим к следующему слову, то цикл повторяется, верно? |
|||
2
Конструктор1С
03.08.22
✎
04:50
|
(0) выкинь этот говнокод, и сам так никогда не делай. Ларчик открывается гораздо проще:
Слова = СтрРазделить(ИсходнаяСтрока, " ", Ложь); |
|||
3
unbred
03.08.22
✎
07:35
|
(2) может ещё так.. на выходе примерно тоже РазложитьСтрокуВМассивПодстрок(Строка,Разделитель)
|
|||
4
Ёпрст
03.08.22
✎
09:10
|
(1) Чего непонятного то ? таким образом он заменяет все пробелы идущие друг за другом одним.
|
|||
5
Ёпрст
03.08.22
✎
09:13
|
И заменяется не первый пробел, а все на строку ЭтаПрабэл, будет ЭтаПрабэлЭтаПрабэлЭтаПрабэлЭтаПрабэлЭтаПрабэлЭтаПрабэл....
далее в этой строке заменяется все таПрабэлЭ на пустую строку, останется ЭтаПрабэ в финале, и потом подсчет количества ЭтаПрабэ и к этому числу +1, ибо между двумя словами пробел. Фирштейн ? |
|||
6
Serg_1960
03.08.22
✎
09:14
|
(1) Неверно. От первого пробела (после их замены на буквы) остаётся только первая буква; удаляются все повторные пробелы, кроме последнего - от него остаётся окончание без первой буквы. В результате мы имеем одно полное "слово", соответствующее буквам одного пробела.
(2) Не соглашусь, это не "говнокод", а достойный пример оригинального нестандартного блистательного мышления. Разбирая код, я получил эстетическое удовольствие, подобное от осознания красоты фраз-палиндромов. Согласен, - не для рабочего применения. "Не зело полезен"(с) |
|||
7
Конструктор1С
03.08.22
✎
15:39
|
(6) >>пример оригинального нестандартного блистательного мышления
>>Разбирая код, я получил эстетическое удовольствие Ну ты понял, да? Одна строка, а потребовались усилия, чтобы прочитать и понять. У ТС это даже не получилось с первого раза. Потому и говнокод |
|||
8
СеменовСемен
03.08.22
✎
15:42
|
(7) какой нибудь рекурсивный код динамического программирования тоже сходу не поймешь.
Но это не значит, что код плохой |
|||
9
Масянька
03.08.22
✎
16:57
|
(6) Второму - плюсую.
|
|||
10
Конструктор1С
03.08.22
✎
17:42
|
(8) значит. Рекурсия - один из разновидностей зла
|
|||
11
RomanYS
03.08.22
✎
17:46
|
(6) (7) (8) (9) Непонятно о чём спор. Вся соль в фразе "не для рабочего применения".
А в рамках промышленного применения - да, говнокод. (9)(6) Ну и чтобы немного развеять красоту замечу, что во фразе "Дорогой Эдуард" этот код насчитает только одно слово. Но идея - да, красивая. |
|||
12
СеменовСемен
03.08.22
✎
17:47
|
(11) почему 1. Там же количество пробелов + 1
|
|||
13
СеменовСемен
03.08.22
✎
17:49
|
А какой хороший код по замене множественных пробеловина одиночный?
|
|||
14
Галахад
гуру
03.08.22
✎
18:01
|
Весь вопрос, зачем в одну строку-то?
|
|||
15
RomanYS
03.08.22
✎
18:05
|
(12) Вот чтобы ответить на вопрос "почему" придётся с этим чудо-кодом разобраться) Проверить элементарно.
|
|||
16
Ёпрст
03.08.22
✎
18:08
|
(11) 2 слова
|
|||
17
Ёпрст
03.08.22
✎
18:08
|
А ну да.. буква Э всё испортит
|
|||
18
Ёпрст
03.08.22
✎
18:09
|
Ну, для кода, достаточно было использовать 3 спецсимвола, а не слово "ЭтаПрабэл"
|
|||
19
RomanYS
03.08.22
✎
18:30
|
(13) вероятно добавить вторую строку к (2)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |