Это копия, сохраненная 9 ноября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
заболевший человек теряет способность к визуальному опознаванию окружающих объектов и вынужден полагаться на чтение бирок с их названиями
в комнате гнидо к каждому предмету была приклеена бирка с его названием, пока сегодня его мать-наркоманка не сорвала все бирки, не перепутала в них буквы и не склеила их в одну длинную строку
теперь гнидо несчастлив, он совершенно заблудился в собственной комнате
поможем ему восстановить порядок!
на вход:
первая строка - предметы в комнате гнидо
вторая строка - склеенные вместе названия предметов с перепутанными в них буквами
вывести:
в первой строке - разделённую на части вторую строку ввода - список анаграмм названий предметов в комнате гнидо
во второй строке - вывести названия предметов так, чтобы каждый предмет был красивенько под соответствующей анаграммой из первой строки вывода
гнидо очень хочет найти дверь чтобы выйти в туалет; если ваша программа не уложится в 5 секунд - гнидо обосрётся
решения на джява/сцяла/кобол/с# должны сопровождаться детальными отчётами и документацией
решения на с++ должны вычислять ответ на этапе компиляции
http://ideone.com/6iVyd2
>решения на с++ должны вычислять ответ на этапе компиляции
>работа производится с тем, что подается в stdin
ясно
Привет хаски-кун, опять ленивыми списками балуешься?
Вот тебе тестик, оптимизируй:
http://ideone.com/VeMSvT
>zipWith
Что это за хуйня? Это обычный zip или чем-то отличается? Нахуй было добавлять это уродливое и неэстетичное With на конце?
http://www.haskell.org/hoogle/?hoogle=zipWith
zipWith generalises zip by zipping with the function given as the first argument, instead of a tupling function. For example, zipWith (+) is applied to two lists to produce the list of corresponding sums.
Извените я больше не буду
zip = zipWith (,)
Что же ты наделал?! Гнидо обосрётся, увидев твой код.
>слова с одинаковым набором букв
>слова, являющиеся частями других слов
в первоначальной задаче ничего такого не было
Ты имеешь в виду, что в тесте такого не было. Но даже первое решение Ашота(хаски-куна) все эти случаи учитывало.
Нечитабельная императивная лапша а-ля Си.
Rubygovno.
>склеенные вместе названия предметов с перепутанными в них буквами
У тебя ввод неправильный. Cначала перемешиваешь буквы, а потом склеиваешь.
>da ty chto
Тебе ссылку на учебник по русскому языку дать? Или какое слово в процитированном предложении ты не понимаешь?
Алсо, без этого условия задача не имеет смысла, потому что тогда можно просто взять готовое слово и пикать из перепутанного подходящие буквы. Линейная сложность - элементарное решение.
необязательно в таком же как во входных данных
где ты линейную сложность увидел, ткни пальцем?
незна где запустить http://pastebin.com/sNfFthbD
работает так себе
видимо твои тесты неинтересны моим программам и они ленятся
сам-то вбросишь кроме тестов чо?
>>393406
>>393474
wrong answer для:
abab ab ba
ababaabb
>>393506
медленновато:
http://ideone.com/p4qIj8
> veshi.permutation.each do
;D
А теперь немного кукаретики:
1. Глядите, как я хитро наебал систему и заюзал красно-чёрные деревья для log-удалений вместо линейных, от которых соснул хаскель
2. Само решение тупое и отличается от полного перебора только отсечением неподходящих префиксов остатка решения
3. По идее, единственный класс случаев, от которых здесь нужен бектрекинг, связан именно с парами слов, в которых множество букв одного является подмножеством букв второго. Наверное, можно как-то оптимизировать это всё, включив цепочки таких слов в некие группы и делая бранчинг только на членах одной группы, слово-"представитель" которой с точностью до перестановок букв является префиксом остатка анаграмной строки.
>присосаться к самым лакомым кусочкам, минимально напрягаясь и создавая иллюзию полезного действия
Как что-то плохое.
Блядский сайт, никак не обновит древнюю версию пифона…
http://pastebin.com/zwQGfJkn
пыхтон вынырнул из 1го колодца, но утонул во втором
http://ideone.com/Dmj5VA
вечером еще попытаюсь утопить скалагосподина.
тебе не приходило в голову, что слово может быть больше чем из 2 подслов?
Я круто сам себя наебал. Почему-то я решил, что для не-очень-хорошего, но корректного Ordering для TreeSet достаточно будет указать такую _<_, двойной зажим которой !(a < b) & !(b < a) будет эквивалентен a = b, но это оказалось совсем не так:
https://github.com/scala/scala/blob/v2.11.2/src/library/scala/math/Ordering.scala#L200
С моим _!=_ compare, спецификация которого утверждает, что он возвращает 0 при равенстве, -1 при меньше, 1 при больше, становится некорректен: не существует сюрьективной функции из {true,false} в {-1,0,1}, потому как минимум 1 элемент кодомена никогда не будет возвращаться. Например, если это 1, значит, в соответствии со спецификацией compare,
для любых a и b, compare(a,b) != 1 <-> !(a > b) <-> a <= b,
Конкретизируя a и b для любых фиксированных (x, y), а потом (y, x): x <= y & x >= y
Откуда следует, что для любых a и b, a = b.
Понятно, что Ordering, допускающий такие выводы по equational reasoning, не сулит ничего хорошего.
Зато я придумал, как всю эту хуету починить и очень существенно оптимизировать, попозже напишу.
Не могу воспроизвести, пока будем считать, что я ошибся.
Вроде программист, а мысли свои излагать не умеешь. Проще было по строчке кода понять суть проблемы, чем по твоей простыне.
Ньюфажек.
Всё что на jvm ведет себя на ideone аналогично.
Я писал для людей, понимающих, что такое Ord(ering), красно-чёрные деревья, сюръекция, equational reasoning, и могущих в квантификаторы и элементарные математические рассуждения типа "!(a < b) & !(b < a) <-> a = b", и считаю, что очень хорошо всё объяснил. Даже им нельзя изложить проблему одной строчкой кода, не то что всем остальным.
>>393563
> я придумал, как всю эту хуету починить и очень существенно оптимизировать, попозже напишу.
Сделал, но моя оптимизация оказалась не такая уж существенная: http://ideone.com/NLxEFs
Ох, вы только посмотрите на этого умника.
>Я писал для людей, понимающих
Писал ты для себя, чтобы потешить своё самолюбие. Если бы ты действительно хотел донести суть своей пустяковой проблемы до остальных будто она кому-то интересна, то изложил бы её в двух словах.
Суть проблемы: некорректный инстанс тайпкласса Ordering. Но это само-по-себе неинтересно. Забавно то, как из при него можно вывести, что любые два слова равны. Это какбы поучительный пример, что не надо грозить отношениям строгого порядка.
>Забавно то, как из при него можно вывести
Вывод уровня /pr/: чудеса коммутативности.
Оленю понятно, что fromLessThan требует некоммутативную операцию, на что намекает LessThan
То, что привычные less-than некоммутативны - это, конечно, очевидно, а вот то, что КЧ-дерево станет работать плохо с немножко неправильным Ordering - это ещё не факт. Я же объяснил изначальную интуицию (думал, что от Ordering требуется только сохранять равенства). Более того, с таким поломанным Ordering оно даже работает в нескольких примерах из треда.
да твоё решение всех ушатало (если наш тестер не найдёт ошибку опять)
так что заползай на подиум, тебе есть чем гордиться
За весь тред не было ни одного работающего решения, кроме жабоговна?! Нипарядок.
http://ideone.com/mXXYrc
Нет, ты!
>abababababababababababaabb
>abab ab ab ab ab ab ab ab ab ab ab ab
>abab ab ab ab ab ab ab ab ab ab ab ab
Что у тебя с выводом? Жульничаешь небось?
И не лень тебе на этом недоязычке писать было?
user ~/lua $ time cat data.dat | perl perl.perl
ab ab ab ab ab ab ab ab ab ab ab aabb
ab ab ab ab ab ab ab ab ab ab ab abab
real 0m0.004s
user 0m0.001s
sys 0m0.001s
user ~/lua $ time cat data.dat | luajit olimpics.lua
abab ab ab ab ab ab ab ab ab ab ab ab
abab ab ab ab ab ab ab ab ab ab ab ab
real 0m0.002s
user 0m0.000s
sys 0m0.000s
user ~/lua $ time cat data.dat | perl perl.perl
ab ab ab ab ab ab ab ab ab ab ab aabb
ab ab ab ab ab ab ab ab ab ab ab abab
real 0m0.003s
user 0m0.001s
sys 0m0.000s
user ~/lua $ time cat data.dat | luajit olimpics.lua
abab ab ab ab ab ab ab ab ab ab ab ab
abab ab ab ab ab ab ab ab ab ab ab ab
real 0m0.002s
user 0m0.000s
sys 0m0.000s
user ~/lua $ time cat data.dat | perl perl.perl
ab ab ab ab ab ab ab ab ab ab ab aabb
ab ab ab ab ab ab ab ab ab ab ab abab
real 0m0.005s
user 0m0.003s
sys 0m0.001s
user ~/lua $ time cat data.dat | luajit olimpics.lua
abab ab ab ab ab ab ab ab ab ab ab ab
abab ab ab ab ab ab ab ab ab ab ab ab
real 0m0.002s
user 0m0.000s
sys 0m0.001s
user ~/lua $
Кратко: перл соснул
user ~/lua $ time cat data.dat | perl perl.perl
ab ab ab ab ab ab ab ab ab ab ab aabb
ab ab ab ab ab ab ab ab ab ab ab abab
real 0m0.004s
user 0m0.001s
sys 0m0.001s
user ~/lua $ time cat data.dat | luajit olimpics.lua
abab ab ab ab ab ab ab ab ab ab ab ab
abab ab ab ab ab ab ab ab ab ab ab ab
real 0m0.002s
user 0m0.000s
sys 0m0.000s
user ~/lua $ time cat data.dat | perl perl.perl
ab ab ab ab ab ab ab ab ab ab ab aabb
ab ab ab ab ab ab ab ab ab ab ab abab
real 0m0.003s
user 0m0.001s
sys 0m0.000s
user ~/lua $ time cat data.dat | luajit olimpics.lua
abab ab ab ab ab ab ab ab ab ab ab ab
abab ab ab ab ab ab ab ab ab ab ab ab
real 0m0.002s
user 0m0.000s
sys 0m0.000s
user ~/lua $ time cat data.dat | perl perl.perl
ab ab ab ab ab ab ab ab ab ab ab aabb
ab ab ab ab ab ab ab ab ab ab ab abab
real 0m0.005s
user 0m0.003s
sys 0m0.001s
user ~/lua $ time cat data.dat | luajit olimpics.lua
abab ab ab ab ab ab ab ab ab ab ab ab
abab ab ab ab ab ab ab ab ab ab ab ab
real 0m0.002s
user 0m0.000s
sys 0m0.001s
user ~/lua $
Кратко: перл соснул
Щас починю
Мне похуй какой у тебя вывод.
Задача допускает много решений.
Из того как строка склеена нельзя сделать вывод о том, как она была разрезана.
На малых длинах строк и их количествах мое решение быстрее. Давай большие данные ( типа цепочки днк) и будем оптимизировать, или создавай новую олимпиадку с переписаным условием.
Ты соснул уже второй раз за тред.
Хотя на маленьких алфавитах тоже мое решение быстрее
Условия внимательней прочитай, прежде чем петушиться.
>вывести:
>в первой строке - разделённую на части вторую строку ввода - список анаграмм названий предметов в комнате гнидо
>во второй строке - вывести названия предметов так, чтобы каждый предмет был красивенько под соответствующей анаграммой из первой строки вывода
Хуй соси мудила
Ты не можешь определить в суфиксе vatj откуда у тебя t из стула стола или кровати.
Впрочем просто продолжай посасывать
>Ты не можешь определить в суфиксе vatj откуда у тебя t из стула стола или кровати.
Лол, в этом и есть суть задачи.
;D
> суть задачи
В условии.
В нем не сказано: мамаша нарезает на крупные кусочки.
В нем не сказано: вывести в порядке следования первых букв анаграмм
В нем не сказано: разделить строку на анаграммы заданных слов так, чтобы количество частей на которые нужно разрещать эти слова было минимальным.
Все что ты "подразумеваешь" нужно описывать словами.
давай ты продемонстрируешь скиллы
Есть три слова:
stol stul krovatj
Я разрезал на 14 частей, склеил, получилось
stolstulkrovatj
Из какого слова первая t?
ты:
- либо тралишь
- либо не понял условие
в первом случае:
во втором: перечитай оп-пост и посмотри примеры
>> суть задачи
>В условии.
Ты уже почти понял. Молодец.
Осталось только его прочитать и немножечко напрячь мозги. Самую малость.
Надеюсь, дальше ты уже разберешься без моей помощи.
Я просто решил задачу другим способом, который показывает двусмысленность условия.
> посмотри примеры
а, т.е. олимпиадка в духе: скопируйте мое решение? ну ты и комик! Такой выдумщик!
Тебе бы мозги изредка напрягать.
Лол
Я кстати могу переписать так, чтобы ответ был еще другой, почти совпадал с твоим. Не считаю нужным конечно, но если очень попросишь...
Все сводится к проверке на наличие сортированной анаграммы из входной строки в таблице anagram.
Изи мод
http://ideone.com/FagssV
В исходной строке анаграмма не такая.
Но на самом деле мы оба знаем, что даже этого нет в условии
ну пж
У меня просто багира, что решение на питоне короче, и что там в стандартной библиотеке есть Bag, а в Scala нету, хотя в оной самая выдроченная стдлиба коллекций за всю историю мейнстримных ЯП.
> a, b = input(), input()
> print("\n".join(map(" ".join, zip(next(yoba(a, b))))))
Из слова stol.
Получение исходной строки:
Берем каждое слово, перепутываем в них буквы.
Получившиеся слова из перепутанных букв конкатенируем в произвольном порядке.
Как бы косячно не было написано условие, имеется в виду именно это.
эх
смори, этот ввод: http://ideone.com/sSNnPk
повторим 5 раз: http://ideone.com/FATOlq
однако: http://ideone.com/tz78Om
Оказалось, я в одном месте проебал ленивость: http://ideone.com/YzZhw3
На примере из >>393655 всё-равно взрывается.
Я вот понимаю, были бы задачки с очевидным алгоритмом O(n^4), с хитровыебанным O(n^3) с потенциальным снижением до O(n^(8/3)) или с применением какого-нибудь ада из глубин топологии до O(nnln(n)). Это было бы интересно.
А тут всё превращается костыльную задрочку под конкретный инпут (может ещё не превратилось, но к этому идет).
Щас вот пойдут костыли, которые специально обрабатывают одинаковые слова.
Сможешь ли ты доказать, что она NP-полная?
количество постов: 107
количество решений: 8
количество верных решений: 0
ты че пидор, какая нп-полнота? для этой задачки есть решение О(н), причем н - число слов.
Лл, даж буквы в словах не надо читать? Охуительные истории, иди нахуй.
Лол ок. Давай свой алгоритм, я на тебя контрпримером поссу.
Тогда ты молодец
http://ideone.com/FtzGKB
Это где в условии такое написано? Ты какую-то свою задачку придумал и хочешь, чтобы условие её описывало?
Анаграмма - это любое слово, составленное из букв данного. Любое слово является само-себе-анаграммой.
Ну какбе да, ответов может быть несколько. Это вообще нормально для задач. Требуется найти хотя бы одно решение.
Один хрен она просто не решается.
Могу вот ещё алгоритм предложить.
Для каждого символа входной строки делаем список всех анаграмм.
Одна потенциальная анаграмма - вершина графа.
Это O(nmk), где n - слов, m - длина строки, k - длина самого длинного слова.
Ребро (ориентированное) — от анаграммы A длины z, начинающейся с символа i, до всех анаграмм B, начинающихся с символа i+z.
Можно произвести элиминацию вершин, из которых нет ребер кроме вершин, которые по идее должны указывать на конец строки.
Дальше каждому слову (точнее классу эквивалентности по отношению "является анаграммой") можно присвоить простое число в виде веса.
Нужный нам вес - произведение весов всех слов.
Эти же веса навешиваем на вершины.
Дело за малым — найти путь заданного веса в графе. Задача несколько упрощается из-за гарантированного отсутствия циклов. Что не отменяет её np-полноты.
Есть ощущение, что это не будет быстрее поиска в глубину, который тут в каждом решении. Хотя на многих примерах элиминация позволит очень сильно упростить граф. Например, на пресловутом ab ab ... abab и abab...aabb
http://ideone.com/MNaoZF
Написано красиво, только не очень понятно.
> Ребро (ориентированное) — от анаграммы A длины z, начинающейся с символа i, до всех анаграмм B, начинающихся с символа i+z.
Для этого же нужно пройтись по всем factors строки (по всем подстрокам s[i,j], 0 <= i < j < len(s)), правильно?
У тебя поиск в ширину. Гарантированно говено работает на всех типах входных данных.
Там не печатаемый символ какой-то очевидно.
http://ideone.com/BBxbkD
все равно соснул. Да. нужно поиск писать.
Я не просто так писал, что задача сложная.
Сначала перебрал в голове все возможные жадные алгоритмы и придумал по контрпримеру на каждый.
Всё никак не могу найти нп-полную задачу, которую можно к этой свести. Однако полиномиальный алгоритм тоже не придумывается.
http://ideone.com/zb5y0A
К раскладыванию говна всякого можно свести.
многообещающей всего выглядели:
хитрожопный перебор на сцяла с какими-то там деревьями - http://ideone.com/FATOlq
обфусцированный жадник на перл - http://ideone.com/fkpD5T
алсо похоже что некоторые участники пытаются прийти к эффективному решению изменяя свой код случайным образом и постя его сюда
ждём
100 постов на страхе, боли и отчаянье. Нашел чем гордиться. Ты еще политический сравню тут разведи, сразу 300 постов будет.
И все равно злая олимпиадка.
да
алсо похоже что оп пытается прийти к победе путем изменения требований случайным образом, бампая тред с сажей и постя сюда коментарий "неправильно"
ждём
немоизация
Функция поиска принимает список слов и строку в которой нужно искать. Возвращает список пар слово-анаграмма и маркер успеха. Работает рекурсивно.
Для конца строки она постоянно вызывается с одинми и теми же аргументами.
Ее и мемоизировал.
Еще сортировку строки, но это так, ерунда.
Поторопился ты с награждением:
$ cat data{,2}.txt | lua /tmp/pr.lua
huy tam
http://pastebin.com/pLPBdGjC
это один из участников
Погоди-погоди... Ты что хочешь сказать, что вот это на пикче - это Носатая? Это наша Даша в такое превратилась? Деад_Телеграфист? Скажи что это не так, прошу.
А по делу никто не написал.
Там получается НКА, который надо детерминировать. Такой бздыщ будет, что мама не горюй. При этом сам по себе НКА тоже будет гигантский. Хуй с ней, с памятью, ты его строить полгода будешь.
значит надо какой нибудь хитрожопый автомат
вот есть http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm (корасик азхаахах)))
надо придумать что-то подобное: anagram-matching-automaton
вот, зацензурил
А это не хитрожопый автомат, это обычный автомат для поиска подстроки в строке.
Во-первых, его самого сложно строить. Он хорошо работает, когда тебе надо искать недлинную строку в охуительной длины тексте, потому что сложность поиска сильно зависит от длины слова, а от текста только линейно и эти сложности складываются, а не перемножаются, как в других алгоритмах.
Здесь же тебе нужно проверить строку на соответствие. То есть длина пути в автомате будет равна исходной строке.
Более того, этот автомат ещё не так сложно построить для обычно строки, здесь же его надо построить для всевозможных перестановок кусков строки, при этом внутри кусков тоже должны быть обработаны всевозможные перестановки.
[мечты]
хочу автомат
он будет хитрожопо склеен из anagram-matching-automatonов
мы бы скармливали ему вторую строку ввода по одной букве
и он бы быстро разрешал коллизии, когда несколько слов из словаря являются анаграммо-префиксами хвоста бирки
с откатами он был бы похож на автомат ахо-карасика
при этом он не будет слишком большим и строится за поли время
[/мечты]
Ща, замутим недетерминированную машину Тьюринга и будем все задачки щелкать как орехи.
Это-то без проблем. Конечная машина Тьюринга всё равно только конечное количество ячеек может посетить. А зациклившаяся машина Тьюринга — это багованная, ей можно и исключение кинуть.
если машина зациклилась - надо сразу кидать исключение
Но что с ней на тех, других фотках? Она колется? У нее рак?
Кстати, "дед т-графист" здесь в спам листе, к чему бы?
;D
Давай. Уж мы-то оценим по достоинству.
Дамы украшают имиджборду
В том числе и хуй, который наваял на нем решение.
Это копия, сохраненная 9 ноября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.