একটি গ্লাইফো প্রোগ্রাম অনুবাদ করুন


17

কোনও বৈধ গ্লাইফো প্রোগ্রামের একটি ইনপুট দেওয়া হয়েছে , এর "মানব-পঠনযোগ্য" অংশটিকে আউটপুট দিন।

গ্লাইফো একটি আকর্ষণীয় এ্যাসল্যাং ধারণা:

নির্দেশিকা রেফারেন্স এখানে দেওয়া আছে। প্রতিটি নির্দেশের জন্য, abcd অক্ষর প্রতিটি নির্দেশ রচনা করে প্রতীকগুলি উপস্থাপন করে। a প্রথম অনন্য প্রতীককে বোঝায়, b দ্বিতীয় স্বতন্ত্র চিহ্নকে বোঝায় ইত্যাদি

aaaa ..... n NOP - no operation; do nothing
aaab ..... i Input - push input onto top of stack
aaba ..... > Rot - pops top stack element and pushes to bottom of stack
aabb ..... \ Swap - swaps top two stack elements
aabc ..... 1 Push - pushes a 1 onto the top of stack (creates new element)
abaa ..... < RRot - pops bottom element and pushes to top of stack
abab ..... d Dup - Duplicates top stack element
abac ..... + Add - pops top two elements and pushes their sum
abba ..... [ L-brace - skip to matching ] if top stack element is 0
abbb ..... o Output - pops and outputs top stack element
abbc ..... * Multiply - pops top two elements and pushes their product
abca ..... e Execute - Pops four elements and interprets them as an instruction
abcb ..... - Negate - pops value from stack, pushes -(value)
abcc ..... ! Pop - pops and discards top stack element
abcd ..... ] R-brace - skip back to matching [

(ক্রেডিট: ব্রায়ান থম্পসন ওরফে ওয়াইল্ডালসিওন)

সুতরাং, উদাহরণস্বরূপ, পুশ নির্দেশকে PPCGউপস্থাপন করবে pattern এমন প্যাটার্নের সাথে মেলে যেখানে প্রতিনিধিত্ব করে , উপস্থাপন করে এবং উপস্থাপন করে ।PPCGaabcaPbCcG

ইনপুটটি কেবল একটি মুদ্রণযোগ্য ASCII অক্ষর সমন্বিত একক স্ট্রিং হবে। এটির দৈর্ঘ্য সর্বদা চার (দ্বু) দ্বারা বিভাজ্য হবে।

আউটপুট হ'ল ইনপুট স্ট্রিংয়ের চারটি অক্ষরের প্রতিটি গ্রুপ যার নির্দেশ অনুসারে তারা মনোনীত করে। একক-বর্ণ নির্দেশের নামগুলি ব্যবহার করুন (উপরে বর্ণিত টেবিলের পাঁচটি বিন্দুর ঠিক পরে)।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

পরীক্ষার কেস:

In                                Out
------------------------------------------------
Programming Puzzles & Code Golof  ]!]!]]]+
nananananananana batman!          dddd]]
;;;;;;;:;;:;;;::                  ni>\
llamas sleep                      1-*
8488133190003453                  <[oe
<empty string>                    <empty string>

4
আহ্ হ্যাঁ কোড গোলফ। আমার প্রিয় স্পোর্ট
কোরিয়ানওয়ালগ্লাস 17

উত্তর:


5

পাইথ, 37 35 34 বাইট

xxdকোডটিতে অপ্রিন্টযোগ্য অক্ষর রয়েছে, সুতরাং এখানে হেক্সডাম্প রয়েছে:

0000000: 5663 7a34 7040 2e22 216f d78c 40bf d4f0  Vcz4p@."!o..@...
0000010: 38d6 7dfe 7312 3ff8 ea22 6958 4e7b 4e55  8.}.s.?.."iXN{NU
0000020: 5433                                     T3

এখানে 36 বাইটে একটি মুদ্রণযোগ্য সংস্করণ রয়েছে:

Vcz4p@"ni >\\1   <d+[o*e-!]"iXN{NUT3

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ব্যাখ্যা

Vcz4p@."…"iXN{NUT3       implicit: z = input
  z                      input
 c 4                     split to 4-character blocks
V                        loop over that in N
           X               replace...
            N                in current part
             {N              unique chars in current part, in order
               UT            with numbers 0-9
          i      3         interpret as base 3
     @                     take that item of
      ."…"                   string "ni >\\1   <d+[o*e-!]"
    p                      and print without newline

3

সিজেম, 42 39 35 বাইট

4 বাইট ধার করে ব্যবহারকারী 81655 এর বেস 4 এর পরিবর্তে বেস 3 ব্যবহার করার ধারণাটি ধার্য করেছে।

l4/{__&f#3b"ni >\1   <d+[o*e-!]"=}%

সমস্ত পরীক্ষার মামলা চালান।

কমান্ডগুলির সন্ধানের টেবিলটি সংকুচিত করার আরও ভাল উপায় থাকতে হবে ...


3

জাভাস্ক্রিপ্ট (ES6), 97

4 টি অক্ষরের প্রতিটি ব্লকের জন্য আমি প্রতিটি চিহ্নকে তার অবস্থানের সাথে প্রতিস্থাপন করি একটি বেস 4 নম্বর পেয়ে। উদাহরণস্বরূপ 'aabc' -> '0023'। সম্ভাব্য সংখ্যাগুলি 0..0123 পরিসরে, যেটি দশমিক 0 0..27 হয়। আমি 28 টি অক্ষরের স্ট্রিং থেকে সঠিক নির্দেশের অক্ষরটি খুঁজতে একটি সূচক হিসাবে নম্বরটি ব্যবহার করি।

s=>s.replace(/.{4}/g,s=>'n..i....>.\\1....<d.+[o.*e-!]'[[...s].map(c=>n=n*4+s.indexOf(c),n=0),n])

পরীক্ষা

F=s=>s.replace(/.{4}/g,s=>'n..i....>.\\1....<d.+[o.*e-!]'[[...s].map(c=>n=n*4+s.indexOf(c),n=0),n])

function test() { O.textContent=F(I.value) }

test();
#I { width:90% }
<input id=I value="nananananananana batman!" oninput="test()">
<br><span id=O></span>


3

ম্যাটল্যাব, 291 বাইট

আমার উত্তরটি যদি কমিয়ে দেওয়া হয় তবে আমি বেশিক্ষণ দ্বিধায় পড়েছি। আমি স্রেফ এমএটিএলবি নিয়ে খেলছিলাম। আমি সচেতন যে ঘন কোড তৈরি করা সত্যই সম্ভব নয় (নির্দেশাবলী / বাইটের একটি কম সংখ্যক; আপনার ~ 100 বাইট সমাধানের চেয়ে প্রায় 3 গুণ বেশি লার্জেট) এবং ম্যাটল্যাব কোড গল্ফের পক্ষে খুব উপযুক্ত নাও হতে পারে এবং আমি কোড গল্ফে নতুন । তবে আমি কেবল চেষ্টা করতে চেয়েছিলাম, এবং কোডটি কাজ করে (নতুন লাইনের অক্ষর রাখে)। যে কোনও ইঙ্গিত স্বাগত। : P: P

i=input('','s');
l=reshape(i,4,length(i)/4)';
m=']!- e';m(9)='*';m(12:22)='o[   + d  <';m(33:34)='1\';m(39)='>';m(57)='i';m(64)='n';
s='';
for k = 1:size(l,1)
n=l(k,:);
c=combvec(n,n);
t=triu(reshape(c(1,:)==c(2,:),4,4),1);
t=sum(t([5,9:10,13:15]).*2.^[5:-1:0]);
s=[s,m(t+1)];
end
display(s)

1
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! সমস্ত উত্তর স্বাগত, এমনকি যদি তারা একটি হাস্যকর পরিমাণে বেড়ে যায় (স্পষ্টতই আমার আগে ঘটেছিল)। ;) প্রথম উত্তর!
ডুরকনব

2

জাভাস্ক্রিপ্ট (ES6), 115 101 বাইট

s=>s.replace(/..../g,g=>"ni >\\1   <d+[o*e-!]"[[...g].map(c=>r=r*3+(m[c]=m[c]||++i)-1,i=r=0,m={})|r])

14 বাইট সংরক্ষণ করা হয়েছে @ edc65 এর জন্য ধন্যবাদ !

ব্যাখ্যা

এটির বেস -3 সূচীতে প্রতিটি অক্ষরের সাথে একটি স্ট্রিংয়ে নির্দেশাবলীর তালিকা সঞ্চয় করে। উদাহরণস্বরূপ, +অনুরূপ abacযা বেস -3 হিসাবে প্রতিনিধিত্ব করা যাবে 0102, অথবা 11দশমিক হবে। বেস -3 এ প্রতিনিধিত্ব করা যায় না এমন একমাত্র নির্দেশ হ'ল ]তবে বেস -3 সংখ্যাটি গণনা করার জন্য ব্যবহৃত অ্যালগরিদম দিয়ে এটি স্ট্রিংয়ের শেষে 18 পজিশনে থাকা সহজভাবে শেষ হয়।

s=>
  s.replace(/..../g,g=>    // replace each four-character group with it's instruction
    "ni >\\1   <d+[o*e-!]" // list of instructions at their base-3 index
    [
      [...g].map(c=>       // for each character c
        r=r*3+(m[c]=m[c]   // shift r left and add the number associated with c to r
          ||++i)-1,        // if nothing is associated, associate the next number to c
                           // save i + 1 to m[c] so that it is truthy for 0
        i=                 // i = current number to assign to the next unique character
        r=0,               // r = 4-character group as a base-3 number
        m={}               // m = map of numbers assigned to each character
      )
      |r                   // return r
    ]
  )

পরীক্ষা


আপনি parseIntবার বার যোগফল এবং গুণনের সাথে নম্বরটি ব্যবহার এবং কম্পিউটিং না করে অনেকগুলি বাইট সংরক্ষণ করতে পারেন । এটি '0123' এর সমস্যাটি এড়াতে পারে যা বেস 3 তে অবৈধ তবে 1 * 9 + 2 * 6 + 3 == 18 দেয় যা একটি ভাল অবস্থান। ফলাফল:F=s=>s.replace(/..../g,g=>"ni]>\\1 <d+[o*e-!]"[[...g].map(c=>r=r*3+(m[c]=m[c]||++i)-1,r=i=0,m={})|r])
edc65

@ edc65 দুর্দান্ত পরামর্শ। ধন্যবাদ!
ব্যবহারকারী 81655

0

পাইথন 2, 158 বাইট

ইনপুট লাগে "test"। আউটপুট অক্ষরের একটি তালিকা।

def b(s,i=0):
    for c in s:i=i*4+s.index(c)
    return"n..i....>.\\1....<d.+[o.*e-!]"[i]
print map(b,(lambda l,n:[l[i:i+n]for i in range(0,len(l),n)])(input(),4))

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

Ungolfed:

def chunks(l, n):
    return (l[i:i+n] for i in range(0, len(l), n))

def convert(inst):
    i = 0
    for c in inst:
        i = i*4 + inst.index(c)

    return "n..i....>.\\1....<d.+[o.*e-!]"[i]

print map(convert, chunks(input(), 4))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.