http://www.perlmonks.org?node_id=927466

blakew has asked for the wisdom of the Perl Monks concerning the following question:

Bit of silliness.

1. What's the next line?

1 1 1 2 1 1 2 1 1 1 1 1 2 2 1

2. Write code to print each line in the pattern (it gets unwieldy).

If the 5th line was 3 1 1 2 passing an argument gives that solution-
my \$anchor = @ARGV ? '' : '^'; printf "%d\n", \$_ = '1'; do { my \$new; my ( \$n ) = /^(\d)/o; while ( \$_ ) { my \$c = 0; \$c++ while s/\$anchor\s?\$n\s?//; \$new .= "\$c \$n " if \$c; ( \$n ) = /^(\d)/o; } print \$_ = \$new; } until ( <STDIN> =~ /\S/ );

Replies are listed 'Best First'.
Re: What's the answer to this puzzle? Most unique/golfed solution? (fun)
by thundergnat (Deacon) on Sep 23, 2011 at 02:09 UTC

Hmm. Golf eh? 88 strokes. First 99 19 values. Bleh. 99 takes too long.

Works under linux, Swap double and single quotes for Windows.

1         2         3         4         5         6         7         8         9
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890

perl -E'\$_=1;while(++\$t<19){say;my@a;push@a,length\$1,\$2 while/((\d)\2* +)/g;\$_=join"",@a}'

Update 79 75 73 strokes

1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890

perl -E'for(0..19){say\$_=\$t//1;\$t="";\$t.=(length\$1).\$2 while/((.)\2*)/ +g}'
thundergnat,

This just trims a few characters from your approach, which I think is a very good one (I couldn't find an inherently better one).

# 68 strokes perl -E'map{say\$_=\$t||1;\$t="";\$t.=(length\$&).\$1while/(.)\1*/g}0..19'

s''(q.S:\$/9=(T1';s;(..)(..);\$..=substr+crypt(\$1,\$2),2,3;eg;print\$..\$/
Re: What's the answer to this puzzle? Most unique/golfed solution? (fun)
by AnomalousMonk (Bishop) on Sep 23, 2011 at 01:00 UTC
Re: What's the answer to this puzzle? Most unique/golfed solution? (fun)
by Anonymous Monk on Sep 24, 2011 at 04:06 UTC

55 characters:

perl -E'\$_=1;say,s/(.)\1*/\$&=~y...c.\$1/ge while\$i++<19'