|
|
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Задачу подсказали в соседней теме. Это т.н. задача (загадка) Эйнштейна, там где 6 категорий по 5 значений в каждой и 15 ограничений на них. Сходу не получилось, остаётся 592 записи. Может и подход другой надо, идея была оставить только правильные записи. Мои исходные данные (оракл), но может кто лучше организует Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. Условия задачи Из вики Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Модератор: Добавил условия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 12:38 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
ИМХО в декартово произведение надо добавить условия которые по строке проверяются например "Датчанин имеет кота", "Норвежец курит данхил" Код: sql 1. дальше проверять условия на соседство "немец справа от собаки" Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:01 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Не-не-не, я эти выборки потом делаю. У меня пока затык в закономерностях типа "значения не совпадают" ну и в других неявных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:07 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Сомневаюсь. У тебя address строка, как ты на соседство сравниваешь? Поле числовое должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:10 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
exp98У меня пока затык в закономерностях типа "значения не совпадают" ну и в других неявных. Пример дай как в условии написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:13 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Вообще-то я использую по типу to_number( '2') +- 1 == по-соседству, хотя позднее ввёл ИДшники. А номера друг с дргуом прекрасно и строками сравниваются. Пример ? Ну там типа "каждый живёт отдельно, цвета у всех разные, все курят разное и т.п." - это спрашивал, или полностью мой текст вместе с ограничениями? А неявные, например, НОрвежец живёт в '1', при этом по-соседству с синим домом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:35 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
exp98А неявные, например, НОрвежец живёт в '1', при этом по-соседству с синим домом. Такого нет в обычной постановке. Это два условия и проверять отдельно: на первом шаге "Норвежец живёт в '1'" на втором "Норвежец живёт по-соседству с синим домом" exp98Ну там типа "каждый живёт отдельно, цвета у всех разные, все курят разное и т.п." - это спрашивал, или полностью мой текст вместе с ограничениями? Похоже я это упустил. Надо еще как-то проверить что повторов нет. Надо подумать. Это будет третий шаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:44 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Ну да, это 2-е и 12-е условие. Путём умозаключения, т.е. неявно, и приводят к полезному выводу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:48 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Dima T Похоже я это упустил. Надо еще как-то проверить что повторов нет Вот и я тоже упустил. Возможно, что сам подход нужно менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 13:51 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
exp98Dima T Похоже я это упустил. Надо еще как-то проверить что повторов нет Вот и я тоже упустил. Возможно, что сам подход нужно менять. Похоже среди твоих 592 есть 5 с правильным ответом. Т.е. надо как-то из 592 проверить все комбинации по 5, а это 7.15*10 13 комбинаций. Многовато чтобы тупо перемешивать :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 14:05 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Неа, ровно 1 правильная сидит, фильтрацией проверял. Просто лишних ещё дофига. Я, когда сам решал, сляпал подсобный граф, надеясь, что там будут наглядные подсказки, а потом заполнял матрицу. Граф на рисунке. Из наглядного, сразу видно, что а3 не м.б. зелёным => это а4 => a5== белый На этом вся наглядность закончилась. Вот такого типа рассуждений мне в запросах не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 14:34 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
exp98Неа, ровно 1 правильная сидит, фильтрацией проверял. Просто лишних ещё дофига. Я к тому что 592 это ведь по одному дому на запись, т.е. конечный ответ это какие-то 5 из 592. Т.е. ответ один, но из 5 записей. Задачка не SQL-ная, поэтому в SQL плохо вписывается. ИМХО как вариант: пронумеровать записи и выбирать в отдельную таблицу потенциально правильные комбинации, сначала по одному признаку, затем по второму и т.д. в итоге будет таблица Comb d1d2d3d4d5123453681012 т.е. каждая комбинация имеет уникальность по одному признаку, например в домах живут разные люди или во всех домах разные животные. затем из нее Код: sql 1. теоретически должна получиться одна запись с ответом. Непонятно каков будет размер Comb. Думаю значительно меньше всех возможных комбинаций 5 из 592. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 15:11 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Такой способ некрасиво масштабируется на 10 категорий. Пока есть только смутная мысль ввести доп. поле - "правильная запись/допустимая/возможная", поможет, нет ли - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 15:37 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Написал свои первые два шага 20566600 (правда немного не так надо условия писать). У меня 74 получилось, а не 592. Посмотри есть там правильные? Итогоaddrcountryanimalcigarcolordrink1norvbirdPalMalwhitcafe1norvbirdPalMalwhitwater1norvcatdunhiyelcafe1norvcatdunhiyelwater1norvcatmarlbowhitcafe1norvcatmarlbowhitwater1norvcatPhilMorgreebeer1norvfishdunhiyelcafe1norvfishdunhiyelwater1norvfishmarlbowhitcafe1norvfishmarlbowhitwater1norvfishPhilMorgreebeer1norvhorsemarlbobluecafe1norvhorsemarlbobluewater2britbirdPalMalredwater2britcatmarlboredcafe2britcatmarlboredwater2britfishmarlboredcafe2britfishmarlboredwater2datchbirdPalMalwhittea2datchcatdunhiyeltea2datchcatmarlbowhittea2datchfishmarlbowhittea2datchhorsemarlbobluetea2germcatrothmawhitcafe2germcatrothmawhitwater2germfishrothmawhitcafe2germfishrothmawhitwater2germhorserothmabluecafe2germhorserothmabluewater2sweeddogdunhiyelwater2sweeddogmarlbowhitcafe2sweeddogmarlbowhitwater2sweeddogPhilMorgreebeer3britcatmarlboredmilk3britfishmarlboredmilk3germcatrothmawhitmilk3germfishrothmawhitmilk3sweeddogmarlbowhitmilk4britbirdPalMalredwater4britcatmarlboredcafe4britcatmarlboredwater4britfishmarlboredcafe4britfishmarlboredwater4datchcatdunhiyeltea4datchcatmarlbowhittea4datchfishmarlbowhittea4datchhorsemarlbobluetea4germcatrothmawhitcafe4germcatrothmawhitwater4germfishrothmawhitwater4germhorserothmabluewater4sweeddogdunhiyelwater4sweeddogmarlbowhitcafe4sweeddogmarlbowhitwater4sweeddogPhilMorgreebeer5britbirdPalMalredwater5britcatmarlboredcafe5britcatmarlboredwater5britfishmarlboredcafe5britfishmarlboredwater5datchbirdPalMalwhittea5datchcatdunhiyeltea5datchcatmarlbowhittea5datchfishmarlbowhittea5datchhorsemarlbobluetea5germcatrothmawhitcafe5germcatrothmawhitwater5germfishrothmawhitcafe5germfishrothmawhitwater5germhorserothmabluewater5sweeddogdunhiyelwater5sweeddogmarlbowhitcafe5sweeddogmarlbowhitwater Если верно, то 5 из 74 вполне можно перебором, это всего 2 млрд. комбинаций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 17:07 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
В твоей версии не увидел. Я брал отсюда petruchek_info / problems / einstein-puzzle_html Для моей версии условий ответ: Код: html 1. Там даже само условие 7 гласит Немец курит Marlbo, что видно даже на моём графе. Странно, что никого больше не заинтересовало. Ну а мне опять немного поработать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 17:51 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
exp98Странно, что никого больше не заинтересовало. Действительно странно что никто не хочет лопатить инет выискивая какую из 100500 вариаций этой задачи ты решаешь. Мне второй вариант в вики показался похожим (по набору атрибутов), я его в твой первый пост добавил, потом понял что твой граф не совсем совпадает с ней, а как исправить понятия не имею. Давай свое ТЗ, свои условия. В принципе неважно, можно решать по ТЗ из вики, т.к. я уже сам решил ее в экселе, только у меня вместо marlbo - rothma. Остальное также как у тебя. PS В SQL мое решение неправильное получилось, буду думать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2017, 20:08 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Незаконченное решение для MS SQL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. Алгоритм такой: 1. Выборка вариантов записей (наполнение одного дома) удовлетворяющих фильтрам на одну запись (80 шт) 2. Выборка комбинаций по 5 из 80 внутри которых каждый атрибут уникален (360 комбинаций) 3. Проверка выполнения условий соседства п.3 не сделал. Там ничего сложного, но букав надо много написать. Проверил, правильный ответ присутствует. По времени: 30 сек. считает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 08:06 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Кажется у меня ко всему ещё строки размножаются при джойнах, ведь я проверку на уникальность не делал. Что до варианта условий, то изменить их нетрудно, но я вернусь к задаче когда-нить позднее. Хотелось бы довести выборку до тех единственных 5 строк и может быть обкатать для этого какую-нить методику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 10:25 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Задача на комбинаторику и SQL далеко не лучший инструмент для ее решения. Как вариант можно таким путем пойти: Представить каждое условие в виде вариантов полей 5*5, т.е. 25 клеток Например: 1. Норвежец живёт в первом доме: 1 вариант: (1, Норвежец) 2. Англичанин живёт в красном доме. 5 вариантов: (1,Англичанин,Красный), (2,Англичанин,Красный) ... 3. Зелёный дом находится слева от белого, рядом с ним. 4 варианта: (1,Зеленый;2,Белый),(2,Зеленый;3,Белый) ... Затем смешать во всех комбинациях по одному варианту из каждого вопроса и проверить заполнение, т.е. если все дома заполнились, то наложений нет. Но это в SQL тоже не полезет, тут проще алгоритмически, вложенными циклами, а варианты представить в виде биткарты, точнее int32 будет достаточно на один вариант. Наложение битовыми операциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 10:45 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Мне не даёт покая мысль представлять ветки графа строками таблицы, после чего да, вычёркивать противречия. Первая попытка дала то, что дала. В общем я на потом всё это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:20 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
баян ) 10696829 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:42 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
пост в закрытом форуме (( суть: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:44 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Вот-вот, из реализаций вертелись в тумане рекурсивные запросы, но так в тумане и остались, т.к. без словаря я их не помню. А почему он в закрытом, просто так сложилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 14:19 |
|
||
|
Загадка Эйнштейна SQL-запросом
|
|||
|---|---|---|---|
|
#18+
Вроде как каноническое. На Прологе. Откуда скопировал - не помню. Лежит у меня локально. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Думаю что если воспроизвести продукционную машину в любом ЯП то мы получим возможность решения этой задачи так-же кратко и лаконично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 23:14 |
|
||
|
|

start [/forum/search_topic.php?author=Hunter2003&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
get settings: |
5ms |
get forum list: |
13ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
134ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 1088ms |
| total: | 1343ms |

| 0 / 0 |
