Октябрь 2008

“Yeah, it works, but…”

27.10.2008

Задание: Какое наименьшее число можно разделить без остатка на все числа от 1 до 20?

Решение от кандидата на должность senior developer, с 10-тилетним опытом разработки на РНР:

for ($i=1;$i<=99999999999;$i++) {
  $num = 20*$i;
  if ($num%19 == 0) {
    if ($num%18 == 0) {
      if ($num%17 == 0) {
        if ($num%16 == 0) {
          if ($num%15 == 0) {
            if ($num%14 == 0) {
              if ($num%13 == 0) {
                if ($num%12 == 0) {
                  if ($num%11 == 0) {
                    if ($num%9 == 0) {
                      if ($num%8 == 0) {
                        if ($num%7 == 0) {
                          if ($num%6 == 0) {
                            if ($num%3 == 0) {
                              echo $num;
                              exit();
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Заметьте, сеньйор разработчик не внес в алгоритм проверку остатка при делении на 2 и 10, и заменил её умножением на 20 :)
Благодарим проводящих собеседование, за то, что не попросили найти наименьшее общее кратное чисел от 1 до 1000.

Источник: http://thedailywtf.com/Articles/Out-of-All-the-Possible-Answers.aspx

операция подергивания

27.10.2008

"++i--" - операция подергивания

Источник: http://forum.ixbt.com

Где бы взять пустую строку?

27.10.2008

Источник: http://forum.en.net.ua/viewtopic.php?f=114&p=246660

function EmptyString(){
    return "";
}

i < 10

27.10.2008

Источник: http://forum.en.net.ua/viewtopic.php?f=114&p=246660

uint i;
…
if (i.ToString().Length == 1)
{
  ...
}

Не сразу можно понять, что в этом коде просто-напросто выполняется проверка i < 10. Алгоритм достаточно прост: выполняется преобразование i в строку, после чего вычисляется ее длина. Если число больше 9, то его десятичная запись содержит больше одного символа. Отрицательные числа переменная типа uint содержать не может. Проверку проходят лишь числа от 0 до 9.

Алгоритм ресурсоемок, неочевиден и не поддается сопровождению даже теоретически.

Джа#

27.10.2008

Источник: http://habrahabr.ru/blogs/code_wtf/39638/

У нас был в ходу термин «Джа#», где-то даже валялась подборка избранного. Классический пример — как узнать дату завтрашнего дня (шутка такая):

public Calendar getTomorrow() {
    Thread.sleep(1000*60*60*24);
    return Calendar.getInstance();
}

Интересное условие

24.10.2008

Источник: http://www.realcoding.net/article/view/6869

if ($x == 0) {
    // Do 1…
} elseif ($x!=0) {
    // Do 2…
} else {
    //
    // А вот здесь чистые деньги :)
    //
}

Функция IsNumber

23.10.2008

Источник: http://lurkmore.ru/Индусский_код

Алгоритм вполне очевиден. Не менее очевидно и то, что для его выполнения, конструктор класса string будет вызван не менее десяти раз.
Странно, что автор алгоритма не учел числа меньше нуля :)


bool IsNumber(string str) {
    return (str.Replace ("0", "").Replace ("1", "").Replace ("2", "").Replace ("3", "").Replace ("4", "").Replace ("5", "").Replace ("6", "").Replace ("7", "").Replace ("8", "").Replace ("9", "").Length == 0);
}

Дробная часть выражения? Легко!

23.10.2008

Источник: http://lurkmore.ru/Индусский_код

Далеко не сразу можно понять, что этот код выделяет дробную часть произведения a*b. кроме того, функция выдаст ошибочное значение при a*b>999999999 или a*b<0. Также зависимость времени выполнения от величины целой части тоже не радует.

double rest(float a, float b) {
    float res=a*b;
    for (int i=0; i<999999999; i++){
        if (i<=res && i+1>res) {
            res = res-i;
            break;
        }
    }
    return res;
}

Если стоит 3, то и пусть стоит

23.10.2008

Источник не известен.

if ($pay == 3){
    $pay = 3;
}else{
    $pay = $pay;
}

Простой способ проверить булеву переменную на истинность

23.10.2008

if ( b.ToString().length < 5 ){
    …
}