Skip to main content
added 24 characters in body
Source Link
nimi
  • 36k
  • 4
  • 35
  • 100

Haskell, 47 5757 50 bytes

e#(ae#l|a:b)|e==a=b<-l,e==a= -2*a:b|1<2=e:a:b
e#_=[e]l
map abs.foldr(#)[]

Uses reduce (or fold as it is called in Haskell, here a right-fold foldr). Usage example: map. abs.foldr(#)[] $ [2,2,2,4,4,8] -> [2,4,8,8].

Edit: +10 bytes to make it work for unsorted arrays, too. Merged numbers are inserted as negative values to prevent a second merge. They are corrected by a final map abs.

Haskell, 47 57 bytes

e#(a:b)|e==a= -2*a:b|1<2=e:a:b
e#_=[e]
map abs.foldr(#)[]

Uses reduce (or fold as it is called in Haskell). Usage example: map. abs.foldr(#)[] $ [2,2,2,4,4,8] -> [2,4,8,8].

Edit: +10 bytes to make it work for unsorted arrays, too. Merged numbers are inserted as negative values to prevent a second merge. They are corrected by a final map abs.

Haskell, 47 57 50 bytes

e#l|a:b<-l,e==a= -2*a:b|1<2=e:l
map abs.foldr(#)[]

Uses reduce (or fold as it is called in Haskell, here a right-fold foldr). Usage example: map abs.foldr(#)[] $ [2,2,2,4,4,8] -> [2,4,8,8].

Edit: +10 bytes to make it work for unsorted arrays, too. Merged numbers are inserted as negative values to prevent a second merge. They are corrected by a final map abs.

added 208 characters in body
Source Link
nimi
  • 36k
  • 4
  • 35
  • 100

Haskell, 4747 57 bytes

e#(a:b)|e==a=2*a|e==a= -2*a:b|1<2=e:a:b
e#_=[e]
map abs.foldr(#)[]

Uses reduce (or fold as it is called in Haskell). Usage example: map. abs.foldr(#)[] $ [2,2,2,4,4,8] -> [2,4,8,8].

Edit: +10 bytes to make it work for unsorted arrays, too. Merged numbers are inserted as negative values to prevent a second merge. They are corrected by a final map abs.

Haskell, 47 bytes

e#(a:b)|e==a=2*a:b|1<2=e:a:b
e#_=[e]
foldr(#)[]

Uses reduce (or fold as it is called in Haskell). Usage example: foldr(#)[] [2,2,2,4,4,8] -> [2,4,8,8].

Haskell, 47 57 bytes

e#(a:b)|e==a= -2*a:b|1<2=e:a:b
e#_=[e]
map abs.foldr(#)[]

Uses reduce (or fold as it is called in Haskell). Usage example: map. abs.foldr(#)[] $ [2,2,2,4,4,8] -> [2,4,8,8].

Edit: +10 bytes to make it work for unsorted arrays, too. Merged numbers are inserted as negative values to prevent a second merge. They are corrected by a final map abs.

Source Link
nimi
  • 36k
  • 4
  • 35
  • 100

Haskell, 47 bytes

e#(a:b)|e==a=2*a:b|1<2=e:a:b
e#_=[e]
foldr(#)[]

Uses reduce (or fold as it is called in Haskell). Usage example: foldr(#)[] [2,2,2,4,4,8] -> [2,4,8,8].