<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Ruby Quiz, Haskell Solution: LCD Numbers</title>
	<atom:link href="http://blog.tty.nl/2009/12/17/ruby-quiz-haskell-solution-lcd-numbers/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tty.nl/2009/12/17/ruby-quiz-haskell-solution-lcd-numbers/</link>
	<description>Notes on Web Development, Computer Programming, and Software Engineering</description>
	<lastBuildDate>Fri, 03 Sep 2010 15:22:23 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Eduard Lohmann</title>
		<link>http://blog.tty.nl/2009/12/17/ruby-quiz-haskell-solution-lcd-numbers/comment-page-1/#comment-163</link>
		<dc:creator>Eduard Lohmann</dc:creator>
		<pubDate>Fri, 18 Dec 2009 11:02:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tty.nl/?p=288#comment-163</guid>
		<description>Namens marius in bash en awk :)

&lt;pre&gt;
#!/bin/bash 

DIGITS=&quot;&quot; 
SCALE=&quot;2&quot; 

function parse_args { 
    while getopts  &quot;s:&quot; flag 
    do 
        SCALE=&quot;$OPTARG&quot; 
    done 
    shift $(($OPTIND-1)) 
    DIGITS=&quot;$1&quot; 
} 

SPRITE_LINE0=&quot;.-.....-..-.....-..-..-..-..-.&quot; 
SPRITE_LINE1=&quot;&#124;.&#124;..&#124;..&#124;..&#124;&#124;.&#124;&#124;..&#124;....&#124;&#124;.&#124;&#124;.&#124;&quot; 
SPRITE_LINE2=&quot;.......-..-..-..-..-.....-..-.&quot; 
SPRITE_LINE3=&quot;&#124;.&#124;..&#124;&#124;....&#124;..&#124;..&#124;&#124;.&#124;..&#124;&#124;.&#124;..&#124;&quot; 
SPRITE_LINE4=&quot;.-.....-..-.....-..-.....-..-.&quot; 

NEWLINE_SUBSITUTE=&quot;L&quot; 
READ_DELIM=&quot;X&quot; 

function digit_to_sprite { 
    local DIGIT=&quot;$*&quot; 
    local SPRITE_TEMPLATE_OFFSET=$(($DIGIT*3)) 
    for SPRITE_LINE_NR in $(seq 0 4); do 
        local VAR_SELECTOR=&quot;SPRITE_LINE$SPRITE_LINE_NR&quot; 
        echo -n ${!VAR_SELECTOR:$SPRITE_TEMPLATE_OFFSET:3}$NEWLINE_SUBSITUTE 
    done 
    echo 
} 

function digits_to_sprites { 
    local DIGITS=&quot;$*&quot; 
    DIGITS=&quot;$(echo $DIGITS &#124; sed &#039;s/\(.\)/\1 /g&#039;)&quot; 

    for DIGIT in $DIGITS ; do 
        digit_to_sprite $DIGIT 
    done 
} 

function calculate_scale { 
    local SPRITES=$1 
    local FIRST_SPRITE=$(echo $SPRITES &#124; head -1) 

    local TOTAL_LINES=$(echo -n $FIRST_SPRITE &#124; tr $NEWLINE_SUBSITUTE 
\\n &#124; wc -l) 
    echo $((($TOTAL_LINES-3)/2)) 
} 

function render_sprites { 
    local SPRITES=&quot;&quot; 
    read  -d $READ_DELIM SPRITES 
    local SPRITE_SCALE=$(calculate_scale $SPRITES) 

    for LINE_NR in $(seq 1 $((($SPRITE_SCALE * 2) + 3))); do 
        local TOTAL_LINE=&quot;&quot; 
        for SPRITE in $SPRITES; do 
            local PIECE=$(echo -n $SPRITE &#124; cut -d $NEWLINE_SUBSITUTE 
-f $LINE_NR) 
            TOTAL_LINE=&quot;$TOTAL_LINE$PIECE &quot; 
        done 
        echo $TOTAL_LINE &#124; tr &#039;.&#039; &#039; &#039; 
    done 
} 

function scale_sprites { 
    local SCALE=$1 
    local SPRITES=&quot;&quot; 
    read -d $READ_DELIM SPRITES 
    local VSCALE_AWK=&quot; 
/([&#124;][.][.])&#124;([.][.][&#124;])&#124;([&#124;][.][&#124;])/ { 
  for (i = 1; i &lt; scale; i++) 
    print \$0 
} 
BEGIN { 
  RS=\&quot;$NEWLINE_SUBSITUTE\&quot; 
  ORS=\&quot;$NEWLINE_SUBSITUTE\&quot; 
} 
{ 
  print \$0 
} 
&quot; 
    local HSCALE_AWK=&quot; 
BEGIN { 
  RS=\&quot;$NEWLINE_SUBSITUTE\&quot; 
  ORS=\&quot;$NEWLINE_SUBSITUTE\&quot; 
  FS=\&quot;\&quot; 
  OFS=\&quot;\&quot; 
} 
{ 
  line = \$1 
  for (i = 1; i &lt;= scale; i++) 
    line = line \$2 
  line = line \$3 
  print line 
} 
&quot; 
    AWK_VARIABLES=&quot;scale=$SCALE&quot; 
    for SPRITE in $SPRITES; do 
        echo -n &quot;$SPRITE&quot; \ 
            &#124; awk &quot;$VSCALE_AWK&quot; $AWK_VARIABLES \ 
            &#124; awk &quot;$HSCALE_AWK&quot; $AWK_VARIABLES 
        echo 
    done 
} 

parse_args $* 
digits_to_sprites $DIGITS &#124; scale_sprites $SCALE &#124; render_sprites

&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Namens marius in bash en awk :)</p>
<pre>
#!/bin/bash 

DIGITS=""
SCALE="2" 

function parse_args {
    while getopts  "s:" flag
    do
        SCALE="$OPTARG"
    done
    shift $(($OPTIND-1))
    DIGITS="$1"
} 

SPRITE_LINE0=".-.....-..-.....-..-..-..-..-."
SPRITE_LINE1="|.|..|..|..||.||..|....||.||.|"
SPRITE_LINE2=".......-..-..-..-..-.....-..-."
SPRITE_LINE3="|.|..||....|..|..||.|..||.|..|"
SPRITE_LINE4=".-.....-..-.....-..-.....-..-." 

NEWLINE_SUBSITUTE="L"
READ_DELIM="X" 

function digit_to_sprite {
    local DIGIT="$*"
    local SPRITE_TEMPLATE_OFFSET=$(($DIGIT*3))
    for SPRITE_LINE_NR in $(seq 0 4); do
        local VAR_SELECTOR="SPRITE_LINE$SPRITE_LINE_NR"
        echo -n ${!VAR_SELECTOR:$SPRITE_TEMPLATE_OFFSET:3}$NEWLINE_SUBSITUTE
    done
    echo
} 

function digits_to_sprites {
    local DIGITS="$*"
    DIGITS="$(echo $DIGITS | sed 's/\(.\)/\1 /g')" 

    for DIGIT in $DIGITS ; do
        digit_to_sprite $DIGIT
    done
} 

function calculate_scale {
    local SPRITES=$1
    local FIRST_SPRITE=$(echo $SPRITES | head -1) 

    local TOTAL_LINES=$(echo -n $FIRST_SPRITE | tr $NEWLINE_SUBSITUTE
\\n | wc -l)
    echo $((($TOTAL_LINES-3)/2))
} 

function render_sprites {
    local SPRITES=""
    read  -d $READ_DELIM SPRITES
    local SPRITE_SCALE=$(calculate_scale $SPRITES) 

    for LINE_NR in $(seq 1 $((($SPRITE_SCALE * 2) + 3))); do
        local TOTAL_LINE=""
        for SPRITE in $SPRITES; do
            local PIECE=$(echo -n $SPRITE | cut -d $NEWLINE_SUBSITUTE
-f $LINE_NR)
            TOTAL_LINE="$TOTAL_LINE$PIECE "
        done
        echo $TOTAL_LINE | tr '.' ' '
    done
} 

function scale_sprites {
    local SCALE=$1
    local SPRITES=""
    read -d $READ_DELIM SPRITES
    local VSCALE_AWK="
/([|][.][.])|([.][.][|])|([|][.][|])/ {
  for (i = 1; i < scale; i++)
    print \$0
}
BEGIN {
  RS=\"$NEWLINE_SUBSITUTE\"
  ORS=\"$NEWLINE_SUBSITUTE\"
}
{
  print \$0
}
"
    local HSCALE_AWK="
BEGIN {
  RS=\"$NEWLINE_SUBSITUTE\"
  ORS=\"$NEWLINE_SUBSITUTE\"
  FS=\"\"
  OFS=\"\"
}
{
  line = \$1
  for (i = 1; i <= scale; i++)
    line = line \$2
  line = line \$3
  print line
}
"
    AWK_VARIABLES="scale=$SCALE"
    for SPRITE in $SPRITES; do
        echo -n "$SPRITE" \
            | awk "$VSCALE_AWK" $AWK_VARIABLES \
            | awk "$HSCALE_AWK" $AWK_VARIABLES
        echo
    done
} 

parse_args $*
digits_to_sprites $DIGITS | scale_sprites $SCALE | render_sprites
</pre>
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eduard</title>
		<link>http://blog.tty.nl/2009/12/17/ruby-quiz-haskell-solution-lcd-numbers/comment-page-1/#comment-160</link>
		<dc:creator>Eduard</dc:creator>
		<pubDate>Thu, 17 Dec 2009 19:53:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tty.nl/?p=288#comment-160</guid>
		<description>And for a short, if not as sweet perl version:


&lt;pre&gt;
#!/usr/bin/env perl
use strict;
use warnings;

my ( undef, $scale, $input ) =  @ARGV == 3 ? @ARGV : ( &#039;&#039;, &#039;2&#039;, @ARGV );

my @digits; push( @digits, $1) while $input =~ m/(\d)/g;

my $empty   = &#039;   &#039;;
my $line    = &#039; - &#039;;
my $sides   = &#039;&#124; &#124;&#039;;
my $right   = &#039;  &#124;&#039;;
my $left    = &#039;&#124;  &#039;;

my @d;
$d[0] = [$line,   $sides, $empty, $sides, $line   ];
$d[1] = [$empty,  $right, $empty, $right, $empty  ];
$d[2] = [$line,   $right, $line,  $left,  $line   ];
$d[3] = [$line,   $right, $line,  $right, $line   ];
$d[4] = [$empty,  $sides, $line,  $right, $empty  ];
$d[5] = [$line,   $left,  $line,  $right, $line   ];
$d[6] = [$line,   $left,  $line,  $sides, $line   ];
$d[7] = [$line,   $right, $empty, $right, $empty  ];
$d[8] = [$line,   $sides, $line,  $sides, $line   ];
$d[9] = [$line,   $sides, $line,  $right, $line   ];

for my $line (0..4) {
    for (1..($line % 2 == 1  ? $scale : 1))  {
        for my $digit ( @digits ) {
            $d[$digit][$line] =~ m/^(.)(.)(.)$/;
            print  $1 . ( $2 x $scale) . $3 . &#039; &#039;;
        }
        print &quot;\n&quot;;
    }
}

&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>And for a short, if not as sweet perl version:</p>
<pre>
#!/usr/bin/env perl
use strict;
use warnings;

my ( undef, $scale, $input ) =  @ARGV == 3 ? @ARGV : ( '', '2', @ARGV );

my @digits; push( @digits, $1) while $input =~ m/(\d)/g;

my $empty   = '   ';
my $line    = ' - ';
my $sides   = '| |';
my $right   = '  |';
my $left    = '|  ';

my @d;
$d[0] = [$line,   $sides, $empty, $sides, $line   ];
$d[1] = [$empty,  $right, $empty, $right, $empty  ];
$d[2] = [$line,   $right, $line,  $left,  $line   ];
$d[3] = [$line,   $right, $line,  $right, $line   ];
$d[4] = [$empty,  $sides, $line,  $right, $empty  ];
$d[5] = [$line,   $left,  $line,  $right, $line   ];
$d[6] = [$line,   $left,  $line,  $sides, $line   ];
$d[7] = [$line,   $right, $empty, $right, $empty  ];
$d[8] = [$line,   $sides, $line,  $sides, $line   ];
$d[9] = [$line,   $sides, $line,  $right, $line   ];

for my $line (0..4) {
    for (1..($line % 2 == 1  ? $scale : 1))  {
        for my $digit ( @digits ) {
            $d[$digit][$line] =~ m/^(.)(.)(.)$/;
            print  $1 . ( $2 x $scale) . $3 . ' ';
        }
        print "\n";
    }
}
</pre>
]]></content:encoded>
	</item>
</channel>
</rss>
