Skip to content

Instantly share code, notes, and snippets.

@sroccaserra
Last active December 17, 2020 17:10
Show Gist options
  • Select an option

  • Save sroccaserra/67dbc3a01023eaa111b8678ae5ca1f48 to your computer and use it in GitHub Desktop.

Select an option

Save sroccaserra/67dbc3a01023eaa111b8678ae5ca1f48 to your computer and use it in GitHub Desktop.

Revisions

  1. sroccaserra revised this gist Dec 17, 2020. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions Conway.hs
    Original file line number Diff line number Diff line change
    @@ -19,11 +19,11 @@ type Processed = [Int]
    type ToProcess = [Int]

    conway :: ToProcess -> Processed
    conway ns = step [] ns
    conway ns = recur [] ns

    step :: Processed -> ToProcess -> Processed
    step ps [] = ps
    step ps ts = step (ps++counted) rest
    recur :: Processed -> ToProcess -> Processed
    recur ps [] = ps
    recur ps ts = recur (ps++counted) rest
    where (counted, rest) = countSameNumbers ts

    countSameNumbers :: ToProcess -> (Processed,ToProcess)
  2. sroccaserra revised this gist Dec 17, 2020. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions Conway.hs
    Original file line number Diff line number Diff line change
    @@ -22,9 +22,9 @@ conway :: ToProcess -> Processed
    conway ns = step [] ns

    step :: Processed -> ToProcess -> Processed
    step as [] = as
    step as bs = step (as++counted) rest
    where (counted, rest) = countSameNumbers bs
    step ps [] = ps
    step ps ts = step (ps++counted) rest
    where (counted, rest) = countSameNumbers ts

    countSameNumbers :: ToProcess -> (Processed,ToProcess)
    countSameNumbers ns@(n:_) = ([length sameNs, n], rest)
  3. sroccaserra created this gist Dec 17, 2020.
    33 changes: 33 additions & 0 deletions Conway.hs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    module Conway where

    -- https://fr.wikipedia.org/wiki/Suite_de_Conway

    -- 1211
    -- Il y a trois éléments :
    -- - la liste déjà traitée,
    -- - le chiffre en cours de comptage,
    -- - la liste restant à traiter

    -- ([],[],[1,2,1,1])
    -- ([],[1,1][2,1,1])
    -- ([1,1],[1,2],[1,1])
    -- ([1,1,1,2],[1,1][1])
    -- ([1,1,1,2],[2,1][])
    -- ([1,1,1,2,2,1],[][])

    type Processed = [Int]
    type ToProcess = [Int]

    conway :: ToProcess -> Processed
    conway ns = step [] ns

    step :: Processed -> ToProcess -> Processed
    step as [] = as
    step as bs = step (as++counted) rest
    where (counted, rest) = countSameNumbers bs

    countSameNumbers :: ToProcess -> (Processed,ToProcess)
    countSameNumbers ns@(n:_) = ([length sameNs, n], rest)
    where sameNs = takeWhile (== n) ns
    rest = dropWhile (== n) ns
    countSameNumbers _ = error "wrong state"