স্ট্যান্ডার্ড আউটপুটে মোর্স কোড


13

এই প্রশ্নের হিসাবে মোর্স কোড হিসাবে ইনপুট গ্রহণ জড়িত। (পিরিয়ড) এবং - (বিয়োগ চিহ্ন), ইনপুট পৃথক করার জন্য স্পেস সহ। আপনার কাজটি কোডটিকে স্ট্যান্ডার্ড আউটপুটে রূপান্তর করা। আপনি অনুমান করতে পারেন শুধুমাত্র ইনপুট রয়েছে সেটা চরিত্র প্রতীক আন্তর্জাতিক সাঙ্কেতিক লিখন বর্ণমালা পাওয়া যায়, এখানে পাওয়া গেছে: http://en.wikipedia.org/wiki/Morse_code#Letters.2C_numbers.2C_punctuation

সমস্ত আউটপুটে ছোট হাতের অক্ষর ব্যবহার করা উচিত। একটি দ্বিগুণ স্থান শব্দের স্থান হিসাবে ব্যাখ্যা করা উচিত।

নমুনা ইনপুট:

. -..- .- -- .--. .-.. . .-.-.-  ... --- ...

আউটপুট:

example. sos

দুই সপ্তাহের মধ্যে জয়ী হওয়ার পরে সংক্ষিপ্ততম কোড।


আপনি কেবল বলেছেন 'চরিত্রের প্রতীক' এটাই কি চরিত্র এবং প্রতীক?
সিঙ্কিংপয়েন্ট

@ কিরিলিওম এই লিঙ্কের সমস্ত "প্রতীক" অক্ষর। আপনি স্ট্রিংয়ে যা কিছু রাখতে পারেন তা হ'ল একটি চরিত্র (ভাল, মূলত)। যাইহোক, প্রশ্নের সেই অংশটি মূলত বলছে যে প্রতিটি বিড়াল বৈধ হবে।
জাস্টিন

@ কিরিলিওম হ্যাঁ, প্রতিটি মোর্সের 'চরিত্র', যেমন-- 'এ' এর জন্য এবং। 'ই' জন্য বৈধ। কোনও নন-মোর্স অক্ষর পরিচালনা করার দরকার নেই।

অক্ষরের স্থান এবং শব্দের স্থান সম্পর্কে কী? পূর্বের জন্য একটি স্থান এবং দ্বিতীয়টির জন্য দুটি (বা আরও)?
পল আর

Slighly (UN) সম্পর্কিত: stackoverflow.com/questions/1352587/code-golf-morse-code
javatarz

উত্তর:


8

গণিত 62

গণিত আমাদের প্রতারণা করতে দেয়

f=ToLowerCase@StringDrop[WolframAlpha[". .- "<>#,"Result"],2]&

f@"."
f@". -..- .- -- .--. .-.. . .-.-.-"
f@".... .- ...- .  -.-- --- ..-  -- --- --- . -..  - --- -.. .- -.-- ..--.."

উদাহরণ।

তুমি কি আজ শোধ করছ?

প্রথম দুটি চিহ্ন .এবং .-ছোট কোডগুলি সঠিকভাবে ব্যাখ্যা করার জন্য প্রয়োজনীয়।


এটি লোয়ার কেসে রূপান্তর অনুপস্থিত।
পিটার টেলর

@ পিটারটেলর এটি সহজেই f=ToLowerCase@StringDrop[WolframAlpha[". .- "<>#,"Result"],2]&ছোট আকারের ক্ষেত্রে পরিবর্তন করা যেতে পারে ।
ybeltukov

ওল্ফ্রাম আলফা এপিআই ব্যবহার করার জন্য কি কোনও অ্যাপ্লিকেশন আইডি লাগবে না? যদি তাই হয়, তাহলে কি চরিত্রের গণনায় যুক্ত হওয়া উচিত নয়? তবুও খুব চতুর সমাধান।
বিজন লিন্ডকভিস্ট

@ বিজার্ন লিন্ডকভিস্ট ম্যাথামেটিকায় ঠিক এই আদেশটি মূল্যায়ন করুন , এটি জরিমানা করে।
ybeltukov

23

দ্রাট, আমি গল্ফস্ক্রিপ্টগুলি আসার আগে এখানে পৌঁছানোর আশা করছিলাম :-(

Anyhoo ...

সি: 228 টি অক্ষর:

char n,t,m[9],*c=" etianmsurwdkgohvf l pjbxcyzq  54 3   2& +    16=/   ( 7   8 90    $       ?_    \"  .    @   '  -        ;! )     ,    :";
main(){while(scanf("%s",m)>0){for(t=m[6]=n=0;m[n];n++)t+=t+1+(m[n]&1);putchar(c[t]);}}

আমি ভেবেছিলাম আমি কীভাবে এটি কাজ করে তার একটি ব্যাখ্যা যুক্ত করব।

ইনপুট ডেটা গাছের ডেটা অনুসারে পার্স করা হয় *c, যা নিম্নলিখিত হিসাবে প্রসারিত হতে পারে ( ·শূন্য নোডের প্রতিনিধিত্ব করে ):

                     dot <-- (start) --> dash
                e                               t
        i               a               n               m
    s       u       r       w       d       k       g       o
  h   v   f   ·   l   ·   p   j   b   x   c   y   z   q   ·   ·
 5 4 · 3 · · · 2 & · + · · · · 1 6 = / · · · ( · 7 · · · 8 · 9 0
····$·······?_····"··.····@···'··-········;!·)·····,····:·······

গাছের শীর্ষে থেকে শুরু করে, বিন্দুটির জন্য বাম দিকে এবং ড্যাশটির জন্য ডানদিকে যাওয়ার সময় আপনার নীচের দিকে কাজ করুন। তারপরে ইনপুট স্ট্রিংটি শেষ হওয়ার পরে আপনার যে কোনও চরিত্রের উপস্থিতি হবে আউটপুট করুন (উদাহরণস্বরূপ, যখন একটি সাদা স্থানের অক্ষরের মুখোমুখি হয়)। সুতরাং উদাহরণস্বরূপ, তিনটি বিন্দু এবং একটি ড্যাশ নিয়ে যাবে vমাধ্যমে e, iএবং s। স্পষ্টভাবে বিন্দু (এএসসিআইআই \x2e) এবং ড্যাশগুলি (এএসসিআইআই \x2d) পরীক্ষা করার পরিবর্তে আমাদের কেবলমাত্র শেষ বিট ( m[n]&1) যাচাই করতে হবে যা 0 .এবং 1 এর জন্য -

ছয় সারি ব্যতীত সঙ্কেতাক্ষরে লিখা সবকিছু যথেষ্ট $, যা 7 ডট / ড্যাশ আছে: ...-..-কিন্তু যেহেতু ইনপুট ডেটা বৈধ বলে নিশ্চিত করা হয়, এই সহজে (6 টি অক্ষর ইনপুট ছিন্ন দ্বারা সংশোধন করা যেতে পারে m[6]=0) এবং ব্যাখ্যা ...-..হিসাবে $পরিবর্তে। আমরা গাছের ডেটা থেকে শেষ 7 বাইটগুলিও কেটে ফেলতে পারি, যেহেতু সেগুলি সমস্ত খালি রয়েছে এবং ইনপুটটি বৈধ হলে প্রয়োজন হয় না।


1
6-অক্ষর কোডের শেষ অক্ষরটি ত্যাগ করতে এবং লুকানোর টেবিলটি ছোট করার জন্য দুর্দান্ত কৌশল।
পিটার টেলর

2
আমি আলগোরিদিমের মানের হিসাবে আলোচনার স্বচ্ছতার জন্য যতটা ভোট দিচ্ছি। ভাল কাজ.
মাইকেল স্টারন

আপনি পুরো স্ট্রিংটি cইনড ইনলাইন করতে পারার পরিবর্তে অক্ষর দ্বারা অক্ষর প্রক্রিয়াকরণের মাধ্যমে কয়েকটি অক্ষর শেভ করতে পারেন কিনা তা দেখুন । সম্ভবত আপনি এক সাথে উচ্চতর মানগুলি স্কুইশ করার চেষ্টা করার জন্য মডুলো এবং একটি অফসেট ব্যবহার করতে পারেন; আমার সমাধানে এটিই আমি করি। যাইহোক, দুর্দান্ত কাজ!
ফায়ারফ্লাই

8

গল্ফস্ক্রিপ্ট ( 116 113 97 টি)

এটিতে একটি সন্ধানের ছকে ব্যবহৃত মুদ্রণযোগ্য অক্ষর অন্তর্ভুক্ত রয়েছে, সুতরাং আমি এটিকে xxd আউটপুট হিসাবে দিচ্ছি:

0000000: 6e2d 2720 272f 7b60 7b5c 6261 7365 2035
0000010: 3925 2210 a9cd 238d 57aa 8c17 d25c d31b
0000020: 432d 783e 277a 3823 e146 e833 6423 23ac
0000030: e72a 39d5 021c 4e33 3b30 3138 dc51 2044
0000040: 3aa7 d001 df4b 2032 333f 36ae 51c3 223d
0000050: 7d2b 5b35 2d34 5d2f 2b32 3333 257d 256e
0000060: 2b

এটি সমতুল্য একটি প্রোগ্রামে ডিকোড হয়

n-' '/{`{\base 59%"\x10\xA9\xCD#\x8DW\xAA\x8C\x17\xD2\\\xD3\eC-x>'z8#\xE1F\xE83d##\xAC\xE7*9\xD5\x02\x1CN3;018\xDCQ D:\xA7\xD0\x01\xDFK 23?6\xAEQ\xC3"=}+[5-4]/+233%}%n+

যা মূলত

n-' '/{`{\base 59%"MAGIC STRING"=}+[5-4]/+233%}%n+

এটি সর্বনিম্ন নিখুঁত হ্যাশ ফাংশন উত্পন্ন করার জন্য একটি অনুকূল অ্যালগরিদমের মূল ধারণার ভিত্তিতে একটি (অ-ন্যূনতম) নিখুঁত হ্যাশ ব্যবহার করে; চেক, হাভাস এবং মাজেভস্কি; 1992 । তাদের মূল ধারণাটি হ'ল আপনি দুটি হ্যাশ ফাংশন ব্যবহার করেন f1এবং f2একসাথে একটি সন্ধানের টেবিল ব্যবহার করেন gএবং নিখুঁত হ্যাশ হয় (g[f1(str)] + g[f2(str)]) % m( mআমরা যে স্ট্রিংয়ের পার্থক্য করতে চাই তার সংখ্যাটি কোথায় ); চতুর বিট তারা তৈরির উপায় g। অপরিবর্তিত গ্রাফের নোড হিসাবে মানগুলি f1(str)এবং আগ্রহের f2(str)স্ট্রিংগুলির জন্য সমস্ত বিবেচনা strকরুন এবং f1(str)এবং এর মধ্যে একটি প্রান্ত যুক্ত করুনf2(str)প্রতিটি স্ট্রিং জন্য। তাদের কেবল প্রতিটি প্রান্তটি পৃথক হওয়া নয়, গ্রাফটি অ্যাসাইক্লিক হতে হবে; তারপরে নোডগুলিতে ওজন নির্ধারণের জন্য এটি কেবলমাত্র একটি ডিএফএস (যেমন দেখার টেবিলটি তৈরি করা g) যেমন প্রতিটি প্রান্তে প্রয়োজনীয় যোগফল থাকে।

চেক এট এলোমেলো ফাংশন জেনারেট করে f1এবং f2যা অনুসন্ধানের টেবিলগুলির মাধ্যমে প্রকাশ করা হয়, তবে এটি পরিষ্কারভাবে কোনও ভাল নয়: আমি -10 থেকে 9 এর মধ্যে দুটি স্বতন্ত্র ঘাঁটি সহ সাধারণ বেস রূপান্তরগুলি ব্যবহার করে একটি উপযুক্ত হ্যাশ অনুসন্ধান করেছি। আমি অ্যাসাইক্লিকের প্রয়োজনীয়তাও শিথিল করেছিলাম। আমি 0 থেকে 54 পর্যন্ত মানগুলিতে স্ট্রিংগুলি বরাদ্দ করতে চাইনি, তবে সংশ্লিষ্ট ASCII কোডগুলিতে, তাই (g[f1(str)] + g[f2(str)]) % mআমি (g[f1(str)] + g[f2(str)]) % Nকিছু চেয়েছিলাম তা গ্রহণের চেয়ে N > 'z'। তবে এর ফলে স্বাধীনতা বিভিন্ন চেষ্টা করতে পারে Nএবং gচক্র রয়েছে কিনা তা বিবেচনা না করে তাদের মধ্যে কোনও বৈধ অনুসন্ধান সারণীর অনুমতি দেয় কিনা তা দেখার অনুমতি দেয় । চেক এট আল-এর বিপরীতে আমি নিখুঁত হ্যাশ ফাংশনটির অনুসন্ধান O (n ^ 4) করে না সেদিকে খেয়াল রাখিনা।

-4baseএবং 5baseমোড দ্বারা উত্পাদিত গ্রাফটি 59হ'ল:

কিছু ছোটখাট টুইটের সাথে ডট দ্বারা গ্রাফ রেন্ডার করা

যা সবচেয়ে বড় সংযুক্ত উপাদানটি থেকে মোটামুটি সুন্দর, যার দৈর্ঘ্য তিনটি চক্র রয়েছে consistent আমাদের N=233একটি gসামঞ্জস্যপূর্ণ খুঁজে পাওয়ার আগে আমাদের উপরে যেতে হবে ।


অনুসন্ধান সারণীর জন্য অন্যান্য সম্ভাব্য এনকোডিংগুলি: পার্থক্য এনকোডিং সাহায্য করবে না, কারণ কাঠামো নেই। অনুমান হিসাবে এনকোডিং করে মানগুলির পুনরাবৃত্তি কাজে লাগানো সম্ভব হতে পারে তবে ফাঁকগুলি পৃথকভাবে পরিচালনা করা প্রয়োজন (54 আউটপুট অক্ষর => 30 বাইট এনট্রপি, প্লাস ডিকোডিং; রানগুলি এনকোড করা থাকলে কমপক্ষে 15 বাইট প্রয়োজন একটি সরল বেস রূপান্তর হিসাবে; কেবলমাত্র বর্তমান 92 বাইটের উন্নতি কেবল সম্ভব হবে) বা আমরা 138 টি আইটেম (98 টি বাইটের বেশি এনট্রপি, প্লাস ডিকোডিং) এর অনুমতি দিচ্ছি।
পিটার টেলর

যেহেতু এটি একটি পূর্ব-প্রিক্স কোড নয় আমরা সহজেই একটি কঠোর পরিশ্রমের কাজটি একটি জিলিব বাস্তবায়নের জন্য বন্ধ করতে চেষ্টা করতে পারি না।
পিটার টেলর

4

সি, 169 অক্ষর

আমি এর চেয়ে ভাল হ্যাশ ফাংশনটি খুঁজে পাইনি ..

(আমি আনমিনিফাইড কোডটি পোস্ট করেছিলাম তবে এটি মিনিডিং হিসাবে গণনা করেছি; কেবলমাত্র ভিআইএম-এ করতে হবে :%s/ //g | %j!, তারপরে স্ট্রিংটিতে আক্ষরিক পিছনে স্থানটি রেখে দিন))

c, v = 1;

main() {
  while (c = getchar(), ~c)
    v = c < 33? putchar(
      "& etianmsurwdkgohvf.l.pjbxcyzq..54.3.;!2).+...,16=/:..(.7.?_8.9o\"...$...@...'..-"[v < 64? (v != 40)*v : v % 51 + 33]
    ), 1 : v * 2 + c % 2;
}

টেস্ট রান

( morse.inপৃথক লাইনে কেবল ঘোড়ায় পুরো বর্ণমালা):

% clang morse.c && ./a.out </tmp/morse.in
abcdefghijklmnopqrstuvwxyzO123456789.,?'!/()&:;=+-_"$@
% ./a.out <<<'. -..- .- -- .--. .-.. . .-.-.-  ... --- ...'
example. sos

ব্যাখ্যা

এই এক মোটামুটি সোজা। c < 33একটি হোয়াইটস্পেস / বিভাজনকারী চরিত্র খুঁজে বের করে ( , \n, ফাইলের শেষে, ...)। c % 2একটি বিন্দু বা ড্যাশ কিছুটা অনুবাদ করে। ধারণাটি হ'ল প্রতিটি চরিত্রের জন্য কেবল বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করে (ভেরিয়েবলের দৈর্ঘ্যের সাথে ডিল করার জন্য এটি 1 টির সাথে উপসর্গ করার পরে) (এই ব্যাখ্যাটি v*2 + c%2অংশটি)। তারপরে আমি একটি ১৩ char-চর এলইউটি পেয়েছি, যা আমি ফলাফল মানটি হ্যাশ করে কম্প্যাক্ট করেছি ( v < 64? v : v % 51 + 33, ট্রায়াল্টস- অর -ত্রুটির মাধ্যমে এবং বিতরণটি দেখে এবং একটি বিশাল ব্যবধান সন্ধান করার চেষ্টা করেছি) by দুর্ভাগ্যক্রমে এই হ্যাশ ফাংশনটির একটি একক সংঘর্ষ রয়েছে, এ কারণেই 40 → '&'ম্যাপিংয়ের জন্য আমাকে বিশেষ-কেস করতে হবে ।


4

আর , 145 বাইট

একটি বিন্দুটিকে একটি 2 তে, 1 টিতে একটি ড্যাশ এবং ত্রৈমাসিকের সংখ্যার ব্যাখ্যায়িত করে এবং 89 টি মোড গ্রহণ করে, যা একটি হ্যাশ টেবিলটিতে আমরা ব্যবহার করতে পারি এমন একটি অনন্য নম্বর দেয়। 13 (111 বেস -3) এর উপস্থিতি মানে 1 যুক্ত করা কারণ ASCII 13 টিআইওতে কাজ করে না।

cat(c(letters,0:9,".")[match(strtoi(chartr(".-","12",scan(,"",t=scan(,""))),3)%%89+1,utf8ToInt('DG,)62	5N*EHMAI.%"!4=@'))],sep='')

এটি অনলাইন চেষ্টা করুন!

আর , 236 বাইট (প্রতিদ্বন্দ্বী)

এটি প্রতিযোগিতামূলক হতে চলেছে না , তবে এটি আমাদের আরতে আকর্ষণীয় কিছু প্রদর্শন করতে দেয়: একটি উদ্ধৃত ভাষা কাঠামোর ভিতরে মুর্স কোড ট্রি সংরক্ষণ করুন mএবং ডটস এবং ড্যাশগুলির কোড থেকে খুব সহজেই [[প্রয়োগ করা যেতে পারে যা পুনরাবৃত্তভাবে প্রয়োগ করা যেতে পারে ব্যবহার করে এটিকে পুনরুদ্ধার করুন তালিকা। উদাহরণস্বরূপ m[[c(2,2,3,2)]]বিন্দু, বিন্দু, ড্যাশ, বিন্দু বা "চ" পুনরুদ্ধার করুন।

m=quote(.(e(i(s(h(5,4),v(,3)),u(f,M(,2))),a(r(l,.(.(,.),)),w(p,j(,1)))),t(n(d(b(6),x),k(c,y)),m(g(z(7),q),o(D(8),S(9,0))))))
for(w in scan(,"",t=scan(,"")))
cat(chartr("MDS","-. ","if"(is.symbol(z<-m[[(utf8ToInt(w)==45)+2]]),z,z[[1]])))

এটি অনলাইন চেষ্টা করুন!


1

পাওয়ারশেল, 193 বাইট

$n=1
-join("$args "|% t*y|%{if($_-32){$n=$n*2+($_-ne'.')}else{("  etianmsurwdkgohvf l pjbxcyzq  54 3   2& +~16=/   ( 7   8 90~~~?~ `"  .~@   '  -~~;! )~ ,~:~~~~$"-replace'~','    ')[$n]
$n=1}})

কম গল্ফড টেস্ট স্ক্রিপ্ট:

$f = {

$n=1
-join(
    "$args "|% t*y|%{
        if($_-32){
            $n=$n*2+($_-ne'.')
        }else{
            ("  etianmsurwdkgohvf l pjbxcyzq  54 3   2& +~16=/   ( 7   8 90~~~?~ `"  .~@   '  -~~;! )~ ,~:~~~~$"-replace'~','    ')[$n]
            $n=1
        }
    }
)

}

@(
    ,("example. sos",". -..- .- -- .--. .-.. . .-.-.-  ... --- ...")
    ,("0123456789abcdefghijklmnopqrstuvwxyz","----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----. .- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..")
    ,("hello world", ".... . .-.. .-.. ---  .-- --- .-. .-.. -..")
) | % {
    $expected,$s = $_
    $result = &$f $s
    "$($result-eq$expected): $result"
}

আউটপুট:

True: example. sos
True: 0123456789abcdefghijklmnopqrstuvwxyz
True: hello world

0

জাভাস্ক্রিপ্ট (165 বাইট, কেবল চারটি প্লেন বাস্তবায়ন করে))

n=''.replace(/\./g,1).replace(/-/g,0).split(' ')
l='|te|mnai|ogkdwrus|cöqzycxbjpälüfvh'.split('|')
r=''
for(i in n){r+=l[n[i].length][parseInt(n[i],2)]}
alert(r)

ইনপুটটি বরাদ্দ করা উচিত n, আউটপুট পেতে নিম্নলিখিত কোডটি কার্যকর করুন:

n='. -..- .- -- .--. .-.. .'.replace(/\./g,1).replace(/-/g,0).split(' ')
l='|te|mnai|ogkdwrus|cöqzycxbjpälüfvh'.split('|')
r=''
for(i in n) {r+=l[n[i].length][parseInt(n[i],2)]}
alert(r)

এটি কেবল একটি অসম্পূর্ণ বাস্তবায়ন হিসাবে দেখা দেয় না, তবে এটি কার্যকরও করে না। ফিডল + ক্রোম ত্রুটি দেয় Cannot read property '42' of undefinedএবং আইডওন ত্রুটিও জানায় (যদিও কোনও দরকারী বার্তা ছাড়াই)।
পিটার টেলর

এটি ঠিক করার চেষ্টা করুন :)
টিমটেক

@ পিটারটেলর এটি বর্ণিত হয়েছে যে এটি কেবল চারটি প্লেনকে সমর্থন করে, অর্থাৎ চারটি অক্ষরের দীর্ঘ মুরস কোডগুলি আপাতত, সুতরাং এটি . -..- .- -- .--. .-.. . .-.-.-ইনপুট হিসাবে গ্রহণ করবে না , কারণ শেষ কোডটি 6 টি চর দীর্ঘ। উদাহরণস্বরূপ স্ক্রিপ্টে আমি এটিকে বাদ দিয়ে চলে যাই এবং . -..- .- -- .--. .-..যা সতর্ক করে ( example)।
aulaon

এখানে দ্বিতীয় ব্লক কোডের সাথে একটি মূর্খতা রয়েছে
aulaon
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.