## [squeak-dev] One liner challenge

Travis Griggs travisgriggs at gmail.com
Fri Mar 12 06:41:27 UTC 2010

```Here's 3 solutions from me:

Similar to others:

coercion := #yourself.
string collect:
[:c |
coercion := c = \$(
ifTrue: [#asUppercase]
ifFalse: [c = \$) ifTrue: [#yourself] ifFalse: [coercion]].
c perform: coercion]

Requires VW specific methods piecesCutWhere: and fold:

((string piecesCutWhere: [:a :b | b = \$( or: [a = \$)]])
collect: [:phrase | phrase first = \$( ifTrue: [phrase asUppercase]
ifFalse: [phrase]])
fold: [:a :b | a , b]

I know Eliot and others know how to write both of these methods,
nudge, nudge :)

Requires VW difference engine that shows up in tomorrows build (I
regret that this ends making my original post look like an opportunity
to tout this. I honestly didn't even think about the differences
engine, it was only later this evening while I was thinking about ways
to solve it, that this donned on me):

(string differences: (string reject: [:c | '()' includes: c]))
fold: [:a :b | a , (a last = \$( ifTrue: [b collect: #asUppercase]
ifFalse: [b])]

This last one is definitely terse and elegant, but much more obscure
how it actually pulls it off.

--
Travis Griggs
Objologist
I multiply all time estimates by pi, to account for running around in
circles.

```