কীস্ট্রোক অনুকরণ করুন


33

আপনার কাজটি হ'ল কয়েকটি ব্যবহারকারী কী-স্ট্রোকের অনুকরণ করে।

ইনপুট

একটি স্ট্রিং অ্যারে বা আপনার পছন্দসইয়ের একটি ডিলিমিটার সহ স্ট্রিং (সীমা 32326 এর বাইরে) কমপক্ষে একটি 'কীস্ট্রোক' রয়েছে।

এই অ্যারেতে কেবল দুটি ধরণের স্ট্রিং থাকবে: প্যাসিভ কীস্ট্রোক (একক অক্ষর) এবং কমান্ডগুলি (বন্ধনীগুলির মধ্যে অক্ষর [ ])।

  • প্যাসিভ কীস্ট্রোক
    1. ASCII অক্ষর কোড [32-126]
  • আদেশগুলি:
    1. [B] : ব্যাকস্পেস (সর্বশেষ অক্ষরটি যদি থাকে তবে এটি সরিয়ে ফেলুন)
    2. [C] : ইতিমধ্যে যা লেখা আছে তার সমস্ত অনুলিপি করুন
    3. [D] : যা লেখা হয়েছে তা মুছুন
    4. [P] : যা অনুলিপি করা হয়েছে তা পেস্ট করুন

আউটপুট

স্ট্রিংটি কীস্ট্রোক দ্বারা উত্পাদিত হয়েছে।

উদাহরণ

['H', 'e', 'l', 'l', 'o'] -> 'Hello'
['H', 'e', 'l', 'l', 'o', ' ', '[C]', '[P]'] -> 'Hello Hello '
['[D]', 'D', '[B]'] -> ''
['H', '[C]', 'i', '[P]', '[C]', '[P]'] -> 'HiHHiH'
['e', '[C]', '[B]', 'I', ' ', 'l', 'i', 'k', '[P]', ' ', 'b', '[P]', '[P]', 's', '!'] -> I like bees!
['N', '[P]'] -> 'N'
['#', '5', '0', 'K', '0', '0', '1', '[D]', '#', 'n', 'o', 't'] -> '#not'
['H', 'o', 'w', ' ', '[D]', 'H', 'e', 'y'] -> 'Hey'
['s', 'u', 'd', '[B]', 'p', '[C]', '[D]', 'I', ' ' , 'h', 'a', 'v', 'e', ' ', '[P]', 'p', 'e', 'r', '!'] -> 'I have supper!'

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


এফওয়াইআই আমি আমার কোডে একটি বাগ পেয়েছি, আমি কি মৌমাছিদের জন্য একটি মূলধন বিয়ের সাথে একটি পরীক্ষার কেস প্রস্তাব করতে পারি :)
জনাথন অ্যালান

[D]এটির মধ্যে একটি উদাহরণও থাকা উচিত যেখানে এটি কেবলমাত্র ব্যবহৃত হয় না, তাই কোডটি কেবল হবে না split('[D]')[1]বা কিছু হবে না ।
mbomb007

@ এমবিম্ব ২০০7, আমি পরীক্ষার কেসগুলি যুক্ত করেছি (# 8, # 9)
ড্যানিয়েল

এবং আমি মনে করি mbomb007 একাধিক মোছার সাথে একটি পরীক্ষার কেস চেয়েছিল।
মার্টিন ইন্ডার

@ মার্টিন ইন্ডার, ওহ আমি ভেবেছিলাম যে তিনি যেখানে চেয়েছিলেন সেখানে অন্য কোন আদেশ রয়েছে[D]
ড্যানিয়েল

উত্তর:


7

05 এ বি 1 ই , 34 33 31 27 বাইট

ব্যবহার সিপি-1252 এনকোডিং।

õUvygiyJë"XJ¨DU\"4äyáÇ5%è.V

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

ব্যাখ্যা

õU                                  # initialize X as the empty string
v                                   # for each y in input
 ygiyJ                              # if len(y) == 1 join y with stack
      ë                             # else
       "XJ¨DU\"                     # push this string
               4ä                   # split into 4 parts (of size [2,1,2,1])
                 yá                 # push only letters of y
                   Ç5%              # mod its ascii code by 5
                      è             # index into the string above with this
                       .V           # evaluate as 05AB1E code

উপরের কোডে মূল্যায়ন ফাংশনগুলির জোড়া:

DU    # [C] -> duplicate and store in X
XJ    # [P] -> push X and join with stack
¨     # [B] -> remove last char of string
\     # [D] -> remove top of stack 

লিনের সিজেএম উত্তরmod 5 থেকে ট্রিকটি ব্যবহার করে 4 বাইট সংরক্ষণ করা হয়েছে


34

তেজ, 76, 64, 62 , 58 কীস্ট্রোক

7 টি কীস্ট্রোক সংরক্ষণের জন্য লুভজোর ধন্যবাদ


কেউ কি কিস্ট্রোক অনুকরণ করে বলেছিল ? ঠিক আছে তবে, গল্ফের কাছে আমার প্রিয় ভাষাটি কীস্ট্রোকগুলি সিমুলেট করা সম্পর্কে ভাল !

:no s :%s/\M[
sB]/<C-v><C-h>
sC]/<C-v><esc>0y$A
sD]/<C-v><esc>"_S
sP]/<C-v><C-r>"
s<bs>\n
S<C-r>"

ইনপুট এই বিন্যাসে আসে:

h
e
l
l
o

[C]
[P]

এটি একটি বেশ সহজ উত্তর। এটি কেবলমাত্র প্রতিটি "কমান্ড" অনুবাদ করে সেই আদেশের সমতুল্য ভিআইএম কীস্ট্রোককে to আসুন একে একে লাইন ধরে রাখুন।

:no s :%s/\M[

এটি এক টন বাইট সংরক্ষণ করে । ভিমের একটি বিল্টিন "কমান্ড লাইন" রয়েছে যেখানে আপনি ম্যাপিং তৈরি করতে পারেন, সেটিংস পরিবর্তন করতে পারেন, ফাইলগুলি সংরক্ষণ করতে পারেন ইত্যাদি এখানে আমরা ম্যাপিং তৈরি করছি। :noসংক্ষিপ্ত :nnoremapযার যার অর্থ "যখন আমরা স্বাভাবিক মোডে থাকি তখন এই বাম হাতটি এই ডান হাতের জন্য রাখুন।" যেহেতু আমরা :%s/ পাঁচটি ভিন্ন বার কল করছি , এটি অনেক সাশ্রয় করে। \Mএকটা চমৎকার কৌতুক। এর অর্থ হ'ল নীচের অনুসন্ধানটি "ভেরি নো ম্যাজিক" হবে, যার অর্থ রেগেক্স[B][B] কেবল একটি বি রয়েছে এমন একটি সীমার পরিবর্তে আক্ষরিক পাঠ্যের সাথে মিলবে । যেহেতু বেশিরভাগ বিকল্প কমান্ডগুলির মধ্যে একটি বন্ধনী রয়েছে, আমরা প্রথমটি পূরণ করি।

তারপরে, আমরা পাঁচটি বিকল্প কমান্ড কল করি। আমি কেন এতবার ফোন করেছিলাম তা লক্ষ করার <C-v>মতো। অক্ষর পছন্দ <esc>, <C-v>, <C-r>, ইত্যাদি অমুদ্রণীয় অক্ষর, এবং একটি সঙ্গে কমান্ড লাইন টাইপ করা আবশ্যক<C-v>

  • [বি]: ব্যাকস্পেস। এই এক খুব সহজ। কেবলমাত্র প্রতিটির [B]সাথে প্রতিস্থাপন করুন Ctrl-h, যা ভিএম এর ব্যাকস্পেসের সমান।

  • [সি]: ইতিমধ্যে যা লেখা হয়েছে তার সমস্ত অনুলিপি করুন। এটি অনুবাদ করা হয় <esc>0y$A। এর অর্থ:

    <esc>      " Escape to normal mode
         0     " Move to the beginning of this line
          y$   " Yank to the end of the line
            A  " Re enter insert mode at the end of this line.
    

    আমরা প্রায় সহজভাবে Yজায়গায় করতে পারে0y$ এমনটি করতে যার অর্থ "পুরো লাইনটি ইয়াঙ্ক করা", তবে এটি আমরা চাই না এমন একটি নতুন লাইনও ধরে ফেলে।

  • [ডি]: যা লেখা হয়েছে তা মুছুন। এই <esc>"_S। আগের মতো, <esc>সন্নিবেশ মোডটি প্রস্থান করে যাতে আমরা কমান্ডগুলি চালাতে পারি। এখানে কিছু জিনিস রয়েছে যা এখানে আরও সুবিধাজনক। সুতরাং আমরা কি

      S         " Delete this whole line and enter insert mode again
    "_          " Send it to 'the black hole register'. This is just so that we don't overwrite the main register.
    
  • [পি]: অনুলিপি করা হয়েছে তা পেস্ট করুন। এই এক খুব সোজাসাপ্টা। এটি ঠিক <C-r>"যার অর্থ Insert the contents of register '"'"প্রধান রেজিস্টারে যা হয় 'y' ইয়ঙ্কে।

এখন যেহেতু আমরা সমস্ত কমান্ড অনুবাদ করেছি, আমাদের সমস্ত লাইন একসাথে নতুন লাইন অক্ষর মুছে ফেলা উচিত। আমাদের ম্যাপিংয়ের জন্য ধন্যবাদ, এটি ঠিক

s<bs>\n

দ্য <bs>একটি ব্যাকস্পেস, (হওয়া ASCII 0x08) এবং আমরা এটা কারণ প্রয়োজন [আমরা পূরণ।

এতক্ষণে, আমরা ইনপুটটি ভিএম কোডে অনুবাদ করেছি, এবং আমাদের এটি চালানো দরকার। সুতরাং আমরা:

S           " Delete this whole line and enter insert mode
 <C-r>"     " Insert the keystrokes of register '"' as if they were typed by the user

<C-r>ডকুমেন্টের সন্নিবেশ মোডের প্রভাবটি কোথায় ?
নীল

1
@ নীল সাধারণভাবে, আপনি একটি নির্দিষ্ট মোডের জন্য একটি কী খুঁজে পেতে পারেন :h mode_keystroke। এই ক্ষেত্রে, এটি হবে:h i_ctrl-r
ডিজেএমসিএমহেম

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

2
এছাড়াও, কি করে 0ii<esc>D@"?
লুভজো

1
ম্যাপিংস, আহ? :) বিস্তারিত ব্যাখ্যার জন্য ধন্যবাদ, আমি সবসময় নতুন কিছু শিখি!
খ্রিস্টান রোনডাউ

9

সিজেম , 33 বাইট

q~{_[`';"];""L~""]:L~"]\1>3b=}%s~

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

ব্যাখ্যা

q~                                  Read an evaluate input list.
  {                          }%     Map over each string in it:
   _                                 Duplicate the string, say S.
    [`';"];""L~""]:L~"]              Replace it the following list:
                                      [repr(S) '; "];" "L~" "]:L~"]
                       \             Bring S on top of the stack.
                        1>           Chop off the first char.
                          3b         Base-3 conversion.
                            =        Modular index into the list.
                               s~   Concatenate and run as CJam code.

"হ্যাশ ফাংশন" 1>3bমানচিত্র

  • একক-অক্ষরের স্ট্রিং 0 (= 0 মড 5),
  • [B]থেকে 291 (= 1 টি Mod 5),
  • [D]থেকে 297 (= 2 Mod 5),
  • [P]থেকে 333 (= 3 গেলিক ভাষার 5),
  • [C]থেকে 294 (= 4 মড 5)।

এই মানটি (Mod 5) সিজেএম কোড স্নিপেটের একটি তালিকাতে একটি সূচক হিসাবে ব্যবহৃত হয়:

  • একক-অক্ষরযুক্ত স্ট্রিংয়ের জন্য, বলুন h, স্নিপেটটি "h"ফিরে এসেছে, যা স্ট্যাকের জন্য একটি একক-অক্ষরের স্ট্রিংকে ধাক্কা দেয়।
  • কারণ [B], স্নিপেটটি ;ফিরে আসে, যা একটি উপাদানকে পপ করে।
  • কারণ [D], স্নিপেটটি ];ফিরিয়ে দেওয়া হয়েছে, যা স্ট্যাকটি সাফ করে।
  • কারণ [P], স্নিপেটটি L~ফিরিয়ে দেওয়া হয়েছে, যা Lস্ট্যাকের মধ্যে পরিবর্তনশীল সংযোজন করে।
  • কারণ [C], স্নিপেটটি ]:L~ফিরিয়ে দেওয়া হয়েছে, যা চলক স্ট্যাকটি ভেরিয়েবলের মধ্যে সঞ্চয় করে L

এই স্নিপেটগুলি সংক্ষিপ্ত এবং কার্যকর করা হয়; চূড়ান্ত স্ট্যাক সিজেএম দ্বারা স্পষ্টভাবে মুদ্রিত করা হয়। Lপ্রাথমিকভাবে খালি তালিকা, তাই অনুলিপিটি প্রাথমিকভাবে "খালি" is


8

পাইথন 2, 96 95 93 বাইট

r=c=""
for o in input():c=[c,r][x=="[C]"];r=[r+c,r[:-1],r,"",r+o][ord(o[1:2]or"E")%5]
print r

একটি স্থান বাঁচানোর or"E"সংজ্ঞাতে আপনি স্থানান্তর করতে পারেন x?
xnor

@ এক্সনর আমি এটি বিশ্বাস করি।
orlp

1
আসলে, দেখে মনে হচ্ছে এটি সংজ্ঞায়িত করার মতো xনয়। x=="C"শুধু হতে পারে o=="[C]"
xnor

7

জেলি , 50 51 48 বাইট

Ṿ”;;µṭ“Ṗ“ø©“ḣ0“;®”
L>1a2ị$i@“BCDP0”ịÇ
Ç€“⁶Ṗ©”;FV

ট্রাইটাইনলাইন
বা সমস্ত পরীক্ষার ক্ষেত্রে

কিভাবে?

Ṿ”;;µṭ“Ṗ“ø©“ḣ0“;®” - Link 1, CreateCodeLookupValueList: keystroke
      “Ṗ“ø©“ḣ0“;®” - list of strings, ["Ṗ","ø©","ḣ0"";®"] - these are Jelly code for:
                         Ṗ  : pop (i.e. delete last entry)
                         ø© : niladic separation and copy to register (i.e. copy)
                         ḣ0 : head to 0 (i.e. delete all entries)
                         ;® : concatenate with value of register (i.e. paste)
    µ              - monadic chain separation
Ṿ                  - uneval - make a Jelly code version of the keystroke
                                               e.g. "I" -> "“I”"
 ”;                - string literal ";"                      |
   ;               - concatenate e.g. ";I"                   v
     ṭ             - tack, to make the list ["Ṗ","ø©",";®","“I”"] 
                             a keystroke - a command will evaluate to a string like
                             "“[C]”" but wont be accessed)

L>1a2ị$i@“BCDP0”ịÇ - Link 2, ConvertAKeystokeToJellyCodeString: keystroke
L>1                - length greater than 1? (i.e. isCommand?)
      $            - last two links as a monad
   a               - and
    2ị             - index 2 of the keystroke (0 due to and for a passive keystroke)
         “BCDP0”   - Literal string "BCP0"
       i@          - find first matching index of, with reversed arguments
                ị  - index into
                 Ç - call last link (1) as a monad (get code to replace this keystroke)

Ç€“⁶Ṗ©”;FV - Main link: list of keystrokes
Ç€         - call last link (2) as a monad (convert to Jelly code)
  “⁶Ṗ©”    - literal string "⁶Ṗ©" - setup the register with an empty string:
                 ⁶ :literal " ";
                 Ṗ : pop the space to give an empty string;
                 © : places it into the register
       ;   - concatenate (put that at the front)
        F  - flatten list (lists and strings are equivalent in Jelly)
         V - evaluate the string

উদাহরণ স্বরূপ

The input:
    ['e', '[C]', '[B]', 'I', ' ', 'l', 'i', 'k', '[P]', ' ', 'B', '[P]', '[P]', 's', '!']
Becomes the Jelly code:
    "⁶Ṗ©;“e”ø©Ṗ;“I”;“ ”;“l”;“i”;“k”;®;“ ”;“B”;®;®;“s”;“!”"
Which then evaluates to
    "I like Bees!"

- 'B'একটি পরীক্ষার কেস হিসাবে মূলধন সহ , যেহেতু আমি কোনও বাগ স্থির করার আগে এটি ফিরে আসত"I likeees!"


1
আমি নই নিশ্চিত এটির একটি বৈধ পরীক্ষা ক্ষেত্রে, কিন্তু আমি একটি মাত্রাতিরিক্ত জটিল স্ট্রিং সঙ্গে চেষ্টা এবং এই ব্যর্থ মনে হচ্ছে: ['e', 'e', 'e', '[B]', '[C]', '[B]', '[D]', 'I', ' ', 'l', 'i', 'k', '[P]', '[B]', ' ', 'b', '[P]', 's', '!']
ডম হেস্টিংস

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

ঠিক আছে আমি এটি ঠিক করেছি এবং এটি আসলে বাইটগুলিও সঞ্চয় করে!
জোনাথন অ্যালান

7

জাভাস্ক্রিপ্ট (ES6), 84 80 77 76 বাইট

সংরক্ষিত 3 বাইট @ নীলকে ধন্যবাদ, @ এডসি 65 এর জন্য আরও 1 টি ধন্যবাদ

x=>x.reduce((s,[c,z])=>z<'C'?s.slice(0,-1):z<'D'?t=s:z<'P'?"":s+=z?t:c,t="")

.map দীর্ঘ দুটি বাইট দীর্ঘ:

x=>x.map(([c,z])=>s=z<'C'?s.slice(0,-1):z<'D'?t=s:z<'P'?"":s+=z?t:c,s=t="")&&s

পরীক্ষার স্নিপেট


পার্থক্যটি হল আপনি reduceব্যবহার করে সংস্করণে 3 বাইট সংরক্ষণ করতে পারেন (s,[c,z])
নীল

@ নিল সুন্দর! এটি .mapসংস্করণেও একটি বাইট সংরক্ষণ করে।
ইটিএইচ প্রডাকশনগুলি

x=>x.reduce((s,[c,z])=>z<'C'?s.slice(0,-1):z<'D'?t=s:z<'P'?'':s+=z?t:c,t='')1 বাইট কম। কৌতূহলীভাবে
অপরিজ্ঞাত

x=>x.reduce((s,[c,z])=>z<'C'?s.slice(0,-1):z<'D'?t=s:z<'P'?"":z?t:s+c,t="")আরও একটি চরিত্র সংরক্ষণ করে। Z সত্যবাদী হলে, পেস্ট করুন, অন্যথায় আউটপুটে চারটি যুক্ত করুন।
Grax32

@ গ্রাফিক পেস্ট করার সময় আপনাকে বর্তমান আউটপুটটিতে যুক্ত করতে হবে, যাতে z?s+t:s+cএটি 1 বাইটের চেয়ে বেশি হয়s+=z?t:c
edc65

5

পার্ল, 53 50 বাইট

এর জন্য +1 অন্তর্ভুক্ত -p

নিউলাইন দ্বারা শেষ হওয়া এসটিডিআইএন-এ ইনপুট দিন (শেষ নিউলাইনটি ছেড়ে যেতে পারে, সুতরাং এটি নিউলাইন দ্বারা পৃথক স্ট্রিং হিসাবে গণনা করা হয়):

keystrokes.pl
H
e
[C]
[D]
a
b
[B]
[P]
z
^D

দেয়

aHez

keystrokes.pl:

#!/usr/bin/perl -p
$\.=/^.$/?$&:/P/?$a:(/C/?$a=$\:chop($\x=/B/))x0}{

প্রায় জেলির জবাবটি ধরা পড়ল কিন্তু পরাশক্তিটি 48 বাইটে পালিয়ে গেল ...


4

পাইথন 120 119 116 বাইট

f=lambda s,r='',c='':f(s[1:],*{'B':(r[:-1],c),'C':(r,r),'D':('',c),'P':(r+c,c),'':(r+s[0],c)}[s[0][1:2]])if s else r

Ideone

ইনপুট সহ একটি পুনরাবৃত্ত ফাংশন, s কী-স্ট্রোকের একটি তালিকা।

প্রতিটি পুনরাবৃত্ত কল কল রিটার্ন পাঠ্য আপডেট করে, rএবং, এ [C], ক্লিপবোর্ডের ক্ষেত্রে cঅবধিs খালি।

নতুন মান rএবং cএকটি অভিধানের মধ্যে ইন্ডেক্স দ্বারা পাওয়া যায় {...}, এবং unpacking পাস *। প্যাসিভের জন্য কীস্ট্রোকগুলি s[0][1:2]একটি খালি স্ট্রিং ফিরে আসবে এবং ''পরিবর্তে কীটি ব্যবহৃত হবে।


আমি জিজ্ঞাসা করতে পারি আপনি ল্যাম্বডাকে lambda s,r='',c=''পরিবর্তে সংজ্ঞায়িত করেন কেন lambda s,r,c=''?
এল স্টিয়ার

স্পেসিফিকেশনটি হ'ল আমরা অক্ষরের একটি ইনপুট অ্যারে নিই (এখানে s) যাতে ফাংশনটি অন্য কোনও ইনপুট না দিয়ে কাজ করা দরকার।
জোনাথন অ্যালান

আমার ক্ষমা, পড়া বোধ ব্যর্থতা।
এল স্টিয়ার

4

হাস্কেল, 136 133 130 127 বাইট

k c b(('[':m:_):i)|m<'C'=k c[q|b>"",q<-init b]i|m<'D'=k b b i|m<'P'=k c""i|1<3=k c(b++c)i
k c b(s:i)=k c(b++s)i
k c b[]=b
k""""

আইডিয়নে চেষ্টা করে দেখুন।

ব্যাখ্যা: k কমান্ডের তালিকার উপর একটি লেজ পুনরাবৃত্তি করে। bস্ট্রিংটি নির্মিত বাফারটি cঅনুলিপি করা অংশটি সংরক্ষণ করে।

k c b ("[B]":i) = k c (take(length b - 1)b) i -- remove last element of buffer
k c b ("[C]":i) = k b b i                     -- set copy to buffer
k c b ("[D]":i) = k c "" i                    -- clear the buffer
k c b ("[P]":i) = k c (b++c) i                -- append content of copy to the buffer
k c b (s:i)     = k c (b++s) i                -- append char to the buffer
k c b []        = b                           -- command list is empty, return buffer
f = k "" ""                                   -- initialise copy and buffer with empty strings

সম্পাদনা: কিছু বাইট সংরক্ষণ করতে কমান্ডগুলি [B][C][D][P]আর ঠিক মিলছে না তবে তুলনা করা হয়েছে: এর চেয়ে কম 'C'? -> Bইত্যাদি। 3 বাইট বাঁচানোর জন্য @ নিমিকে ধন্যবাদ জানাই


খালি তালিকা init bথাকলে @ নিমি একটি ব্যতিক্রম ছুঁড়ে b
লাইকনি

@ নিমী যে চালাক, ধন্যবাদ! বেনামি ফাংশন হিসাবে আমি একরকম মনে রেখেছিলাম যে বেনামি ফাংশনগুলি কেবল তখনই গ্রহণযোগ্য হয় যখন তারা একমাত্র বিবৃতি হয় এবং সেখানে অন্য কোনও সহায়ক ফাংশন নেই। তবে মেটা অনুসন্ধান করা তেমন কিছুই করে নি, তাই আমার ধারণা এটি ঠিক আছে।
লাইকোনি

2
এটি এখানে । ক্রিয়াকলাপগুলিতে মূল্যায়নের মত প্রকাশের জন্য এটি সহায়তা কার্যকারিতা ঘোষণা করার অনুমতি দেয়।
নিমি

3

গণিত, 100 বাইট

""<>Fold[Switch[#2,"[B]",Most@#~Check~{},"[C]",a=#,"[D]",{},"[P]",#~Join~a,_,Append@##]&,a={};{},#]&

বেনামে ফাংশন। স্ট্রিংগুলির ইনপুট হিসাবে একটি তালিকা নেয় এবং আউটপুট হিসাবে একটি স্ট্রিং প্রদান করে। উত্পন্ন কোনও বার্তা উপেক্ষা করুন।


2

জাভা 7, 207 203 বাইট

String c(String[]a){String r="",c=r;for(String s:a){int k=s.length(),l=r.length(),z;if(k>1){z=s.charAt(1);r=z<67?l>0?r.substring(0,l-1):"":z<68?r:z<69?"":z<81?r+c:r+s;c=z==67?r:c;}r+=k<2?s:"";}return r;}

এটি সম্ভবত আরও কিছু গল্ফ করা যেতে পারে তবে এটি আমার প্রাথমিক উত্তর। আমি সেই equalsচেকগুলি অপসারণ করার জন্য কিছু খুঁজে পাওয়ার পরে সম্পাদনা করব .. এর সাথে প্রতিস্থাপন করা হয়েছে charAt, তবে সম্ভবত এখনও গল্ফ করা যেতে পারে ..

অবরুদ্ধ এবং পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  static String c(final String[] a) {
    String r = "",
           c = r;
    for(String s : a){
      int k = s.length(),
          l = r.length(),
          z;
      if(k > 1){
        z = s.charAt(1);
        r = z < 67
             ? l > 0
                ? r.substring(0, l-1)
                : ""
             : z < 68
                ? r
                : z < 69
                   ? ""
                   : z < 81
                      ? r + c
                      : r + s;
        c = z == 67
             ? r
             : c;
      }
      r += k < 2
            ? s
            : "";
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(new String[]{ "H", "e", "l", "l", "o" }));
    System.out.println(c(new String[]{ "H", "e", "l", "l", "o", " ", "[C]", "[P]" }));
    System.out.println(c(new String[]{ "[D]", "D", "[B]" }));
    System.out.println(c(new String[]{ "H", "[C]", "i", "[P]", "[C]", "[P]" }));
    System.out.println(c(new String[]{ "e", "[C]", "[B]", "I", " ", "l", "i", "k", "[P]", " ", "b", "[P]", "[P]", "s", "!" }));
    System.out.println(c(new String[]{ "N", "[P]" }));
    System.out.println(c(new String[]{ "#", "5", "0", "K", "0", "0", "1", "[D]", "#", "n", "o", "t" }));
    System.out.println(c(new String[]{ "H", "o", "w", " ", "[D]", "H", "e", "y" }));
    System.out.println(c(new String[]{ "s", "u", "d", "[B]", "p", "[C]", "[D]", "I", " ", "h", "a", "v", "e", " ", "[P]", "p", "e", "r", "!" }));
  }
}

আউটপুট:

Hello
Hello Hello 

HiHHiH
I like bees!
N
#not
Hey
I have supper!

2

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

@ ইসমাইল মিগুয়েল টার্নারি অপারেটর দ্বারা 17 বাইট সংরক্ষণ করুন save

<?$c=[];foreach($_GET[a]as$v)($t=$v[1])!=P?$t!=C?$t!=B?$t!=D?$o[]=$v:$o=[]:array_pop($o):$c=$o:$o=array_merge($o,$c);echo join($o);

1
147 বাইট: <?$c=[];foreach($_GET[a]as$k=>$v)$v=="[P]"?$o=array_merge($o,$c):($v=="[C]"?$c=$o:($v=="[B]"?array_pop($o):$v=="[D]"?$o=[]:$o[]=$v));echo join($o);। ( if()ট্রেনারি অপারেশনগুলির একটি শৃঙ্খলে আপনার পুরো শৃঙ্খলা প্রতিস্থাপন )
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল আপনাকে ধন্যবাদ আমার অপারেটরটি ব্যবহার করার ইচ্ছা ছিল না
জার্গ হালসারম্যান

আমি দেখতে পাচ্ছি কেন। এটি দেখতে খুব কুৎসিত এবং ... এটি সত্যিই এমন কিছু যা চোখে আঘাত দেয়।
ইসমাইল মিগুয়েল

1

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

for(;null!==$s=$argv[++$i];)($g=$s[1])!=B?$g!=C?$g!=D?$o.=$g!=P?$s:$c:$o='':$c=$o:$o=substr($o,0,-1);echo$o;

অ্যারে ভিত্তিক একের চেয়ে স্ট্রিং ভিত্তিক পদ্ধতির ব্যবহার করে।

ব্যবহার করুন:

php -r "for(;null!==$s=$argv[++$i];)($g=$s[1])!=B?$g!=C?$g!=D?$o.=$g!=P?$s:$c:$o='':$c=$o:$o=substr($o,0,-1);echo$o;" a b "[C]" "[B]" "[P]" "[C]" "[D]" j "[P]"

সম্পাদনা:?: এর ক্রমটি ফিড করে 8 টি বাইট সংরক্ষণ করা হয়েছে এবং এতগুলি বন্ধনী ব্যবহার করা এড়াতে এগুলি নেতিবাচক করে তুলেছে;


$s=$argv[++$i]null!==$s=$argv[++$i]আপনি যদি পিএইচপি> 7 ব্যবহার করেন তবে পরিবর্তে আপনি $s=$argv[++$i]??0বিজ্ঞপ্তিটি এড়াতে লিখতে পারেন
Jörg Hülsermann

1
এটি নোটিশটি এড়ানোর জন্য নয় তবে '0'কীভাবে '0'মিথ্যা তা দেখছে আপনাকে প্রবেশের অনুমতি দেওয়ার জন্য। আরও অনেক নোটিশ রয়েছে যে বিশেষত এটিকে এড়িয়ে যাওয়া সময় নষ্টের মতো বলে মনে হয়।
ব্যবহারকারী59178

1

স্পেসবিএএস - 216 বাইট

1 s$,t$="": INPUT a$: DIM b$(SPLIT a$,NOT ",")
2 FOR EACH l$ IN b$()
3 CASE l$
4 WHEN "[B]": s$=s$( TO LEN s$-1)
5 WHEN "[C]": t$=s$
6 WHEN "[D]": s$=""
7 WHEN "[P]": s$=s$+t$
8 OTHERWISE : s$=s$+l$
9 END CASE
10 NEXT l$: ?s$

কমা দিয়ে স্ট্রিং হিসাবে ইনপুট দেওয়া হয় যা পরে অ্যারেতে রূপান্তরিত হয়।

এখানে চিত্র বর্ণনা লিখুন


1

ভি , 49 বাইট

íÛBÝ/
íÛCÝ/0y$A
íÛDÝ/"_S
íÛPÝ/"
íî
0éiD@"

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

যেহেতু এটিতে অক্ষম অক্ষর রয়েছে তাই এখানে একটি হ্যাক্সডাম্প রয়েছে:

0000000: eddb 42dd 2f16 080a eddb 43dd 2f16 1b30  ..B./.....C./..0
0000010: 7924 410a eddb 44dd 2f16 1b22 5f53 0aed  y$A...D./.."_S..
0000020: db50 dd2f 1612 220a edee 0a30 e969 4440  .P./.."....0.iD@
0000030: 22

এটি আমার ভিম উত্তরের প্রত্যক্ষ অনুবাদ যা আমি জেলির সাথে প্রতিযোগিতা করতে পারি। দুর্ভাগ্যক্রমে, আমি এখনও একটি বাইট শেষ, কিন্তু আমি এখনও শেষ এক নিয়ে কাজ করছি। :)

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


1

আসলে, 56 বাইট

''j"'[B]"'XaÆ"'[C]""k;╗i"aÆ"'[P]""╜i"aÆ"'[D]"'éaÆ''+ƒkΣR

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

ব্যাখ্যা:

''j"'[B]"'XaÆ"'[C]""k;╗i"aÆ"'[P]""╜i"aÆ"'[D]"'éaÆ''+ƒkΣR
''j                                                       insert an apostrophe between every pair of commands
   "'[B]"'XaÆ"'[C]""k;╗i"aÆ"'[P]""╜i"aÆ"'[D]"'éaÆ         replace:
   "'[B]"'XaÆ                                               "'[B]" with "X"
             "'[C]""k;╗i"aÆ                                 "'[C]" with "k;╗i"
                           "'[P]""╜i"aÆ                     "'[P]" with "╜i"
                                       "'[D]"'éaÆ           "'[D]" with "é"
                                                 ''+      prepend an apostrophe
                                                          now the input has been converted to the equivalent Actually program ("'<character>" pushes the character, "X" removes the last character, "k;╗i" saves the current stack state to a register, and "╜i" pushes the saved stack state)
                                                    ƒ     execute the code
                                                     kΣ   concatenate the characters
                                                       R  reverse the string

1

জাভা, 181

String v(String[]a){String r="",c=r;for(String s:a){try{int p=s.charAt(1)%5;r=p<1?r+c:p>2?"":p==1?r.length()<2?"":r.split(".$")[0]:r;c=p==2?r:c;}catch(Exception e){r+=s;}}return r;}

আরও পঠনযোগ্য সংস্করণ:

String v(String[]a){
    String r="",c=r;
    for(String s:a){
        try{
            int p=s.charAt(1)%5;
            r= p<1
                 ? r+c
                 : p>2
                    ? ""
                    :p==1
                        ? r.length()<2
                                     ?""
                                     :r.split(".$")[0]
                        :r;
            c=p==2?r:c;
        }catch(Exception e){
            r+=s;
        }
    }return r;
}

আপনার চেষ্টা কif(s.length()>1){...}else
এক্সেলএইচ

এবং এর p==1মধ্যেp<2
এক্সেলএইচ

1

এমএটিএল , 46 বাইট

vXKx"@gtnq?2)XJ66=?3L)}J67=?XK}J68=?vx}K]]]]&h

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

v                % Push empty array
XK               % Copy to clipboard K. This initiallizes it as empty
x                % Delete
"                % Implicitly input cell array. For each
  @g             % Push current cell's contents
  t              % Duplicate elements
  n              % Number of elements
  q?             % If more then 1
    2)           % Get second char. Copy to clipboard J
    66=?         % If it ss 'B'
      3L)        % Remove last element from string built up to now
    }            % Else
      J67=?      % If it was a 'C'
        XK       % Copy string built up to now into clipboard K
      }          % Else
        J68=?    % If was a 'D'
          vx     % Delete stack. This deletes string built up to now, if any
        }        % Else: it was a 'P'
          K      % Paste from clipboard K
        ]        % End if
      ]          % End if
    ]            % End if
  ]              % End if
  &h             % Horizontally concatenate stack
                 % Implicitly end for
                 % Implicitly display

1

টিসিএল, 186 বাইট

proc t w {foreach "B C P N D r Q" [list {[string range $r 0 end-1]} {[set Q $r]} {$r$Q} {$r$g}] break;foreach g $w {eval "set c \$[string index ${g}N 1]";eval "set r \"$c\""};return $r}

সুন্দরভাবে ফর্ম্যাট করা:

proc t w {
    foreach "B C P N D r Q" [list {[string range $r 0 end-1]} {[set Q $r]} {$r$Q} {$r$g}] break;
    foreach g $w {
        eval "set c \$[string index ${g}N 1]"
        eval "set r \"$c\""
    }
    return $r
}

আমি কেবলমাত্র টিসিএলে এটি করতে পারি তা প্রমাণ করতে চেয়েছিলাম


আপনি বাইট সংরক্ষণ করতে পারেন: foreachদ্বারা প্রতিস্থাপন lmap; returnদ্বারা set x। এটি আমি দ্রুত নজরে বলতে পারি on
সার্জিওল

1

স্কালা, 158 বাইট

(i:Seq[String])=>(("","")/:i){case((a,c),k)=>if(k.size<2)(a+k,c)else
if(k=="[B]")(a dropRight 1,c)else
if(k=="[C]")(a,a)else
if(k=="[D]")("",c)else(a+c,c)}._1

Ungolfed:

(i:Seq[String]) => i.foldLeft(("", "")){
  case ((res,clipboard),key) =>
    if (k.size == 1) (res+key,clipboard)
    else if (k=="[B]") (res dropRight 1, clipboard)
    else if (k=="[C]") (res, res)
    else if (k=="[D]") ("", clipboard)else(acc+clipboard,clipboard)
}._1

ফলাফল সহ ভাঁজ এবং সংগ্রহকারীর হিসাবে ক্লিপবোর্ড হিসাবে এই সমস্যার সমাধান করে। দুঃখজনকভাবে, স্কালায় একটি তিনটি শর্তসাপেক্ষ অপারেটর নেই, তবে পরিবর্তে if elseএটি একটি অভিব্যক্তি হিসাবে ব্যবহার করে।


1

পিএইচপি 7.1, 95 92 বাইট

দ্রষ্টব্য: নেতিবাচক স্ট্রিং অফসেটের জন্য পিএইচপি 7.1 প্রয়োজন।

for(;n|$i=$argv[++$x];)($l=$i[1])?$l^r?$l^s?$l^t?$o.=$c:$o="":$c=$o:$o[-1]="":$o.=$i;echo$o;

নেতিবাচক স্ট্রিং অফসেট (101 বাইট) ছাড়াই:

php -r 'for(;n|$i=$argv[++$x];)($l=$i[1])?$l^r?$l^s?$l^t?$o.=$c:$o="":$c=$o:$o=substr($o,0,-1):$o.=$i;echo$o;' e [C] [B] I ' ' l i k [P] ' ' b [P] [P] s ! 2>/dev/null;echo

এভাবে চালান:

php -nr 'for(;n|$i=$argv[++$x];)($l=$i[1])?$l^r?$l^s?$l^t?$o.=$c:$o="":$c=$o:$o[-1]="":$o.=$i;echo$o;' e [C] [B] I ' ' l i k [P] ' ' b [P] [P] s !;echo
> I like bees!

ব্যাখ্যা

for(
  ;
  n|$i=$argv[++$x];   # Iterates over the input until null.
)
  ($l=$i[1])?         # Check if this item is a command, if so set to $l
    $l^r?             # If the command is not B
      $l^s?           # If the command is not C
        $l^t?         # If the command is not D
          $o.=$c      # Then it's P, so paste the clipboard ($c)
        :$o=""        #      It's D, so delete output
      :$c=$o          #      It's C, so copy output to clipboard
    :$o[-1]=""        #      It's B, so remove the last output char
  :$o.=$i;            # No command, add the current item to the output.

echo$o;               # Print the output.

বদলান

  • কমান্ড হ্যান্ডলিংয়ের সাথে আউটপুট হ্যান্ডলিংয়ের সমন্বয় করে 3 বাইট সংরক্ষণ করা হয়েছে

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