Блог пользователя RodionGork

Автор RodionGork, 11 лет назад, По-русски

В почту упало сообщение о мероприятии

Enter the oDesk Coding Contest — Win a free trip to California!

Code your way to California! Show off your coding skills by answering two puzzles and compete against developers from all over Russia and Ukraine! Contest is on October 19th — but register today.

Я довольно немного знаю про ODesk, а уж про CodinGame вовсе впервые слышу (такой дремучий я) — так что затрудняюсь оценить будет ли эта инфа кому-то полезна или нет.

Понять подробности формата я тоже затрудняюсь — одна надежда что кто-то из знающих дополнит инфу...

Полный текст и комментарии »

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

Автор RodionGork, 11 лет назад, По-русски

Упало в почту сообщение (как думаю и всем у кого есть на топкодере аккаунт) — а здесь вроде ещё не перепостили (сорри если дубль)?

На топкодере марафон с призами до $12000, длительностью 3 недели.

http://community.topcoder.com/tc?module=MatchDetails&rd=15761

Полный текст и комментарии »

  • Проголосовать: нравится
  • +20
  • Проголосовать: не нравится

Автор RodionGork, 11 лет назад, По-русски

А кто пробовал посылать пожертвования Википедии?

Я вспомнил об этом в связи с постом где зашла речь о благотворительности вообще и о миллионе от Дурова в частности.

Кнопку "Donate" я испытал в действии где-то полгода назад. Ну просто слишком часто читаю вики — и вы знаете, все эти жалобные баннеры действуют на психику, вспоминается Джимми Уэйлс с плачущими глазами Кота из Шрека.

Итак, я утолил научный интерес и гигантская сумма (ну ладно, $25 всего было) устремилась из пейпала в викимедия-фаундейшнз.

И приходит мне благодарственное письмо от Сью Гарднер.

Dear Rodion, Thank you for donating to the Wikimedia Foundation. You are wonderful! It's easy to ignore our fundraising banners... You should know: your donation isn't just covering your own costs...

Ну я прослезился, и полез в википедию посмотреть, кто это такая. И понял я что пятая часть от Дуровского пожертвования ушла просто на её зарплату. О моём скромном вкладе и говорить смешно — таких как я нужно почти 10000 добровольцев :)

Хотя я понимаю что для США $200000 это не так много. Сноуден по-видимому получал не больше. Но всё-таки я выпал в осадок слегка :)

Да я догадываюсь что эффективный интернет-проект типа вики требует хороших и достатойно оплачиваемых работников... Но в то же время миллионы людей пишущих и чистящих статьи в ней тратят своё время и силы на этот проект бесплатно — и от этого разрыв шаблона...

В итоге сейчас мне психологически легче потратить деньги на организацию очередного концерта класса учеников жены, скажем (цветочки там, сувенирчики, то да сё — зарплата средне-матёрого программиста за два дня). По крайней мере я точно знаю что это почти 100%-но выброшено на ветер и сплю спокойно. Ну и хотя бы я вижу что из этого получается.

Так что выраженную в обсуждаемом посте тов. goryinyich мысль я в целом понимаю. А какое ваше мнение? Ну или проще — отдали бы вы деньги Джимми Уэйлсу или стали бы искать другие пути для их эффектного профукивания?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

Автор RodionGork, 11 лет назад, По-русски

Некто на форуме запостил задачку — в строке из нулей и единиц найти максимальную подстроку с равным количеством того и другого.

http://javatalks.ru/topics/37905

Кто-нибудь знает откуда эта задача в оригинале? Я нашёл только несколько обсуждений на буржуйских форумах, ещё вот такую бумажку http://arxiv.org/pdf/0910.3503.pdf ну и до кучи кросс-пост этого же чела на другом форуме.

Есть ли она где-нибудь на online judge каком-нибудь? Хочется мысль проверить... %)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +17
  • Проголосовать: не нравится

Автор RodionGork, 11 лет назад, По-русски

Помню что здесь есть люди экспериментирующие с / занимающиеся / интересующиеся разработкой игрушек — вот их мой фэйл и позабавит (а будет ли полезен — не знаю).

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

И вот давеча приходит от гугла письмо счастья:

_This is a notification that your application, Wordys — word tetris, with package ID none.rg.wordys, has been removed from the Google Play Store. REASON FOR REMOVAL: Alleged trademark infringement. Google has been notified that aspects of your application, Wordys — word tetris, allegedly infringe upon the trademarks of others, and it has been removed from the Google Play Store due to a violation of the Content Policy. ... You may contact Blue Planet Software, Inc. at [email protected]. _

Дальше я минут пятнадцать читал и понял что удалили по-видимому десяток приложений выпадающих на первой странице по запросу "TETRIS", в связи с тем что это словечко оказывается зарегистрировано как товарный знак (сам дурак, конечно — но я как и многие привык считать его нарицательным). Ну удаляли видимо тех кто не проплатил его использование :)

explanation: These applications infringe Tetris Holding's trademark rights because they include the TETRIS trademark in the title of the applications.

Поди ж ты, целый "Tetris Holding" под это дело создан. Ложку мёда в бочку дёгтя добавляет лишь информация что вроде бы совладельцем является автор оригинальной игрушки (и соотечественник), т.е. не совсем чужой дядя карманы набивает... :D

Удаление приложения на гугле как оказалось означает что страница приложения лочится, статистика, звёздочки и отзывы теряются. Можно перевыложить приложение заново, с нуля "исправив нарушения" (что я и сделал). Тут конечно огорчает что шанса поправить косяк не дают (ну да, поставил галочку "правила читал" — значит получи поооолную ответственность)

В общем, мне повезло т.к. за пару месяцев существования игрушка набрала немного меньше 2000 скачиваний. Представляю как "радовались" собратья по ремеслу из той десятки, у кого статистика была на порядки получше :)

Кроме того повезло что удаляли видимо только с первой страницы выдачи — где-то на второй болталась ещё одно моё творчество (аналогично имеющее слово Tetris в названии — я как и многие пробовал силы на простеньких игрушках), но его я наученный опытом поспешил переназвать.

Так что если для кого это актуально — помните сей слегка печальный но довольно забавный опыт. Остаётся вопрос как проверять традемарки — сейчас я изучаю этот вот сервис — если кто-то посоветует лучше, буду благодарен.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +44
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Коллега прислал эту ссылку с надписью "угораем всем отделом"

http://reportazhyst.com/u-lvovi-pravoohorontsi-nakryly-it-pryton/

В ходе блестящей операции... во Львове накрыли... IT-притон... в трёхкомнатной квартире... Для ВИП-клиентов из США и Европы... Предприимчивый организатор... Несчастные неимущие студенты, приехавшие во Львов в поисках ЛУЖ (лучших условий жизни)... А оказались... в притоне! Сказали что программизьмом занимаются впервые и отказались давать показания...

Полный текст и комментарии »

  • Проголосовать: нравится
  • +11
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Вкратце

Ищутся желающие потерзать проект корпоративного тренинга (который зашёл в идеологический тупик). Надо человек 20 я думаю. Догадываясь что желающих будет раз в 10 меньше чем надо, предлагаю по окончании определить "победителя" и наградить его символическим призом в 100 баксов.

Для того чтобы поучаствовать нужно немного знания javascript и английского (или за полчаса освоить первое и заюзать гугл-переводчик для второго).

Я выложил проект в инет — можно скачать игровые файлы и утилиту для запуска. Зарегиться тоже можно (наверное) но лучше написать мне в личку своё мыло (см ниже).

Подробнее

Тренинг в форме соревнования ботов на javascript. Боты должны играть в игру такого содержания:

Два игрока кидают игральную кость. Каждый может кидать несколько раз за ход, пока не выпадет 6-ка, либо пока он сам не решит остановиться. Если останавливается — прибавляет сумму выпавших за ход очков к своему текущему результату — если же выпадет шестёрка все очки за этот ход сгорают. Несколько подробнее, с примерами, можно в скачиваемом архиве посмотреть.

Победителя предполагается (пока) выбрать по финальным результатам с помощью лотереи, однако в соответствии с рейтингом (т.е. тот у кого рейтинг на 400 очков больше должен иметь в 10 раз больше шансов на выигрыш). Этот механизм тоже описан. Впрочем его можно будет обсудить / изменить.

Время проведения мероприятия приблизительно до 24 ноября 2012. Если наберётся 20 человек раньше то по общему согласию можно будет это дело сократить.

Русского языка нет, извините — прямо сейчас я не готов это пофиксить.

Чтобы зарегиться

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

Тестирование

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

Если что-то идёт не так или всё сломалось — пожалуйста, не пугайтесь (не ругайтесь). Но конечно все кому охота постебаться в мой адрес — вполне welcome (в пределах разумного)! :-)

P.S. Источник задачи (игры для ботов) — взял в старинной книжке Ж.Арсака "Программирование игр и головоломок" (он тоже у кого-то позаимствовал). В принципе правила можем поменять (или вообще другую игру сделать, это не оч принципиально).

Полный текст и комментарии »

  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

В старом почтовом ящике обнаружил извещение об очередном соревновании в рамках проекта (или что это) "Интернет-математика".

Не нашёл чтобы кто-то постил здесь инфу об этом мероприятии, так что на всякий случай закидываю ссылку: http://switchdetect.yandex.ru/ (А может была но осталась незамеченной? ну не помешает, авось)

По прошлому году мне такое мероприятие запомнилось как контест в духе TopCoder Marathon с 17-гигабайтным текстовым файлом входных данных. Обработка на нетбуке шла ессно часами даже после утрясания и упрощения. Однако возможно коллегам более подкованным в этой сфере чем я контест будет интересен.

Регистрация там до 15 декабря, призы какие-то подразумеваются. В общем, если не видели, гляньте краем глаза — вдруг это для вас.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +28
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Для внутрикорпоративного тренинга планируется соревнование ботов. Откуда слизывать общую идею, то есть тьфу, брать примеры для подражания нынче вариантов много. Однако не всё ясно с тем как выявлять победителя (по рейтингу например).

Проблем вижу несколько. Сейчас хочу попросить идей/советов только по одной из них. Вот утрированный пример:

Играют два игрока, допустим, Ка и Бу в камень-ножницы-бумага. Ка придумал гениальную стратегию — кидать "камень" с вероятность 50% а всё остальное по 25%. Бу был ещё гениальнее и его стратегия — кидать "бумагу" с вероятностью 50%, а остальное по 25%.

Таким образом стратегии у них тупо одинаковые, но при игре вдвоём Бу при большом числе игр ощутимо ведёт в счёте.

Правда это только пока не придёт игрок Но (идея которого заключается в том чтобы с вероятностью 50% кидать "ножницы"). Он конечно всё испортит и рейтинги сравняются.

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

Не думаю что проблему можно решить "идеально", поэтому собираю пока варианты которые хотя бы отчасти помогут положению. Пока есть только два предложения:

  1. Добавить в систему безбашенных ботов играющих равномерно-рандомно (тогда относительно них "тупость/умность" других игроков будет проявляться) — но это вообще достаточно сложно и непонятно и зависит ещё от того какая игра будет окончательно выбрана.

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

В общем, буду страшно благодарен за подсказки и размышления!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +11
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Есть задача (на форуме нашёл) о том как из рандомно заполненого квадрата 3*3 сделать магический, пользуясь циклическими сдвигами строк или столбцов. Сама задача несложная (если только не требовать минимизации числа ходов).

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

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, перевод, По-русски

Коллеги, всем привет!

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

Вот короткая заготовка статьи. Пожалуйста, помогите разрастить и улучшить её. Если знаете как - редактируйте прямо там, если не знаете, пишите здесь, чтобы я (или другие) могли добавить. Давайте полезные и ценные ссылки. Поправьте корявый английский. ;-)

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

Для первого нужно чтобы кто-то из авторов/администраторов предложил и разрешил публикацию одной из своих задачек (копирайты оставим). Для второго нужны ссылки (кроме Петра и Геннадия) на какие-либо персональные странички или странички спортсменов уже существующих в википедии. Помогите с этим, плиз.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +65
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

С интересом прочёл гневные дискуссии по поводу обновления системы учёта вклада. Однако, заметил следующие позитивные моменты:

1) Стали более-менее вразумительными, например, оценки моих собственных постов, пострадавшие когда-то неимоверно давно от игрищ коллег с накручивающими ботами. Теперь хотя бы какая-то зависимость между положительными/отрицательными оценками и темой постов. Т.е. система даже по сути лучше противостоит злодеям. Это хорошо. ;-)

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

3) И вообще хоть что-то наконец сделано. Ждали давно - может быть, многие не совсем так себе это представляли или не совсем представляли что получится - но перемены есть. За этими переменами много сложной работы разработчиков ресурса, я так понимаю, MikeMirzayanov в частности. Программистам стоит уметь видеть труд других программистов и уважать его. И поэтому крики что администрация занимается бредом и хренью мне кажутся неприличными. Как где-то сказал maksay (примерно) "просто напишите свой CodeForces" - и всё поймёте. ;-)

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -21
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

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

Смотрю - у лидера по вкладу, Alex_KPR - новая аватарка. Ой, да и у одного из топов, Egor - тоже смена имиджа! И автор 97 раунда, KADR - ещё неделю назад выглядел иначе.

Даже Anonymous сменил фото на что-то менее демонстрирующее его анонимную суть. Возможно всё это начал MikeMirzayanov, хотя и немножко раньше - месяца два или три назад?

Это, видимо, новый год, карнавал, праздник. Или ещё какой-то флеш-моб на эту тему. Однако, почему бы не поддержать! Впрочем не у всех пользователей аватарки есть (или не у всех они такие, что смена будет заметна)

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски
Уважаемые коллеги, всем привет!

Хотел выяснить, насколько близка проблема и кто как её решает. (сорри если "боян" - почему он, кстати, через "о"?)

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

Однако в контесте удаётся поучаствовать редко, а у контестов атмосфера особая, с дорешиванием (или виртуальным контестом) несравнимая всё же. Азарт.

Фиг с ним с рейтингом, всё равно он у меня мягко говоря незначительный - сажусь решать.

Читаю задачу А - не понял вообще условия.
Читаю задачу Б - кажется что понял о чем речь.
Читаю задачу Ц - вроде понял о чём речь - но нет идей по решению.
Читаю задачу Д - понял условие и вроде понял как решать, эта задача мне нравится.
Перечитываю и решаю на всякий случай А, потом сажусь за Д - когда вожусь уже с проверкой прямоугольника - приходит жена - стараюсь ускориться, добиваю Д, потом Б - и выхожу из-за компа - в общем, где-то час всего посидеть удалось, значит.

Надо ужинать, надо общаться, какие-то мелкие домашние заботы решать и т.п. А результат контеста мне кажется удовлетворительным. И вдруг, посреди вечернего чаепития - ретроспективно в мозгу что-то щёлкает - в проверке диагоналей прямоугольника у меня какой-то идиотский неадекват - нужно было до этой проверки рассортировать ещё точки и кроме того длину диагоналей не только друг с другом сравнить но и с расстоянием до ц/м - а я всё это рассеянно забыл. Смотрю на время - 20.58, т.е. до конца чуть больше 5 минут. Ладно, думаю, завтра дорешаю.

Утром исправил, закоммитил, послал - облом - сильно удивляюсь, но потом обнаруживаю что ещё скобки забыл после вызова функции testRect - а Python, который я пытаюсь сейчас осваивать, относится к этому даже более снисходительно чем Си (не то что привычная Java) - исправил, получилось.

Всё хорошо, удовлетворение есть - правда рейтинг, действительно - минус фиг знает сколько.

Собственно вопрос - кто как предпочитает действовать, если чувствует что морально-психолого-физическое состояние перед контестом - неудовлетворительное:
- не садиться за комп, оставить, может, для "виртуальных контестов";
- либо сесть и попробовать-таки порешать, чёрт с ним с рейтингом если что;
- либо вообще тщательно готовиться к контестам, даже небольшим, и в соответствующий день по максимуму отдыхать, решить пару задачек для разминки за час до и т.п.;
- или ещё какие варианты?

Полный текст и комментарии »

  • Проголосовать: нравится
  • -14
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски
Коллеги, всем привет!

В связи с разумным вообще-то замечанием Alex_KPR об оскорбительном характере моих леммингосодержащих комментов в прошлом посте (а также в связи с тем что невыдержанного меня опять растроллили на не относящуюся к CF пустопорожнюю болтовню), убрал его в черновики. Если там были какие-то сакральные мысли - напишите, достанем.

Приношу извинения за некорректные высказывания. ;-)

Полный текст и комментарии »

  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Некоторое время назад обнаружили что почти все машины на работе (и не только на работе) для java-программ отображают время со сдвигом на час (меньше чем надо показывают).

Для проверки можно использовать следующее:

public class ShowTime {
public static void main(String... args) {
System.out.println(new java.util.Date());
System.out.println(java.util.TimeZone.getTimeZone("Europe/Moscow")
.useDaylightTime());
} // main
} // class ShowTime

Выглядит результат примерно так:

rodion@rg-home:~/my/java# date
Sat Nov 26 09:01:19 MSK 2011
rodion@rg-home:~/my/java# java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)
rodion@rg-home:~/my/java# java ShowTime
Sat Nov 26 08:01:30 MSK 2011
true
rodion@rg-home:~/my/java#

Заметьте - время в системе 9 утра, а в java - 8 утра. ;-)
С чем это связано идеологически все знают. А если кто-то не знает, как это поправить практически, то можете поступить как-то так:

1) Скачать и запустить официальный апдейтер инфы о таймзонах с ораклового сайта. Вариант хорош тем, что позволяет "пофиксить" время в JVM, не обновляя её. Актуально, скажем, если на работе 50 операторских компов используют java-приложения ещё под java 1.5 и т.п.

2) Можете попробовать обновиться до Java 7u1 или 6u29 - но по-моему это не поможет. Там пакет временных зон 2011g, кажется, а в апдейтере 2011k - возможно, в этом дело.

3) Проблема не будет воспроизводиться если временная зона самой ОС кривая-московская, не обновлённая например в XP SP2. Можно конечно этим воспользоваться... ;-)

P.S. Буду признателен, если сообщите на каких комбинациях OS/JVM у вас найдётся эта проблема. Я фиксил только на Windows/Linux и только 7u0, 7u1, 6u27.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Введение

Попробовал задачи с Unknown Language Round #4. Большое спасибо уважаемой коллеге Nickolas - это действительно довольно увлекательно.

Язык здорово смахивает на APL (язык для марсиан и математиков) из-за символьных команд и на FORTH (язык управления радиотелескопами и стиральными машинами) из-за стека, однако из-за малого количества стековых операций (2dup и rot страшно пригодились бы начиная с задачи d) и отсутствия второго стека всё это смотрится бедновато.

Двумерность в этом смысле ничего существенно не меняет - пишем-то всё равно "в одну линию", хоть и кривую.


Однако есть и особенность - инструкция p позволяет, видимо, писать самомодифицирующиеся программы. (правда с таким набором команд это вероятно трудновато)
  К сожалению эта возможность, видимо, осталась невостребованной в раунде. Если есть любители самомодифицирующихся программулин (кроме меня), то предлагаю попытать силы.


Задача

Написать на Befunge программу, которая перемещает своё собственное тело в другую позицию "доски", после чего продолжает выполняться с этой копии. Таким образом она сможет потихоньку "перемещаться" в пространстве. (Конечно, чем меньше получится - тем круче)

Упрощение

На оригинальном Befunge делать это довольно противно из-за недостатка базовых операций. Поэтому можно рассмотреть решения на "расширенной" версии языка.

Скачать её можно здесь (извините, это гуглдокс - нажать File - Download original).

Дополнительные команды, в основном украденные из стандартного FORTH, приведены ниже. В скобках показана трансформация верхних элементов стека (элемент "a" - это тот, которого операция не касается - т.е. он глубже остальных). В указанном архиве есть демо-программы (с расширением bf) для большинства из этих команд.

"o" - аналог OVER - копирует предпоследний элемент стека наверх (a b c -> a b c b)

"r" - аналог ROT - перемещает третий снизу элемент наверх (a b c d -> a c d b)

"R" - аналог ROT ROT - "поворачивает" три верхних элемента в обратном порядке (a b c d -> a d b c)

";" - аналог 2DUP - дублирует два верхних элемента (a b c - > a b c b c)

"m" - аналог >R - перемещает верхний элемент на доп.стек

"w" - аналог R> - перемещает элемент с верха доп.стека на основной стек

"(" - копирует верхний элемент на верх доп.стека

")" - аналог R@ - копирует элемент с верха доп.стека в основной стек.

"=" - распечатывает текущее состояние доски.

Пример

В вышеупомянутом архиве есть файл selfcopy.bf - пример программы которая копирует несколько первых байт себя самой на 3 строки ниже, после чего распечатывает доску и выходит. Результат её работы выглядит как-то так:

#./befunge.py -w 30 -r 10 selfcopy.bf
------------------------------+
>9m00>;gm;wR3+pw1-(v          |
     ^         \+1\_=@        |
                              |
>9m00>;gm                     |
                              |

Полный текст и комментарии »

  • Проголосовать: нравится
  • +22
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

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

Не могу ответственно сказать, очень ли важны эти тайные знания, но думаю не будет беды, если попробую показать пару фокусов, благодаря которым эта "магия" может быть доступна каждому.

Напишем программу "Хелло Ворлд", такого размера, что выводимый текст будет занимать в ней больше половины!

Как и вся магия, она будет плохо переносима, но под дос и винды работать будет. Что нам понадобится? Утилита debug.exe - в современных виндах она живёт в c:\windows\system32 - это примитивный дебаггер который остался там рудиментарно с самых старинных версий доса... Кое для чего он ещё может пригодиться! (хотя для серьёзной разработки на ассемблере нужен нормальный компилятор - ну а простенькие вещи и в дебаггере можно накидать)

Если вы работаете из под linux, как я, то вам понадобится либо виртуальная машина, либо dosbox.

Итак, запустите окошко с командной строкой (например, cmd) и выполните команду:

С:\>debug.exe

Здесь и далее договоримся что полужирным отмечено то, что пишем мы, а простым - то что нам отвечает система.

Вы должны увидеть приглашение в виде единичного тире (минуса, дефиса) в левой позиции экрана. Введите команду "a" и нажмите enter. Слева появится шестнадцатеричный адрес в виде сегмент:смещение. Сегмент может оказаться довольно произвольным, а смещение будет 100 - с этого адреса грузятся в память программы в формате COM. Вводите дальше инструкции, строка за строкой (всего 4)

-a
7234:0100 mov ah,9
7234:0102 mov dx,109
7234:0105 int 21
7234:0107 int 20
7234:0109

В пятой строке вы просто нажмёте enter и опять перейдете в режим приглашения.

Наша программа состоит из 4 команд - из них первые три посвящены вызову системной функции печати строки. Первая загружает номер подфункции (9) в регистр процессора ah, вторая загружает адрес выводимой строки (её смещение) в регистр dx а третья вызывает системную функцию (прерывание) номер 21h - это прерывание зарезервировано за большим количеством простейших полезных функций операционной системы ДОС. В частности 9-я подфункция печатает строку с заданного в dx адреса до символа доллар.
В четвёртой строке мы вызываем ещё одну системную функцию, номер 20h (она не требует каких-либо аргументов в регистрах процессора) - выход из программы (да, в таких маленьких программах выходом нужно заниматься специально!)

Но ведь у нас ещё не записана выводимая строка? Нет проблем. Правда debug.exe не умеет задавать текст, но будем действовать так: введите команду e 109 (ввод данных побайтово с такого то адреса) и потом набирайте, нажимая пробел после каждых двух символов (оно само будет переходить к следующему байту) шестнадцатеричные значения. Старые значения байтов будут отображаться перед точкой, новые после:

-e 109
7234:0109   45.48   24.65   55.6C   47.6C   00.6F   00.0D   00.0A
7234:0110   50.24

Введя последнее значение, мы опять нажали enter. Введите d 109 (дамп памяти с заданного адреса) и убедитесь что всё верно (там справа будет отображаться текстовое представление, что удобно). Вообще нужно понимать, что эту цепочку байтов я не высасывал из пальца, а просто набрал в блокноте а потом сохранённый файл дампировал тем же debug.exe

Теперь дело за малым - укажем размер файла, его имя - и сохраним его

-r cx
CX 0000
:11
-n hw.com
-w
Writing 00011 bytes

Здесь нужно пояснить только две вещи - размер программы - от адреса 100 до адреса 110 включительно - 17 байт (11h) - это число надо записать в регистр CX (но не в режиме работы программы, а в самом отладчике, т.е. как бы в текущее состояние процессора).
Имя файла должно иметь расширение COM - это самый старый формат исполнимых файлов в DOS, он не требует специальных таблиц загрузки как EXE (хотя там есть смешной нюанс, в который не будем углубляться - формат определяется не по расширению а по сигнатуре MZ в начале).

Теперь вводите команду "q" чтобы выйти из дебаггера обратно в командную строку.

Выполните созданную программу:
C:\>hw.com
Hello
C:\>

Проверьте её размер:

C:\>dir hw.com
HW          COM        17 ....
1 file    17 bytes

95% из читающих это, это знание никогда не понадобится. Но в качестве развлечения - тем кто не знает что такое ассемблер, процессор и его регистры, адреса памяти, функции операционной системы и т.п. - всё это может сгодиться, не так ли? В инете вы можете найти массу информации на эту тему - ну или спросить меня если что. ;-)

Добавлю, что до недавнего времени проводились соревнования Hugi Compo - кто напишет самую маленькую программу выполняющую требуемые действия (например, распечатывающую текущий каталог).

Актуальность ассемблера для x86 сейчас сильно снижается по понятным причинам, хотя ессно существует куча других процессоров, систем и ассемблеров. Если будете программировать стиральные машины или микроволновки - обязательно об этом узнаете. ;-)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +46
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Я вижу поднялась волна тем "спортивное программирование и всякая ересь". Попробуем немного отклониться от оффтопа и вспомним игры (отчасти резонансом на статью Михаила Мирзаянова об играх), тесно связанные с историей развития вычислительной техники вообще и программирования в частности.

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

В них играли, я так понимаю, ещё на тех машинах, у которых вместо монитора было АЦПУ с рулоном бумаги (как на известной картинке с Д.Ритчи) - в некоторых версиях даже можно найти "режим экономии бумаги".

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

Другим потомком этих игр стали безусловно графические квесты (кто не играл в Гоблинов или многочисленные произведения Сьерра: Quest for Glory, Larry, Space Quest - вы много потеряли). Тут основным отличительным элементом является конечно неистощимость авторов на головоломки и их подчас неожиданный юмор.

Итак, если вы не играли в Colossal Cave Adventure (Adventure 350), но готовы похвастаться тем что немного знакомы с английским языком - качайте подходящую к вашей ОС версию и проверьте себя. ;-)

Запустив её вы обнаружите что-то вроде:

"Вы стоите в цветущей долине, справа от вас какой-то дом"

Написав команду "войти в дом" вы обнаружите внутри какое-то барахло, в частности, если я правильно помню, ключи собственно от пещеры. Ну дальше имеет смысл найти пещеру, не заблудиться в ней, решить все головоломки (для которых в большинстве случаев нужны те или иные предметы) и вынести найденные "сокровища". По ходу скорее всего придётся рисовать на бумажке или в ещё где-то карту, записывать гениальные мысли...

Лучше не подсматривать в подсказку - до некоторых головоломок предпочтительно дойти самостоятельно, чтобы получить взрыв позитива. Единственное до чего не догадался в своё время я - как убить дракона. Разгадка была очень проста и очень смешна, но второй раз в эту реку не войти... %)

Конечно, типичная реакция "у-у-у, да тут вообще картинок нет, такой шит" сразу выявляет "не наших" людей. Впрочем несмотря на отсутствие картинок игрушка вдохновляет тру-программеров на кучу интересных идей (в основном в области разработки игр)... В частности компания Sierra была создана Кеном и Робертой Вильямс которые пройдя игрушку до конца не смогли найти ничего подобного ей. Это заставило создать их и компанию, и первый графический квест в мире... В общем, сами понимаете... От игрушки веет историей. В статье википедии есть ссылка на фото где игрушка запущена на таком вот смешном компьютере - нехилый экранчик, а? ;-)

Также рекомендую игрушку если вы немного интересуетесь собственно английским языком - в ней есть определённое количество шуток основанных на игре слов (например, при попытке убить медведя что-то вроде "you want to kill him with your bare hands against his bear hands?")

Ну а если случится невероятное и вам не только понравится жанр текстовых квестов (ну если вы не были знакомы с ним раньше), но и осилив игрушку вы захотите "ещё" - обращаю внимание на целую серию Zork - впрочем, вы наверняка найдёте её по википедии и т.п. В отличие от написанной на фортране или C "Adventure", для этой игрушки в большинстве вариантов использовался уже собственный Lisp-подобный язык, насколько я знаю - для её игровых файлов можно скачать интерпретатор Frotz под линукс (ну а под виндой она непосредственно в виде досовой программульки существует).

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -47
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Коллеги, всем привет!

(UPD: появилась потребность в ещё людях, притом возможно студентах - см коммент)

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

Есть вакансия java-программиста. К сожалению ответственные за это объявление не очень над ним парились и тупо скопировали одно из старых, поэтому немного поясняю:

Есть Группа Компаний Бюллетень Недвижимости. Когда-то это был просто толстый журнал, сейчас это несколько изданий и веб-ресурсов (не только по недвижимости). В ней есть отдел связанный с программизьмом (не скажу точно сколько человек) - большая часть касаются веб-ресурсов (т.е. веб-программисты, дизайнеры, сео и т.п.) - и ещё те кто работает с софтом для "внутренних потребностей". В основном это программулины которые принимают и обрабатывают информацию и рекламные объявления от заказчиков или помогают заказчикам подавать эту информацию.

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

Список требований в объявлении... Не вполне адекватен. В общих чертах нужно:
- твёрдые навыки в Java Core вообще, полезненьких классиках из J2SE API в частности - плюс желательно знакомство с J2EE (в первую очередь JPA в виде Hibernate или EclipseLink, Spring в общих чертах, GWT и IceFaces в различных проектах присутствуют) - вообще понимание что такое сервлет, томкат, хттп-запрос и ответ... ну короче, страшно сложные вещи;
- представление об SQL (умение написать несложные запросы для MySQL или FireBird, или хотя бы Access вполне покатит);
- познания в алгоритмах... Общие... Понимание временной сложности и затрат по памяти... Алгоритмы на графах или цифровые фильтры не понадобятся, почти наверняка... Некоторые алгоритмы обработки строк - могут;
- довольно много обработки текста и данных вообще, поэтому желательно не бояться регэкспов, уметь придумывать автотестилки и вообще иметь бодрый склад ума... ;-)
- уважение к Java Code Conventions и стилю оформления, принятому в чужом проекте - обязательны;
- используются система контроля версий SVN и багтрекер RedMine... не думаю что это имеет смысл в требования писать.

Некоторые пункты из указанных в оригинальном объявлении совершенно неактуальны - например ANTLR (хотя это не значит, что не придётся работать с чем-то похожим).

Если вы чувствуете что чего-то не знаете, но можете изучить - можете написать с просьбой предложить вам адекватное тестовое задание. По деньгам не буду вводить в заблуждение - как и во многих конторах всё хранится в страшной тайне. Так что пишите сколько сами считаете адекватным и убеждайте что вы этого стоите. ;-)

Основной плюс работы здесь (на мой взгляд) - мягкие условия труда - никаких переработок, график можно варьировать в широких пределах, чай-кофе, свой медцентр на первом этаже на случай насморка/кашля и плохого самочувствия (ну для некоторых важно - строго белая з/п). Про возможность получить определённый опыт ессно всё понятно. Задачи не слишком тупые... Ну и не всегда очень острые. ;-)

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

UPD: забыл заранее ответить на вопрос который принято задавать - вакансия открылась в связи с тем что разработчик трудившийся здесь 4 года справедливо решил что надо иногда работу менять. Отдел разработки не настолько большой чтобы расти карьерно внутри него (хотя между отделами и даже отдельными компаниями внутри ГК люди растут вполне - но это не всех по темпераменту интересует).

Полный текст и комментарии »

  • Проголосовать: нравится
  • -6
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Совершенно неинформативное сообщение, просто забавно. Можно спокойно пропустить.

Случайно ввёл адрес в гугле а не в адресной строке... Наткнулся на ресурс якобы оценивающий стоимость сайтов...

www.codeforces.com оценён в ~ 6 Kbucks
www.topcoder.com оценён в ~ 96 Kbucks

для сравнения

www.kremlin.ru оценён в ~ 210 Kbucks
www.lurkmore.ru оценён в ~1 Mbucks

Хотя выглядит это как некая эпическая хрень, извините за выражение. %)

Полный текст и комментарии »

  • Проголосовать: нравится
  • -47
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

В посте Conducting a contest (http://codeforces.me/blog/entry/2521 - я отчаялся понять как на него ссылку вставить, сорри - дайте кто-нибудь пример, пожалуйста) автор спрашивает, с помощью какого софта ему провести локальный контест. В одном из первых ответов ему предлагаются contester, ejudge и dudge.

Три вопроса:
1) Есть ли ещё альтернативы (freeware / open-source)?
2) Есть ли у кого-нибудь из них демо-сервер какой-либо в инете, чтобы иметь возможность понять основные фичи и оценить визуально (хм... да может хоть набор скриншотов на худой конец)?
3) Может ли кто-то кто пользовался (пытался пользоваться) дать краткую сравнительную характеристику, особенно если пользовался несколькими?

Поскольку тот пост не единственный в своём роде, по-моему, то возможно ответы были бы интересны не только мне... Вопрос ессно обусловлен тем, что пытаться собрать/установить/попробовать все варианты - не минутное дело.

UPD: Трудно гуглить т.к. подходящие ключевые слов придумать непросто. Вот смотрю DOMjudge ещё обсуждается и там что-то демонстрационное изображено. И ещё некий PC^2... Что бы это могло быть?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

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

Помню был ещё контест (ага, нашёл - 78-й) на котором я долго и упорно пытался решить единственную задачу, 3 или 4 раза сдавал - ничего другого из-за неё и не трогал, ушёл в расстройстве - а потом радостно обнаружил что ничего не потерял. Тоже что ли везёт? %)

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

Каждый имеет равные шансы и равное право решить для себя "а с этой проблемкой какой-то косячок!" и заняться остальными задачами.

Вообще, поскольку правила соревнований CF слегка "оригинальны" (в первую очередь из-за "взломов"), то можно подумать и строго оговорить такие случаи правилами. Типа, иногда некоторые задачи могут оказаться некорректными, это считается дополнительной проверкой соревнующихся на сообразительность.

Можно даже в интерфейс участника добавить кнопку МЕГАВЗЛОМ - нажав на неё человек должен отправить сообщение с указанием что авторское решение на его взгляд некорректно, а его собственное, отосланное пять минут назад, правильное. Ну или что для этой задачи не существует правильного решения.

Чтобы кнопкой не злоупотребляли (т.к. проверять придётся вручную!), для неё как и для обычных взломов надо назначить награды. В простейшем случае, скажем, +2000 очков если был прав и -5000 если ошибся (вероятно лучше привязать расценки к стоимости задачи).

Что делать с решениями участников, которые прошли некорректные тесты к некорректной задаче? Отдельный вопрос - ну, наверное, обнулять.

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -42
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Помню, на CodeForces случались соревнования типа "unknown programming language". Однако как последнее показало, такие соревнования, видимо, хороши когда язык действительно достаточно необычен, загадочен и т.п. И может быть чужд привычного "императивного" стиля.

В связи с этим мне стало интересно - существуют ли какие-то соревнования связанные с задачами на составление мудрёных SQL-запросов или регулярных выражений и т.п.?

Полный текст и комментарии »

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Совсем тупой стал. Задачка не решается. От уныния по собственной тупости стал рассматривать список передовиков сегодняшнего контеста.

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

http://codeforces.me/profile/hack_me
http://codeforces.me/profile/bigfat
http://codeforces.me/profile/pakcamat
http://codeforces.me/profile/syx12321
http://codeforces.me/profile/fjxmlhx
http://codeforces.me/profile/fan
http://codeforces.me/profile/Karoluch
http://codeforces.me/profile/UESTC_Fish
http://codeforces.me/profile/Spider-man

Стало любопытно - может, возможность участвовать вне конкурса как-то плохо выделена в интерфейсе и кто-то ещё не знает? Ку-ку! Есть такая возможность, есть! :-)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится