Блог компании REG.RU → День 2^8
Дорогие программисты Хабра! Мы от всей души поздравляем вас с профессиональным
праздником! Специально по такому случаю наши программисты приготовили вам небольшое
поздравление:
праздником! Специально по такому случаю наши программисты приготовили вам небольшое
поздравление:
#!/usr/bin/perl
undef$/;$s=<DATA>;
foreach (split//,$s) {$b.=$_ eq'D'||0if/[OD]/;print pack("b8", $b)and$b=''if length$b>=8;}
__DATA__
RROORR
ORRDORRRRODRRRR
ODRRRRROOOORDRDRRROOROROR
....... RRRODDDRRORRRROOORRRRRODDDORRDROO
............... RRDDRDDROROOOOODROROORRRRROOODRRRRRRDDR
.................... RORRORDRORRRODDDRORDRRRRDDRRRRDORRRRRDDODDD
........................RRROORDDORRORDRORODRRRRDRRDRODORORROODDRRO
.....................RDODDODDORRDODDRRRRRRRRORRRDDORDRORDORRORDRRR
...................RRRDRORRODRRROODRRRRRDDORRRRRRDDRRRRRRROODRDRDO
.................ROOORORODRROROORRRORRDRROORRRDRRRDRRRRORDRRORRROO
................ODRRRRRDRORRDRRROODDDDORODRDDRRRRRODORRRRORRRROOORO
..............RRRODRRRRRROOORDRRRROOOODRRRRODODRROORDRRDRORRDDORRRR
............ORRDDRRRRRDROROORDODRRDDOOOROORORDRORROORDORRRRRRORDDRD
..........RODORDRRORRODDRORRRDRDDORRRRODDODOORROORRDDOORRRRRDRRRORR
.........ODRDRRDROORRRRRORRDOORRRRDRDORRDDOODDDOOORORORRRRRODORROOR
.............RDRDRORRRORDRDRORRRODRROORDRRRDRDRRODDDRRDORRRDDORDOR
.............DDORRDRDOORROROOODROORRRRODRRRORORDRRODRODORDRRRORORR
.............RRRODORDRRRRRRDRDROORRRRORDRRROORDRDRDRRODRORRRRORODO
...........RRORDRRORRRDRRORDODORRDRODRROODDDRRODROORROOOOORRDRRRR
...........RRORRORDDOORDRORDRRRRRRROOORRRORRODDDRRRRRR RORDROR
...........DOODRRRRRDORDDOOORDRDODRRORRRRODRRORD RRDROR
...........RRRRRDRORRRORRROODDROORORDRDRORRDRDO OORROR
..........OODROORRDRRDRRRDRRORORRDDRORRODOODDDO DRRORD
..........ORRODRRRRRDORRRDRORDRORODDOORRRORDRR ODRRDR
..........RDORRRDORORRDODDRRORRRRRODRRRDDRRRRR RODDRO
..........DDRDORRRRORDRDRORROROOORORDRRORRRRRR ORRROR
........DRRRRDROORRDRRDODDRDRRRRRRDORRRDRDOOR RDRORR
........RRORDDRDOORORROORRODRROROROOORDRORRD DRRRRR
........RORDOOROODDRORRRRODRRRRORRRROODDORRO RDORRR
........ORRRRDDDRRORRRRDRROOORRODRRDRROROOOR RRRRDO
........DRRRDRRRODRRRRORROORRRRRRORDDRROODOR OORRRR
.......RRRRDDRROORRRDRRORRODRRDRRRRDRORORRO RRRRRR
.......RRROORRRORRDORORDRODODRDRDRRRORDRRRR
.......DRORRORDRRDRDRORRRDODRRRRRRORRODDOOR
......RRDRORRRRODDRRDORDDROORDDRRDRRROODRR
......RRRORRDOORORRRORRRRRRRRRRRRRRRR
.....RRRRRRRRRRRRRRRRRRRRRRRRRR
.....RRRRRRRRRRRRRRRRRRRR
.....RRRRRRRRRRRRRR
...RRRRRRRRR
..RRRR
Программирование → Праздничный биатлон
С днем программиста, коллеги!Предлагаю в честь праздника поразмять мозги и поучаствовать в биатлоне.
Виды спорта: алгоритмы, SQL. Для каждого из них будет две задачки: попроще и посложнее.
В качестве награды за усилия всем участникам гарантируется улучшение кровообращения в левом полушарии головного мозга (:
Алгоритмы. Задача №1, разминочная
Напишите код, который находит количество подчисел числа n, на которые это число делится без остатка.
Для числа n, подчисло — это такое число, запись которого является подстрокой записи числа n. К примеру, если n равняется 1938, то его подчислами будут являться: 1, 9, 3, 8, 19, 93, 38, 193 и 938. Без остатка 1938 делится на четыре из этих подчисел: 1, 3, 19 и 38. Соответственно, результатом работы программы должно быть число 4.
Если подчисла повторяются, каждое из них считается. Например, 101 делится без остатка на 1, 1 и 01, значит, ответ — 3.
Так как задача несложная, в решениях ценится краткость или нестандартный подход.
Занимательные задачки → Задача о голубоглазых островитянах
Замечательная задачка, которой я посвятил немало часов размышлений и теперь публикую ее на хабре, дабы вы тоже смогли поразмять мозги.
.NET → C#: Этюды, часть 7
Сегодня простой этюд, почти без кода.
Допустим, есть некий класс и его статический конструктор:
Как известно, статические конструкторы вызываются до первого использования типа. Других ограничений нет, поэтому время его вызова вы не можете контролировать (он может вызваться как в самом начале программы, так и при первом обращении). В частности, если два класса используют друг друга в статических конструкторах, поряд вызова этих конструкторов не определен.
В общем, все очень сложно. Тем не менее, напишите код, который гарантированно вызывает указанный выше статический конструктор как раз в нужном месте.
Допустим, есть некий класс и его статический конструктор:
static C()
{ Console.WriteLine("from static ctor"); }
Как известно, статические конструкторы вызываются до первого использования типа. Других ограничений нет, поэтому время его вызова вы не можете контролировать (он может вызваться как в самом начале программы, так и при первом обращении). В частности, если два класса используют друг друга в статических конструкторах, поряд вызова этих конструкторов не определен.
В общем, все очень сложно. Тем не менее, напишите код, который гарантированно вызывает указанный выше статический конструктор как раз в нужном месте.
Console.WriteLine("before static ctor");
// нужно вызвать здесь
Console.WriteLine("after static ctor");
.NET → Задачка по C#
При каких условиях пройдет данный тест?
upd: в комментариях написали уже 5 верных решений, если интересно оценить свои знания и фантазию — не заглядывайте туда преждевременно
[Fact]
public void NewTest()
{
var a = new A();
a.GetType().GetField("b").SetValue(a, 83);
a.GetType().GetField("c").SetValue(a, 42);
Assert.Equal(a.b, a.c);
}upd: в комментариях написали уже 5 верных решений, если интересно оценить свои знания и фантазию — не заглядывайте туда преждевременно
JAVA → Задача по Java Core
В продолжение к хорошей задаче, опубликованной не так давно на хабре, хотелось бы предложить ещё одну задачу.
Смысл, конечно, именно в решении задачи в голове, не используя спец. редакторы и компилятор.
Дан код на Java:
Вопрос: скомпилируется или нет?
Смысл, конечно, именно в решении задачи в голове, не используя спец. редакторы и компилятор.
Дан код на Java:
public class HelloWorld { public static void main(String... args) { http://habrahabr.ru; System.out.println("Hello World!"); } }
Вопрос: скомпилируется или нет?
Human Resources → Задачи с доминошками на собеседованиях из песочницы
По личному опыту, могу сказать, что довольно популярными на собеседованиях являются задачи, так или иначе связанные с покрытиями доминошками каких-либо поверхностей. Условия могут варьироваться, но суть у всех остается одна.
Имеется шахматная доска 8 на 8 клеток, левый нижний и правый верхний углы которой отрезаны.

Можно ли полностью покрыть такую доску доминошками размера 2×1 клетку?
Пример 1
Имеется шахматная доска 8 на 8 клеток, левый нижний и правый верхний углы которой отрезаны.

Можно ли полностью покрыть такую доску доминошками размера 2×1 клетку?
JAVA → Пятничная задача
Всех с пятницой!
Проверяем знания и своё внимание. Дан код на Java:
Внимание вопрос! Что будет выведено? А главное — почему?
UPD Осторожно — в комментариях уже присутствует правильный ответ. Прошу провести тест в других ЯП и привести результаты в комментариях.
Проверяем знания и своё внимание. Дан код на Java:
- public class Foo {
- private static Foo instance = new Foo();
- private static final int DELTA = 6;
- private static int BASE = 7;
- private int x;
- private Foo() {
- x = BASE + DELTA;
- }
- public static void main(String... argv) {
- System.out.println(Foo.instance.x);
- }
- }
Внимание вопрос! Что будет выведено? А главное — почему?
UPD Осторожно — в комментариях уже присутствует правильный ответ. Прошу провести тест в других ЯП и привести результаты в комментариях.
Ненормальное программирование → Все решения к задачке к Дню Программиста

Я решил объединить все отправленные решения к задаче «С Днем Программиста» в одном топике. При появлении новых решений топик будет обновляться. За понравившиеся решения предлагаю кормить плюсиками авторов, а хабрачитателей награждать инвайтами.
Код на картинке, кстати, тоже решает эту задачу :)
Занимательные задачки → Пройти лабиринт
Клеточный лабиринт — это прямоугольник из квадратных комнат, между некоторыми из них есть перегородки.
НЛО забросило Вас в клеточный лабиринт MxN (M и N известны), без входов и выходов. В одной из комнат лежит приз.
У Вас есть сколь угодно много времени и памяти. Ваша цель — добраться до приза. Гарантируется, что это сделать можно.
Что Вы будете делать?
UPD: мои извинения, варианты, предложенные Tails и Brotherofken указали, что я ошибся при переформулировке.
Канонически нужно было составить программу для робота, который умеет только ходить — вперед, назад, вправо, влево. Условия он проверять не умеет, то, что уперся в стену — не замечает, что взял приз — тоже. Нужно составить программу (конечной длины), действуя по которой он гарантированно побывает в клетке с призом и остановится.
НЛО забросило Вас в клеточный лабиринт MxN (M и N известны), без входов и выходов. В одной из комнат лежит приз.
У Вас есть сколь угодно много времени и памяти. Ваша цель — добраться до приза. Гарантируется, что это сделать можно.
Что Вы будете делать?
UPD: мои извинения, варианты, предложенные Tails и Brotherofken указали, что я ошибся при переформулировке.
Канонически нужно было составить программу для робота, который умеет только ходить — вперед, назад, вправо, влево. Условия он проверять не умеет, то, что уперся в стену — не замечает, что взял приз — тоже. Нужно составить программу (конечной длины), действуя по которой он гарантированно побывает в клетке с призом и остановится.