All streams
Search
Write a publication
Pull to refresh
3
0.1
Send message
Я бы сравнил программиста не с переводчиком, а с оратором. В самом деле, программа — это приготовленная речь, и чем лучше речь, тем больше она действует на аудиторию. Вот только аудитория программиста — в основном бездушные машины и немного других ораторов, случайно услышавших вашу речь, отсюда и уныние. Но, тем не менее, ораторское искусство — это творчество (ну, как минимум — искусство). А что касается сравнения с ремеслом, то да, кто-то из нас Цицероны, а кто-то — аниматоры в дешевом турецком отеле, и это везде так, даже в музыке.
Вот формальное решение этой задачи на haskell:

import Data.List

groupedSet :: (Num a, Eq a, Ord a) => (a -> a -> a) -> [a] -> [[(a, a)]]
groupedSet op xs =
    map (map snd) . groupBy (\(a, _) (b, _) -> a == b) . sort $
        [(x `op` y, (x, y)) | x <- xs, y <- xs, x <= y]

main :: IO ()
main = do
    let a = groupedSet (+) numbers
        {- i do not know these numbers: -}
        b = filter ((> 1) . length . take 2) $ groupedSet (*) numbers
        {- i know that you do not know them: -}
        c = [x | x <- a, all (`elem` concat b) x]
        {- then i know these numbers: -}
        d = singlets b $ concat c
        {- then i know them too: -}
        e = singlets a $ concat d
    print $ concat e
    where numbers      = [2 .. 99]
          singlets a b = [y | x <- a, let y = b `intersect` x, length y == 1]

Information

Rating
3,471-st
Registered
Activity