LINUX.ORG.RU

Что не так, или всё так?

 


0

2

Как то давно я задумал проект и реализовал его. Назвал его jcp. jcp - это программа, которая может по записям японского кроссворда определить рисунок. Но вот проблема, которую я давно уже не могу исправить. Эта программа не может найти большой рисунок, и я незнаю точно в чём проблема. И за всё время я не нашёл решения. На github есть файлы для примера. Например

./jcp heart
Выведет текстовые символы рисунка. Этот рисунок можно посмотреть с помощью другой программы show_jcp, пример
./show_jcp ren
Пробел меняет цвет, для удобства просмотра.
Вот ссылки на проекты. https://github.com/xverizex/jcp https://github.com/xverizex/show_jcp Может кто подскажет чего хорошего. Как решить проблему, может есть где ошибка?

Для начала раздели пожалуйста мух от котлет.

Тестовые данные закинь для примера в суб-каталог 'testdata/' (или 'samples' или на что фантазии хватит).

В гланом каталоге кроме самого кода, Makefile и readme/license ничего не должно быть.

PS: Makefile пишется с большой буквы.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Может он вендузятнег по жизни? А вообще из-за таких товарищей make давно ищет и Makefile и makefile.

anonymous
()
Ответ на: комментарий от beastie

Плевать ему на конвенции (да и вообще на всё). Посмотри его предыдущие темы (особенно новости, хотя не только). Лучше не пытаться, он непрошибаемый.

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

Если честно, я так и не понял, что оно должно делать. Перепиши описание так, чтобы стало понятно, что идёт на вход, а что получается на выходе. Это координаты ячеек в двумерном массиве, по одной на строку? Тогда почему на третьей и четвёртой строчках в описании указаны координаты через запятую? Составь нормальное описание формата. Да, я не имею представления о том, что такое японский кроссворд и чем он отличается от обычного.

// Код не смотрел

XMs ★★★★★
()
Ответ на: комментарий от XMs

Посмотришь что такое японский кроссворд, будешь знать что это. Числа через запятую означают что в горизонтальной строке несколько объектов.Например. 2,1 - означает что в строке есть объект из двух символов и из одного, вместе они не могут стоять, между объектами разрыв в один символ идёт. Получается чем больше длина, тем больше вариантов где может находиться 2 и 1. Вот два примера.
001101000
110000100
Видишь, двойка стоит рядом с единицей, следующий ход отправляет двойку на начальную позицию, а единицу проталкивает дальше. И вот что получается например с 3 и 2.
111011000
111001100
011101100
111000110
011100110
001110110
111000011
011100011
001110011
000111011
Закончено. Ну ты должен уже понять. Там где по вертикали через запятую означает что несколько объектов в одном столбце находятся.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от zdesnesru

пишут с маленькой

(We recommend Makefile because it appears prominently near the beginning of a directory listing, right near other important files such as README.)

man Make  
anonymous
()
Ответ на: комментарий от u0atgKIRznY5

Ну что узнал что такое японский кроссворд?

Почитал, примерное представление получил.


Код посмотрел, или ты не эксперт?

Код не смотрел, не до того пока было. Может, на неделе гляну, если не забуду

XMs ★★★★★
()

Насколько я понял, решатель просто перетаскивает блоки по горизантали и сравнивает на правильность блоков по вертикали. Фактически это просто перебор расстановок горизонтальных блоков.

А число расстановок с каждой добавленной строкой и столбцом растет эксоненциально. Неудевительно, что на относительно больших полях он просто не может быстро проверить все расстановки.

zhekas
()
Ответ на: комментарий от u0atgKIRznY5

Если я правильно осилил многабукв, которые оставил анон и которые я читал по диагонали, то нет. Либо медленно, либо не для всех случаев

XMs ★★★★★
()
Ответ на: комментарий от annulen

черта с два, и так и так правильно

Я не говорил, что неправильно. Я говорил, что это против устояшейся конвенции.

Normally you should call your makefile either makefile or Makefile. (We recommend Makefile because it appears prominently near the beginning of a directory listing, right near other important files such as README.)

ref: https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html

beastie ★★★★★
()
Ответ на: комментарий от XMs

То, что можно решить вручную (журнальные кроссворды), может решить и компьютер.

zhekas
()
Ответ на: комментарий от zhekas

Нет. Я вообще только одну решил, потом подумал, хорошо бы автоматизировать процесс и сделал, но как видно, быстрее можно самому решить большой кроссворд, чем это сделает моя программа.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от zhekas

Я не могу поверить что на проверку даже большой площади нужно много времени, поэтому думаю, что в коде может что не так.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Я вообще только одну решил

Вот. Одного раза мало. Порешай вручную. Выработай свою технику. И попытайся перевести её в алгоритм для компьютера.

zhekas
()
Ответ на: комментарий от u0atgKIRznY5

Это правильный совет, - в науке такой метод называют «Моделированием рассуждений»

Silerus ★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Нормальный совет. У меня решалка на 80386 за несколько секунд решала такие головоломки. Где-то 20 на 30. Правда, там был прямой решатель, и в сложных задачах он просто затыкался и не мог продвинуться дальше.

Сравни производительности 80386 и своего компа.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Может ты взглянишь на код и там ошибку найдёшь а? А то хорошо бы высокую скорость вычисления. Я бы тогда на этих журналах, где японские кроссворды разыгрывают денежные вознаграждения, хоть что нибудь заработал бы.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

взглянишь на код и там ошибку найдёшь а?

Нет, меня не радует в line->line->line разбираться, да и код оформлен ужасно. Могу поискать в архивах старый исходник. Он, правда, на Turbo Pascal.

разыгрывают денежные вознаграждения

Это лохотрон.

i-rinat ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Я бы тогда на этих журналах, где японские кроссворды разыгрывают денежные вознаграждения, хоть что нибудь заработал бы.

Если тебе нужен кроссворд решить, а не программу написать, бери готовые решатели. http://webpbn.com/survey/

zhekas
()
Последнее исправление: zhekas (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Могу поискать в архивах старый исходник. Он, правда, на Turbo Pascal.

И можешь разгадать с помощью своей программы рисунок, который у меня jcp/samples/r. Там 15 на 20. У меня неизвестно долго проверяет.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

https://gist.github.com/i-rinat/45f41d44d1cd4839a07b53017234b8e6

Откопал таки. Не уверен, что это можно собрать чем-то кроме Turbo Pascal под DOS, там для отображения используется сегмент A000. К счастью, у меня остались экзешники, под DosBox'ом работают. Какие-то примеры решаются.

Твой r не решается. Решалка у меня была примитивная, она проходила вертикали и горизонтали, добавляя доступные детали. Но так как она не умеет выдвигать гипотезы, в какой-то момент решение останавливается.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

там для отображения используется сегмент A000

Имеешь ввиду, что то типа того, как выводить текст в адрес 0xb8000 в режиме ядра?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Примерно так. Только для графики в VGA.

i-rinat ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

0xb800 — color text & cga graphics modes
0xb000 - monochrome text
0xa000 - ega&vga graphics modes

redgremlin ★★★★★
()

Так. А где брать тестовые входные данные, а то я тоже хочу принять учаситье в этой олипиаде :D

anonymous
()
Ответ на: комментарий от redgremlin

Просто руки - крюки, да и употребляю я совсем иные вещества ;D

anonymous
()
Ответ на: комментарий от i-rinat

Но так как она не умеет выдвигать гипотезы, в какой-то момент решение останавливается.

Данные кроссворд решается без гипотез. Только аналитикой по строкам.

zhekas
()
Ответ на: комментарий от zhekas

Только аналитикой по строкам.

Если ты имеешь в виду «по одной строке за раз», то нет. В какой-то момент нужно предположить состояние какой-то из ячеек и дальше проверять на противоречивость. Не всегда, конечно. Многие раскладки решаются и без этого. Но бывают раскладки, в которых без этого никак.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.