Programming test - using strings
Simen kjaeraas
simen.kjaras at gmail.com
Wed Dec 16 19:53:24 PST 2009
On Thu, 17 Dec 2009 03:46:52 +0100, Joel Christensen <joelcnz at gmail.com>
wrote:
> Any one interested in doing D versions of this program?
>
> http://www.rubyquiz.com/quiz14.html
There're plenty of opportunities for making this smaller, but at 4:53 in
the morning, I'm not optimizing much. :p
module lcd;
import std.stdio;
import std.string;
import std.conv;
enum byte[] letters = [
0b01110111, // 0
0b00010010, // 1
0b01011101, // 2
0b01011011, // 3
0b00111010, // 4
0b01101011, // 5
0b01011111, // 6
0b01010010, // 7
0b01111111, // 8
0b01111011 // 9
];
string linechar( char c, ubyte b, int size ) {
return repeat( letters[ c - '0' ] & b ? "-" : " ", size );
}
string barchar( char c, ubyte b ) {
return letters[ c - '0' ] & b ? "|" : " ";
}
string toLCDNumber( string s, int size ) {
string[] result = new string[ size * 2 + 3 ];
foreach ( ch; s ) {
result[ 0 ] ~= " " ~ linechar( ch, 0b01000000, size ) ~ " ";
result[ size + 1 ] ~= " " ~ linechar( ch, 0b00001000, size ) ~ " ";
result[ 2*size + 2 ] ~= " " ~ linechar( ch, 0b00000001, size ) ~ " ";
foreach ( i; 0..size ) {
result[ 1 + i ] ~= barchar( ch, 0b00100000 ) ~ repeat( " ", size
) ~ barchar( ch, 0b00010000 ) ~ " ";
result[ 2 + i + size ] ~= barchar( ch, 0b00000100 ) ~ repeat( " ", size
) ~ barchar( ch, 0b00000010 ) ~ " ";
}
}
return join( result, newline );
}
void main( string[] args ) {
int size = 2;
uint stringArg = 1;
foreach ( i, elem; args[ 0..$ ] ) {
if ( elem == "-s" ) {
size = to!( int )( args[ i+1 ] );
if ( i == stringArg ) {
stringArg = i+2;
}
break ;
}
}
writeln( toLCDNumber( args[ stringArg ], size ) );
}
--
Simen
More information about the Digitalmars-d-learn
mailing list