Jump to content
Форумы SkyCentre Прыжки с парашютом
Sign in to follow this  
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;
  }
}

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

:D

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

Share this post


Link to post
Share on other sites

зачот :)

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

Share this post


Link to post
Share on other sites

Sobakin

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

Share this post


Link to post
Share on other sites
Sobakin

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
Честно скажу, въезжал я в него минуты 3, пока дошел алгоритм этого потрясающего решения :)

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

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

Share this post


Link to post
Share on other sites

nemesis

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

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

Share this post


Link to post
Share on other sites

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

Share this post


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

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

Share this post


Link to post
Share on other sites
"как узнать завтрашнюю дату"

:) :) :)

а 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 ); // вернем время вспять

}

Share this post


Link to post
Share on other sites
а потом неоптимально как-то написано. зачем ждать 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);
}

Share this post


Link to post
Share on other sites

Igor

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

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

о как :blink:

Share this post


Link to post
Share on other sites

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

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

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() ;

}

Share this post


Link to post
Share on other sites
Отослал нашим индусам - посмотрели и сказали "а что, хорошая мысль"

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

Share this post


Link to post
Share on other sites
а sleep() в джавах/С-шарпах разве не в миллисекундах?

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

Share this post


Link to post
Share on other sites

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

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();
}

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Дооо, конечно. Ты много японского кода видел?

Я видел.

http://friendfeed.com/miyagawa

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

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

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

Share this post


Link to post
Share on other sites
sergant, я тоже видел. Причем код продуктов очень уважаемых компаний. Как бы помягче сказать, не впечатлило.

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...