Про динамику и статику

Nov 20, 2014 19:28

Только что решил одну простую задачу на Python и Haskell с целью сравнения динамической и статической типизации в функциональных языках. Есть последовательность чисел, в которой сначала один раз записывается единица, два раза двойка и так далее. Нужно получить первые N элементов этой последовательности.



  1. import Data.List

  2. main = interact $ intercalate " " . map show . flip take (concat $ map (\x -> replicate x x) [1..]) . read


  1. from itertools import *

  2. print(' '.join(islice(chain.from_iterable(map((lambda x: repeat(str(x), x)), count())), 0, int(input()))))
(EDIT. Для C++ oneliner тоже приведу, конечно.)



  1. #include

  2. int main() { int N; std::cin >> N; if (N--) std::cout << '1'; for (int i = 2; ; ++i) { for (int j = 0; j < i; ++j) { if (!N--) return 0; std::cout << ' ' << i; } } }
Если присмотреться, то станет заметно, что на Python решение получилось на 7 символов длиннее. Учитывая, что авторам Python для этого пришлось прыгать через хулахуп, придумывая новые названия функциям над генераторами, и что найти нужную функцию уже не так просто, я закрываю в своём ЖЖ тему о динамической типизации раз и навсегда. Удачного дня.

юмор

Previous post Next post
Up