Публикации с меткой «checkio»

Oduvan’s Web Blog

Разыскивается Python Developer в команду

Желательно в офис на поную, Днепропетровск. Но можно и удаленка. Работа над проектом CheckIO.org

Можно писать сюда support@lyabah.com или звонить сюда +380503625288

Oduvan’s Web Blog

Ищу модератора / контент-медежера для проекта CheckIO связаного с python-разработкой

Главное, чтоб был хороший и добрый

Знания ангийского – ОК, знания python – ОК. Но главное чтобы был хороший…. и добрый…

Оплата договорная после собеседоания. Рабоать можно как удаленно, так и в офисе, так и парттайм

Можно писать, а можно звонить +380503625288

Oduvan’s Web Blog

Свой UCSVLOG Reader в CheckIO

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

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

Речь идет о UCSVLOG Reader, и я уже не раз упоминал о нем тут, а на предыдущем uapycon даже 5 минут про них рассказал. В одном из моих текущих проектов – сами логи и их аналитика – заняли важное место. А наработки в виде апы django_ucsvlog_analytics собираюсь в скором времени подчистить и выложить в сеть.

Задача простая. На вход функции checkio подается кусок лога, причем не обязательно идущий сначала, он может взять из середины. Вам надо дойти до валидного участка и распарсить их. Как результат выдать валидную структуру в виде массива записей с массивом ячеек внутри.

Пробуйте… Пробуйте решить… Пробуйте добавить свое решение… Вам понравится

PS: Добавляя эту задачу я столкнулся с тем, что мне приходилось часто тестировать функцию на предмет все новых и новых ( и каждый раз разных ) входных значений. Когда я отмучился и добавил таки это решение – мне пришла в голову еще одна замечательная функция для CheckIO, о которой расскажу в следующей статье…..

Oduvan’s Web Blog

Catalog of Tasks. Решение задачи – это только начало!

 Мы не писали о Checkio уже довольно давно. Уйдя в очень глубокий девелоп, мы старались учесть все пожелания пользователей прежде, чем представлять следующий релиз. Но проект не прекращал работать. Мы все так же радушно принимаем постоянных посетителей и новичков ( ~ 1k ), которые не перестают удивлять нас интересными и неординарными решениями ( ~ 3k ). Мы обсуждаем с ними новые идеи и вместе внедряем их в жизнь. А теперь тем, что у нас получилось, хотим поделиться с вами.

 Я решил не перегружать статью информацией обо всех сервисах сразу, а создать серию статей о CheckIO в своем блоге.

 Начнем с раздела “Catalog of tasks” ( далее для простоты – просто Таски ) – своеобразного фундамента Checkio, ведь именно с него начинался наш проект. Таски представляют собой задачи, собранные в каталоге и разделенные по тематикам. Любой пользователь Checkio может выбрать задачу по душе и проверить свои силы в ее решении. На первый взгляд ничего сверхъестественного, и кажется, что CheckIO ничем не отличается от миллиона других интернет “решалок”. Но давайте взглянем поглубже на процесс решения, и вы поймете, в чем вся соль.

 Итак, алгоритм решения задач сводится к следующему:
* Выбираем задачу, изучаем ее условие, примеры. В большинстве случаев Вашей задачей является написание правильной функции checkio, ее то система и будет проверять, чтобы определить правильность Вашего решения.

* Нажимаем “Solve It“ и переходим к построению кода. В редакторе Вы видите небольшую заготовку для Вашего решения. Это пустая функция checkio с описанием того, что нужно сделать, и ряд тестов для нее.

* Если после запуска программы под всеми асертами в коде вы видите вывод “All ok”, – значит предварительно у Вас все хорошо, и пора отправлять программу на тестирование – т.е. нажать Check. Система будет тестировать Вашу программу на аналогичных примерах, плюс еще на одном скрытом, который очень похож на остальные и нужен лишь для того, чтобы отсечь возможность мошенничества.

Стоит обратить Ваше внимание на консоль под редактором кода. Это удобный инструмент, который сочетает в себе возможности программирования и полезные подсказки.

* Если решение правильное, вам предлагается его опубликовать. После размещения на сайте Ваше решение будут видеть другие пользователи, опубликовавшие свои решения. Вы не сможете самостоятельно удалять либо редактировать свой код, поэтому лучше сначала почистить его, оптимизировать, потом еще раз проверить и опубликовать уже то, что не стыдно показать коллегам.

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

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

 Такой алгоритм дает целый ряд преимуществ.

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

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

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

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

 Мне кажется, эти особенности нашего портала превращают решение задач в непрерывную и интересную игру, в которой вы совершенствуете свои навыки и набираете очки

А решать задачи на CheckIO теперь можно, используя любую из версии питона – Python 2.7 и Python 3.2 – для каждого из них составляется отдельный рейтинг задач, решений и пользователей.

 Хотим также обратить Ваше внимание на то, что у нас есть несколько особенных разделов каталога Тасков. Задачи в каждом разделе отличаются дополнительными правилами и особенностями, что делает их решения еще интереснее.

 Например, раздел Shorts содержит задачи, которые нужно решить как можно короче, ведь Питон имеет столько разных плюшек для сведения задачи в одну линию. В разделе Funny нужно решить задачи как можно более необычно, – забавнее, если хотите, а пользователи будут оценивать, насколько интересно и неординарно это у Вас получилось. А в разделе Games собраны классические игры-головоломки. Например, попробуйте написать решение игры “Сапер”.

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

Спасибо и жду Ваших отзывов.

PS: Напомню, что это лишь первая статья из запланированного цикла, так что если хотите первым узнать о новинках и особенностях CheckIO – подписывайтесь на RSS или следите за нами в соц.сетях.

Oduvan’s Web Blog

Фансы и шортсы. Такого программирования вы еще не видели :)

Вчера для CheckIO придумали вам новую развлекуху, друзья мои, на эти выходные

Идея развлекухи в том, что надо придумать максимально необычное решение для самой обычной задачи. Например, самое простое из раздела Funny, и проще уже не придумаешь - Funny addition. На вход – массив из 2х интов, а на выходе их сумма. Но функция sum(data) – это же не смешно. Смешнее что-то вроде max(data) + min(data).

Заходим, пишем свое аморальное решение, и рейтенгуем решения друзей.

По результатам выложу сюда топ аморальщины. Развлекайтесь и удачных вым выходных

ЗЫ: У нас есть еще прикольные шортсы, но о них уже в другой раз

Oduvan’s Web Blog

ЧекЁ или почему я не сплю последние несколько месяцев

Я последние несколько месяцев любую свободную минутку посвещаю именно этому проекту www.checkio.org, т. к. чувствую, что делаю что-то полезное, что-то что может помогать молоды специалистам.

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

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

Так-же у нас на стадии тестирования терниры между программами. И первой задачей для турнира сейчас выбрана игра five in row. Надо написать программу, которая будет играть в эту игру, в простонароде – бота

После прохождения квалификации — вы сами, интерктивно, можете поиграть в нее. Можете поиграть с другими прораммами на арене. Турнир между программами у нас запланирован на конец марта. Хотелось бы увидеть по больше участников, должно быть интересно.

Еще хотелось бы услышать от вас отзыв. Как Вам проект?

Oduvan’s Web Blog

CheckIO.org – We are betta almost

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

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

Итак, за этот месяц нам удалось реализовать 3 идеи, причем в условиях полного рефакторинга ядра.

Первая идея— Learning. Я назвал это «Подарок для наших маленьких слушателей», хотя она может быть полезна и большим дядям. Если попытаться изложить их идею одним предложением — это цепочка задач от легкой к сложной, причем в описании самой задачи есть все справочные данные для ее решения. Таким образом пользователь на примерах учится питону и параллельно пробует свои силы, т. к. я абсолютно уверен, что в программировании — знания без практики не имеют никакой ценности.

В последствии это может быть использовано для изучения и получения навыков работы с оупенсорсными библиотеками (я бы написал, к примеру, обучалку для Stream). К тому же, если Вы – разработчик какой-либо библиотеки, Вы можете отправить мне список задач для использования Вашей библиотеки и мы добавим ее. Еще такой вариант: если это какие-нибудь системные библиотеки, то для них можно писать заглушки, полностью описывающие интерфейс, но ничего системного не делающие. Вообщем, мне кажется вижу, куда раскручивать эту тему, и мы с командой будем это делать.

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

Появление следующих 2 фич связаны с тем, что я люблю играть в логические игры: саперы, реверси, 5 в линию, лаинс, сокобан, судоку и многие другие. Благодаря чекио Вы сможете попробовать описать стратегию этих игр — программно. Т.е. Вы пишите программу, которая сама играет в игру.

Итак, следующий тип задач — это Score Games или Single Player Game. Это игры, в которых выиграть нельзя, но можно постараться набрать как можно больше очков. Первым представителем этих игр стал Lines lite. От классической игры в Lines эту игру отличает то, что не нужно, чтобы шар проходил путь полностью, а достаточно, чтоб он просто становился на пустое место. По мере того, как пользователи буду справляться с этой задачей, мы добавим и не «облегченную» версию.

Играть довольно просто. Вашей программе checkio передается дикт из следующих ключей:

  • steps — это массив координат только что поставленных шаров
  • map — это текущая карта. В этой версии игры размер карты 9х9. Каждый шар обозначен цифрой от 1 до 9, пустые места обозначены 0
  • colors — цвета следующих трех маркеров.

Как результат, Ваша функция должна вернуть массив из 2х координат (координата – это массив из 2х чисел) – откуда и куда необходимо передвинуть шарик на поле. Тот, кто впервые слышит об этой игре, тот может ознакомиться с ее правилами более подробно на wikipedia.

Как только Вы написали программу, нажимайте play. Вы увидите в результатах работы программы поле, которое будет заполняться шарами разных цветов. Нажимая next или prev, Вы будете двигаться по итерациям этой игры. Под игровым полем выводится количество набранных очков. Если Вы набираете больше 0, то попадаете в High Score этой игры. Мы попали в High Score с оглушительным счетом – 5ть очков. Попробуйте нас переплюнуть

Ну и о последнем обновлении Вы, наверное, уже догадались. Это Competition или Multi Player Game. Тут уж выигрывать можно и нужно. Для тестирования Вашей программы нужен соперник, т.е. уже написанная программа кем-то другим на этом портале, т.е. Ваши программы будут играть друг с другом. Давайте лучше на примерах. Первым представителем этой игры является 5 in row или Gomoku(wikipedia).

Вам нужно написать программу, которая бы играла с «кем-то» в эту игру. На вход (как уже принято) подается дикт со следующими ключами:

  • you — твой марк в игре
  • data — данные игры

Данные игры — это так же дикт со следующими значениями:

  • map — текущая карта. Массив 19х19 со значениями 1 или 2, если занято первым или вторым игроком и 0, если не занято никем
  • step — ход противника

На выходе – ваша программа должна вернуть координаты вашего хода.

Для выбора соперника вам необходимо нажать на Check With и обозначить пользователя, находящегося сейчас на арене, нажав напротив понравившегося кнопку check. Можете для тестирования выбирать в соперниках – oduvan. Можете посмотреть на нашей странице фейсбука или линкедина, как она играет пока сама с собой.

Как и в score game справа выведутся результаты игры. В соревнованиях игра прокручивается дважды: в первой игре первым ходишь ты, во второй — твой соперник. Именно поэтому и передается параметр you в функцию.

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

Когда Вы решили, что ваша программа теперь очень даже ничего и пришло время и ей найти свое место на арене – смело нажимайте «On Arena» на верхней панели. Теперь другие пользователи могут тестить свою игру с Вашей программой. Игры, помещенные на Арену, будут периодически запускаться системой для проведения между ними соревнований. Если во время соревнования Ваша программа выпала с ошибкой, то она вылетает из турнирной таблицы, иначе, своими победами она будет достигать все лучших и лучших результатов.

Так что, попробуйте написать своего непобедимого игрока, мы своего уже написали.

Когда мы пытались написать свое решение для этих типов задач, самой большой проблемой было несовершенство браузерного редактора кода. Для средних тасков из каталога – его очень даже хватает, но Competition и Score Game – это уже более сложные и комплексные задачи. Теперь Вы можете просто скачать эту программу себе на компьютер и решать ее в своем любимом редакторе кода, тут же тестировать и дебажить работу программы. Для этого необходимо распаковать скачанный архив, написать свою программу в файл solution.py и запустить checkio.py для проверки ее работы.
В случае Score Game, ваша программа будет играть с компьютером и зарабатывать очки, а в случае с Competition Game, Вы будете сами играть со своей программой, либо можете использовать возможность заранее составить файл с массивом ходов противника и передать ее checkio.py во время запуска.

Ну и конечно, самое крутое, это то, что у проекта появились новости и рсс через feedbearn, свое место в FaceBook, LinkedIn и Twitter, теперь Вы сможете быть в курсе всего и удобным для Вас способом. И именно поэтому на своем блоге я больше ни слова не напишу о чекио, дабы не засорять агрегаторы, в которых нахожусь, нецелевой информацией. Тут теперь только о питоне, джанге и еще всякой интересной программистической штукенции. Но, тем не менее, буду очень признателен тем своим читателям, которые отметят этот скромный проект отзывами на своих блогах, думаю, это приведет в проект еще больше сильных игроков с новыми и интересными решениями. Буду очень признателен за отзывы, критику и предложения, которые касаются этого проекта, в FaceBook и LinkedIn.

Еще появилась возможность у себя в профиле указывать ссылки на свой сайт, на профили в LinkedIn, FaceBook и Twitter. Мир должен знать своих героев в лицо. А также можете повесить на свой сайт нашу плюшку (чем-то напоминающую плюшку из StackOverflow), тем самым пригласить своих читателей в наш сервис, ну и похвастать своими результатами в нем. Я себе уже такую повесил.



Еще немного о критике. Во время первого запуска мы выложили несколько сырых либо некорректных программ. Подобные ошибки я бы хотел устранять благодаря Тестеровщикам/Контролерам качества (название для этой группы людей еще обсуждается). Эти люди будут видеть еще не опубликованные задачи. Они смогут попробовать решить их раньше всех, высказать свое мнение об описании, сложности и по существу самой задачи. Еще не знаю как, но уверяю, что их заслуги не будут забыты. Подать заявку о входе в ряды Тестеровщиков можно в разделе «Как помочь?» и выбрать «Стать тестером» или просто написать мне.

Вообщем, это вкратце то, что я хотел сегодня рассказать об этом проекте. Хочу сказать спасибо моей команде. Отдельные слова благодарности Денисенко Екатерине за помощь в переводе некоторых частей сайта на английский язык. Спасибо noonerus за помощь в нарезке и за то, что дал мне несколько хороших и весьма полезных уроков. И самое большое спасибо Вам за то, что помогаете своими багрепортами, отзывами и программами

Ту би континюэд….

Метки

.net .NET C# .sort 1.2 2009 2010 404 error admin ajax amazon analytics and apache api archlinux asp.net async asynchronous autocomplete bash blender blog blogengine blogs book bootstrap bot bpython buildout byteflow bzr C c plus plus C++ cache cbv Chaco checkio chrome ci ckeditor class based views clojure closure cms cms с удобной админкой code coding style collectd COM comet competition conference ConfigParser contest Context continuous integration CouchDB coverage CppCMS cpyext cpython crud csrf CSS ctypes curl custom model fields cx_freeze cython database db dbm dbqueries debian debug debugging decorator decorators deploy deployment descriptor design dev devconf developers development diveintopython Django django 1.2 django 1.3 django advent django framework django template django trunk django weblog django-admin-tools django-cms django-compressor django-hosts django-piston django-registration django-sphinx django.admin djangoadvent djangocms djangodash doc documentation drupal e-legion eclipse EGit emacs encoding Enthought epoll erlang event exception ExtJS fabric facebook fastcgi finaloption fixtures fonts forms formset fp framework freebsd freeswitch fs2web ftp fun funcparserlib functional gae gamin gandi generic views gettext gevent gil git github gitosis Google Google App Engine google picasa Google Translate google wave Google Web Toolkit grab grablab greenlet gtd gui haskell hg hgshelve highlighter host hosting how-to howto html html5lib Hudson humor i18n icfpc ide idiomatic image-scripting improvements Internet interpreter ipython ironpython izmenimsya.ru jabber java javascript jenkins jetbrains JIT job jquery json jstree jython kde kiev kiyv kyivpy l10n ldap library libs Life Links linux Linux & Unix LLVM logging logs lxml Mac OS X magic mail markdown Matplotlib Mayavi maybe mediavirus meetup memcache Memcached memory messages metaclass middleware migration mikrotik mkd model models mod_python mod_wsgi mongodb monitoring mptt musicmans.ru musicx mvc my-projects mysql netCDF networkx newforms newforms-admin news nginx Nhibernate nix nose NoSQL numpy oop open source OpenID openoffice opster optimization oracle orm os pagination parsing path patterns pdf PDF-принтер PEP PEP8 performance performance optimization perl personality photo php picture-driven computing PIL pinax pingback pip plasma plone plugin plugins postgresql programming progress bar psycopg2 py2exe pybb pybbm pycamp pycharm pycon pycow pycurl pydev pygtk pylons PyNGL pypy pyqt PyQt4 pyrad pyramid PySide Python Python 2.5 python 2.7 python 3 python c api python speed python-mssql python3 pywinauto Qt Qt4 queue rabbitmq radius raw sql re redis redsolution redsolution cms regexp regular expressions release repoze.bfg RequestContext reusable apps robokassa rss ru ruby ruby-on-rails sample satchmo scalability SciPy scraping screencast search selenium self.error seo server setattr settings setuptools shell sikuli sms snippet socket.io software sorting south sphinx spider sql sqlalchemy sqlite ssh startup step-by-step subdomain subversion svn SyntaxHighlighter system tags tdd tddspry teh drama template templates templatetags test testing thinkpad threading threads tips tips and tricks tools tornadio tornado tornado server tricks tutorial tweepy twisted twitter typography uapycon Ubuntu ucsvlog uml Uncategorized unicode unit test unit testing UnitTest Unladen Swallow upload urllib urls utf-8 uwsgi validation vcs versioning video vim virtualenv Visual Studio vkontakte voip wave web web-devel web-services web-разработка webdev webfaction webkit webpy websockets webtest widget widgets Win API windows Wirbel work wrapper wsgi wxPython wxWidgets wysiwyg xapian xml xmonad xmpp xpath yandex youtube zip zomg zope [cdata[cbv]] [cdata[ci]] [cdata[class based views]] [cdata[continuous integration]] [cdata[django framework]] [cdata[django-sphinx]] [cdata[django]] [cdata[nginx]] [cdata[python]] [cdata[virtualenv]] [cdata[программирование]] автоматизация администрирование администрирование django админка алгоритмы архитектура атрибуты базы данных Без рубрики безопасность библиотеки блоге бот веб-разработка видео Визуализация данных вконтакте Все записи гвидо ван россум граббер графика графы декоратор декораторы дескриптор дескрипторы документация заметки игра жизнь идея интересное киев Клиентам книги конференция личное математика метаклассы модели модули монады морфология мысли невозможное новости о облачные вычисления обо мне Обработка данных оптимизация оптимизация кода Основная лента основы парсинг парсинг сайтов перевод песочница Питон поебень поиск правила кодирования программирование Проектирование производительность работа рабочее размышлизмы Разное разработка разработка приложений разработки регулярные выражения сайт событие события ссылки статьи тестирование тесты Тюмень убунтариум фигня философия формы форум Хабрахабр хакинг хостинг шаблоны шаблоны проектирования эксперимент Эксперименты юмор я пиарюсь Яндекс