[Freeschool] [JT] Re: чему стоит учить в школе

Denis Kirienko =?iso-8859-1?q?dk_=CE=C1_altlinux=2Eru?=
Пт Окт 24 17:53:21 MSD 2008


Mikolaj Golub пишет:

> Если допустим файл следующего содержания:
> 
> 1 2 3 4
> test rest
> end
> 
> То в результате выполнения следующего кода:
> 
> a = IO.read("/tmp/test.dat").split()
> 
> переменная a будет ссылаться список:
> 
> ["1", "2", "3", "4", "test", "rest", "end"]
> 
> Этого хотелось?

Да, именно этого, спасибо!

Я не могу не поблагодарить всех, кто предлагает здесь массу коротких и 
длинных вариантов решения задачи, соответственно, не очень эффективных и 
очень эффективных. Мне же нужен вариант не только решающий задачу, но 
также простой и понятный. Желательно в одну или две строчки. Чтобы можно 
было написать его в качестве примера и сказать "можно делать так". Чтобы 
школьник хоть что-то мог решить. А если он захочет найти более 
эффективное решение - пусть сам копает.

Поэтому я все читаю, а на заметку беру именно простые, одно-двухстрочные 
решения.

Кстати, самое первое решение на Питоне, где было 
sys.stdin.read().split() я сегодня проверил на задаче с большим вводом. 
Ввод там - 100.000 натуральных чисел до 10.000 каждое, т.е. где-то 
полмегабайта данных. Больший ввод, как правило, бывает редго. Так вот - 
вызов read() и split() на нашей тестовой машинке занимает где-то 0.04 
секунды.
Это без преобразования элементов в int.
А вот последующий вызов функции int для каждого элемента списка требует 
еще около 0.15 секунд, т.е. значительно дольше. Это при ограничении в 1 
секунду на решение всей задачи (ввод-вывод и само решение).

Из этого я сделал вывод, что ничего страшного в чтении всего файла в 
память и вызова split нет, так как последующие накладные расходы будут 
больше.

Вот еще такой вопрос - с питоном и руби разобрались, с перл я сам давно 
так делать умею. Кто-нибудь подкинет аналогичный способ для php?

Данные можно читать из файла, можно - из stdin. Лучше всего - 
универсальный способ, работающий как для файлов, так и для stdin.

--
Денис



Подробная информация о списке рассылки Freeschool