73 lines
7.3 KiB
ABAP
73 lines
7.3 KiB
ABAP
REPORT morse_code.
|
|
TYPES: BEGIN OF y_morse_code,
|
|
letter TYPE string,
|
|
code TYPE string,
|
|
END OF y_morse_code,
|
|
ty_morse_code TYPE STANDARD TABLE OF y_morse_code WITH EMPTY KEY.
|
|
|
|
cl_demo_output=>new(
|
|
)->begin_section( |Morse Code|
|
|
)->write( REDUCE stringtab( LET words = VALUE stringtab( ( |sos| )
|
|
( | Hello World!| )
|
|
( |Rosetta Code| ) )
|
|
morse_code = VALUE ty_morse_code( ( letter = 'A' code = '.- ' )
|
|
( letter = 'B' code = '-... ' )
|
|
( letter = 'C' code = '-.-. ' )
|
|
( letter = 'D' code = '-.. ' )
|
|
( letter = 'E' code = '. ' )
|
|
( letter = 'F' code = '..-. ' )
|
|
( letter = 'G' code = '--. ' )
|
|
( letter = 'H' code = '.... ' )
|
|
( letter = 'I' code = '.. ' )
|
|
( letter = 'J' code = '.--- ' )
|
|
( letter = 'K' code = '-.- ' )
|
|
( letter = 'L' code = '.-.. ' )
|
|
( letter = 'M' code = '-- ' )
|
|
( letter = 'N' code = '-. ' )
|
|
( letter = 'O' code = '--- ' )
|
|
( letter = 'P' code = '.--. ' )
|
|
( letter = 'Q' code = '--.- ' )
|
|
( letter = 'R' code = '.-. ' )
|
|
( letter = 'S' code = '... ' )
|
|
( letter = 'T' code = '- ' )
|
|
( letter = 'U' code = '..- ' )
|
|
( letter = 'V' code = '...- ' )
|
|
( letter = 'W' code = '.- - ' )
|
|
( letter = 'X' code = '-..- ' )
|
|
( letter = 'Y' code = '-.-- ' )
|
|
( letter = 'Z' code = '--.. ' )
|
|
( letter = '0' code = '----- ' )
|
|
( letter = '1' code = '.---- ' )
|
|
( letter = '2' code = '..--- ' )
|
|
( letter = '3' code = '...-- ' )
|
|
( letter = '4' code = '....- ' )
|
|
( letter = '5' code = '..... ' )
|
|
( letter = '6' code = '-.... ' )
|
|
( letter = '7' code = '--... ' )
|
|
( letter = '8' code = '---.. ' )
|
|
( letter = '9' code = '----. ' )
|
|
( letter = '''' code = '.----. ' )
|
|
( letter = ':' code = '---... ' )
|
|
( letter = ',' code = '--..-- ' )
|
|
( letter = '-' code = '-....- ' )
|
|
( letter = '(' code = '-.--.- ' )
|
|
( letter = '.' code = '.-.-.- ' )
|
|
( letter = '?' code = '..--.. ' )
|
|
( letter = ';' code = '-.-.-. ' )
|
|
( letter = '/' code = '-..-. ' )
|
|
( letter = '_' code = '..--.- ' )
|
|
( letter = ')' code = '---.. ' )
|
|
( letter = '=' code = '-...- ' )
|
|
( letter = '@' code = '.--.-. ' )
|
|
( letter = '\' code = '.-..-. ' )
|
|
( letter = '+' code = '.-.-. ' )
|
|
( letter = ' ' code = '/' ) )
|
|
IN INIT word_coded_tab TYPE stringtab
|
|
FOR word IN words
|
|
NEXT word_coded_tab = VALUE #( BASE word_coded_tab ( REDUCE string( INIT word_coded TYPE string
|
|
FOR index = 1 UNTIL index > strlen( word )
|
|
LET _morse_code = VALUE #( morse_code[ letter = COND #( WHEN index = 1 THEN to_upper( word(index) )
|
|
ELSE LET prev = index - 1 IN to_upper( word+prev(1) ) ) ]-code OPTIONAL )
|
|
IN NEXT word_coded = |{ word_coded } { _morse_code }| ) ) ) )
|
|
)->display( ).
|