Skip to content

Instantly share code, notes, and snippets.

@kronos
Created April 27, 2012 11:08
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kronos/6569ecd7db151afd2cc2 to your computer and use it in GitHub Desktop.
Save kronos/6569ecd7db151afd2cc2 to your computer and use it in GitHub Desktop.

Update 3

Прием работ продлен до 20 мая

Update 2

Опять новый линк на исправленный словарь: убраны слова ИҐA, ЙЄЛЛОУСТОН, КАТАЛЕПCИЧЕСКИЙ, О'ГЕНРИ, О'КЕЙСИ, С/Х, ФІЛАТОВ, ФІЛАТОВА.

Update

Новый линк на исправленный словарь: слова отсортированы, записаны в верхнем регистре, убраны слова с "ё", "-", ".".

Конкурс RubyNoName подкаста

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

Постановка задачи

На игровом поле представлена сетка NxN (5 <= N <= 100), состоящая из русских букв в верхнем регистре, требуется собирать слова последовательно соединяя буквы по горизонтали, вертикали и диагонали. Для каждого слова можно использовать одну букву один раз, то есть для сетки 5 на 5 максимальная возможная длина слова - 25 символов.

Условия

  • решение должно представлять из себя один *.rb файл, написанный исключительно на Ruby, без использования многопоточности;
  • решение будет проверяться на Ruby 1.9.2;
  • при тестировании в одну папку с приложением будут помещены файлы input.txt и words.txt (слова отсортированы);
  • оцениватся будут количество найденных слов (без повторений и присутствующих в словаре), длинной от 3 символов, чем длинее слово тем "ценнее" оно;
  • решения (в виде приватных ссылок на gist с решением) принимаются до 20 мая на почту hronya@gmail.com.

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

Описание входных и выходных файлов

input.txt

Первой строчкой идет число N - размер таблицы, далее следует N строк состоящих из N заглавных русских букв.

5
ВОРОН
ДЛОКЖ
ГНАШЩ
ФАЬБО
ЙЕИУВ

output.txt

В выходной файл нужно записать все слова, которые удалось найти (чем больше - тем лучше, чем скорее - тем лучше).

ВОРОН
ВОРОНКА

Как будет проводится тестирование

Будет подготовлено некоторое количество таблиц разной размерности. Работы запускаются по очереди; каждой из них будет выделено некое время на исполнение, затем, если они не завершаются раньше определенного времени, они прерываются kill-ом (мы ожидаем, что не все разработчики могут знать, что такое сигналы и как с ними работать, поэтому ниже приведен шаблон программы, на который следует ориентироваться). Работы, выдающие некорректные ответы (нет в словаре, дублирующиеся слова) будут дисквалифицированы.

В случае часто задаваемых вопросов данный gist будет обновляться. Следует принять во внимание, что авторы подкаста ни разу не проводили никаких конкурсов, поэтому большая просьба относиться к контесту лишь как к способу лишний раз потренировать мозги. Даже простая полнопереборная задача может победить: совершенно не факт, что кому-то будет не лень делать что-то более сложное.

Шаблон

output = File.open('output.txt', 'w')

at_exit do
  output.flush
  output.close
end

# your solution here
@dimanon
Copy link

dimanon commented May 14, 2012

А пример в шаблоне только в IOS используется, как я понял?

@kronos
Copy link
Author

kronos commented May 14, 2012

IOS?

@dimanon
Copy link

dimanon commented May 14, 2012

я не совсем понял, как использовать шаблон, новичек...

@dimanon
Copy link

dimanon commented May 14, 2012

там читал, но все равно не понял.
например я так пишу в фаил: output = File.open('output.txt', 'w'){|file| file.puts a.output}
как тогда должно быть?

@makaroni4
Copy link

Используй оператор IO#write:

http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-write

Вот пример:

output = File.open('output.txt', 'w')

at_exit do
  output.flush
  output.close
end

0.upto 1000 do |i|
  output.write "#{i}\n"
  sleep 0.1
end

Запусти скрипт и кильни процесс, выполнится блок метода at_exit и в файле output.txt будет несколько десятков чисел, для которых был вызван метод write.

@dimanon
Copy link

dimanon commented May 15, 2012

makaroni4: у тебя сколько времени на тестовом файле проходит?

@dimanon
Copy link

dimanon commented May 15, 2012

я запись вставил в блок at_exit, вроде работает.

@makaroni4
Copy link

Можно даже делать

at_exit do
  output.close
end

т.к. close делает flush.

@dimanon
Copy link

dimanon commented May 17, 2012

Добрый день, есть какие нибудь промежуточные результаты?

@kronos
Copy link
Author

kronos commented May 17, 2012

Добрый, мы прием работ продлили до 20го. Результатов пока нет.

@dimanon
Copy link

dimanon commented May 17, 2012

А я поторопился, можно было по оптимизировать еще... Много конкурсантов?

@kronos
Copy link
Author

kronos commented May 17, 2012

Меняй свой gist сколько хочешь до 20-го включительно, я последнюю версию возьму.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment