June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
72
Task/Morse-code/ABAP/morse-code.abap
Normal file
72
Task/Morse-code/ABAP/morse-code.abap
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
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( ).
|
||||
62
Task/Morse-code/Modula-2/morse-code.mod2
Normal file
62
Task/Morse-code/Modula-2/morse-code.mod2
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
MODULE MorseCode;
|
||||
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
|
||||
|
||||
PROCEDURE WriteMorseCode(str : ARRAY OF CHAR);
|
||||
VAR i : CARDINAL;
|
||||
BEGIN
|
||||
WriteString(str);
|
||||
WriteLn;
|
||||
FOR i:=0 TO HIGH(str) DO
|
||||
CASE CAP(str[i]) OF
|
||||
'A': WriteString(".-");
|
||||
| 'B': WriteString("-...");
|
||||
| 'C': WriteString("-.-");
|
||||
| 'D': WriteString("-..");
|
||||
| 'E': WriteString(".");
|
||||
| 'F': WriteString("..-.");
|
||||
| 'G': WriteString("--.");
|
||||
| 'H': WriteString("....");
|
||||
| 'I': WriteString("..");
|
||||
| 'J': WriteString(".---");
|
||||
| 'K': WriteString("-.-");
|
||||
| 'L': WriteString(".-..");
|
||||
| 'M': WriteString("--");
|
||||
| 'N': WriteString("-.");
|
||||
| 'O': WriteString("---");
|
||||
| 'P': WriteString(".--.");
|
||||
| 'Q': WriteString("--.-");
|
||||
| 'R': WriteString(".-.");
|
||||
| 'S': WriteString("...");
|
||||
| 'T': WriteString("-");
|
||||
| 'U': WriteString("..-");
|
||||
| 'V': WriteString("...-");
|
||||
| 'W': WriteString(".--");
|
||||
| 'X': WriteString("-..-");
|
||||
| 'Y': WriteString("-.--");
|
||||
| 'Z': WriteString("--..");
|
||||
| '0': WriteString("-----");
|
||||
| '1': WriteString(".----");
|
||||
| '2': WriteString("..---");
|
||||
| '3': WriteString("...--");
|
||||
| '4': WriteString("....-");
|
||||
| '5': WriteString(".....");
|
||||
| '6': WriteString("-....");
|
||||
| '7': WriteString("--...");
|
||||
| '8': WriteString("---..");
|
||||
| '9': WriteString("----.");
|
||||
| ' ': WriteString(" ");
|
||||
ELSE
|
||||
IF (str[i] # 0C) THEN
|
||||
WriteString("?");
|
||||
END
|
||||
END;
|
||||
WriteString(" ");
|
||||
END;
|
||||
END WriteMorseCode;
|
||||
|
||||
BEGIN
|
||||
WriteMorseCode("hello world");
|
||||
WriteLn;
|
||||
|
||||
ReadChar;
|
||||
END MorseCode.
|
||||
60
Task/Morse-code/Red/morse-code-1.red
Normal file
60
Task/Morse-code/Red/morse-code-1.red
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
Red [
|
||||
file: %morse.red ;; filename, could be ommited
|
||||
]
|
||||
; ";" is character for comment, i use double ones for better readability
|
||||
|
||||
DIT: 100 ;; constant : 100 ms for short Beep
|
||||
FREQ: 700 ;; frequency for Beep
|
||||
|
||||
;; exported code for red/system win api calls to Beep / Sleep:
|
||||
#include %api.reds
|
||||
|
||||
;; string with morse codes for alphabet:
|
||||
;; ( caution, u must use "str: copy ..." if code ist to be executed multiple times ! )
|
||||
str: "A.-B-...C-.-.D-..E.F..-.G--.H....I..J.---K-.-L.-..M--N-."
|
||||
append str "O---P.--.Q--.-R.-.S...T-U..-V...-W.--X-..-Y-.--Z--.."
|
||||
|
||||
delim: charset [#"A" - #"Z"]
|
||||
|
||||
;; use of parse to generate "mc" morse code series / array containing codes for A - Z
|
||||
;; use characters only as delimiter for each code
|
||||
mc: parse str [ thru "A" collect some [ keep copy result to [delim | end ] skip ] ]
|
||||
|
||||
;;--------------------------------------------
|
||||
send-code: func ["function to play morse code for character "
|
||||
;;--------------------------------------------
|
||||
chr [char!] ;; character A .. Z
|
||||
][
|
||||
sleep 500 ;; short break so u can read the character first
|
||||
ind: to-integer chr - 64 ;; calculate index for morse array
|
||||
foreach sym mc/:ind [ ;; foreach symbol of code for character ...
|
||||
prin sym ;; prin(t) "." or "-"
|
||||
either sym = #"." [ ;; short beep
|
||||
beep FREQ DIT
|
||||
][
|
||||
beep FREQ 3 * DIT ;; or long beep = 3 x short
|
||||
]
|
||||
sleep DIT ;; short break after each character
|
||||
]
|
||||
]
|
||||
;;----------------------------------------------
|
||||
morse-text: func ["extract valid characters from sentence"
|
||||
;;----------------------------------------------
|
||||
msg [string!]
|
||||
][
|
||||
foreach chr uppercase msg [
|
||||
prin chr prin " " ;; print character
|
||||
;; valid character A-Z ?
|
||||
either (chr >= #"A") and (chr <= #"Z") [
|
||||
send-code chr
|
||||
] [ ;; ... "else" word gap or unknown
|
||||
sleep 6 * DIT ;; pause after word
|
||||
]
|
||||
prin newline ;; equal to : print """ ,( prin prints without crlf )
|
||||
]
|
||||
sleep 6 * DIT ;; pause after sentence
|
||||
]
|
||||
;;----------------------------------
|
||||
|
||||
morse-text "rosetta code"
|
||||
morse-text "hello world"
|
||||
25
Task/Morse-code/Red/morse-code-2.red
Normal file
25
Task/Morse-code/Red/morse-code-2.red
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
Red/System [
|
||||
file: %api.reds ;; filename, could be ommited
|
||||
]
|
||||
|
||||
; --- lib import -----
|
||||
;; for winapi functions "Beep" and "Sleep"
|
||||
#system [ #import [ "kernel32.dll" stdcall [
|
||||
wbeep: "Beep" [
|
||||
frequ [integer!]
|
||||
dur [integer!]
|
||||
return: [integer!]
|
||||
]
|
||||
wsleep: "Sleep" [ dur [integer!] ]
|
||||
] ] ]
|
||||
|
||||
beep: routine [
|
||||
freq [integer!]
|
||||
duration [integer!]
|
||||
return: [integer!]
|
||||
] [ wbeep freq duration ]
|
||||
|
||||
sleep: routine [
|
||||
duration [integer!]
|
||||
] [ wsleep duration ]
|
||||
;;----------------------------------------------
|
||||
55
Task/Morse-code/Ring/morse-code.ring
Normal file
55
Task/Morse-code/Ring/morse-code.ring
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
morsecode = [["a", ".-"],
|
||||
["b", "-..."],
|
||||
["c", "-.-."],
|
||||
["d", "-.."],
|
||||
["e", "."],
|
||||
["f", "..-."],
|
||||
["g", "--."],
|
||||
["h", "...."],
|
||||
["i", ".."],
|
||||
["j", ".---"],
|
||||
["k", "-.-"],
|
||||
["l", ".-.."],
|
||||
["m", "--"],
|
||||
["n", "-."],
|
||||
["o", "---"],
|
||||
["p", ".--."],
|
||||
["q", "--.-"],
|
||||
["r", ".-."],
|
||||
["s", "..."],
|
||||
["t", "-"],
|
||||
["u", "..-"],
|
||||
["v", "...-"],
|
||||
["w", ".--"],
|
||||
["x", "-..-"],
|
||||
["y", "-.--"],
|
||||
["z", "--.."],
|
||||
["0", "-----"],
|
||||
["1", ".----"],
|
||||
["2", "..---"],
|
||||
["3", "...--"],
|
||||
["4", "....-"],
|
||||
["5", "....."],
|
||||
["6", "-...."],
|
||||
["7", "--..."],
|
||||
["8", "---.."],
|
||||
["9", "----."]]
|
||||
strmorse = ""
|
||||
str = "this is a test text"
|
||||
for n = 1 to len(str)
|
||||
pos = 0
|
||||
for m = 1 to len(morsecode)
|
||||
if morsecode[m][1] = str[n]
|
||||
pos = m
|
||||
ok
|
||||
next
|
||||
if str[n] = " "
|
||||
strmorse = strmorse + " "
|
||||
else
|
||||
if pos > 0
|
||||
strmorse = strmorse + morsecode[pos][2] + "|"
|
||||
ok
|
||||
ok
|
||||
next
|
||||
strmorse = left(strmorse,len(strmorse)-1)
|
||||
see strmorse + nl
|
||||
60
Task/Morse-code/VBA/morse-code.vba
Normal file
60
Task/Morse-code/VBA/morse-code.vba
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
Option Explicit
|
||||
|
||||
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
|
||||
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
|
||||
|
||||
Private Const MORSE_ALPHA As String = ".-,-...,-.-.,-..,.,..-.,--.,....,..,.---,-.-,.-..,--,-.,---,.--.,--.-,.-.,...,-,..-,...-,.--,-..-,-.--,--.."
|
||||
Private Const MORSE_NUMERIC As String = "-----,.----,..---,...--,....-,.....,-....,--...,---..,----."
|
||||
|
||||
Private Const ONE_UNIT As Integer = 100
|
||||
|
||||
Private Const BEEP_DOT As Integer = ONE_UNIT
|
||||
Private Const BEEP_DASH As Integer = 3 * ONE_UNIT
|
||||
Private Const BEEP_OTHER As Integer = 7 * ONE_UNIT
|
||||
Private Const DELAY As Integer = ONE_UNIT
|
||||
Private Const LETTERS_DELAY As Integer = 3 * ONE_UNIT
|
||||
Private Const SPACE_DELAY As Integer = 7 * ONE_UNIT
|
||||
|
||||
Private Const FREQUENCY_CHARS As Integer = 1200
|
||||
Private Const FREQUENCY_OTHERCHARS As Integer = 400
|
||||
|
||||
Sub Main()
|
||||
Dim p$, temp$
|
||||
p = ToMorse("Hel/lo 123 world")
|
||||
temp = Replace(p, "+", "")
|
||||
Debug.Print Replace(temp, "_", "")
|
||||
PlayMorse p
|
||||
End Sub
|
||||
|
||||
Private Function ToMorse(s As String) As String
|
||||
Dim i&, t$, j&
|
||||
s = UCase(s)
|
||||
For i = 1 To Len(s)
|
||||
j = Asc(Mid(s, i, 1))
|
||||
Select Case j
|
||||
Case 65 To 90 'alpha
|
||||
t = t & Split(MORSE_ALPHA, ",")(j - 65) & "+" ' "+" ==> separate each characters
|
||||
Case 48 To 57 'numerics
|
||||
t = t & Split(MORSE_NUMERIC, ",")(j - 48) & "+"
|
||||
Case 32 'space
|
||||
t = t & " " & "+"
|
||||
Case Else 'others
|
||||
t = t & "_" & "+"
|
||||
End Select
|
||||
Next i
|
||||
ToMorse = t
|
||||
End Function
|
||||
|
||||
Private Sub PlayMorse(s As String)
|
||||
Dim i&
|
||||
For i = 1 To Len(s)
|
||||
Select Case Mid(s, i, 1)
|
||||
Case ".": Beep FREQUENCY_CHARS, BEEP_DOT
|
||||
Case "-": Beep FREQUENCY_CHARS, BEEP_DASH
|
||||
Case "_": Beep FREQUENCY_OTHERCHARS, BEEP_OTHER
|
||||
Case "+": Sleep LETTERS_DELAY
|
||||
Case " ": Sleep SPACE_DELAY
|
||||
End Select
|
||||
Sleep DELAY
|
||||
Next i
|
||||
End Sub
|
||||
Loading…
Add table
Add a link
Reference in a new issue