কীকে টিপে টেক্সট রূপান্তর করুন


10

আমি একজন রোবট। আমি এই কীবোর্ডটি সহজ আয়তক্ষেত্রাকার বিন্যাসের কারণে কিনেছি :

~`   !1   @2   #3   $4   %5   ^6   &7   *8   (9   )0   _-   +=
tab  Qq   Ww   Ee   Rr   Tt   Yy   Uu   Ii   Oo   Pp   {[   }]    \|
     Aa   Ss   Dd   Ff   Gg   Hh   Jj   Kk   Ll   :;   "'   [-enter-]
          Zz   Xx   Cc   Vv   Bb   Nn   Mm   <,   >.   ?/
                         [========= space =========]

মানব পাঠ্য মুদ্রণ করতে, আমাকে এটিকে কমান্ডগুলিতে রূপান্তর করতে হবে যা আমার ম্যানিপুলেটররা ব্যাখ্যা করতে পারে। আমার বাম ম্যানিপুলেটরটি Shiftচাবিটি ধরে । আমার ডান চালাকি শুরুতে, ~চাবিটি ধরে । আমার চালাকিকারীরা যে আদেশগুলি বুঝতে পারে সেগুলি হ'ল:

S      : press the shift key
s      : release the shift key
L      : move the right manipulator left by 1
R      : move the right manipulator right by 1
U      : move the right manipulator up by 1
D      : move the right manipulator down by 1
P      : press the key under the right manipulator
p      : release the key by the right manipulator

যে কোনও ASCII বার্তাকে আদেশের তালিকায় রূপান্তর করতে কোড লিখুন। ইনপুটটিতে 95 টি মুদ্রণযোগ্য ASCII অক্ষর থাকতে পারে; সম্ভবত ট্যাব এবং নিউলাইন অক্ষরগুলিও। আউটপুট ম্যানিপুলেটরদের কমান্ডগুলির তালিকা হওয়া উচিত।

সুতরাং, উদাহরণস্বরূপ, টাইপ করতে Hello World!, কমান্ডগুলি হয়

SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp

আমি প্রতিটি বার্তা মুদ্রণের আগে ম্যানিপুলেটরগুলিকে প্রাথমিক অবস্থায় পুনরায় সেট করি।

কিছু মেকানিকাল বিপত্তি রয়েছে যা সঠিক প্রোগ্রামিং দ্বারা এড়ানো উচিত:

  1. LRUDমুদ্রণ ( P) নিযুক্ত থাকা অবস্থায় কোনও চলমান ( ) অনুমোদিত নয়
  2. ম্যানিপুলেটরগুলির কোনও জ্যামিং নেই: যখন কোনও ম্যানিপুলেটর নিযুক্ত থাকে ( Sবা P), তখন এই ম্যানিপুলেটারের পরবর্তী কমান্ডটি ডিসেনজেজিং ( sবা p) এবং তদ্বিপরীত হতে হবে
  3. কোনও অপ্রয়োজনীয় স্থানান্তর নয়: প্রতিটি দুটি শিফ্ট ( s, S) কমান্ডের মধ্যে একটি Pকমান্ড থাকা উচিত

    সুতরাং, মুদ্রণের জন্য ~~, কমান্ডগুলি SPpPpবৈধ হয়, যখন SPpsSPpহয় না

  4. সীমা ছাড়াই চলমান নয়: কোনও মুভিং কমান্ড ডান ম্যানিপুলেটরকে 13 টিরও বেশি স্পেস ডান দিকে বা 4 টি প্রাথমিক অবস্থার নীচে (বা উপরের বা বাম দিকে কোনও স্পট) সরাতে চেষ্টা করবে না

অতিরিক্ত নোট:

  • কোনও অক্ষম কী (কমান্ডের অনুক্রমের মতো DDPp) চাপলে কোনও কী চাপানো হয় না এবং এর অনুমতি দেওয়া হয়।
  • Shift+ টিপে Tabকোনও প্রভাব নেই, তবে Shift+ Spaceএবং Shift+ Enterবাইরে ছাড়া একই প্রভাব ফেলে Shift
  • স্পেস বারে এবং Enterকীতে যে কোনও স্পটে চাপ দিলে একই প্রভাব রয়েছে।
  • আউটপুটে হোয়াইটস্পেস কীগুলির কোনও অর্থ নেই তবে এটি একটি সুন্দর উপায়ে ফর্ম্যাট করতে ব্যবহার করা যেতে পারে।

গতি কি সমস্যা? আমরা কি প্রত্যেকটি চরিত্রের মধ্যে ম্যানিপুলেটরদের তাদের বাড়ির অবস্থানে ফিরিয়ে দিতে পারি (যতক্ষণ না এটির মধ্যে অপ্রয়োজনীয় স্থানান্তর অন্তর্ভুক্ত নয়)?
ইঞ্জিনিয়ার টোস্ট

সমস্যা নেই. অতিরিক্ত গতিবিধি ছাড়াই এটি আরও আকর্ষণীয় হতে পারে, তবে আমি সেরা সম্ভাব্য আউটপুটটির প্রয়োজন পছন্দ করি না।
অ্যানাটলিগ


2
আপনি কার্যটি কার্যত সংজ্ঞায়িত করেননি ... ইনপুটটিতে কোন অক্ষর থাকতে পারে? কি হয় আসল কাজের (আমি অনুমান করা যাচ্ছে না শিরোনাম উপর ভিত্তি করে সুস্পষ্ট, কিন্তু আপনি তা সত্ত্বেও উল্লেখ উচিত)
HyperNeutrino

3
কেন বিরক্ত করবেন Pp? যতদুর আমি দেখতে পারেন যারা সবসময় একটি একক কর্ম এবং কেউই হয় Pবা pতার নিজের উপর আবির্ভূত হতে পারে।
orlp

উত্তর:


5

পাইথন 2 , 338 337 335 331 325 বাইট

x=y=s=0
for c in input():p='`1234567890-=`	qwertyuiop[]|`asdfghjkl;\'\n```zxcvbnm,./``````` ~!@#$%^&*()_+~~QWERTYUIOP{}\\~ASDFGHJKL:"\n~~~ZXCVBNM<>?~~~~~~~ '.find(c);S=[p>61,s][c in' \n'];p%=62;Y=p/14;X=[max(x,12),min(max(x,5),10),p%14]['\n '.find(c)];print'sS'[S]*(s^S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp';x,y,s=X,Y,S

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


প্রতিটি অক্ষর থেকে সরাসরি অন্যটিতে চলে যায়।

ব্যাখ্যা:

  • S=[c in K,s][c in' \n'], পরের অক্ষরটি উচ্চ - বা ছোট হাতের হওয়া উচিত কিনা তা পরীক্ষা করে। যদি cকোনও স্থান বা নিউলাইন হয় তবে কেসটি একই থাকে।

  • X=[max(x,12),min(max(x,5),10),p%15]['\n '.find(c)]। যদি cকোনও স্থান বা নিউলাইন হয় তবে সর্বাধিক নিকটতম এক্স-স্থানাঙ্কটি বেছে নেওয়া হয়েছে (কীগুলি একাধিক কলামগুলিতে বিস্তৃত হবে)

  • print'sS'[S]*(s!=S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp', কেস স্যুইচ, এক্স-কো-অর্ডিনেট মুভের সংখ্যা, y- স্থানাংক চলার সংখ্যা এবং শেষ পর্যন্ত Ppপ্রতিটি অক্ষরের জন্য মুদ্রণ করে


সংক্ষিপ্ত সংস্করণ, যদি সবচেয়ে ছোট পথটির প্রয়োজন হয় না:

পাইথন 2 , 294 293 291 287 281 বাইট

x=y=s=0
for c in input():p='`1234567890-=`	qwertyuiop[]|`asdfghjkl;\'\n```zxcvbnm,./``````` ~!@#$%^&*()_+~~QWERTYUIOP{}\\~ASDFGHJKL:"\n~~~ZXCVBNM<>?~~~~~~~ '.find(c);S=[p>61,s][c in' \n'];p%=62;X,Y=p%14,p/14;print'sS'[S]*(s^S)+'LR'[X>x]*abs(X-x)+'UD'[Y>y]*abs(Y-y)+'Pp';x,y,s=X,Y,S

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


এটি কি space/ এর সবচেয়ে সংক্ষিপ্ততম পথটি ব্যবহার করা দরকার enter?
আর্নল্ড

@ আরনাউল্ড, আমি অতিথি নই, এটি নির্দিষ্ট করা হয়নি তবে উদাহরণটি নিকটতম স্থানে (পরে o) যায়
টিফিল্ড

2

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

অক্ষরের অ্যারে হিসাবে ইনপুট নেয়।

s=>s.map(c=>(y=i-(i=(j=`\`~1!2@3#4$5%6^7&8*9(0)-_=+00\t0qQwWeErRtTyYuUiIoOpP[{]}|\\00aAsSdDfFgGhHjJkKlL;:'"
${1e6}zZxXcCvVbBnNmM,<.>/?${1e13} `.indexOf(c))>>1),g=k=>'LRUD'[n=k?y/14:y%14,k^=n<0].repeat(n<0?-n:n))()+g(2)+['sS'[j-s&c!=' '&c!=`
`?s^=1:2]]+'Pp',i=s=0)

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


1

.কোম অপকোড, 108 104 বাইট

0000h: B4 00 CD 16 BE 50 01 83 C6 03 3A 24 77 F9 0F B6
0010h: DC 03 5C 01 B4 02 CD 16 B4 02 68 00 01 A8 03 B2
0020h: 53 74 08 81 36 20 01 20 01 CD 21 84 DB 74 0B 4B
0030h: B2 52 E8 F4 FF B2 4C CD 21 C3 84 FF 74 0C FE CF
0040h: B2 44 E8 E4 FF B2 55 CD 21 C3 B2 50 CD 21 B2 70
0050h: CD 21 C3 0D FE 00 1B F1 00 1C F0 01 28 E3 01 29
0060h: D7 FF 35 D6 02 39 CC 03                        

ক্যাপলক বন্ধ দিয়ে কীবোর্ড থেকে ইনপুট নিন

খারাপভাবে গল্ফ হয়েছে

        org 100h
        mov ah, 0
        int 16H
        mov si, table-3
tabing: add si, 3
        cmp ah, [si]
        ja tabing
        movzx bx, ah
        add bx, [si+1]
        mov ah, 2
        int 16H
        mov ah, 2
        push 100H
        test al, 3
        mov dl, 'S'
cmd:    jz fun
        xor [cmd-1], word 0x120
        int 21H
fun:    test bl, bl
        jz bl0
        dec bx
        mov dl, 'R'
        int 21H
        call fun
        mov dl, 'L'
        int 21H
        ret
bl0:    test bh, bh
        jz bh0
        dec bh
        mov dl, 'D'
        int 21H
        call fun
        mov dl, 'U'
        int 21H
        ret
bh0:    mov dl, 'P'
        int 21H
        mov dl, 'p'
        int 21H
        ret
macro key begin, end, U, L {
        db end
        dw U*256+L-begin
}
table:
        key 0x02, 0x0D, 1, 0
        key 0x10, 0x1B, 1, 1
        key 0x1C, 0x1C, 2, 12
        key 0x1E, 0x28, 2, 1
        key 0x29, 0x29, 0, 0
        key 0x2C, 0x35, 3, 2
        key 0x39, 0x39, 4, 5

একটি দম্পতি ছাড়া এটি করতে একটি দুর্দান্ত ধারণা!
এনাটোলিগ

1
Take input from keyboard আমাদের রোবট বন্ধু, যিনি তার কীবোর্ড ব্যবহার করে এই প্রোগ্রামটি ব্যবহার করতে সাহায্যের জন্য বলছেন?
শান এইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.