স্ট্যান্ডার্ড ইনপুটটিকে মোর্স কোডে রূপান্তর করতে সংক্ষিপ্ততম প্রোগ্রামটি লিখুন । সারণীতে না থাকা অক্ষরগুলি যেমন হয় তেমন মুদ্রণ করা উচিত।
স্ট্যান্ডার্ড ইনপুটটিকে মোর্স কোডে রূপান্তর করতে সংক্ষিপ্ততম প্রোগ্রামটি লিখুন । সারণীতে না থাকা অক্ষরগুলি যেমন হয় তেমন মুদ্রণ করা উচিত।
উত্তর:
এই উত্তরটি কেবল বড় হাতের অক্ষর এবং অঙ্কগুলিকে সমর্থন করে। অক্ষরগুলি নিউলাইন দ্বারা পৃথক করা হয় এবং শব্দগুলি 2 টি নতুন লাইনের দ্বারা পৃথক করা হয়
{." ETIANMSURWDKGOHVF L PJBXCYZQ"?)"?/'#! 08<>"@))10%=or 2base(;{!45+}%n}%
বিশ্লেষণ
usual}% যথারীতি অ্যারের উপরে মানচিত্রের মতো কাজ করে । চরের একটি অনুলিপি স্ট্যাকের উপর চাপুন "EITAN ..." এটি বড় হাতের অক্ষরের জন্য একটি সারণী ? স্ট্রিংয়ের মতো।ফাইন্ড স্ট্রিংয়ের মধ্যে সূচকটি সূচিত করে অথবা -1 না পাওয়া গেলে (যেমন এটি একটি অঙ্ক) ) ইনক্রিমেন্ট যে সূচক তাই E => 2 টি => 3 আই => 4 ইত্যাদি খেয়াল করুন যে যদি চরটি বড় হাতের অক্ষর বা স্থান নয় এটি এখন 0 (মিথ্যা) "? / '#! ..." এটি অঙ্কগুলির জন্য একটি সারণী। এটি ব্যবহার করা হবে অন্য দেখার টেবিলের বিপরীতে। @ আমরা চরের তৈরি সেই অনুলিপিটিকে স্ট্যাকের শীর্ষে টানুন ))% 10 এসিআই ডিজিটকে একটি সংখ্যায় 2 যোগ করে এবং 10 মোডে রূপান্তর করে। এটি এইভাবে করা গুরুত্বপূর্ণ কারণ সমস্ত বড় হাতের অক্ষর চিঠিগুলিও এই কোডটিকে আঘাত করে এবং আমাদের তা নিশ্চিত হওয়া দরকার make 0..9 পরিসীমা বা পরবর্তী পদক্ষেপ ব্যর্থ হবে। = স্ট্রিং থেকে নবম চরটি টানুন যেমন "হ্যালো" 1 = "ই" দেয় বা মনে রাখবেন যদি বড় হাতের ব্যপারে ব্যর্থ হয় তবে আমাদের 0 টি ফলাফল রয়েছে অঙ্ক অনুসন্ধান করা হবে 2 বেসকে বেস 2 তে রূপান্তর করুন তাই ই => [1 0], টি => [1 1], আই => [1 0 0] ইত্যাদি (; তালিকার সম্মুখভাগটি পপ করুন এবং এটিকে ফেলে দিন যাতে ই => [0], টি => [1] 45! 45 +}% প্রতিটি বিট অবহেলা করুন এবং 45 যোগ করুন, এটির আস্কি মূল্য দেয়। এবং - এন নিউলাইন প্রতিটি শব্দ পৃথক করে। আপনি চাইলে এটি 32 হতে পারে স্ট্রোকের সাথে 1 টি স্ট্রোকের জন্য শব্দ পৃথক করুন
গল্ফস্ক্রিপ্ট - 85 অক্ষর
স্বাচ্ছন্দ্যের প্রয়োজনীয়তার কারণে এটি আমার এসও উত্তরের চেয়ে কম The
{." ETIANMSURWDKGOHVF!L!PJBXCYZQ"?)"UsL?/'#! 08<>"@".,?"58,48>+?=or
2base(;{!45+}%n}%
যেহেতু বিরামচিহ্নগুলি এমনকি এখানে প্রয়োজনীয় নয়, তাই আমি উত্তরটি আরও ছোট করতে পারি
এসও গল্ফস্ক্রিপ্ট থেকে আমার উত্তর
- 107 অক্ষর
ইনপুট শেষে নতুন লাইন সমর্থিত নয়, তাই এর মতো কিছু ব্যবহার করুন
echo -n Hello, Codegolfers| ../golfscript.rb morse.gs
চিঠিগুলি একটি বিশেষ কেস এবং ছোট হাতগুলিতে রূপান্তরিত হয় এবং তাদের বাইনারি অবস্থানে অর্ডার করা হয়। বাকী সমস্ত কিছুই অনুবাদ টেবিল দ্বারা সম্পন্ন হয়
' '/{{.32|"!etianmsurwdkgohvf!l!pjbxcyzq"?)"UsL?/'#! 08<>"@".,?0123456789"?=or
2base(;>{'.-'\=}%' '}%}%'/'*
সি # (213 টি অক্ষর)
আমি নিশ্চিত যে এই অভ্যাস দীর্ঘায়িত হবে না, তবে কমপক্ষে আমি এখানে প্রথম কৌশলটি পেয়েছি!
class P{static void Main(string[] a){foreach(var t in a[0]){var c="";for(int i=" ETIANMSURWDKGOHVF L PJBXCYZQ 54 3 2 16 7 8 90".IndexOf(t);i>0;i/=2)c="-."[i--%2]+c;System.Console.Write(c+" ");}}}
এবং পাঠযোগ্য বিন্যাসে:
class P
{
static void Main(string[] a)
{
foreach(var t in a[0])
{
var c="";
for(int i=" ETIANMSURWDKGOHVF L PJBXCYZQ 54 3 2 16 7 8 90".IndexOf(t);i>0;i/=2)c="-."[i--%2]+c;
System.Console.Write(c+" ");
}
}
}
সংক্ষিপ্ত ব্যাখ্যার জন্য, অক্ষরের স্ট্রিং হ'ল একটি স্তূপ যা বাম শিশুটি একটি বিন্দু এবং ডান শিশুটি একটি ড্যাশ। চিঠিটি তৈরি করতে, আপনি ব্যাক আপ ব্যাক আপ এবং ক্রমটি বিপরীত।
ETIAN...
সেখানে দেখলাম , আমি ধরে নিয়েছিলাম এটি গল্ফস্ক্রিপ্টের মতোই কাজ করেছে, তবে আপনার কাছে স্ট্রিংটির ব্যাখ্যা করার আলাদা উপায় রয়েছে। আমি এটি সমতুল্য মনে করি তবে আমি সূচকে 1 যুক্ত করে এবং বাইনারি উপস্থাপনাটি ব্যবহার করে প্রথম 1 "উদাহরণস্বরূপ পরে সমস্ত অঙ্কের জন্য বিন্দু এবং ড্যাশগুলি পেতেF=>18=>0b10010=>..-.
String[] a
tr a-z A-Z | sed 's/0/--O/g;s/1/.-O/g;s/2/.J/g;s/3/..W/g;s/4/.V/g;s/5/.H/g;
s/6/-.H/g;s/7/-B/g;s/8/-Z/g;s/9/--G/g;s/X/-U/g;s/V/.U/g;s/U/.A/g;
s/Q/-K/g;s/K/-A/g;s/A/.T/g;s/J/.O/g;s/O/-M/g;s/Y/-W/g;s/W/.M/g;
s/M/-T/g;s/T/- /g;s/H/.S/g;s/B/-S/g;s/S/.I/g;s/L/.D/g;s/Z/-D/g;
s/D/-I/g;s/I/.E/g;s/C/-R/g;s/F/.R/g;s/R/.N/g;s/P/.G/g;s/G/-N/g;
s/N/-E/g;s/E/. /g'
/g;s/
হয়ে যায় ,
- বেশিরভাগ ওভারহেড)।
y
পরিবর্তে
import Data.List
i=intercalate
m=i" ".map(i" ".map(\c->words".- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. ----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----."!!(head.findIndices(==c)$['a'..'z']++['0'..'9']))).words
আরও ব্যবহারকারী পঠনযোগ্য ফর্ম:
tbl :: [String]
tbl = words ".- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. ----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----."
lookupChar :: Char -> String
lookupChar c = tbl !! (fromJust . elemIndex c $ ['a'..'z'] ++ ['0'..'9'])
encWord :: String -> String
encWord = intercalate " " . map lookupChar
encSent :: String -> String
encSent = intercalate " " . map encWord . words
নমুনা রান:
*Main> m "welcome humans"
".-- . .-.. -.-. --- -- . .... ..- -- .- -. ..."
দুটি বর্ণের মধ্যে একটি শ্বেতস্থান এবং দুটি শব্দের মধ্যে সাতটি সাদা স্থান রয়েছে ace
fromJust.elemIndex c
হিসাবে লেখা যেতে পারে head.findIndices(==c)
। এটি আরও একটি চরিত্র, তবে আপনি এর পরে মুক্তি পেতে পারেন import Data.Maybe
, সুতরাং আপনি মোট 17 টি অক্ষর সংরক্ষণ করবেন। আপনি যখন একবার আন্তঃআরক্ষেত্রে কল করবেন তখন আপনি স্ট্রিংয়ের সামনে স্থানটি সরিয়ে দুটি অক্ষর সংরক্ষণ করতে পারবেন। আর করে অন্য কয়েকটি অক্ষর i=intercalate
শুরুতে এবং দুটি কল প্রতিস্থাপন intercalate
সঙ্গে i
।
intercalate
এবং আরও 6 টি অক্ষর সংরক্ষণ করেছি! :-)
w=words
ভুল করতে না পারলে একটি চরিত্র বাঁচায় যা আপনি করতেও পারেন। আর বদলে l c=...
এবং map l
, কি করা উচিত map\c->...
(যদি আপনি এমনকি ল্যামডা প্রায় ডান বন্ধনী প্রয়োজন হবে না তার আগেই যাহাই হউক না কেন যেহেতু একটি ক্লোজিং paren পরে)।
l c=...
আমাকে 1 টি চরিত্র বাঁচিয়েছে, তবে আমি প্যারেন্স ছাড়াই এটি রাখতে পারি না, কেবল হিসাবে map(\c->...)
। জিএইচসি সংস্করণ 6.12.3।
পুনশ্চ (310) (462) (414)(৩৩১) সহ (46) সারণির জন্য।
টেরিনারি এনকোডিং সহ সংযুক্ত নম্বর এবং অক্ষর। একটি বাইটে 5 টি টার্নারি ডিজিট ফিট! এটি সেই নির্বোধ পার্থক্য লুপগুলি এবং বিশেষভাবে পুরো কেসিংয়ের সংখ্যাগুলি সরিয়ে দেয়।
ASCII85 প্রতিটি টেবিলের 1/3 অংশ কেটে দেয়। এবং কোডটি সরল করে (শেষ পর্যন্ত!) ফিরে আসবে 400 এর নিচে!
errordict/undefined{pop( )dup 0 4 3 roll put print{}}put<</*{{[exch/@ cvx]cvx 1
index 1 add}forall pop}def/C{<~#:VD<!AP07"A]ga#R),'7h?+2(./s-9e6~>*}def/#{load
exec}/P{print}0{}1{(.)P}2{(---)P}/S{( )P}48<~o'u/0b'A;]L7n~>* 65 C 97 C/@{5{dup
3 mod # S 3 idiv}repeat # S S S}>>begin{(%stdin)(r)file read not{exit}if #}loop
নমুনা আউটপুট
Luser DR00g! । ---। । । । ---। । । । । ---। ---। । । ---। --- --- --- --- --- --- --- --- --- --- ---। !
অবহেলিত এবং মন্তব্য। আমি এই এক খুব গর্বিত। আমি মনে করি এটি মার্জিত, সংখ্যাগুলি কাজ করে। :)
%!
%Morse Code Translator (Simplified)
%if `load` signals /undefined in /#{load exec},
% pop --load--,
% print the char,
% leave dummy object for `exec` to find
errordict/undefined{pop( )dup 0 4 3 roll put print{}}put
<<
%create int->proc pairs
%from initial int and string values
/*{{[exch/@ cvx]cvx 1 index 1 add}forall pop}def
%the alpha map is applied to Upper and Lower case
/C{<~#:VD<!AP07"A]ga#R),'7h?+2(./s-9e6~>*}def
65 C 97 C
%the number map
48<~o'u/0b'A;]L7n~>*
/#{load exec} %execute a number
/P{print}
0{} % 0: nop
1{(.)P} % 1: '.' dit
2{(---)P} % 2: '---' dah
/S{( )P} % S: space
%execute a morse sequence, from the table
/@{5{dup 3 mod # S 3 idiv}repeat # S S S}
>>begin
%read and execute each char from stdin
{(%stdin)(r)file read not{exit}if #}loop
সারণী (33) + (13) = (46)
স্ট্রিংগুলি টেবিলটি কীভাবে এনকোড করে তা এখানে। প্রতিটি বাইট একটি 5-সংখ্যার ত্রৈমাসিক সংখ্যা উপস্থাপন করে। এবং বাইটগুলি আরও ASCII85 এ এনকোড করা হয়েছে (কোন পোস্টস্ক্রিপ্ট স্বয়ংক্রিয়ভাবে ডিকোড করতে পারে)।
%The Morse Table in Ternary Encoding
% 3 ^4 ^3 ^2 ^1 ^0
% 81 27 9 3 1 Dec Hex dc ->ASCII85
% --------------- --- --- ---
% A 2 1 6+1 7 7 7 256*41+256*50+256*14+
% B 1 1 1 2 27+ 9+3+2 41 29 d85%n85/d85%n85/d85%n85/d85%n85/n
% C 1 2 1 2 27+18+3+2 50 32 2 25 53 35 27 chr(x+33)
% D 1 1 2 9+3+2 14 E # : V D <
% E 1 1 1 1
% F 1 2 1 1 27+18+3+1 49 31
% G 1 2 2 9+6+2 17 11 0 32 47 15 22
% H 1 1 1 1 27+ 9+3+1 40 28 ! A P 0 7
% I 1 1 3+1 4 4
% J 2 2 2 1 54+18+6+1 79 4F
% K 2 1 2 18+3+2 23 17 1 32 60 70 64
% L 1 1 2 1 27+ 9+6+1 43 2B " A ] g a
% M 2 2 6+2 8 8
% N 1 2 3+2 5 5
% O 2 2 2 18+6+2 26 1A 2 49 8 11 6
% P 1 2 2 1 27+18+6+1 52 34 # R ) , '
% Q 2 1 2 2 54+ 9+6+2 71 47
% R 1 2 1 9+6+1 16 10
% S 1 1 1 9+3+1 13 D 22 71 30 10 17
% T 2 2 2 2 7 h ? + 2
% U 2 1 1 18+3+1 22 16
% V 2 1 1 1 54+ 9+3+1 67 43
% W 2 2 1 18+6+1 25 19 7 13 14 82 12
% X 2 1 1 2 54+ 9+3+2 68 44 ( . / s -
% Y 2 2 1 2 54+18+3+2 77 4D 77 256*44+256*256*
% Z 1 1 2 2 27+ 9+6+2 44 2C 24 68 21 [23 36]
% 9 e 6 [ 8 E] (omit final 2)
% 0 2 2 2 2 2 162+54+18+6+2 242 F2
% 1 2 2 2 2 1 162+54+18+6+1 241 F1
% 2 2 2 2 1 1 162+54+18+3+1 238 EE 78 6 84 14 15
% 3 2 2 1 1 1 162+54+ 9+3+1 229 E5 o ' u / 0
% 4 2 1 1 1 1 162+27+ 9+3+1 202 CA
% 5 1 1 1 1 1 81+27+ 9+3+1 121 79
% 6 1 1 1 1 2 81+27+ 9+3+2 122 7A 65 6 32 26 60
% 7 1 1 1 2 2 81+27+ 9+6+2 125 7D b ' A ; ]
% 8 1 1 2 2 2 81+27+18+6+2 134 86 134 256*161+256*256*
% 9 1 2 2 2 2 81+54+18+6+2 161 A1 43 22 77 [50 40]
% L 7 n [ S I] (omit final 2)
d=proc{|x|x>1?d[x/2]+".-"[x&1]:' '}
$><<$<.gets.bytes.map{|i|
e=i>64?"-@B4*:68,?5</.7>E20+193ACD"[(i&95)-65]:i>47?"gWOKIHX`df"[i-48]:nil
e ?d[e.ord-40]:i.chr}*''
প্রতিটি অঙ্ককে একটি একক চরে এনকোড করে, যেখানে 1 টি ড্যাশ, 0 টি বিন্দু, একটি মার্কার বিট হিসাবে শীর্ষস্থানীয় 1 সহ (এটি মুদ্রণযোগ্য রাখার জন্য একটি অফসেট lookup
Module Module1
Sub Main(a$())
For Each c In a(0)
Dim i = "ETIANMSURWDKGOHVF L PJBXCYZQ 54 3 2 16 7 8 90".IndexOf(c)
If c <> " " And i >= 0 Then
Console.Write("{0} ", Morse(i))
Else
Console.Write(c)
End If
Next
End Sub
Function Morse(i) As String
Dim b = Math.Log(i) / Math.Log(2)
Return (From m In MorseSeq(If(Double.IsInfinity(b), 0, b)) Order By m.Length)(i)
End Function
Function MorseSeq(i) As IEnumerable(Of String)
Return If(i < 0, {}, From n In ".-" From m In MorseSeq(i - 1).DefaultIfEmpty
Select n & m)
End Function
End Module
যে শেষ ফাংশন মন্দ।
বেশ কয়েকটি উন্নতি সম্পাদনা করুন ।
Function Morse(i) As String
Return (From m In MorseSeq(i) Order By m.Length)(i)
End Function
Function MorseSeq(i) As IEnumerable(Of String)
Return If(i=0,{".","-"},From n In".-"From m In MorseSeq(i>>1) Select n & m)
End Function
লিস্প ( 532 466 অক্ষর)
(loop(princ(let((c(read-char)))(case c(#\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"--.. ")(#\1".---- ")(#\2"..--- ")(#\3"...-- ")(#\4"....- ")(#\5"..... ")(#\6"-.... ")(#\7"--... ")(#\8"---.. ")(#\9"----. ")(#\0"----- ")(t c)))))
এটি ছোট হাতের অক্ষরগুলিকে এনকোড করে এবং মোর্স কোডের সিকোয়েন্সগুলি একটি পূর্ববর্তী স্থানের সাথে মুদ্রিত হয়
জাভাতে, 475 টি অক্ষর।
import java.io.*;class M{public static void main(String[]b){String s,t="-",m=t+t,o=m+t,z="",e=".",i=e+e,p=t+e,a=e+t,n=i+e,c[]={o+m,a+o,i+o,n+m,n+a,n+i,p+n,m+n,o+i,o+p,z,z,z,z,z,z,z,a,t+n,p+p,t+i,e,i+p,m+e,n+e,i,e+o,p+t,a+i,m,p,o,a+p,m+a,e+p,n,t,i+t,n+t,e+m,p+a,p+m,m+i};BufferedReader r=new BufferedReader(new InputStreamReader(System.in));try{s=r.readLine().toUpperCase();for(int j=48;j<91;j++)s=s.replace(z+(char)j,c[j-48]+" ");System.out.println(s);}catch(Exception x){}}}
এজে, এজেড এবং 0-9 অনুবাদ করে।
সম্পাদনা:
বা 447 টি অক্ষরে, যদি আপনি জাভা অনুবাদ পরে একটি ত্রুটি নিক্ষেপ না আপত্তি।
import java.io.*;class M{static{String s,t="-",m=t+t,o=m+t,z="",e=".",i=e+e,p=t+e,a=e+t,n=i+e,c[]={o+m,a+o,i+o,n+m,n+a,n+i,p+n,m+n,o+i,o+p,z,z,z,z,z,z,z,a,t+n,p+p,t+i,e,i+p,m+e,n+e,i,e+o,p+t,a+i,m,p,o,a+p,m+a,e+p,n,t,i+t,n+t,e+m,p+a,p+m,m+i};BufferedReader r=new BufferedReader(new InputStreamReader(System.in));try{s=r.readLine().toUpperCase();for(int j=48;j<91;j++)s=s.replace(z+(char)j,c[j-48]+" ");System.out.println(s);}catch(Exception x){}}}
পার্ল 6 (238)
my%h="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----.".split(/<wb>/)[1..72];while$*IN.getc ->$c{print %h{$c.uc}||$c}
পাঠযোগ্য সংস্করণ
# Split string on word breaks to create a hash
# I get an extra token at the beginning and end for some reason
# [1..72] is a slice without the extra pieces
my %h = "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----."
.split(/<wb>/)[1..72];
# For each character in STDIN, print either the looked up value, or itself
while $*IN.getc -> $c {
print %h{$c.uc} || $c;
}
s/.*/\L&/
s/[02]/&-/g
s/[89]/&./g
:
s/[b-ilnprsz5-9]/&./g
s/[ajkmoqt-y0-4]/&-/g
y/abcdefghijklmnopqrstuvwxyz0123456789/edri umsewnrttmwkai isadkgojuvhhbzoo/
t
আমরা পুরো লাইনটি হ্রাস করে শুরু করি (কারণ y
কেস-সংবেদনশীল রূপান্তরগুলি করতে পারে না); যদি কেবলমাত্র নিম্ন-কেস ইনপুট পরিচালনা করতে হয় তবে 10 বাইট বিয়োগ করুন। তারপর আমরা preprocess ডিজিটের 0
, 2
, 8
এবং9
তাদের চূড়ান্ত প্রতীক নির্গত হয়।
লুপ প্রতিটি ইনপুট চরিত্রের জন্য চূড়ান্ত প্রতীক তৈরি করে, তারপরে পরবর্তী পুনরাবৃত্তির জন্য প্রতিটি অক্ষর অনুবাদ করে। এটি উইকিপিডিয়া নিবন্ধে প্রদর্শিত দ্বৈতত্ত্বীয় অনুসন্ধানের টেবিলটি হাঁটার সমতুল্য ; যে সমস্ত সংখ্যার জন্য বিশেষ চিকিত্সার প্রয়োজন ছিল তাদের পিতামাতাদের দেখা যেতে পারে যা আমাদের ASCII বর্ণানুক্রমিক নয়।
লুপটি সমাপ্ত হয় যখন সমস্ত অক্ষর সমাপ্ত স্থানে পৌঁছায় ('e' বা 't' এর পরে)।
উদাহরণস্বরূপ, চিঠিটি k
তিনটি পাসে রূপান্তরিত হয়েছে:
k
=> k-
=>n-
n-
=> n.-
=>t.-
t.-
=> t-.-
=>-.-
char M[256] = "_^\\XP@ACGO &15)\"4+0$>-2'%/6;*(#,8.9=3", v;
main(c) {
for (;
c = getchar(), v = M[c + 208 & 255] - 32, ~c;
putchar(v-1? c : 32))
for (; v > 1; v /= 2) putchar(".-"[v & 1]);
}
(অ-তাৎপর্যপূর্ণ শ্বেত স্পেস ছিনিয়ে নেওয়া ছাড়া, কোনও নতুন লাইনের পিছনে নেই)
char M[256]="_^\\XP@ACGO &15)\"4+0$>-2'%/6;*(#,8.9=3",v;main(c){for(;c=getchar(),v=M[c+208&255]-32,~c;putchar(v-1?c:32))for(;v>1;v/=2)putchar(".-"[v&1]);}
M
অক্ষরগুলির বিটপ্যাটার্নগুলি মোর্স কোডের বিন্দু এবং ড্যাশের সাথে মিলে যায় এমন একটি সারণী lookup অক্ষরগুলি [0-9A-Z]
এই টেবিলটি ব্যবহার করে মোর্সটি ডিকোড করা হয় (মোর্স কোডের পরে সংযুক্ত একটি স্থান সহ), অন্যান্য অক্ষরগুলি কেবল অপরিবর্তিতভাবেই পাস করা হয়।
নমুনা রান:
HELLO WORLD
.... . .-.. .-.. --- .-- --- .-. .-.. -..
hello world
hello world
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. ----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----.
%c=("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"=>"--..",1=>".----",2=>"..---",3=>"...--",4=>"..---",5=>".....",6=>"-....",7=>"--...",8=>"---..",9=>"----.",0=>"-----");while(<>){foreach(split(//)){if(exists($c{$_})){printf"%s ",$c{$_}}else{print"$_"}}}
কমান্ড লাইনের মাধ্যমে কার্যকর করা যেতে পারে।
$ perl -e '$CODE' < textfile
সম্পাদনা করুন: আমার মূল সমাধানটির পিছনে পিছনে অনুবাদটি ছিল তা নির্দেশ করার জন্য @ টোয়াইডেভিসকে ধন্যবাদ!
%c=qw(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 --.. 1 .---- 2 ..--- 3 ...-- 4 ..--- 5 ..... 6 -.... 7 --... 8 ---.. 9 ----. 0 -----);while(<>){print($c{$_}||$_)for split//}
<?$a=strtoupper(fgets(STDIN));$m=array(65=>".-",66=>"-...",67=>"-.-.",68=>"-..",69=>".",70=>"..-.",71=>"--.",72=>"....",73=>"..",74=>".---",75=>"-.-",76=>".-..",77=>"--",78=>"-.",79=>"---",80=>".--.",81=>"--.-",82=>".-.",83=>"...",84=>"-",85=>"..-",86=>"...-",87=>".--",88=>"-..-",89=>"-.--",90=>"--..",49=>".----",50=>"..---",51=>"...--",52=>"..---",53=>".....",54=>"-....",55=>"--...",56=>"---..",57=>"----.",48=>"-----",32=>" ");while($i++<strlen($a))echo$m[ord($a[$i])];
সমস্ত ইনপুট বড় হাতের অক্ষরে থাকলে এর 462 টি অক্ষর:
<?$a=fgets(STDIN);$m=array(65=>".-",66=>"-...",67=>"-.-.",68=>"-..",69=>".",70=>"..-.",71=>"--.",72=>"....",73=>"..",74=>".---",75=>"-.-",76=>".-..",77=>"--",78=>"-.",79=>"---",80=>".--.",81=>"--.-",82=>".-.",83=>"...",84=>"-",85=>"..-",86=>"...-",87=>".--",88=>"-..-",89=>"-.--",90=>"--..",49=>".----",50=>"..---",51=>"...--",52=>"..---",53=>".....",54=>"-....",55=>"--...",56=>"---..",57=>"----.",48=>"-----",32=>" ");while($i++<strlen($a))echo$m[ord($a[$i])];
<?$a=strtoupper(fgets(STDIN));$m=array(65=>12,2111,2121,211,1,1121,221,1111,11,1222,212,1211,22,21,222,1221,2212,121,111,2,112,1112,122,2112,2122,2211)+array(48=>22222,12222,11222,11122,11222,11111,21111,22111,22211,22221)+array(32=>' ');while($a[$i++])echo strtr($m[ord($a[$i])],12,'.-');
Çvy©58‹i®58-•6V%·,Õo•2B5ôsè}®64›i®64-•4…·]ÑUZ“×\ó$9™¹“ÌLÈÎ%´•3B4ôsè}"012"".- "‡})
বর্ণের নিদর্শনগুলিকে বেস -3 এ রূপান্তর করুন, সংখ্যা প্যাটার্নগুলিকে বেস -২ তে রূপান্তর করুন, পিরিয়ড এবং হাইফেনগুলিতে পেতে শূন্য সূচিকৃত আসকি ট্রান্সলিটেশন ব্যবহার করুন। ছোট হাতের কাজ করে না।
-join($args|% t*y|%{if($_-match'\w'){for($d='ihfbZJKMQY+mazzy+0;?3,>5:.H7<1/9@E42-6B8CG='[$_-48]-42;$d-1){'.-'[$d%2]
$d=$d-shr1}' '}else{$_}})
কম গল্ফ পরীক্ষা স্ক্রিপ্ট:
$f = {
-join(
$args|% toCharArray|%{
if($_-match'\w'){
for($d='ihfbZJKMQY+mazzy+0;?3,>5:.H7<1/9@E42-6B8CG='[$_-48]-42;$d-1){
'.-'[$d%2]
$d=$d-shr1
}
' '
}else{
$_
}
}
)
}
@(
,("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",".- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. ----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----. ")
,("HELLO WORLD", ".... . .-.. .-.. --- .-- --- .-. .-.. -.. ")
,("#$%^&","#$%^&")
) | % {
$s,$expected = $_
$result = &$f $s
"$($result-eq$expected): $result"
}
আউটপুট:
True: .- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. ----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----.
True: .... . .-.. .-.. --- .-- --- .-. .-.. -..
True: #$%^&
দ্রষ্টব্য: আউটপুটটিতে পিছনের স্থান রয়েছে।
+mazzy+
কিছু
{36≥y←⍵⍳⍨⎕A,⎕D:'•-'[0∼⍨⌽(5⍴3)⊤y⊃∊(2⍴256)∘⊤¨⎕AV⍳'ܨ㈍İᄧюᜪࠄᨳ䜏ഁᙂ䴫쩸穼蚠']⋄⍵}
পরীক্ষা:
q←{36≥y←⍵⍳⍨⎕A,⎕D:'•-'[0∼⍨⌽(5⍴3)⊤y⊃∊(2⍴256)∘⊤¨⎕AV⍳'ܨ㈍İᄧюᜪࠄᨳ䜏ഁᙂ䴫쩸穼蚠']⋄⍵}
q¨'0123456789'
----- •---- ••--- •••-- ••••- ••••• -•••• --••• ---•• ----•
q¨"HELLO WORLD"
•••• • •-•• •-•• --- •-- --- •-• •-•• -••
প্রতিটি বর্ণ একটি স্থান থেকে পৃথক, প্রতিটি শব্দ 3 স্পেস থেকে পৃথক করা হবে। টেবিলটি বর্ণানুক্রমিক স্ট্রিং ⎕A,⎕D
এবং 16 বিট অক্ষরের উপর নির্মিত যা 'ܨ㈍İᄧюᜪࠄᨳ䜏ഁᙂ䴫쩸穼蚠'
তারা 8 বিট অক্ষরে বিভক্ত অঙ্কগুলির সাথে বেস 3 তে রূপান্তরিত হয়।
Ažh«•1Ju&àøΘn₆δβαLmSÂZΘ=+BD1
÷ΓùwÒмVšh•… .-ÅвJ#ðδJ‡
•1Ju&àøΘn₆δβαLmSÂZΘ=+BD1
÷ΓùwÒмVšh• push compressed number
… .-ÅвJ# convert to custom base " .-"
ðδJ append a space to each morse code
Ažh« ‡ transliterate
এই উভয় সংস্করণের জন্য, তারা যে কোনও অক্ষরের মধ্যে ফাঁক রাখবে। 0-9 এবং এজে (রূপান্তর সংবেদনশীল) রূপান্তরিত হয়। একটি স্থান 3 এ রূপান্তরিত হয়।
s=>s.split("").map(e=>isNaN(d=parseInt(e.toLowerCase(),36))?e:`_OGCA@PX\\^\r\n `.charCodeAt(d).toString(2).substr(1).split("").map(e=>".-"[e]).join("")).join(" ")
\n
একটি নতুন লাইন অক্ষর ( 0x0a
) দিয়ে প্রতিস্থাপন করুন । এটি SE এর কারণে দু'টি অ-মুদ্রণযোগ্য অক্ষর দেখাচ্ছে না। সম্পাদনা মোডে গিয়ে এটি দেখায়।
এখানে হেক্সসটি রয়েছে:
73 3d 3e 73 2e 73 70 6c 69 74 28 22 22 29 2e 6d 61 70 28 65 3d 3e 69 73 4e 61 4e 28 64 3d 70 61 72 73 65 49 6e 74 28 65 2e 74 6f 4c 6f 77 65 72 43 61 73 65 28 29 2c 33 36 29 29 3f 65 3a 60 5f 4f 47 43 41 40 50 58 5c 5c 5e 05 18 1a 0c 02 12 0e 10 04 17 5c 72 14 07 06 0f 16 1d 0a 08 03 09 11 0b 19 1b 1c 60 2e 63 68 61 72 43 6f 64 65 41 74 28 64 29 2e 74 6f 53 74 72 69 6e 67 28 32 29 2e 73 75 62 73 74 72 28 31 29 2e 73 70 6c 69 74 28 22 22 29 2e 6d 61 70 28 65 3d 3e 22 2e 2d 22 5b 65 5d 29 2e 6a 6f 69 6e 28 22 22 29 29 2e 6a 6f 69 6e 28 22 20 22 29
s=> //declare anonymous function
s.split("") //split into array of characters
.map( //for each character
e=> //declare anonymous function
isNaN( //is the character not in range 0-9a-zA-Z
d=parseInt(e.toLowerCase(),36)
//take it as base 36(digits are 0-9a-z) and assign to d
)?e: //if outside range, return as is
`_OGCA@PX\\^\r\n `
//table of the morse code as binary as code point with leading 1
.charCodeAt(d)//get the corresponding code
.toString(2) //convert to binary, 0=., 1=-, with an extra 1 bit
.substr(1) //remove the extra 1 bit
.split("") //split into each bit
.map( //for each bit
e=> //declare anonymous function
".-" //the corresponding symbol for bits
[e] //get it
)
.join("") //join the bits
)
.join(" ") //join the characters with a space between each character
s=>s.split("").map(e=>isNaN(d=parseInt(e.toLowerCase(),36))?e:[95,79,71,67,65,64,80,88,92,94,5,24,26,12,2,18,14,16,4,23,13,20,7,6,15,22,29,10,8,3,9,17,11,25,27,28][d].toString(2).substr(1).split("").map(e=>".-"[e]).join("")).join(" ")
s=> //declare anonymous function
s.split("") //split into array of characters
.map( //for each character
e=> //declare anonymous function
isNaN( //is the character not in range 0-9a-zA-Z
d=parseInt(e.toLowerCase(),36)
//take it as base 36(digits are 0-9a-z) and assign to d
)?e: //if outside range, return as is
[95,79,71,67,65,64,80,88,92,94,
5,24,26,12, 2,18,14,16, 4,23,
13,20, 7, 6,15,22,29,10, 8, 3,
9,17,11,25,27,28]
//table of the morse code as binary with leading 1
[d] //get the corresponding code
.toString(2) //convert to binary, 0=., 1=-, with an extra 1 bit
.substr(1) //remove the extra 1 bit
.split("") //split into each bit
.map( //for each bit
e=> //declare anonymous function
".-" //the corresponding symbol for bits
[e] //get it
)
.join("") //join the bits
)
.join(" ") //join the characters with a space between each character
আমি বর্ণমালাগুলির একটি স্ট্রিং তৈরি করেছি যাতে স্ট্রিংয়ের মধ্যে তাদের অবস্থানটি তাদের মোর্স কোডের উপস্থাপনা বর্ণনা করে। মূলত আমি বাইনারি ব্যবহার করতে যাচ্ছিলাম, তবে 01
একই রকম হবে 1
। সুতরাং আমি - = 1
এবং সাথে টেরিনারি ব্যবহার করেছি . = 2
। অক্ষরটি এই স্ট্রিংয়ের c
সূচকে 1121
রয়েছে, এর মোর্স কোড উপস্থাপনা --.-
।
q,d,D=" .-"
s=" TE MN AI.OG KD.WR US-.QZ.YC XB- JP L. F VH---.09 8..7-- 6---.1-- 2..3 45".replace(D,d*3).replace(d,q*4)
lambda n:''.join(''.join([0,D,d][i]for i in [s.index(c)//3**i%3 for i in range(5)if s.index(c)//3**i!=0][::-1])+q*3 if c!=q else q*4for c in n.upper())
পরীক্ষার জোতা
print(f("Hi")==".... .. ")
print(f("Hello")==".... . .-.. .-.. --- ")
print(f("Hello World")==".... . .-.. .-.. --- .-- --- .-. .-.. -.. ")
print(f("To be or not to be")=="- --- -... . --- .-. -. --- - - --- -... . ")
print(f("3 14 15")=="...-- .---- ....- .---- ..... ")
হালনাগাদ
[দ্রষ্টব্য: সাদা স্থান সর্বদা পিছনে থাকে তবে সাদা স্থান একটি বিরতি উপস্থাপন করে, তাই আমি অতিথি যে ঠিক আছে ]
for(;$d=ord($c=$argv[1][$i++]);)echo ctype_alnum($c)?strtr(substr(decbin(ord($d>64?".CTRH@ZF\DUGXABEVOJL?K[ISQP"[$d&31]:"]muy{|ld`^"[$c])-48),1),10,".-"):$c;
প্রথম কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়। চিঠির মধ্যে কোন বিরতি নেই। সাথে চালাও -nr
।
ভাঙ্গন
for(;$d=ord($c=$argv[1][$i++]);) # loop through input characters
echo # print ...
ctype_alnum($c) # if char is alphanumeric:
? strtr(
substr(
decbin(
ord($d>64 # 1. map char to char-encoded morse
?".CTRH@ZF\DUGXABEVOJL?K[ISQP"[$d&31]
:"]muy{|ld`^"[$c]
)-60 # 2. subtract 60 from ordinal value
) # 3. decbin: convert to base 2
,1) # 4. substr: skip leading `1`
,10,".-") # 5. strtr: translate binary digits to dash/dot
:$c; # not alphanumeric: no conversion
জাভাস্ক্রিপ্ট, পাইথন 2, সি, রুবি এবং সেডকে মারধর করছে। আমি খুশি.
চতুর্থ পদক্ষেপ: ছোট হাতের অক্ষর ব্যবহার না করে হ্যান্ডেল করতে ম্যাপিংটিকে আন-মার্জ করে strtoupper
।
পূর্বের সংস্করণসমূহ:
ছোট হাতের অক্ষরের জন্য ব্যর্থ; +12 বাইটগুলি ঠিক করতে: এর $argv[1]
সাথে প্রতিস্থাপন করুনstrtoupper($argv[1])
।
সরল স্ট্রিং অনুবাদ, 254 বাইট
<?=strtr($argv[1],["-----",".----","..---","...--","....-",".....","-....","--...","---..","----.",A=>".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]);
সরাসরি এগিয়ে: পুরো স্ট্রিং একবারে অনুবাদ করে, অক্ষরটিকে মোর্স কোডে।
এক্সিকিউট করতে বা এর সাথে প্রতিস্থাপন <?=
করতে echo
এবং সাথে চালাতে ফাইল এ সংরক্ষণ করুন -r
।
মোর্স কোডগুলির দশমিক ব্যাখ্যা, 184 বাইট (-70)
for(;""<$c=$argv[1][$i++];)echo($m=[32,48,56,60,62,63,47,39,35,33,A=>6,23,21,11,3,29,9,31,7,24,10,27,4,5,8,25,18,13,15,2,14,30,12,22,20,19][$c])?strtr(substr(decbin($m),1),10,".-"):$c;
প্রথম গল্ফিং পদক্ষেপ: 1
অগ্রণী শূন্যগুলি সংরক্ষণের জন্য মোর্স কোডগুলি একটি অতিরিক্ত নেতৃত্বের সাথে বাইনারে এনকোড করা হয়েছে । অক্ষরগুলির মধ্য দিয়ে লুপ হয় এবং সেগুলি একে একে অনুবাদ করে। সাথে চালাও -nr
।
দশমিকগুলি অক্ষরে এনকোড করা হয়েছে, 157 বাইট (-27)
for(;""<$c=$argv[1][$i++];)echo ctype_alnum($c)?strtr(substr(decbin(ord("@"<$c?"CTRH@ZF\DUGXABEVOJL?K[ISQP"[ord($c)-65]:"]muy{|ld`^"[$c])-60),1),10,".-"):$c;
দ্বিতীয় গল্ফিং: দশমিক মানটিতে 60 টি যোগ হয়েছে এবং অক্ষরে এনকোড হয়েছে।
একত্রিত ম্যাপিং, 150 বাইট (-7)
for(;""<$c=$argv[1][$i++];)echo ctype_alnum($c)?strtr(substr(decbin(ord("]muy{|ld`^8901234CTRH@ZF\DUGXABEVOJL?K[ISQP"[ord($c)-48])-60),1),10,".-"):$c;
তৃতীয় গল্ফিং: একক স্ট্রিংতে ডিজিট এবং বর্ণের জন্য ম্যাপিং।