![]() |
Привіт Гість ( Вхід | Реєстрація )
![]() |
Death |
![]()
Пост
#1
|
![]() <script ///> ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Moderators Повідомлень: 6 371 З нами з: 5-November 03 З: Kyiv Користувач №: 26 Стать: НеСкажу Free-DC_CPID Парк машин: гидропарк jabber:deadjdona@gmail.com ![]() |
(Show/Hide) -------------------- |
![]() ![]() |
LSA |
![]()
Пост
#91
|
![]() кранчер з фермою ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 623 З нами з: 7-October 07 З: Kyiv Користувач №: 596 Стать: Чол Free-DC_CPID Парк машин: Й9450 8G DDR2 QA90 16G DDR3 GTX 482 ![]() |
http://durdom.in.ua/public/main/photos/photo_34188.jpg
ось вам задача -------------------- (Show/Hide) |
x3mEn |
![]()
Пост
#92
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
Задача для знавців SQL.
Колись була така передача "Звёздный час". Там була гра, давалося слово, із літер цього слова треба було на час скласти як можна більше інших слів. Зараз є варіації на цю тему, наприклад "Слова из слов" Якось мені стало цікаво, як можна було б знайти всі слова, які можна утворити із заданого, якщо в мене є словник усіх допустимих слів. А тепер задача: Є таблиця виду create table WORDS ( WORD VARCHAR2(40) ); Треба написати SQL, яким із таблиці WORDS вибираються всі відмінні від заданого слова, які можна утворити із літер даного. Наприклад, якщо дадено слово ОСТРОВ, з нього можно утворити наступні слова: ОР ВОР РОВ РОТ СОР ТОР ВОРС ОСОТ РОСТ СОРТ ТОРС ТРОС ВОРОТ ОСТОВ СТВОР Коли я це завдання дав своїм знайомим, як не дивно, у них воно викликало ступор. А вам слабо написати SQL? ![]() Процедури не приймаються, тільки чистий select -------------------- ![]() (Show/Hide) |
Rilian |
![]()
Пост
#93
|
![]() interstellar ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Team member Повідомлень: 17 157 З нами з: 22-February 06 З: Торонто Користувач №: 184 Стать: НеСкажу Free-DC_CPID Парк машин: ноут и кусок сервера ![]() |
WITH RECURSIVE xtab AS ( WITH no_cte AS ( SELECT 1::int AS len , idx as idx , substring ( 'ОСТРОВ' FROM idx FOR 1) as str FROM generate_series(1, char_length( 'ОСТРОВ' )) idx ) SELECT t0.len as len , t0.idx , t0.str FROM no_cte t0 UNION SELECT 1+t1.len , tc.idx , t1.str || tc.str AS str FROM xtab t1 JOIN no_cte tc ON tc.idx > t1.idx ) SELECT * FROM xtab WHERE EXISTS (SELECT * FROM words WHERE word = str) -------------------- |
x3mEn |
![]()
Пост
#94
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
generate_series - це, вибачаюсь, який стандарт SQL?
взагалі-то задача написати SQL в стандарті ну хоча б SQL:2008 SQL Server 2008? http://www.spatialdbadvisor.com/sql_server...aldbadvisor.com Є набагато простіше рішення, без generate_series. Та я і не впевнений, що наведене рішення працює правильно. Бо не зміг привести його до стандарту SQL, щоб перевірити -------------------- ![]() (Show/Hide) |
A1ex01 |
![]()
Пост
#95
|
![]() round catcher) ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 1 365 З нами з: 27-August 08 З: Kyiv Користувач №: 809 Стать: Чол Парк машин: хз*X2/2/500/хз*5870 ц7x64 ![]() |
та давай сразу свой вариант, а кто сможет выложит лучше)
-------------------- |
x3mEn |
![]()
Пост
#96
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
ну ок, даю:
select * from words where upper('&word') = '&word' and word <> '&word' and length(word) <= length('&word') and case when length(word) >= 1 then length('&word') - length(replace('&word', substr(word,1,1))) - length(word) + length(replace(word, substr(word,1,1))) else 1 end >=0 and case when length(word) >= 2 then length('&word') - length(replace('&word', substr(word,2,1))) - length(word) + length(replace(word, substr(word,2,1))) else 1 end >=0 and case when length(word) >= 3 then length('&word') - length(replace('&word', substr(word,3,1))) - length(word) + length(replace(word, substr(word,3,1))) else 1 end >=0 and case when length(word) >= 4 then length('&word') - length(replace('&word', substr(word,4,1))) - length(word) + length(replace(word, substr(word,4,1))) else 1 end >=0 and case when length(word) >= 5 then length('&word') - length(replace('&word', substr(word,5,1))) - length(word) + length(replace(word, substr(word,5,1))) else 1 end >=0 and case when length(word) >= 6 then length('&word') - length(replace('&word', substr(word,6,1))) - length(word) + length(replace(word, substr(word,6,1))) else 1 end >=0 and case when length(word) >= 7 then length('&word') - length(replace('&word', substr(word,7,1))) - length(word) + length(replace(word, substr(word,7,1))) else 1 end >=0 and case when length(word) >= 8 then length('&word') - length(replace('&word', substr(word,8,1))) - length(word) + length(replace(word, substr(word,8,1))) else 1 end >=0 and case when length(word) >= 9 then length('&word') - length(replace('&word', substr(word,9,1))) - length(word) + length(replace(word, substr(word,9,1))) else 1 end >=0 and case when length(word) >= 10 then length('&word') - length(replace('&word', substr(word,10,1))) - length(word) + length(replace(word, substr(word,10,1))) else 1 end >=0 order by length(word), word; Таким скриптом вибираються всі слова з обмеженням, що вхідне слово не більше 10 символів. Якщо треба більше - домальовується ще N аналогічних конструкцій через and. Просто мені було достатньо 10. Можливо не зовсім і естетично, зате швидкодія майже не залежить від довжини слова. Я думаю, що на довжині слова овер 16 літер рекурсія загнеться. Можу поділитися словничком в 52 тисячі слів, на якому я тренувався. -------------------- ![]() (Show/Hide) |
x3mEn |
![]()
Пост
#97
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
А от і словничок.
Приєднані файл(и) ![]() -------------------- ![]() (Show/Hide) |
x3mEn |
![]()
Пост
#98
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
перевірка на слові НИКОТИНАМИДАДЕНИНДИНУКЛЕОТИДФОСФАТГИДРИН (40 символів)
5614 rows selected in 1,517 seconds -------------------- ![]() (Show/Hide) |
Rilian |
![]()
Пост
#99
|
![]() interstellar ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Team member Повідомлень: 17 157 З нами з: 22-February 06 З: Торонто Користувач №: 184 Стать: НеСкажу Free-DC_CPID Парк машин: ноут и кусок сервера ![]() |
x3mEn, postgres
вариант с if это говнокод ![]() -------------------- |
Death |
![]()
Пост
#100
|
![]() <script ///> ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Moderators Повідомлень: 6 371 З нами з: 5-November 03 З: Kyiv Користувач №: 26 Стать: НеСкажу Free-DC_CPID Парк машин: гидропарк jabber:deadjdona@gmail.com ![]() |
а перевірка на слові АБВГДЕЄЖЗ.........Я что даст?
-------------------- |
Rilian |
![]()
Пост
#101
|
![]() interstellar ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Team member Повідомлень: 17 157 З нами з: 22-February 06 З: Торонто Користувач №: 184 Стать: НеСкажу Free-DC_CPID Парк машин: ноут и кусок сервера ![]() |
а перевірка на слові АБВГДЕЄЖЗ.........Я что даст? даст частичную выборку из словаря, ибо большая часть слов использует повторы букв -------------------- |
x3mEn |
![]()
Пост
#102
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
Rilian, PostgreSQL не у всьому відповідає стандарту SQL, скажімо так, свій власний діалект SQL.
На інших СУБД твій чудокод не запускається. А мій запит принаймні на твоїй PostgreSQL має працювати. Або буде працювати після невеличкої адаптації, я бачу що у substr і length в PostgreSQL свій синтаксис. Щодо говнокоду не зрозумів. Хочеш, юзай like, це не заборонено. Спробуй залий в базєйку табличку і тестани на 40-символьному слові. Покажи час виконання і результат (кількість слів) на слові НИКОТИНАМИДАДЕНИНДИНУКЛЕОТИДФОСФАТГИДРИН, тоді можна щось буде вирішити, що із написано говнокод, а що геніальний чудокод. а перевірка на слові АБВГДЕЄЖЗ.........Я что даст? АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ 13816 rows selected Найдовші слова: ГЕМОТРАНСФУЗИЯ ЗВУКОСНИМАТЕЛЬ ПОДХЛЁСТЫВАНИЕ РАЗГИЛЬДЯЙСТВО ЧЕТЫРЁХПОЛЮСНИК ЧЕТЫРЁХУГОЛЬНИК Щоправда в мене словничок з обмеженням слова в 15 символів максимум. Просто в грі Ерудит максимальна довжина слова 15, тому сенсу ще довші слова пхати не було. -------------------- ![]() (Show/Hide) |
Rilian |
![]()
Пост
#103
|
![]() interstellar ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Team member Повідомлень: 17 157 З нами з: 22-February 06 З: Торонто Користувач №: 184 Стать: НеСкажу Free-DC_CPID Парк машин: ноут и кусок сервера ![]() |
x3mEn, сорри за троллинг, но вы в COMPANY_NAME пишете программу для платной подписки абонентов на "эрудит" ?
-------------------- |
x3mEn |
![]()
Пост
#104
|
![]() snow catcher ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 2 213 З нами з: 4-August 07 Користувач №: 563 Стать: Чол Free-DC_CPID ![]() |
Не палимось, не палимось...
![]() В дійсності я цей скрипт придумав в одну з безсонних ночей, коли був дома, а не на роботі, так що це моя інтелектуальна власність, а не COMPANY_NAME. ![]() -------------------- ![]() (Show/Hide) |
A1ex01 |
![]()
Пост
#105
|
![]() round catcher) ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Група: Trusted Members Повідомлень: 1 365 З нами з: 27-August 08 З: Kyiv Користувач №: 809 Стать: Чол Парк машин: хз*X2/2/500/хз*5870 ц7x64 ![]() |
Покажи час виконання і результат (кількість слів) на слові НИКОТИНАМИДАДЕНИНДИНУКЛЕОТИДФОСФАТГИДРИН, тоді можна щось буде вирішити, що із написано говнокод, а що геніальний чудокод. +1, Rilian, время выполнения твоей версии давай -------------------- |
![]() ![]() |
![]() |
Lo-Fi Версія | Поточний час: 18th June 2025 - 17:38 |