USING: ascii lists sequences regexp ; : ch>morse ch>upper ( char -- morse-str ) { { CHAR: 0 [ "— — — — —" ] } { CHAR: 1 [ "• — — — —" ] } { CHAR: 2 [ "• • — — —" ] } { CHAR: 3 [ "• • • — —" ] } { CHAR: 4 [ "• • • • —" ] } { CHAR: 5 [ "• • • • •" ] } { CHAR: 6 [ "— • • • •" ] } { CHAR: 7 [ "— — • • •" ] } { CHAR: 8 [ "— — — • •" ] } { CHAR: 9 [ "— — — — •" ] } { CHAR: A [ "• —" ] } { CHAR: B [ "— • • •" ] } { CHAR: C [ "— • — •" ] } { CHAR: D [ "— • •" ] } { CHAR: E [ "• • •" ] } { CHAR: F [ "• • — •" ] } { CHAR: G [ "— — •" ] } { CHAR: H [ "• • • •" ] } { CHAR: I [ "• •" ] } { CHAR: J [ "• — — —" ] } { CHAR: K [ "— • —" ] } { CHAR: L [ "• — • •" ] } { CHAR: M [ "— —" ] } { CHAR: N [ "— •" ] } { CHAR: O [ "— — —" ] } { CHAR: P [ "• — — •" ] } { CHAR: Q [ "— — • —" ] } { CHAR: R [ "• — •" ] } { CHAR: S [ "• • •" ] } { CHAR: T [ "—" ] } { CHAR: U [ "• • —" ] } { CHAR: V [ "• • • —" ] } { CHAR: W [ "• — —" ] } { CHAR: X [ "— • • —" ] } { CHAR: Y [ "— • — —" ] } { CHAR: Z [ "— — • •" ] } [ drop " " ] } case ; : morse>ch ( morse-substring -- char ) { { "— — — — —" [ CHAR: 0 ] } { "• — — — —" [ CHAR: 1 ] } { "• • — — —" [ CHAR: 2 ] } { "• • • — —" [ CHAR: 3 ] } { "• • • • —" [ CHAR: 4 ] } { "• • • • •" [ CHAR: 5 ] } { "— • • • •" [ CHAR: 6 ] } { "— — • • •" [ CHAR: 7 ] } { "— — — • •" [ CHAR: 8 ] } { "— — — — •" [ CHAR: 9 ] } { "• —" [ CHAR: A ] } { "— • • •" [ CHAR: B ] } { "— • — •" [ CHAR: C ] } { "— • •" [ CHAR: D ] } { "• • •" [ CHAR: E ] } { "• • — •" [ CHAR: F ] } { "— — •" [ CHAR: G ] } { "• • • •" [ CHAR: H ] } { "• •" [ CHAR: I ] } { "• — — —" [ CHAR: J ] } { "— • —" [ CHAR: K ] } { "• — • •" [ CHAR: L ] } { "— —" [ CHAR: M ] } { "— •" [ CHAR: N ] } { "— — —" [ CHAR: O ] } { "• — — •" [ CHAR: P ] } { "— — • —" [ CHAR: Q ] } { "• — •" [ CHAR: R ] } { "• • •" [ CHAR: S ] } { "—" [ CHAR: T ] } { "• • —" [ CHAR: U ] } { "• • • —" [ CHAR: V ] } { "• — —" [ CHAR: W ] } { "— • • —" [ CHAR: X ] } { "— • — —" [ CHAR: Y ] } { "— — • •" [ CHAR: Z ] } [ drop 32 ] } case ; : string>morse ( string -- morse-string ) sequence>cons { } [ ch>morse suffix ] foldl " " join ; : morse>string ( morse-string -- string ) R/ [ ]{2,}/ re-split [ >string morse>ch ] map >string ;
Soon to be replaced with an Elaborate Platinum Mechanism. Ok, but seriously the blog is about programming and technology.
Thursday, April 30, 2009
Morse Code in Factor
I am getting the hang of this. This is a string>morse code and morse code>string converter as per this programming praxis problem. My implementation ignores extra whitespace in the morse code stream.
Labels:
code,
factor,
morse,
morse code,
morse-code,
programming praxis
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment