Специализни шаблонца! (udpn) wrote,
Специализни шаблонца!
udpn

Category:

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

Только что решил одну простую задачу на 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 <iostream>

  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 для этого пришлось прыгать через хулахуп, придумывая новые названия функциям над генераторами, и что найти нужную функцию уже не так просто, я закрываю в своём ЖЖ тему о динамической типизации раз и навсегда. Удачного дня.
Tags: юмор
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 59 comments