Перейти к содержимому
Форумы SkyCentre Прыжки с парашютом
Igor

"Шедевры" программированя

Recommended Posts

Нашел здесь http://www.rsdn.ru/Forum/Message.aspx?mid=2047058&only=1 Особенно впечатлил нижеприведенный пример. Честно скажу, въезжал я в него минуты 3, пока дошел алгоритм этого потрясающего решения :) Кстати оно ко всему прочему еще и алгоритмически некорректное, т.к. пропускает пустые строки как числа и не учитывает знак, но это уже мелочи :)

public static bool IsInteger(object value)
{
  try
  {
     if (value == null)
     {
        return false;
     }
     else
     {
        string mynumber = value.ToString();
        mynumber = mynumber.Replace("0","").Replace("1","").Replace("2","").Replace("3","").Replace("4","").Replace("5","").Replace("6","").Replace("7","").Replace("8","").Replace("9","");
        if (mynumber.Length == 0)
        {
           return true;
        }
        else
        {
           return false;
        }
     }
  }
  catch
  {
     return false;
  }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гениально. Просто гениально. :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:D

Ессно, правильные программеры пишут на C/C++, а не на Java :p

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

зачот :)

хорошо, что в .NET есть просто int.Parse() :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Sobakin

Это C#, а не Java :) А на Жабе пишут вполне правильные программы ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Sobakin

Это C#, а не Java :) А на Жабе пишут вполне правильные программы ;)

Отстал я от жизни... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Согласен! Бизнес давно уже показал что экономить надо на программистах а не на железе (ибо память и проц все мощнее все дешевее и все меньше энергоемнее, а программисты сколько жрали так жрут, если не больше)

но не до такой же степени ... автор хоть пытался прикинуть кол-во сравнений символов и кол-во временных объектов (притом прошу заметить буфер стринга в куче а не в стеке) ? :o

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Честно скажу, въезжал я в него минуты 3, пока дошел алгоритм этого потрясающего решения :)

Не, пока что шедевр на индусском форуме на тему "как узнать завтрашнюю дату" остался непревзойденным:

void get_tomorrow_date( struct timeval *date )
{
   sleep( 86400 ); // 60 * 60 * 24
   gettimeofday( date, 0 );
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

nemesis

"как узнать завтрашнюю дату"

Плакал... :lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отослал нашим индусам - посмотрели и сказали "а что, хорошая мысль"

Поделиться сообщением


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

Гениально! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
"как узнать завтрашнюю дату"

:) :) :)

а sleep() в джавах/С-шарпах разве не в миллисекундах?

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

а потом неоптимально как-то написано. зачем ждать 24 часа, если до завтра, возможно, осталось всего несколько часов.

оптимизируем (с поправками на незнание синтаксиса):

void get_tomorrow_date( struct timeval *date )

{

   struct timeval *today = new timeval();

   gettimeofday( today, 0 );

   do {

      gettimeofday( date, 0 );

   } while( today.getDay() == date.getDay() );    // надо же хоть чем то проц. загрузить...

 

  settimeofday( today ); // вернем время вспять

}

Поделиться сообщением


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

оптимизируем (с поправками на незнание синтаксиса):

Ну если уж началась оптимизация, то надо сказать, что твой вариант все-таки несовершенен :) Подумаем. Ведь необязательно просто ждать. Можно самим увеличивать время по одной секунде! Представляешь какой выигрышь по времени мы получим... Вот как будет выглядеть новый супероптимизированный вариант, написанный индусским программистом, который к тому же недавно узнал, что в C/C++ можно запихать пару сотен операторов друг в друга :)

void get_tomorrow_date( struct timeval *date )
{
   while (static_cast <bool> (static_cast <int> (localtime (static_cast <timer_t> (date->tv_sec))->tm_mday) -
                              static_cast <int> (localtime (static_cast <timer_t> (++date->tv_sec))->tm_mday)) == true);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Igor

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

можно установить специальный сервак, который географически расположен на 10-12 часовых поясов восточнее. т.е. с вероятностью примерно 1/2 если у нас еще сегодня, то там, где стоит этот сервак, уже будет завтра. теперь вместо того, чтобы у себя ждать, или инкрементировать секунды, достаточно просто отправить каким-нибудь СОАПом запрос на этот сервак а он уже локально выполнит gettimeofday и вернет тебе результат, если он оличается от твоего локального времени.

о как :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

жжжжжжжжоте!

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

win.c:

Windows '98 source code.

/*

TOP SECRET Microsoft© Code

Project: Chicago

Projected release-date: Summer 1994

*/

#include "win31.h"

#include "win95.h"

#include "evenmore.h"

#include "oldstuff.h"

#include "billrulz.h"

#define INSTALL = HARD

char make_prog_look_big[1600000] ;

void main()

{

while( !CRASHED )

    {

    display_copyright_message() ;

    display_bill_rules_message() ;

    do_nothing_loop() ;

    if( first_time_installation )

        {

        make_50_megabyte_swapfile() ;

        do_nothing_loop() ;

        totally_screw_up_HPFS_file_system() ;

        search_and_destroy_the_rest_of_OS/2() ;

        hang_system() ;

        }

    write_something( anything ) ;

    display_copyright_message() ;

    do_nothing_loop() ;

    do_some_stuff() ;

    if( still_not_crashed )

        {

        display_copyright_message() ;

        do_nothing_loop() ;

        basically_run_windows_3.1() ;

        do_nothing_loop() ;

        do_nothing_loop() ;

        }

    }

    if( detect_cache() )

    disable_cache() ;

    if( fast_cpu() )

        {

        set_wait_states( lots ) ;

        set_mouse( speed, very_slow ) ;

        set_mouse( action, jumpy ) ;

        set_mouse( reaction, sometimes) ;

        }

    /* printf("Welcome to Windows 3.11"); */

    /* printf("Welcome to Windows 95"); */

    printf("Welcome to Windows 98");

    if( system_ok() )

    crash( to_dos_prompt ) ;

    else system_memory = open( "a:\swp0001.swp", O_CREATE ) ;

    while( something )

        {

        sleep( 5 ) ;

        get_user_input() ;

        sleep( 5 ) ;

        act_on_user_input() ;

        sleep( 5 ) ;

        }

    create_general_protection_fault() ;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Отослал нашим индусам - посмотрели и сказали "а что, хорошая мысль"

У вас видимо начинающие индусы. На том форуме народ начал обсуждать, что такая схема сбойнет в день daylight time change (когда время переводится на час назад) :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
а sleep() в джавах/С-шарпах разве не в миллисекундах?

Это C, код приведен для Unix. sleep() спит в секундах. Чтобы спать меньше, есть nanosleep() или select(0,0,0,0, tv)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Из того же: как узнать время создания файла:

time_t get_file_creation_date( const char * filename )
{
   char q[REALLY_BIG_BUFFER];
   int fd = open( filename, O_RDONLY );
   int size = read( fd, q, sizeof(q) );
   close( fd );
   
   unlink( filename );

   fd = open( filename, O_WRONLY );
   write( fd, q, size );
   close( fd );

   return time();
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Николай
:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Игорь, квинтэссенция того обсуждения вот в этом комментарии уместилась:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дооо, конечно. Ты много японского кода видел?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Дооо, конечно. Ты много японского кода видел?

Я видел.

http://friendfeed.com/miyagawa

Что ни код, то шедевр...

Что касается американо-индуского кода...

Это очень, ну очень-очень тупые (либо жадные) американцы нанимают индусов...

Поделиться сообщением


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какой код? Каких компаний?

Как правило это ДЕРьМО полное...

Всмысле "код компаний".

Я дал тебе ссылку на реалько красивый код...

Японец писал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на тему поржать над кодом есть же куча ресурсов, например http://govnokod.ru/

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...