Как стать автором
Обновить

Комментарии 76

Оригинальный способ поиска разработчиков. :) Респект за креатив. :)
Вот только футбол…
да, после описания подарка даже задания читать расхотелось…
Кто же мешает решить просто для себя, ради спортивного интереса?
Наличие материальных мотиваторов, находящихся выше в моей системе ценностей… Работа в общем :)
Блин, я бы о таком подарке только мечтал! Вот только до Киева добраться не успею даже если выиграю (
После описания подарка, захотелось провести опрос на хабре с названием: Программисты-футбольные фаны. Сколько нас?
А задания действительно интересные. Можно позаимствовать опыт проведения конкурсов. Сходу решил большую половину. Но на футбол я не поеду.
По первому заданию такое исправление принимается?
var howManyYears = 1;
howManyYears += "1";
howManyYears -= "1";
alert("1 year on #habr!");

Это фикс в одной строке, и в результате программа выдаёт то, что надо. Ну и что, что остальные строки не используются, про это в условии ничего не сказано :-)
не пройдёт: «должна быть именно исправлена ошибка в оригинальном коде, с сохранением логики его алгоритма»
Ой, последний абзац невнимательно прочитал. Извините :-)
А языки легко определяются поиском в сорцах страницы строк вида <code class=«ruby»> =)
ну-ну :)
Заводить твиттер, соревноваться за билеты на футбол — какой-то нишевый конкурс получается.
НЛО прилетело и опубликовало эту надпись здесь
Есть такое хорошее выражение, не помню кто сказал: «Сколько языков ты знаешь, столько раз ты — человек.» Можно, в принципе, его перефразировать до «Сколько языков программирования ты знаешь, столько раз ты программист». Мне лично не верится, что сегодня программист может позволить себе знать всего-лишь какой-то один язык программирования.

А футбол — ну, чем богаты. Ждем конкурса от какой-нибудь российской компании с билетами на Олимпиаду-2014 :)
НЛО прилетело и опубликовало эту надпись здесь
На нём и сделали.
На пять минут же задачки.
Скорость, скорость, скорость.
Между прочим, вот уже серьёзно больше прошло времени с начала конкурса, чем 5 минут, а человека, набравшего максимум баллов еще нет. А на счёт скорости вот тут хорошо писали.
Ну не 5 минут, а полчаса заняло, но готово!
Всё никак не мог вдуплить что за странный язык в 4 задании, кучу перебрал и каким-то чудом набрел на верный ответ.
Отдаёт пёрлом.
В 5 задании http: — метка, а дальше однострочный комментарий.
Блин, надо JS учить :(
3 задание:
monthes.push_back(08); monthes.push_back(09);
=>
monthes.push_back(07); monthes.push_back(07);

5 задание:
printf("%d year%s on #habr!", ++years, years == 1 ? "" : "s");
=>
printf("%d year%s on #habr!", ++years, years == 1 ? "s" : "");
В 3 логически не верно. Должно быть так:
>>monthes.push_back(14); monthes.push_back(13);
Согласен.
Комментарий не прочел к коду.
Раз уж пошел разговор про логику, может так лучше:
	monthes.push_back(010); monthes.push_back(011);
Точно, спасибо :)
комментарий намекает на другое решение
5-ое у вас тоже неверно.
В оригинале — undefined behaviour, т.к. порядок вычисления аргументов функции в С и С++ является неопределенным.
Ваше «решение» может не сработать на иных компиляторе+платформе.
Если делать другие исправления, то логика задания нарушится. Или можете привести правильное «решение»?
Так нельзя?
printf("%d year%s on #habr!", years + 1, years == 0 ? "" : "s");
А инкремент года? :)
Поэтому я и спросил. Я не вижу логики в этой программе вообще. В нормальных программах инкремент будет до printf().
Я даже не поленился, а в стандарт глянул — 6.5.2.2 item 10 как раз об этом говорит.
Странно, с 5 разобраться никак не могу.
>>printf("%d year%d on #habr!", ++years, years);
Пишет year1, думал может дело в приоритете:
>>printf("%d year%s on #habr!", ++years, (years == 1)? "": «s»);
Всеравно бред.
Ладно, подумал может компилятор тупой, и оптимизирует years == 1 на константу.
>>/Od
Остается только, что я тупой…
С твиттером вы погорячились. Кто-нибудь внимательный соберет все ответы через некоторое время. Хотя это тоже нужно уметь — найти среди всех ответов правильные. Спасибо за интересные примеры, их можно использовать на собеседованиях.
Твиттер использовался для открытости конкурса. Дабы каждый мог отследить что, кто, и когда отвечал, чтобы не было обвинений в духе «а я присылал ответ раньше» и «а у меня было правильнее». И еще чтобы люди оценивали общее количество участников, их активность. Лично я очень не люблю конкурсы, где отсылаешь куда-то ответы, а потом через неделю публикуют победителей — и ты без понятия, кто эти люди, что они сделали, кто вообще участвовал, занял ты 4-ое место или 999-ое или вообще твой ответ не дошел. Мы долго думали над форматом приёма ответов и в итоге выбрали именно такой вариант. А на счёт «кто-то соберет ответы» — победитель этого конкурса наверняка порешает эти задачки быстрее, чем читер перечитает кучу решений и додумается, какие из них верные, а какие — нет (да и для этого тоже мозги нужны).
Правильно писать «months», а не «monthes».
Вы правы, конечно. Текст вычитывался много раз, но всё-равно вот мелочь проскочила. Но поскольку на суть задачи и алгоритма эта деталь не влияет, я, если позволите, не буду уже менять текст задачи по ходу конкурса, дабы не путать участников. Еще раз простите.
var howManyYears = 1;
howManyYears += "1";
howManyYears = howManyYears / 11;
alert(howManyYears + " year on #habr!");
howManyYears -= "10";
var howManyYears = 1;
howManyYears += «1»;
howManyYears = «1»;
alert(howManyYears + " year on #habr!");
изменяет логику, нельзя так
howManyYears += +«1»
var howManyYears = 1;
howManyYears += parseInt("1",10);
howManyYears -= "1";
alert(howManyYears + " year on #habr!");

or

var howManyYears = 1;
howManyYears += +"1";
howManyYears -= "1";
alert(howManyYears + " year on #habr!");
var howManyYears = 1;
howManyYears += 1;
howManyYears -= "1";
alert(howManyYears + " year on #habr!");
6 задание заставило задуматься, как я понял это dcpu-16 assembler
Как-то так думается
1. javascript
1. 2 — необходимо убрать кавычки т.к. += интерпретирует нач. значение в виде строки, а не числа и производит конкатенацию

2. ruby
2. 3 — ошибка в операторе сравнения. Должно быть !=

3. c++
3. 10 — необходимо убрать нули перед числами. Числа с ведушим нулем воспринимаются в восьмеричной системе.

4. хрен его знает
4. 1 — вероятно надо экранировать #

5. c
5. 5 — перенести инкремент в аргумент, где производится сравнение значения переменной year с 1. Значение аргументов функции вычисляется справа налево.

6. dcpu-16 asm
6. 8 — A заменить на X. Т.к. эта переменная задает смещение выводимого символа от начала строки.

В 5 ошибка. Про точку следования. «Следует заметить, вызов функции нескольких аргументов f(a,b,c) не является случаем применения оператора-запятой и не определяет порядок вычисления значений аргументов.»
Каков же правильный ответ для 5го случая?
Мы обязательно узнаем это в топике с ответами в воскресенье.
В чертвёртом скорее надо экранировать доллар. Кажется, это что-то типа bash или perl, где всё, что начинается с $ — переменная.
регулярка должна быть не $(последний символ), а \$(все доллары)
Не понял ваше сообщение.
Кстати, в том же JS переменная может состоять из одного $
вторым аргументом передается регулярка, я может просто не очень корректно выразился
Точно. А что за язык то?)
Вроде PowerShell
Моё решение
1
JavaScript
2
howManyYears += 1;
Number при сложении со String кастуется в String, и происходит конкатенация, вычитания строк в js — нет, поэтому они затем кастуются в число, то есть получается цепочка 1 + «1» => «1» + «1» => «11»; «11» — «1» => 11 — 1 => 10. убираем строку «1», заменяем на число 1.
2
Ruby
2
if (howManyYears != 0)
Оператора сравнения =! в руби — нет.
3
С++
10
monthes.push_back(8); monthes.push_back(9);
Числа начинающиеся с нуля (и если нет следом x, то есть «0x» — это 16ричные) трактуются лексером c++ как восмеричные, и 08, 09 — некорректные числа в восьмеричной системе, ибо там могут использоваться только цифры 0..7
4
PowerShell
1
[regex]::replace('1 year on $habr!','\$','#')
$ в нотации regexp'a значит конец строки, собственно нужно экранировать
5
С
5
years++, printf("%d year%s on #habr!", years, years == 0? "": «s»);
Насколько я знаю, порядок вычисления аргументов функции это compiler-specific (6.5.2.2 item 10), поэтому полагаться нельзя на то, что ++years выполнится первым.
6
DCPU-16 DASM assembly
8
ADD X, 1
Зачем-то инкрементим A, вместо X, X — счетчик цикла, номер текущего символа, а регистр A — сам код символа (с маской фона, офк)
В 5 у вас вместо «1 year on #habr!» будет «1 years on #habr».
Скрытый текст
years++, printf("%d year%s on #habr!", years, years == 1 ? "" : "s");
Действительно, вот что значит без компилятора писать код :)
Самая страшная ошибка — множественное число от слова month будет months, а вовсе не monthes!
Не знаю как вам, но когда я вижу в коде FrameWork или nDiagnoz то впадаю в ярость.
Я уже извинился за это выше. Спасибо за замечание, в следующий раз будем аккуратнее.
А под чем гоняли программу под DCPU-16? Никак не хочет третью строку у меня есть :(
Как искать язык для 4 задачи? Поделитесь своими способами поиска. Ни с одной поисковой системой в сети у меня не вышло.
Да какая разница какой язык. Знающий регулярные выражения сразу поймет в чем ошибка.

Возьмите в любой язык скопируйте вот такую строку и замену. И посмотрите на результат.
Разница, наверное, в том, что в ответах нужно указать этот самый язык, не?
Ах-ох и ах. Был не прав, я просто порешал задачки и закрыл.
я искал на «class square brackets colon method» и смотрел примеры найденного кода. Вторая ссылка была правильной
Мой запрос был круче — «square brackets double colon syntax», первая же ссылка!
Шестое:

SET X, 0
:start
SET A, [string+X]
IFE A, 0
SET PC, end
BOR A, 0x7000
SET [0x8000+X], A
ADD X, 1
SET PC, start

:string dat «1 year on #habr!»,0

:end
SET PC, end

Эх, не почитал комментарии, извиняюсь.
Еммм… уже 19-е, а результатов чет не видать ))
Спасибо! )… как-то пропустил )
Зарегистрируйтесь на Хабре, чтобы оставить комментарий