:: Visual Foxpro, Foxpro for DOS
Re: последовательность
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
Для теста строка
1,3,4,5,7,21,22,23,9,10,11,12
Ежели соврал, тыкныте носом, поправлю.

Эта строка не соответствует ТЗ:
dimuhametov
Есть последовательность '1,2,3,4,5,7,9,10,11,12,25' (каждое последующее больше предыдущего)

Ну, и алгоритм очевидно неправильный:
? s2('1,2')
1-2

Выше я предложил простой и понятный вариант из 9 строк, затем совместными усилиями его чуть ускорили, добавив еще пару строк.
Теперь ты предлагаешь такой же в принципе, но чуть измененный вариант из 20 строк, работающий немного медленней и пока неправильно.

Так что главный вопрос - какова цель?
Выиграть долю процента на миллионе операций? Но пока никто такой цели и не ставил.



Исправлено 7 раз(а). Последнее : akvvohinc, 29.05.20 05:16
Ratings: 0 negative/0 positive
Re: последовательность
Taran
Автор

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ну и славно.
Ratings: 0 negative/1 positive
Re: последовательность
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Фуф, выдохнул


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.
Ratings: 0 negative/0 positive
Re: последовательность
Taran
Автор

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Chemberzhy
Фуф, выдохнул

Злодей ;) Ждал полемики?
Хочу быть правильно понятым.
Лично мне было интересно сравнить скорость парсинга через массив и getwordnum, а также влияние "рыхлого" do case...endcase.
Ну до кучи другие варианты, поскольку...ну интересно мне.
Я сделал, результатами поделился.
Я как-бы более практик, чем умный.
Все. ;)
Ratings: 0 negative/0 positive
Re: последовательность
Taran
Автор

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
akvvohinc
Эта строка не соответствует ТЗ
Не спора ради...
Вероятно эта функция когда либо понадобится мне (если её не было раньше), почему бы не сделать универсальной?
В твоём примере "> 2" меняем на "# 2" и готово. Накладных расходов ноль.

По поводу
akvvohinc
Ну, и алгоритм очевидно неправильный:

? s2('1,2')
1-2
Лично я однозначности не вижу. Разрыва нет, значит запятой не должно быть.
Х.з. может мне образования не хватает.

++
Но у lulgu и у ТС "1,2" преобразуется в "1-2".



Исправлено 1 раз(а). Последнее : Taran, 29.05.20 09:48
Ratings: 0 negative/0 positive
Re: последовательность
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Taran

? s2('1,2')
1-2

Лично я однозначности не вижу. Разрыва нет, значит запятой не должно быть.
Х.з. может мне образования не хватает.

Такая запись является "упаковкой" и, скорее всего, нужна потом для "распаковки".
Поэтому корректно и 1,2 и 1-2.
Ratings: 0 negative/0 positive
Re: последовательность
Taran
Автор

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ydin
Поэтому корректно и 1,2 и 1-2.

Спорно.
Если когда либо придётся работать с этой строкой и на основе её строить чего-либо,
то при дефисе это будет типа between 1, 2.
Либо это будет два отдельных цикла.
Ratings: 0 negative/0 positive
Re: последовательность
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Чтобы не было таких раночтений, надо чётко изложить ТЗ.

Например, указать, что используются только натуральные числа (не помню ноль считается таким или нет). Что исходная последовательность чисел разделяется запятыми. Повтор чисел возможен (или невозможен). Числа могут следовать в произвольном порядке. Максимально допустимое число - такое-то. Дефис применяется только в том случае, когда речь идёт о трех подряд числах, отличающихся друг от друга на 1. В остальных случаях числа разделяются запятыми. Последнее число в последовательности завершает выходную строку - никаких знаков после тако числа не ставится. Вот примерно такие правила.

При наличии такого ТЗ можно и код писать. [sm128]



Исправлено 1 раз(а). Последнее : Simple777, 29.05.20 10:06
Ratings: 0 negative/0 positive
Re: последовательность
Taran
Автор

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Ну ты загнул.
А оно ТС надо. Он решил и забыл.
Программист должен сам.
В том числе и изменить существующий тех.процесс и мир.
,OFf
Пятница, у бывшей днюха, пивасик в фаворе.
Ratings: 0 negative/0 positive
Re: последовательность
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Taran
Chemberzhy
Фуф, выдохнул

Злодей ;) Ждал полемики?
Хочу быть правильно понятым.
Лично мне было интересно сравнить скорость парсинга через массив и getwordnum, а также влияние "рыхлого" do case...endcase.
Ну до кучи другие варианты, поскольку...ну интересно мне.
Я сделал, результатами поделился.
Я как-бы более практик, чем умный.
Все. ;)
Я тебя умоляю, дружище!
Просто стёб. Я и сам подвязался ради раскоксовки мозга и по причине нестандарта задачи, про которую в хелпе ничего не сыщешь и решение требует творческого мышления.
Жму руку!


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.
Ratings: 0 negative/0 positive
Re: последовательность
Taran
Автор

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Chemberzhy
Я тебя умоляю, дружище!
Просто стёб.

Балбес. Сань, я это понял.
И реплику и тебя по жизни.
Я любя и угорая. (Травы нету, только махорка).
Ratings: 0 negative/0 positive
Re: последовательность
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Taran
Ну ты загнул.
А оно ТС надо. Он решил и забыл.

ТЗ нужно не ТС. [sm128] ТЗ нужно ВТП. :rux:

Кстати таки хорошо ТЗ у Симплы сформулировано было.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 29.05.20 13:50
Ratings: 0 negative/0 positive
Re: последовательность
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Это я ещё не старался. [sm128]
Ratings: 0 negative/0 positive
Re: последовательность
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Ydin
Поэтому корректно и 1,2 и 1-2.
Если корректно и 1,2, и 1-2, то тем более непонятно, зачем выполнять дурацкую работу по замене одного корректного варианта на другой.

Если бы любой из нас на основе примеров автора пытаясь понять, что же ему нужно, увидел пример подобной замены, то безусловно понял бы это однозначно:
1,2 - неверно
1-2 - верно
Ratings: 0 negative/0 positive
Re: последовательность
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Кстати таки хорошо ТЗ у Симплы сформулировано было.
Хорошо, но неправильно.

Особенно эта фраза:
Simple777
Дефис применяется только в том случае, когда речь идёт о трех подряд числах, отличающихся друг от друга на 1. В остальных случаях числа разделяются запятыми

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



Исправлено 1 раз(а). Последнее : akvvohinc, 29.05.20 17:02
Ratings: 0 negative/0 positive
Re: последовательность
akvvohinc

Сообщений: 4216
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
у ТС "1,2" преобразуется в "1-2".

Что он сам хотел - вопрос неоднозначный.
Его функция для "1,2" возвращает те же "1,2", хотя, судя по тексту, он собирался сделать "1-2".

PS
Судя по всему, он работает с нестандартной настройкой SET EXACT ON.
Только в этом случае его функция работает, а ранее и Криспа, и я полагали, что она ничего не делает.

ИТОГО:
если "1,2" надо преобразовывать в "1-2", то твой алгоритм работает правильно, а мое Правило 2 надо изменить так:

2) Правило вывода символа перед выводимым числом:
- выводится "пусто", если это первое число;
- выводится ",", если разность текущего и предыдущего чисел больше 1;
- иначе выводится '-'

При этом функция сокращается на пару строк, но чуть замедляется:
LPARAMETERS s
k = ALINES(arr,s,1,',')
ret = arr(1)
FOR n=2 TO k
IF n=k OR VAL(arr(n+1))-VAL(arr(n-1))>2 && Правило 1
ret = ret+IIF(VAL(arr(n))-VAL(arr(n-1))>1,',','-')+arr(n) && Правило 2
ENDIF
ENDFOR
RETURN ret

Вновь можно ее ускорить, вынеся обработку последнего числа за цикл (но "красоты" это не добавит ):
LPARAMETERS s
k = ALINES(arr,s,1,',')
ret = arr(1)
FOR n=2 TO k-1
IF VAL(arr(n+1))-VAL(arr(n-1))>2 && Правило 1
ret = ret+IIF(VAL(arr(n))-VAL(arr(n-1))>1,',','-')+arr(n) && Правило 2
ENDIF
ENDFOR
RETURN ret+IIF(k>1,IIF(VAL(arr(k))-VAL(arr(k-1))>1,',','-')+arr(k),'')



Исправлено 9 раз(а). Последнее : akvvohinc, 29.05.20 19:08
Ratings: 0 negative/0 positive
Re: последовательность
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
Хорошо, но неправильно.

Я ж говорю, что не старался. Просто "от вольного написал". К тому же использовать математические термины довольно рискованно - leonid не дремлет. Дожитается "в засаде" [ин]градиента.

Что же касаемо 1,2 или 1-2, то если речь идёт (вроде бы) о списке печатаемых листов, то сгодятся оба варианта. Но для "строгости решения" вариант записи 1,2 предпочтительнее, потому как дефис подразумевает таки, что тире "сокрыло" числа "между", а между 1 и 2 натуральных чисел нет.



Исправлено 1 раз(а). Последнее : Simple777, 29.05.20 18:48
Ratings: 0 negative/0 positive
Re: последовательность
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Налейте в стакан и устаканьтесь!
Задача (ТЗ) была из последовательности одного вида перевести в другого вида.
'1,2,3,4,5,7,9,10,11,12,25' (каждое последующее больше предыдущего) надо превратить '1-5,7,9-12,25'
Готовое ТЗ!
И хорошо!

Автору явно времени не хватало и он спросил и написал сам и от Вас получил. И забыл!
А тут гонки пошли и у каждого свои ТЗ.
И все правы.

Просто перейдите на утверждение ТЗ, ведь интересно!

Потом уже, кто тогда будет прав?!
Лучшее - враг хорошего. Оно часто и на хер никому не нужно, как тут.
Да после разминки побегать - это логично.
Даже когда уже забыли, не просят...
А мышцы завелись, играют.
Резвитесь тогда. Lulgu в затылок дышит. У него свое ТЗ!



Исправлено 1 раз(а). Последнее : Ydin, 29.05.20 20:18
Ratings: 0 negative/0 positive
Re: последовательность
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
akvvohinc

При этом функция сокращается на пару строк, но чуть замедляется:

Вроде, тогда уж функция совсем сокращается:
LPARAMETERS s
FOR N=1 TO ALINES(arr,s,1,',')
IF INLIST(N,1,ALEN(arr)) OR VAL(arr(N+1))-VAL(arr(N-1))>2 && Правило 1
ret = IIF(N=1,arr[1],ret+IIF(VAL(arr(N))-VAL(arr(N-1))>1,',','-')+arr(N)) && Правило 2
ENDIF
ENDFOR
RETURN ret

Для второй функции можно так эстетики добавить:
...
ret = ret+IIF(k>1,IIF(VAL(arr(k))-VAL(arr(k-1))>1,',','-')+arr(k),'')
RETURN ret



Исправлено 1 раз(а). Последнее : lulgu, 29.05.20 20:22
Ratings: 0 negative/0 positive
Re: последовательность
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Легок на помине!
Пора ему уже зелень собирать.

Для затравки предлагаю в ТЗ:
- числа не упорядочены, могут быть иррациональные, комплексные и .Null.



Исправлено 3 раз(а). Последнее : Ydin, 29.05.20 20:35
Ratings: 0 negative/2 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 39 shumik73  (Гостей: 38)

© 2000-2024 Fox Club 
Яндекс.Метрика