Кой измисля новите неща?

Прогресът не произлиза от най-кадърните хора.

Най-кадърните - тези, които имат природна дарба да вършат нещо. На тях просто им идва отвътре, за тях всичко е лесно. Е, не те създават иновациите.

Аз съм програмист, затова ще говоря за програмиране. Имам един колега,

чиито талант е отвъд измеримите предели. В дванадесети клас спечели златен медал на Международната Олимпиада по Информатика(Да се чете: Гимназистите по-кадърни от него са двуцифрено число. В света). Оттогава той не е престанал да се развива и днес със сигурност е още по-добър.

В университета заедно караме много курсове.

И на всеки един от тях, този човек(да го наречем, например, Искрен) неминуемо прави един и същи коментар:

Ама защо ни е това? От него няма смисъл, тази работа може да се направи и на C++.

На него C++ му е достатъчен. Този болезнено ограничен език, оптимизиран за скорост, а не за удобство, му стига. Той е талантлив. Пише програми в пъти по-бързо от нормалните хора, при това почти винаги са по-качествени. Не допуска грешки в кода си.

А аз имам талант, който надминава неговия.

Мързел.

Не мога да му обясня, че не е прав. Може и да е прав, де. Ама не е.

Преди да започна да пиша програмата си на C++, аз първо ще погледна дали не може да се направи по-лесно. Ако се окаже, че някой някъде вече е решавал същия проблем - просто ще взема неговото решение, няма да пиша същия код втори път. Ще използвам инструменти, които ще направят работата ми по-лесна. И ще свърша нужното за по-малко време. И ще работи поне толкова добре.

Един програмист, който е кадърен,

но не чак до най-високото, максимално, нечовешко ниво, ще създаде инструмент, който прави работата му по-лесна. Най-добрият няма да го направи, защото няма нужда от него. Ако лирическият ми герой, Искрен, се беше родил в средата на миналия век, нямаше да му хрумне да измисли C/C++. Асемблер щеше да му е достатъчен.

Задача.

Дадено е дърво(термин от теорията на графите), в което всеки връх има произволно много наследници. Без оглед на стойностите, които се съдържат във върховете, да се състави програма, която проверява дали две дървета са изоморфни(отново, математически термин означаващ еднакви).
( (1) (2) ((3)(4) 5) ) = ( ((6)(7) 8) (9) (10) )

Ето моето вярно решение, на Python:

class Tree(object):
    def __init__(self, children = [])
        self.children = children
    def __str__(self):
        return "(" + sorted(str(child) for child in children) + ")"
    def isomorpous(self, other):
        return str(self) == str(other)

Призовавам някой по-кадърен и мотивиран от мен да напише решение на C++. Да видим на колко реда ще стане. И да е по-бързо от моето, да видим колко точно по-бързо ще е, и дали си е струвало.

Коментари

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License