Тестовое задание веб программиста

Модератор: Модераторы разделов

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Тестовое задание веб программиста

Сообщение NickLion »

Ну, №02 - можно на базе ранее рассмотренного сделать достаточно быстро, если время и желание есть :) А вот №01 про ассоциативное хранилище - слишком мороки много. Синхронизация - это еще та гадость))) Да и по хорошему надо индексацию делать, правда удаление можно сделать виртуальным, модификация - атомарное удаление и добавление, если длины не хватает... но будет много пробелов, а повторное использование не всегда возможно - нужно по степени засорения (или по времени) производить сжатие. В общем просто не хочется такое писать - алгоритм не очень интересный, просто внимательность и время.
Спасибо сказали:
Аватара пользователя
ishitori
Сообщения: 502
ОС: gentoo -> archlinux

Re: Тестовое задание веб программиста

Сообщение ishitori »

diesel писал(а):
16.02.2009 12:06
чудовищно долго :)) особенно по сравнению с предыдущим вариантом :) но абракадабрность решения поражает(это типа "берем числа n, 2*n,..., проверяем делятся ли они на все, если делятся - то они помещаются в список, из которого мы берем первый элемент"?) :)


ага, долго =) что касается решения, то ничего нового тут нет -- алгоритм один в один, как и на странице по ссылке. просто реализован на другом языке и посему с учетом его особенностей типа лямбда-функций или отложенных вычислений. а на декларативном языке программа почти всегда будет короче, чем на императивном.
морнинг круассан..
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: Тестовое задание веб программиста

Сообщение gcc »

я во втором задании в одной функции написал слуйчано $M{$M} вместе $M{$M} - 1, мне сказал что не правильно... как буд-то битва на смерть, больше такие задание таким работодалеям делать не буду...
Спасибо сказали:
Аватара пользователя
gcc
Сообщения: 526
ОС: FreeBSD 8.0 CURRENT

Re: Тестовое задание веб программиста

Сообщение gcc »

там не было условия что файл 10 Гб...

Код: Выделить всё

#!/usr/bin/perl

use Time::Local;
use strict;

sub get_findtime {
    my $data = shift;
    my ( $M, $D, $h, $d, $m, $s ) =
      $data =~ /(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/;
    return timelocal( $s, $m, $d, $h, $D - 1, $M );
}

sub get_logtime {
    my $data = shift;
    my %M =
      qw(Jan 01 Feb 02 Mar 03 Apr 04 May 05 Jun 06 Jul 07 Aug 08 Sep 09 Oct 10 Nov 11 Dec 12);
    my ( $M, $D, $h, $m, $s ) = $data =~ /(\w+) (\d+) (\d+):(\d+):(\d+)/;
    return timelocal( $s, $m, $h, $D, $M{$M} - 1, (localtime)[5] );
}

my $begin = get_findtime( $ARGV[0] );
my $end   = get_findtime( $ARGV[1] );

open( MAIL, "/usr/home2/di/6/maillog" );
my $line;
while ( $line = <MAIL> ) {
    my ( $month, $day, $time, $hostname, $servicename, $id, $message ) =
      split /\s+/, $line, 7;

    my $sec_log = get_logtime( $month . ' ' . $day . ' ' . $time );

    if ( $begin < $sec_log && $sec_log <= $end ) {
        if ( $id =~ /([a-z0-9]+)\:/i && $id eq $ARGV[2] ) {
            print $line;
            exit;

        }

    }

}
Спасибо сказали: