
Тестовое задание веб программиста
Модератор: Модераторы разделов
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Тестовое задание веб программиста
Ну, №02 - можно на базе ранее рассмотренного сделать достаточно быстро, если время и желание есть
А вот №01 про ассоциативное хранилище - слишком мороки много. Синхронизация - это еще та гадость))) Да и по хорошему надо индексацию делать, правда удаление можно сделать виртуальным, модификация - атомарное удаление и добавление, если длины не хватает... но будет много пробелов, а повторное использование не всегда возможно - нужно по степени засорения (или по времени) производить сжатие. В общем просто не хочется такое писать - алгоритм не очень интересный, просто внимательность и время.

-
- Сообщения: 502
- ОС: gentoo -> archlinux
Re: Тестовое задание веб программиста
ага, долго =) что касается решения, то ничего нового тут нет -- алгоритм один в один, как и на странице по ссылке. просто реализован на другом языке и посему с учетом его особенностей типа лямбда-функций или отложенных вычислений. а на декларативном языке программа почти всегда будет короче, чем на императивном.
морнинг круассан..
-
- Сообщения: 526
- ОС: FreeBSD 8.0 CURRENT
Re: Тестовое задание веб программиста
я во втором задании в одной функции написал слуйчано $M{$M} вместе $M{$M} - 1, мне сказал что не правильно... как буд-то битва на смерть, больше такие задание таким работодалеям делать не буду...
-
- Сообщения: 526
- ОС: FreeBSD 8.0 CURRENT
Re: Тестовое задание веб программиста
там не было условия что файл 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;
}
}
}