Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка на массивы массивов, внутри 
:(
    Опции темы
Suppir
Дата 20.12.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Есть файл со следующими данными:

(7800720) - 7843751
(7800750) - 7809551, 7800751
(7800860) - 7800862, 7800861
(7800880) - 7938926, 7938927, 7938928, 7938929, 7800881
(7800890) - 7916898
(7800920) - 7843835, 7843836
(7800950) - 7843841
(7801010) - 7915891
(7801030) - 7860572, 7860645, 7860646

1. Необходимо по эти данным построить массив массивов вида:

1-й элемент: 7800720, 7843751
2-й элемент: 7800750, 7809551, 7800751
3-й элемент: 7800860, 7800862, 7800861
4-й элемент: 7800880, 7938926, 7938927, 7938928, 7938929, 7800881
5-й элемент: 7800890, 7916898
6-й элемент: ...


2. После построения массива, при выполнении программы появляются две переменные: $a и $b

Необходимо сделать проверку: если номер $a является одним из элементов массива массивов, то номер $b должен:
1) существовать в той же строке массиве
2) находиться правее чем $a

Т.е. если $a = 7800880, а $b = 7938926, то результат положительный
если $a = 7800880, а $b = 3, то результат отрицательный
если $a = 7800881, а $b = 7938929, то результат отрицательный (потому что $b находится левее).






Это сообщение отредактировал(а) Suppir - 20.12.2010, 16:57
PM MAIL   Вверх
ginnie
Дата 20.12.2010, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Suppir, что-же у Вас не получается?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Jimy
Дата 20.12.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Использование массива массивов - обязательное условие?
Все числа, хранящиеся в файле, уникальны?
PM   Вверх
chorny
Дата 20.12.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 27.7.2009
Где: Молдавия

Репутация: нет
Всего: нет



я бы начал с   split / \)\s-\s | ,\s /x
PM MAIL WWW   Вверх
alezzz
Дата 20.12.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



массив обязательно нужен?
можно так:
Код

my $ok=0;
my $a="7938926";
my $b="7938927";

while (<DATA>)
{
  $ok=1 if /\D$a\D.*\D$b\D/;
}

print "$ok";

__DATA__
(7800720) - 7843751
(7800750) - 7809551, 7800751
(7800860) - 7800862, 7800861
(7800880) - 7938926, 7938927, 7938928, 7938929, 7800881
(7800890) - 7916898
(7800920) - 7843835, 7843836
(7800950) - 7843841
(7801010) - 7915891
(7801030) - 7860572, 7860645, 7860646


но если нужен массив то тогда так:
Код

my @arr, @inda=(-1,-1), @indb=(-1,-1);
my $a="7800862";
my $b="7800861";

while (<DATA>)
{
  s/\(//;
  push @arr, [split /\D+/];
}
for $i ( 0 .. $#arr ) 
{
  for $j ( 0 .. $#{$arr[$i]} )
  {
    @inda=($i,$j) if $arr[$i][$j] == $a;
    @indb=($i,$j) if $arr[$i][$j] == $b;
  }                      
}
if (($inda[0]!=-1) && ($inda[0]==$indb[0]) && ($inda[1]<$indb[1]))
{
  print "+";
}
else

  print "-";
}

__DATA__
(7800720) - 7843751
(7800750) - 7809551, 7800751
(7800860) - 7800862, 7800861
(7800880) - 7938926, 7938927, 7938928, 7938929, 7800881
(7800890) - 7916898
(7800920) - 7843835, 7843836
(7800950) - 7843841
(7801010) - 7915891
(7801030) - 7860572, 7860645, 7860646



Это сообщение отредактировал(а) alezzz - 20.12.2010, 19:48
PM MAIL   Вверх
ginnie
Дата 20.12.2010, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



alezzz, первый вариант неверный - попробуйте (7800880) - 7938926, 17938927

Это сообщение отредактировал(а) ginnie - 20.12.2010, 19:55


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Suppir
Дата 20.12.2010, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Цитата(Jimy @  20.12.2010,  17:56 Найти цитируемый пост)
Использование массива массивов - обязательное условие?
Все числа, хранящиеся в файле, уникальны? 


1. Нет, не обязательное. Я, вот, думаю, что проще было бы использовать массив строк, а при проверке проходиться по этим строкам регулярным выражением. Правда, строк около 100 тыс, а всего чисел около 300 тыс.
2. Да, все уникальны.



PM MAIL   Вверх
ginnie
Дата 20.12.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Suppir, а зачем массив? Проверку нужно делать многократно? Если да, то можно еще попробовать сделать хэш, где числа будут ключем, значением будет массив "номер строки", "позиция в строке".  Тогда проверка будет $hash{$a}[0] == $hash{$b}[0] и $hash{$a}[1] < $hash{$b}[1]


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
alezzz
Дата 20.12.2010, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



Цитата(ginnie @  20.12.2010,  19:52 Найти цитируемый пост)
alezzz, первый вариант неверный - попробуйте (7800880) - 7938926, 17938927


Попробовал. В какой комбинации не верно (что в $a и $b) ?
PM MAIL   Вверх
ginnie
Дата 20.12.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(alezzz @ 20.12.2010,  20:44)
Попробовал. В какой комбинации не верно (что в $a и $b) ?

Я писал про Ваш вариант до исправления.

Это сообщение отредактировал(а) ginnie - 20.12.2010, 20:48


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Suppir
Дата 20.12.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Цитата(ginnie @  20.12.2010,  20:28 Найти цитируемый пост)
Проверку нужно делать многократно? 


да, несколько десятков миллионов раз smile


Цитата(ginnie @  20.12.2010,  20:28 Найти цитируемый пост)
Если да, то можно еще попробовать сделать хэш, где числа будут ключем, значением будет массив "номер строки", "позиция в строке". 


Это очень интересный вариант, спасибо!

Добавлено через 4 минуты и 52 секунды
Пожалуй, на этом варианте и остановлюсь, потому что его легко реализовать и скорость будет высокой (наличие в хеше почти моментально определяется). 


Это сообщение отредактировал(а) Suppir - 20.12.2010, 21:15
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1254 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.