একটি ফর্ম্যাট মোর্স কোড চিটশিট লিখুন


24

চ্যালেঞ্জ:

একটি প্রোগ্রাম লিখুন যা নিম্নলিখিত আউটপুট উত্পাদন করে:

. E   .. I   ... S   .... H
                     ...- V
             ..- U   ..-. F
                     ..--  
      .- A   .-. R   .-.. L
                     .-.-  
             .-- W   .--. P
                     .--- J
- T   -. N   -.. D   -... B
                     -..- X
             -.- K   -.-. C
                     -.-- Y
      -- M   --. G   --.. Z
                     --.- Q
             --- O   ---.  
                     ----  

এটি A থেকে Z পর্যন্ত চিঠিগুলির মোর্স কোডগুলির একটি ফর্ম্যাট করা টেবিল Each প্রতিটি কলামটি তিনটি ফাঁক দিয়ে আলাদা করা হয়।

চারটি অনুপস্থিত স্লট রয়েছে, যা আন্তর্জাতিক চরিত্র সেট দ্বারা ব্যবহৃত হয়। আপনার প্রোগ্রাম অবশ্যই সেখানে একটি স্থান লিখতে হবে।

আউটপুটটিতে অবশ্যই ASCII স্পেস, বিন্দু, ড্যাশ, বড় হাতের অক্ষর এবং নিউলাইনগুলি (কেবল এলএফ বা সিআরএলএফ) থাকতে হবে।

আপনার প্রোগ্রামটি কোনও ইনপুট গ্রহণ করে না।

নিম্নলিখিতটি একটি নমুনা পাইথন প্রোগ্রাম যা পছন্দসই আউটপুট উত্পাদন করে:

b = "."
out = []
last = 0
ch = "EISHVUF ARL WPJTNDBXKCYMGZQO  "
cx = 0
while b:
    if last >= len(b):
        print("   ".join(out))
        out = ["   ", "    ", "     ", "      "][0:len(b) - 1]
    out.append(b + " " + ch[cx])
    cx += 1
    last = len(b)
    if len(b) < 4:
        b += "."
    elif b[-1] == ".":
        b = b[0:-1] + "-"
    else:
        i = len(b) - 1
        while b[i] == "-":
            i -= 1
            if i < 0:
                break
        if i < 0:
            break
        b = b[0:i] + "-"
print("   ".join(out))

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


1
প্রতিটি লাইন 3 প্রিপেন্ডিং স্পেস করতে পারে?
ডিজাইমা

1
স্ট্যান্ডার্ড লুফোলগুলি কঠোর কোডিং সমাধানের অনুমতি দেয় না। আমাদের হার্ড কোডের কত টেবিল রয়েছে?
ব্রুনার

@ ব্রুনার টেবিলটি বিবেচনা করে প্রায় 450 বাইট, আমি সন্দেহ করি যে হার্ড কোডিংই সর্বোত্তম সমাধান solution
কোডিংটিই

@ কোয়েস এখানে অবশ্যই সংক্ষিপ্ততম সংস্করণ নয়, তবে জোয়ার্গ হুয়েলসারম্যান তার উজ্জ্বল পিএইচপি উত্তরগুলিতে এটি 208 বাইটে নামিয়ে নিয়েছে।
ব্রুনার

1
আমাদের কী পিছনে স্থান দেওয়ার অনুমতি রয়েছে?
অ্যাডাম

উত্তর:


5

জেলি , 85 বাইট

ØQj⁶“_ȦeƤbṅỌU@⁼Cq’œ?;⁶$⁺ṁ®L€€¤
4R2ṗ©ị⁾.-;€€⁶ż"¢;€€⁶$⁺W€€j"731Dẋ@⁶¤ZµKFṚ;⁶ẋ³¤ḣ29ṫ3Ṛµ€Y

প্রতারণা শীট মুদ্রণ একটি সম্পূর্ণ প্রোগ্রাম।

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

কিভাবে?

বিঃদ্রঃ: আমি মনে করি গ্রিড পরমাণুর সাহায্যে সঠিকভাবে ফর্ম্যাট করে এমন একটি তালিকা তৈরি করে এটিকে ছাঁটাই করার কোনও উপায় থাকতে পারে Gতবে আমি কীভাবে এটি বেশ কার্যকর করতে পারি না।

ØQj⁶“_ȦeƤbṅỌU@⁼Cq’œ?;⁶$⁺ṁ®L€€¤ - Link 1: get "letters" lists: no arguments
ØQ                             - Qwerty yield = ["QWERTYUIOP","ASDFGHJKL","ZXCVBNM"]
  j⁶                           - join with spaces = "QWERTYUIOP ASDFGHJKL ZXCVBNM"
    “_ȦeƤbṅỌU@⁼Cq’             - base 250 number = 23070726812742121430711954614
                  œ?           - lexicographical permutation at index = "ETIANMSURWDKGOHVF L PJBXCYZQ"
                       ⁺       - do this twice:
                      $        -   last two links as a monad
                    ;⁶         -     concatenate a space              = "ETIANMSURWDKGOHVF L PJBXCYZQ  "
                             ¤ - nilad followed by link(s) as a nilad:
                         ®     -   recall from registry (4R2ṗ from the Main link)
                          L€€  -   length for €ach for €ach = [[1,1],[2,2,2,2],[3,3,3,3,3,3,3,3],[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]]
                        ṁ      - mould like = ["ET","IANM","SURWDKGO","HVF L PJBXCYZQ  "]

4R2ṗ©ị⁾.-;€€⁶ż"¢;€€⁶$⁺W€€j"731Dẋ@⁶¤ZµKFṚ;⁶ẋ³¤ḣ29ṫ3Ṛµ€Y - Main link: no arguments
4R                                                     - range(4) = [1,2,3,4]
  2ṗ                                                   - Cartesian power with 2 = [[[1],[2]],[[1,1],[1,2],[2,1],[2,2]],...,[...,[2,2,2,2]]]
    ©                                                  - copy to register and yield
      ⁾.-                                              - literal ['.','-']
     ị                                                 - index into (makes all the codes, in four lists by length like reading the output top-bottom, left-right)
         ;€€⁶                                          - concatenate a space to each code
               ¢                                       - call last link (1) as a nilad (get the letters reordered as required)
             ż"                                        - zip left and right with zip dyad
                     ⁺                                 - do this twice:
                    $                                  -   last two links as a monad:
                ;€€⁶                                   -     concatenate a space to each code, letter pair
                      W€€                              - wrap each code, letter pair in a list
                                  ¤                    - nilad follwed by link(s) as a nilad:
                           731                         -   literal 731
                              D                        -   to decimal list = [7,3,1]
                               ẋ@⁶                     -   repeat a space = ["       ","   "," "]
                         j"                            - zip with dyad join
                                   Z                   - transpose
                                    µ              µ€  - for each:
                                     K                 -   join with spaces
                                      F                -   flatten
                                       Ṛ               -   reverse
                                            ¤          -   nilad followed by link(s) as a nilad:
                                         ⁶ẋ³           -     space repeated 100 times
                                        ;              -   concatenate
                                             ḣ29       -   head to 29 (make all "lines" the same length)
                                                ṫ3     -   tail from 3 (trim off two spaces from each line)
                                                  Ṛ    -   reverse
                                                     Y - join with newlines
                                                       - implicit print

7

পাইথন 3.6, 201 197 193 187 বাইট

for i in range(16):print('   '.join(i%k and' '*(2+j)or f'{i//k:0{j}b}'.replace(*'0.').replace(*'1-')+' '+'ETIANMSURWDKGOHVF L PJBXCYZQ  '[2**j-2+i//k]for j,k in zip((1,2,3,4),(8,4,2,1))))

কিছু ফর্ম্যাটিং, আনপ্যাকিং এবং A000918 যাদু ব্যবহার করে।


উপায় দ্বারা, f'{i//k:0{j}b}'.replace(*'0.').replace(*'1-')সমান দৈর্ঘ্য হল''.join('.-'[int(x)]for x in f'{i//k:0{j}b}')
ঊরীয়েল

5

রেটিনা , 125 বাইট

^
. EISHVUF_ARL_WPJ¶- TNDBXKCYMGZQO__
+m`^((.*?)([-.]+) )(\w)((\w)+?)(((?<-6>)\w)+)$
$2$3 $4   $3. $5¶$.1$*     $3- $7
T`\_`p

এটি অনলাইন চেষ্টা করুন! 121 বাইট হওয়া উচিত তবে আমি শ্বেত স্পেসের শুরু এবং শেষের সাথে মোকাবিলা করতে খুব অলস ছিলাম। ব্যাখ্যা:

[blank line]
. EISHVUF_ARL_WPJ¶- TNDBXKCYMGZQO__

যে কোডগুলির কোডটি শুরু হয় .এবং -যথাক্রমে প্রিললোড হয়। (তাত্ত্বিকভাবে প্রিলোডিং এড়ানো এড়ানো সম্ভব .-তবে এটি বাইট সংরক্ষণ করে।) _স্পেসগুলির পরিবর্তে সেগুলি ব্যবহার করা হয় কারণ এগুলি অক্ষর হিসাবে বিবেচিত হয় যা তাদের নীচের সাথে মিলতে সহজ করে তোলে।

+m`^((.*?)([-.]+) )(\w)((\w)+?)(((?<-6>)\w)+)$
$2$3 $4   $3. $5¶$.1$*     $3- $7

এখানে আমরা প্রতিটি লাইনকে পাঁচটি টুকরো করে বিভক্ত করেছি:

  • উপসর্গের জন্য চিঠিগুলি, যদি থাকে তবে
  • বর্তমান মোর্স কোড
  • বর্তমান চিঠি
  • বাকি অক্ষরের প্রথম অর্ধেক (তাদের পরবর্তী অক্ষরটি হ'ল .)
  • বাকি অক্ষরের দ্বিতীয়ার্ধ (তাদের পরবর্তী চরিত্রটি হ'ল -)

টুকরোগুলি দুটি লাইনে পুনরায় সংযুক্ত করা হয়:

  • উপসর্গের জন্য বর্ণগুলি, বর্তমান মোর্স কোড, বর্তমান পত্র, একটি সহ মোর্স কোড . প্রত্যয় , বাকী অক্ষরের প্রথম অর্ধ
  • প্রথম তিনটি টুকরো প্রতিস্থাপনকারী -স্পেসস, একটি প্রত্যয় সহ মোর্স কোড , বাকী অক্ষরের দ্বিতীয়ার্ধ

নতুন রেখাগুলি বিদ্যমান লাইন হিসাবে একই বিন্যাস অনুসরণ করে, কেবল একটি অতিরিক্ত মোর্স উপসর্গ এবং প্রক্রিয়াতে থাকা আরও অর্ধেক অক্ষর রেখে। প্রতিটি লাইনে একটি করে অক্ষর না হওয়া পর্যন্ত এটি পুনরাবৃত্তি হয়।

_
  [single space]

_গুলি তারপর স্পেস ফিরে পরিবর্তিত হয়।


3

জাভাস্ক্রিপ্ট (ES6), 154 147 145 বাইট

f=(n=r='',d=i=k=0)=>(r+=n&&' '.repeat([d++&&3,21,13,6][i-(i=d-k)])+n+' '+'EISHVUF ARL WPJTNDBXKCYMGZQO  '[k++],d<4)?f(n+'.',d)&&f(n+'-',d):r+=`
`

o.innerHTML = f()
<pre id=o>


ওঃ ডাং! আমি এটাকে মিস করেছি ... অন্যথায় বিরক্ত করতাম না! ভাল সম্পন্ন :-)
টুপি

2

পিএইচপি, 208 বাইট

<?=gzinflate(base64_decode("dZDJEQMhDAT/RNEJaHLwfd+38w/EWrRlu6gVnwZpGhWIGSCxqhCXoFgWhpa3jHtpasYtKOaZZwZ9z/OjCnEOim3imX7et2Y8guKYeR5aF+PqB4/tK8Q0KMbDnnWPeZamZmyCYpJ5Pu/V93y7qxCLoHgnXnf5qZnn/iGo9u1/Gf+XDw=="));

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

পিএইচপি, 229 বাইট

<?=strtr("3E0.3I053S0.53H12 2.54V1254U05-3F12 25-4 1.4A0.-3R0.-.3L12 2.-.4 12.-4W0.63P12 2.64J
4T0-3N0-.3D0-53B12 2-54X12-.4K0-.-3C12 2-.-4Y1-4M063G06.3Z12 26.4Q1264O0-63 12 2-64 ",[$a="   ","
$a$a","$a $a",". ","- ","..","--"]);

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


2

পার্ল 5, 158 156 বাইট

map{$a=sprintf'%04b',$_;map{$a=~/.{$_}/;print(-$'?' 'x$_:$&=~y/01/.-/r,' ',(' EISHVUF ARL WPJTNDBXKCYMGZQO  '=~/./g)[!-$'&&++$i],$_-4?'   ':"\n")}1..4}0..15

2

পিএইচপি, 184 183 181 বাইট

for(;$y<16;$y++,print str_pad(ltrim("$r
"),28," ",0))for($r="",$c="03231323"[$y&7];$c++<4;)$r.=strtr(sprintf("   %0${c}b ",$y>>4-$c),10,"-.")."EISHVUF ARL WPJTNDBXKCYMGZQO  "[$i++];

এটি দিয়ে চালান -nrবা অনলাইনে চেষ্টা করুন

ভাঙ্গন

for(;$y<16;$y++,                                    # loop through rows
    print str_pad(ltrim("$r\n"),28," ",0)               # 4. pad to 28 chars and print
    )
    for($r="",                                          # 1. result=empty
        $c="03231323"[$y&7];                            # 2. $c=bits in 1st code -1
        $c++<4;)                                        # 3. loop through columns
        $r.=strtr(sprintf("   %0${c}b ",$y>>4-$c),10,"-.")  # append morse code
            ."EISHVUF ARL WPJTNDBXKCYMGZQO  "[$i++];            # append letter

নেতৃস্থানীয় স্পেস সহ -7 বাইট : এর ltrim("$r\n")সাথে "$r\n"এবং 28সাথে প্রতিস্থাপন করুন 31

পিছনে স্থান সহ 171 (= -10) বাইট :

for(;$y<16;$y++)for(print str_pad("
",[0,7,14,22][$c="03231323"[$y&7]]);$c++<4;)echo strtr(sprintf("%0${c}b %s   ",$y>>4-$c,"EISHVUF ARL WPJTNDBXKCYMGZQO"[$i++]),10,"-.");

ভাঙ্গন এটি অনলাইন চেষ্টা করুন

for(;$y<16;$y++)                                    # loop through rows
    for(
        print str_pad("\n",[0,7,14,22][             # 2. print left padding
            $c="03231323"[$y&7]                     # 1. $c=bits in 1st code -1
        ]); 
        $c++<4;)                                        # 3. loop through columns
        echo                                                # print ...
            strtr(sprintf("%0${c}b %s   ",                  # 3. delimiting spaces
            $y>>4-$c,                                       # 1. morse code
            "EISHVUF ARL WPJTNDBXKCYMGZQO"[$i++]            # 2. letter
        ),10,"-.");

1
সত্যিকারের লাইন এবার ভাঙ্গছে না?
ক্রিস্টোফ

1
for(;$y<16;$y++,print str_pad(ltrim("$r\n"),28," ",0))for($r="",$c="03231323"[$y&7];$c++<4;)$r.=strtr(sprintf(" %0${c}b ",$y>>4-$c),10,"-.")."EISHVUF ARL WPJTNDBXKCYMGZQO "[$i++];2 বাইট সংরক্ষণ করা উচিত
ক্রিস্টফ

1
দেখে মনে হচ্ছে আপনি খুব বেশি জায়গা ফেলেছেন: শেষ লাইনে ----বাকী অংশের সাথে মেলে না। "EISHVUF ARL WPJTNDBXKCYMGZQO "শেষ পর্যন্ত 2 স্পেস থাকা উচিত।
ক্রিস্টোফ

2

এপিএল (ডায়ালগ) , 92 বাইট

⎕IO←0অনেকগুলি সিস্টেমে ডিফল্ট হওয়া দরকার ।

0 3↓¯1⌽⍕{' ',(161↑⍨16÷≢⍵)⍀'.-'[⍉2⊥⍣¯1⍳≢⍵],' ',⍪⍵}¨'ET' 'IANM' 'SURWDKGO' 'HVF L PJBXCYZQ  '

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

{}¨'... ' প্রতিটি স্ট্রিংয়ের জন্য নিম্নলিখিত বেনামে ফাংশন প্রয়োগ করুন:

⍪⍵ যুক্তিটিকে একটি কলামে পরিণত করুন

' ', একটি জায়গা (প্রতিটি সারিতে) প্রেন্ডেন্ড করুন

'.-'[], স্ট্রিংটি এর সাথে সূচীকরণের পরে প্রতিস্থাপন করুন:

  ≢⍵ তর্কের দৈর্ঘ্য

   এর সূচকগুলি (0, 1, 2,…, দৈর্ঘ্য -1)

  2⊥⍣¯1 অ্যান্টি-বেস -২ (যতগুলি বিট প্রয়োজন হিসাবে ব্যবহার করে)

   স্থানান্তর (প্রতিটি কলামের একটি প্রতিনিধি থেকে প্রতিটি সারিতে একটি করে)

(… এর মাধ্যমে )⍀ প্রসারিত করুন (শূন্যগুলির মধ্যে শূন্য সারিগুলি উল্লিখিত হিসাবে সন্নিবেশ করুন):

  ≢⍵ তর্কের দৈর্ঘ্য

  16÷ যে দ্বারা ষোল ভাগ

  1↑⍨ (ওভার) একের কাছ থেকে নেওয়া (1- n জিরো অনুসরণ করে একটির তালিকা তৈরি করে )

  16⍴ সেই প্যাটার্নটিকে পুনরায় ব্যবহার করুন যতক্ষণ না এতে ষোলটি উপাদান থাকে

' ', একটি স্থান প্রস্তুত

 ফর্ম্যাট (একক টেবিলের টেবিলের তালিকা, প্রতিটি পাশের একটি জায়গা দিয়ে প্রতিটি প্যাডিং)

¯1⌽ এক ধাপে ডানদিকে ঘোরান (এইভাবে পেছনের স্থানটি সামনে নিয়ে যাওয়া)

0 3↓ শূন্য সারি এবং তিনটি কলাম ড্রপ করুন (এভাবে তিনটি শীর্ষস্থানীয় স্থান মুছে ফেলা হবে)


আরে, 16÷⍨আপনার কোডে কোথায় উপস্থিত হবে‽
জাকারি

পছন্দ করেছেন খুব ভাল লাগল স্যার।
অ্যাডম

1

এসওজিএল , 106 105 102 বাইট

¹θΞk“r²{r³³a:IA2─l4;- 0*;+Ζ0.ŗΖ1-ŗø4∫BƧ| ⁵±+⁷b<?⁄@*}+;j;@3*+}±kkk≥x}¹±č┐"7ŗ◄∑f^│N≥Χ±⅜g,ιƨΛ.⌡׀¹*ΛβΧκ‘čŗ

যদি প্রিপেন্ডিং স্পেসের অনুমতি দেওয়া হয়, তবে 102 99 বাইট

¹θΞk“r²{r³³a:IA2─l4;- 0*;+Ζ0.ŗΖ1-ŗø4∫BƧ| ⁵±+⁷b<?⁄@*}+;j;@3*+}±≥x}¹±č┐"7ŗ◄∑f^│N≥Χ±⅜g,ιƨΛ.⌡׀¹*ΛβΧκ‘čŗ

141 বাইট, সংক্ষেপণ

Πa≤χ≥∫RωθΩ≡⅛QΨ═Λ9⁶Ul¹&╔²‘č"‼¼⁸Ƨ,9█ω½└╗«ωΤC¡ιΝ/RL⌡⁄1↑οπ∞b∑#⁵ø⁶‘č"⁵ ?∙«Σf⁾ƨ╤P1φ‛╤Β«╚Δ≡ΟNa1\÷╬5ŗķ§⁷D◄tFhžZ@š⁾¡M<╔↓u┌⁽7¡?v¦#DΘø⌡ ⁹x≡ō¦;⁵W-S¬⁴‘' n

কেবলমাত্র সংক্ষেপণের সাথে এসওজিএল কতটা ভাল করতে পারে তা দেখতে চেয়েছিলেন (ভাল এটি কেবল সংক্ষেপণের চেয়ে আরও বেশি পেয়েছে, তবে এটি 97% সংকীর্ণ স্ট্রিং)


1

জাভাস্ক্রিপ্ট (205 বাইট)

for(A='EISHVUF ARL WPJTNDBXKCYMGZQO     ',q=0,i=15;30>i++;){for(x=i.toString(2).replace(/(.)/g,a=>1>a?'.':'-'),o='',j=4;j--;)o+=(i%2**j?A.slice(-6+j):x.slice(1,5-j)+' '+A.charAt(q++))+'   ';console.log(o)}

for(A='EISHVUF ARL WPJTNDBXKCYMGZQO     ',q=0,i=15;30>i++;){for(x=i.toString(2).replace(/(.)/g,a=>1>a?'.':'-'),o='',j=4;j--;)o+=(i%2**j?A.slice(-6+j):x.slice(1,5-j)+' '+A.charAt(q++))+'   ';console.log(o)}


1

রুবি, 144 143 141 বাইট

k=0
16.times{|i|4.times{|j|$><<("%0#{j+1}b 9   "%(i>>3-j)).tr('109',(i+8&-i-8)>>3-j>0?'-.'+'  OQZGMYCKXBDNTJPW LRA FUVHSIE'[k-=1]:" ")}
puts}

Ungolfed

k=0                                                     #setup a counter for the letters
16.times{|i|                                            #16 rows    
  4.times{|j|                                           #4 columns
    $><<("%0#{j+1}b 9   "%(i>>3-j)).                    #send to stdout a binary number of j+1 digits, representing i>>3-j, followed by a 9, substituted as follows.
      tr('109',(i+8&-i-8)>>3-j>0?                       #(i&-i) clears all but the least significant 1's bit of i. the 8's ensure a positive result even if i=0.
      '-.'+'  OQZGMYCKXBDNTJPW LRA FUVHSIE'[k-=1]:      #if the expression righshifted appropriately is positive, substitute 1and0 for -and. Substitute 9 for a letter and update counter.
      " ")}                                             #else substiture 1,0 and 9 for spaces.
puts}                                                   #carriage return after each row.

1

পাইথ , 106 বাইট

DhNR.n.e+]++.[\.sllN::.Bk\0\.\1\-\ b*]*\ +2sllNt/16lNNjmj*3\ d.t[h"ET"h"IANM"h"SURWDKGO"h"HVF L PJBXCYZQ  

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

কয়েকটি কথায়, আমি এখানে যা করছি তা হ'ল কলাম দ্বারা টেবিল কলাম তৈরি করা এবং তারপরে ছকটি ছাপার আগে টেবিলটি স্থানান্তরিত করা। আমরা লক্ষ্য করেছি যে একটি কলামে, কলামের শেষ অক্ষরের সূচক থেকে শূন্য থেকে গণনা করার সময় অক্ষরগুলির জন্য মোর্স কোডগুলি বাইনারি স্ট্রিং হিসাবে প্রতিস্থাপন .করা যেতে পারে ( দ্বারা প্রতিস্থাপন 0এবং -দ্বারা প্রতিস্থাপিত 1)।

অ্যালগরিদম এমন কোনও ফাংশনটির উপর নির্ভর করে যেখান থেকে আমি নীচে রান করার জন্য একটি উদাহরণ দিই (দ্বিতীয় কলামের জন্য):

1. Takes "IANM" as input
2. Generates the binary representations of zero up to len("IANM"): ["0", "1", "10", "11"]
3. Replace with dots and hyphens: [".", "-", "-.", "--"]
4. Pad with dots up to floor(log2(len("IANM"))): ["..", ".-", "-.", "--"]
5. Add the corresponding letters: [".. I", ".- A", "-. N", "-- M"]
6. After each element, insert a list of 16 / len("IANM") - 1 (= 3) strings containing only spaces of length floor(log2(len("IANM"))) + 2 (= 4):
    [".. I", ["    ", "    ", "    "], ".- A", ["    ", "    ", "    "], "-. N", ["    ", "    ", "    "], "-- M", ["    ", "    ", "    "]]
7. Flatten that list:
    [".. I", "    ", "    ", "    ", ".- A", "    ", "    ", "    ", "-. N", "    ", "    ", "    ", "-- M", "    ", "    ", "    "]
8. That's it, we have our second column!

কোড ব্যাখ্যা

আমি কোড দুটি কাট। প্রথম অংশটি উপরে বর্ণিত ফাংশন, দ্বিতীয় অংশটি হ'ল আমি কীভাবে ফাংশনটি ব্যবহার করব:

DhNR.n.e+]++.[\.sllN::.Bk\0\.\1\-\ b*]*\ +2sllNt/16lNN

DhNR                                                      # Define a function h taking N returning the rest of the code. N will be a string
      .e                                             N    # For each character b in N, let k be its index
                      .Bk                                 # Convert k to binary
                     :   \0\.                             # Replace zeros with dots (0 -> .)
                    :        \1\-                         # Replace ones with hyphens (1 -> -)
            .[\.sllN                                      # Pad to the left with dots up to floor(log2(len(N))) which is the num of bits required to represent len(N) in binary
          ++                     \ b                      # Append a space and b
         ]                                                # Make a list containing only this string. At this point we have something like [". E"] or [".. I"] or ...
        +                           *]*\ +2sllNt/16lN     # (1) Append as many strings of spaces as there are newlines separating each element vertically in the table
    .n                                                    # At this point the for each is ended. Flatten the resulting list and return it

(1) : মোর্সের টেবিলে, প্রথম কলামে, প্রতিটি পংক্তির পরে একটি অক্ষর ("ই" এবং "টি") থাকবে সাতটি রেখা। দ্বিতীয় কলামে এটি তিনটি লাইন। তারপরে একটি (তৃতীয় কলাম), তারপরে শূন্য (শেষ কলাম)। যে 16 / n - 1যেখানে nকলামে চিঠি সংখ্যা (যা হল Nউপরে কোডে)। লাইনের কোডটি কী করে (1) :

*]*\ +2sllNt/16lN

       sllN          # Computes the num of bits required to represent len(N) in binary
     +2              # To that, add two. We now have the length of a element of the current column
  *\                 # Make a string of spaces of that length (note the trailing space)
           t/16lN    # Computes 16 / len(N) - 1
*]                   # Make a list of that length with the string of spaces (something like ["    ", "    ", ...])

ঠিক আছে, এখন আমাদের একটি দুর্দান্ত সহায়ক ফাংশন রয়েছে hযা মূলত অক্ষরের ক্রম থেকে একটি সারণীর কলাম তৈরি করে। আসুন এটি ব্যবহার করুন (নীচের কোডে দুটি পেছনের স্থান নোট করুন):

jmj*3\ d.t[h"ET"h"IANM"h"SURWDKGO"h"HVF L PJBXCYZQ  

           h"ET"                                        # Generate the first column
                h"IANM"                                 # Generate the second column
                       h"SURWDKGO"                      # Generate the third column
                                  h"HVF L PJBXCYZQ      # Generate the last column (note the two trailing spaces)
          [                                             # Make a list out of those columns
        .t                                              # Transpose, because we can print line by line, but not column by column
 mj*3\ d                                                # For each line, join the elements in that line on "   " (that is, concatenate the elements of the lines but insert "   " between each one)
j                                                       # Join all lines on newline

কোডটি এখনও ছোট করা যেতে পারে; সম্ভবত আমি এটি পরে ফিরে আসতে হবে।


1

সি, 199 195 বাইট

#define P putchar
m;p(i,v){printf("%*s",i&1|!v?v*(v+11)/2:3,"");for(m=1<<v;m;m/=2)P(45+!(i&m));P(32);P("  ETIANMSURWDKGOHVF L PJBXCYZQ  "[i]);v<3?p(2*i,v+1):P(10);++i&1&&p(i,v);}main(){p(2,0);}

কলিরুতে লাইভ (সতর্কতা বার্তা এড়াতে # অন্তর্ভুক্ত সহ)

আপডেট : এর "ঘোষণা" সরিয়ে চারটি অক্ষর সংরক্ষণ করা হয়েছেm @ জ্যাচারিটির পরামর্শ অনুসারে ফাংশনের বাইরের সংরক্ষণ করা হয়েছে

ব্যবহার কি একটি প্রমিত কৌশল মনে করা হয়: একটি অ্যারের এনকোডেড বাইনারি গাছ অক্ষর রাখব যাতে উপাদান সন্তান iহয় 2*iএবং2*i+1 । এই গাছটি মূলত 1 এর পরিবর্তে 2 এ মূলত যেহেতু পাটিগণিতটি সামান্য খাটো করে বেরিয়েছে, আমি মনে করি। বাকি সব গল্ফ হয়।

Ungolfed:

// Golfed version omits the include
#include <stdio.h>
// Golfed version uses the string rather than a variable.
char* tree = "  ETIANMSURWDKGOHVF L PJBXCYZQ  ";
/* i is the index into tree; v is the number of bits to print (-1) */
void p(int i, int v) {
  /* Golfed version omits all types, so the return type is int.
   * Nothing is returned, but on most architectures that still works although
   * it's UB.
   */
  printf("%*s", i&1 || !v ? v*(v+11)/2 : 3, "");
  /* v*(v+11)/2 is v*(v+1)/2 + 3*v, which is the number of spaces before the odd
   * element at level v. For even elements, we just print the three spaces which
   * separate adjacent elements. (If v is zero, we're at the margin so we
   * suppress the three spaces; with v == 0, the indent will be 0, too.
   *
   * Golfed version uses | instead of || since it makes no semantic difference.
   */

  /* Iterate over the useful bits at this level */
  for (int m=1<<v; m; m/=2) {
    /* Ascii '-' is 45 and '.' is 46, so we invert the tested bit to create the
     * correct ascii code.
     */
    putchar('-' + !(i&m));
  }
  /* Output the character */
  putchar(' ');
  putchar(tree[i]);
  /* Either recurse to finish the line or print a newline */
  if (v<3)
    p(2*i,v+1);
  else
    putchar('\n');
  /* For nodes which have a sibling, recurse to print the sibling */
  if (!(i&1))
    p(i+1, v);
}

int main(void) {
  p(2,0);
}

আপনি কি ফাংশনটির বাইরে int mথাকতে পারেন m;?
জাকারি


@ জাচারিটি: আমি মনে করি এটি কার্যকর হবে তবে এটি একটি চরিত্রের দীর্ঘতর (# ডিফাইনটিতে খোলা বন্ধনী) তাই সামান্য বক্তব্য বলে মনে হচ্ছে।
ধনী

আমি সেই সংস্করণটির সাথে 194 বাইট গণনা করেছি, আমি কি কিছু মিস করছি?
জাকারি

1

বুবলগাম , 133 বাইট

000000: e0 01 be 00   7d 5d 00 17   08 05 23 e4   96 22 00 5d │ à.¾.}]....#ä.".]
000010: e5 e9 94 d3   78 24 16 ec   c1 c4 ad d8   6e 4d 41 e8 │ åé.Óx$.ìÁÄ.ØnMAè
000020: a3 a1 82 e6   f4 88 d9 85   6f ae 6b 93   aa 44 c8 e3 │ £¡.æô.Ù.o®k.ªDÈã
000030: 29 6f df 65   aa 4a f8 06   f5 63 1a 73   a7 e4 4d 19 │ )oßeªJø.õc.s§äM.
000040: 03 2c 87 59   7b df 27 41   4b b6 12 dd   7c e5 78 27 │ .,.Y{ß'AK¶.Ý|åx'
000050: 9c 9f 99 db   f6 8e 42 fd   43 68 48 46   37 da d7 21 │ ...Ûö.BýChHF7Ú×!
000060: a9 ca ea be   f4 57 e0 da   c1 16 97 ef   7a 0c e9 3c │ ©Êê¾ôWàÚÁ..ïz.é<
000070: 8e c2 b6 22   ca e4 e5 53   57 f0 f4 fb   a4 fb c0 a7 │ .¶"ÊäåSWðôû¤ûÀ§
000080: ec cd 6e 00   00                                      │ ìÍn..

একটি এলজেডএমএ স্ট্রিম হিসাবে সংকুচিত।


0

সি, 291 বাইট

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

char*i,*t=".aEc..aIc...aSc....aH/u...-aV/m..-aUc..-.aF/u..--/f.-aAc.-.aRc.-..aL/u.-.-/m.--aWc.--.aP/u.---aJ/-aTc-.aNc-..aDc-...aB/u-..-aX/m-.-aKc-.-.aC/u-.--aY/f--aMc--.aGc--..aZ/u--.-aQ/m---aOc---./u----";
s(n){while(n--)putchar(32);}f(){for(i=t;*i;i++)*i<97?putchar(*i-'/'?*i:10):s(*i-96);}

কিভাবে এটা কাজ করে

প্রথমে আমি সিটিতে স্ট্রিংটি পার্স করলাম, ফাঁকা স্থানগুলি 26 এর চেয়ে কম হয় তাই আমি এই ছোট প্রোগ্রামেরa, b, .. z সাথে ছোট ছোট অক্ষরে তাদের এনকোড করেছি

for(char*i=t; *i; i++)
{
    if(*i == ' ') c++;
    else c = 0;

    if(i[1] != ' ' && c > 0) putchar('a'+c-1);
    else if(*i =='\n') putchar('/');
    else if(*i != ' ') putchar(*i);
}

তারপরে আমি সেই এনকোডিংয়ের জন্য একটি পার্সার লিখেছিলাম, যেখানে /একটি নতুন লাইন আছে এবং একটি ছোট-মামলার চিঠি t[i] - 'a'ফাঁকা স্থানকে প্রতিনিধিত্ব করে

int s(int n)
{
    while(n--) putchar(32);
}

f()
{
    for(char*i=t; *i; i++)
        if(*i < 'a')
            if(*i == '/') putchar('\n');
            else putchar(*i);
        else s(*i-'a'+1);
}


0

বাশ (ইউটিলিটি সহ), 254 বাইট

tail -n+2 $0|uudecode|bzip2 -d;exit
begin 644 -
M0EIH.3%!6293631+'LX``&UV`%`P(`!``S____`@`(@:2!H#:@!ZFU'H@T](
MJ>H`'J``;4L>\%)R2H9TS-4WY[M(`"`@=((AJ")8HR^QFK?8RQO2B+W47&@`
M!"@$(!%Q,$'X:#+&>BI<RAC5.J53,S(%FFB!%A-*SM9TY&I8RFZJ9<D0H_B[
)DBG"A(&B6/9P
`
end

0

ডায়ালগ এপিএল, 159 বাইট (প্রতিযোগী নয়)

↑{X←⍵-1⋄Y←2*⍳4⋄R←Y+(Y÷16)×⍵-1⋄3↓∊{C←R[⍵]⋄'   ',(⍵⍴(1+0=1|C)⊃'    '({⍵⊃'.-'}¨1+(4⍴2)⊤X)),' ',((1+0=1|C)⊃' '((C-1|C)⊃' ETIANMSURWDKGOHVF L PJBXCYZQ  '))}¨⍳4}¨⍳16

কেন এই প্রতিযোগিতা হয়?
অ্যাডাম

আমার মনে হয় আপনি সেটিং দ্বারা অনেক সঞ্চয় করতে পারেন ⎕IO←0(অনেক সিস্টেমে ডিফল্ট) এবং ব্যবহার (যাতায়াতের)
অ্যাডাম

0

জাভাস্ক্রিপ্ট (ES7), 242 240 238 বাইট

console.log([...'EISH000V00UF000 0ARL000 00WP000JTNDB000X00KC000Y0MGZ000Q00O 000 '].map((a,k)=>(n=>(a!='0'?(2**n+(k>>2)/2**(4-n)).toString(2).slice(-n).replace(/./g,c=>'.-'[c])+' '+a:'      '.slice(-n-2))+(n<4?'   ':'\n'))(k%4+1)).join``)

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

Ac2 বাইট জ্যাচারিকে ধন্যবাদ ।


পরিবর্তন করার চেষ্টা করুন a!='0'থেকেa!=0
Cyoce

আপনি প্রতিস্থাপন করতে পারেন .join('')সঙ্গে .join<insert backtick here><insert backtick here>? ( <insert backtick here>প্রকৃত ব্যাকটিক্সের সাথে প্রতিস্থাপন করা হচ্ছে)
জাকারিয়া

সায়োস যেমন বলেছিলেন, তেমন পরিবর্তন a!='0'করার চেষ্টা করুন a!=0, এটি কাজ করা উচিত।
জাচারা

@ জাচারি এটি না , তবে আবার ধন্যবাদ।
eush77

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