Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
Есть алфавит из N уникальных букв. Необходимо из них запросом составить все возможные слова длины M (count(*) = power(N, M))
Например:
define alphabet="'01'"
define M=4
результат
Как выглядит тетрада в двоичном виде все знают? :)
10 янв 08, 11:47    [5133077]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
До пятницы не дотерпел? ;)
10 янв 08, 11:49    [5133094]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
scott-tiger
Guest
декартово произведение таблицы, где 1 столбец - элемент алфавита, строк, соответственно N.
Количество таблиц в произведении - М.
подходит?
10 янв 08, 12:03    [5133216]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
scott-tiger
Количество таблиц в произведении - М.
подходит?
Это не один запрос, потому что его придётся строить динамически с привлечением PL/SQL :)
10 янв 08, 12:10    [5133271]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Oleg Afanasiev
Member

Откуда: Киев
Сообщений: 3742
если действовать "в лоб" :
create table alphabet (letter varchar2(1));
insert into alphabet values ('0');
insert into alphabet values ('1');

select t1.letter||t2.letter
from 
(select t1.letter||t2.letter as letter 
from 
alphabet t1,
alphabet t2) t1,

(select t1.letter||t2.letter as letter 
from 
alphabet t1,
alphabet t2) t2



-----------------------
Вечны налоги,
Смерть и потеря данных.
Что на этот раз?
10 янв 08, 12:10    [5133281]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Евгений_25
Member

Откуда: Харьков
Сообщений: 460
Elic
Как выглядит тетрада в двоичном виде все знают? :)


я не знаю :-(
10 янв 08, 12:15    [5133310]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116300
Евгений_25
Elic
Как выглядит тетрада в двоичном виде все знают? :)


я не знаю :-(


0000
0001
0010
0011
....
10 янв 08, 12:18    [5133341]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
Евгений_25
Elic
Как выглядит тетрада в двоичном виде все знают? :)
я не знаю :-(
Ты не прошёл тест на допуск к решению задачки :)


2 Oleg Afanasiev
см. ответ тигру.
10 янв 08, 12:18    [5133342]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
sendal
Guest
Elic
scott-tiger
Количество таблиц в произведении - М.
подходит?
Это не один запрос, потому что его придётся строить динамически с привлечением PL/SQL :)

то бишь разворачивать строку N букв в столбец не подразумевается условием задачи (наверное допускается их хранение в таблице) ?
Уже легче ....
10 янв 08, 12:22    [5133382]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116300
Скажу без ложной скромности.
По моему отвратительно

SQL> select wordd
  2  from
  3  (select distinct replace(sys_connect_by_path(letter,'#'),'#') wordd
  4  from alphabet
  5  connect by level <= 4
  6  )
  7  where length(wordd) = 4
  8  /
 
WORDD
--------------------------------------------------------------------------------
0100
0001
0011
0110
1010
0000
0101
1000
1001
1100
1101
0010
0111
1110
1011
1111
 
16 rows selected
 
SQL> 
10 янв 08, 12:24    [5133402]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Dr. Amoeba
Guest
Я так понимаю, что подразумевается N >= M ?
10 янв 08, 12:26    [5133416]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
sendal
то бишь разворачивать строку N букв в столбец не подразумевается условием задачи ?
С чего ты взял?
10 янв 08, 12:27    [5133422]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Евгений_25
Member

Откуда: Харьков
Сообщений: 460
2 Elic
Если тетрада в двоичном виде это
dmidek
0000
0001
0010
0011
....


то почему тогда ответ любезно предложенный Oleg Afanasiev неправильный?
10 янв 08, 12:27    [5133428]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
Dr. Amoeba
Я так понимаю, что подразумевается N >= M ?
Пофигу.
10 янв 08, 12:27    [5133432]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
Евгений_25
то почему тогда ответ любезно предложенный Oleg Afanasiev неправильный?
Это ответ на частный случа, а не на общую постановку задачи.
10 янв 08, 12:30    [5133455]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Oleg Afanasiev
Member

Откуда: Киев
Сообщений: 3742
dmidek
Скажу без ложной скромности.
По моему отвратительно

SQL> select wordd
  2  from
  3  (select distinct replace(sys_connect_by_path(letter,'#'),'#') wordd
  4  from alphabet
  5  connect by level <= 4
  6  )
  7  where length(wordd) = 4
  8  /


Пирожок несомненно твой :)
10 янв 08, 12:32    [5133473]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Евгений_25
Member

Откуда: Харьков
Сообщений: 460
dmidek
Скажу без ложной скромности.
По моему отвратительно

SQL> select wordd
  2  from
  3  (select distinct replace(sys_connect_by_path(letter,'#'),'#') wordd
  4  from alphabet
  5  connect by level <= 4
  6  )
  7  where length(wordd) = 4
  8  /
 
WORDD
--------------------------------------------------------------------------------
0100
0001
0011
0110
1010
0000
0101
1000
1001
1100
1101
0010
0111
1110
1011
1111
 
16 rows selected
 
SQL> 

это тоже самое что предложил ранее Oleg Afanasiev
10 янв 08, 12:32    [5133476]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
sendal
Guest
Elic
sendal
то бишь разворачивать строку N букв в столбец не подразумевается условием задачи ?
С чего ты взял?

Ну по ранее предлагаемому фрагменту решения
create table alphabet (letter varchar2(1));
insert into alphabet values ('0');
insert into alphabet values ('1');
претензий ведь не было ? :)
10 янв 08, 12:33    [5133480]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116300
Oleg Afanasiev

Пирожок несомненно твой :)


Мне кажется, что в лучшем случае это первый блин.
Есть ограничения (sys_connect_by_path), натяжки (#), скорость на нормальных объемах будет
совершенно неприемлема
10 янв 08, 12:34    [5133486]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
dmidek
По моему отвратительно
Степень отвратности можно (нужно!) уменьшить :)
10 янв 08, 12:34    [5133489]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Proteus
Member

Откуда:
Сообщений: 1348
Я так понял нужен скрипт для получения любой выборки основанной на 2х подстановках ... или я не прав...
define alphabet="01"
define M=4

column ch_count new_value ch_count

SELECT length('&alphabet') ch_count FROM dual;
set heading off
spool s.sql
prompt with s as (
SELECT 'select ''' || substr('&alphabet', LEVEL, 1) || ''' ch from dual ' ||
       decode(LEVEL, &ch_count, '', 'union all')
  FROM dual
CONNECT BY LEVEL <= &ch_count;
prompt )
prompt select 
SELECT 't' || LEVEL || '.ch' || decode(LEVEL, &m, ' word', '||')
  FROM dual
CONNECT BY LEVEL <= &m;
prompt from 
SELECT 's t' || LEVEL || decode(LEVEL, &m, ';', ',')
  FROM dual
CONNECT BY LEVEL <= &m;
spool off
set heading on
@s
  
10 янв 08, 12:34    [5133490]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116300
Евгений_25
это тоже самое что предложил ранее Oleg Afanasiev


Женя, подумайте как изменится запрос Олега, если в качестве допустимого символа
добавить двойку. И как изменится мой ... :-)
10 янв 08, 12:35    [5133494]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116300
dmidek
Евгений_25
это тоже самое что предложил ранее Oleg Afanasiev


Женя, подумайте как изменится запрос Олега, если в качестве допустимого символа
добавить двойку. И как изменится мой ... :-)


Тьфу ты, то есть если изменится величина M :-)
10 янв 08, 12:37    [5133509]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Elic
Member

Откуда:
Сообщений: 29990
Евгений_25
это тоже самое что
Ты совершенно не в теме.
"Мальчик, иди отсюда, не мешай" (с) :)
10 янв 08, 12:38    [5133518]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая задачка  [new]
Oleg Afanasiev
Member

Откуда: Киев
Сообщений: 3742
dmidek
Oleg Afanasiev

Пирожок несомненно твой :)


Мне кажется, что в лучшем случае это первый блин.
Есть ограничения (sys_connect_by_path), натяжки (#), скорость на нормальных объемах будет
совершенно неприемлема


мы пишем синтезатор речи для AI ?:)
или генератор словарей для брутфорса ?
10 янв 08, 12:39    [5133524]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Oracle Ответить