Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
97
Task/Morse-code/Phix/morse-code.phix
Normal file
97
Task/Morse-code/Phix/morse-code.phix
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
sequence morse = repeat(0,255)
|
||||
|
||||
procedure setMorse(sequence data)
|
||||
-- data is a list of strings, first char of each is the letter to encode,
|
||||
-- with the rest being the actual morse code for that letter, eg "S..."
|
||||
for i=1 to length(data) do
|
||||
morse[data[i][1]] = data[i][2..$] -- eg morse['S'] = "..."
|
||||
end for
|
||||
end procedure
|
||||
|
||||
setMorse({"0-----","1.----","2..---","3...--","4....-","5.....","6-....","7--...","8---..","9----.",
|
||||
"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--..",
|
||||
"!-.-.--","\".-..-.","$...-..-",":---...",";-.-.-.","=-...-","?..--..","@.--.-.","_..--.-",
|
||||
"&.-...","'.----.","(-.--.",")-.--.-","+.-.-.",",--..--","--....-","..-.-.-","/-..-.",
|
||||
" "})
|
||||
|
||||
morse['a'..'z'] = morse['A'..'Z']
|
||||
morse['['] = morse['(']
|
||||
morse[']'] = morse[')']
|
||||
|
||||
constant EOM = ".-.-."
|
||||
|
||||
constant frequency = 1280, -- (in Hz, 37..32767)
|
||||
dit = 200, -- (in milliseconds)
|
||||
dah = 3*dit, -- ""
|
||||
lettergap = 2*dit/1000, -- (in seconds)
|
||||
wordgap = 4*dit/1000 -- ""
|
||||
|
||||
atom xBeep = 0
|
||||
|
||||
procedure beep(integer duration)
|
||||
if platform()=WIN32 then
|
||||
if xBeep=0 then
|
||||
atom kernel32 = open_dll("kernel32.dll")
|
||||
xBeep = define_c_proc(kernel32, "Beep", {C_INT,C_INT})
|
||||
end if
|
||||
c_proc(xBeep,{frequency,duration})
|
||||
end if
|
||||
end procedure
|
||||
|
||||
procedure playAndRebuild(string line)
|
||||
-- line should only contain '.'/'-'/' ', like the example below
|
||||
string rebuilt = ""
|
||||
integer start = 1
|
||||
integer ch
|
||||
if length(line)=0 then
|
||||
line = "... --- ... - .. - .- -. .. -.-. "
|
||||
puts(1,line)
|
||||
end if
|
||||
for i=1 to length(line) do
|
||||
ch = line[i]
|
||||
if ch=' ' then
|
||||
ch = find(line[start..i-1],morse)
|
||||
if ch!=0 then
|
||||
rebuilt &= ch
|
||||
start = i+1
|
||||
if ch=' ' then
|
||||
sleep(wordgap)
|
||||
else
|
||||
sleep(lettergap)
|
||||
end if
|
||||
end if
|
||||
elsif ch='.' then
|
||||
beep(dit)
|
||||
elsif ch='-' then
|
||||
beep(dah)
|
||||
end if
|
||||
end for
|
||||
puts(1,rebuilt)
|
||||
puts(1,"\n")
|
||||
end procedure
|
||||
|
||||
procedure main()
|
||||
integer key
|
||||
object code
|
||||
string line = ""
|
||||
|
||||
puts(1,"enter text, return to play/rebuild, escape to quit\n")
|
||||
while 1 do
|
||||
key = wait_key()
|
||||
if key = 27 then exit end if -- escape
|
||||
if key = 13 then -- return
|
||||
playAndRebuild(line)
|
||||
line = ""
|
||||
else
|
||||
code = morse[key]
|
||||
if string(code) then
|
||||
code &= ' '
|
||||
puts(1,code)
|
||||
line &= code
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
puts(1,EOM)
|
||||
end procedure
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue