একটি গেম বয়েসে দক্ষ টাইপিং


26

অনেক পুরানো গেম বয় গেমগুলির প্রায়শই ব্যবহারকারীর কাছ থেকে স্ট্রিং ইনপুট লাগে। তবে কোনও কীবোর্ড ছিল না। এটি ব্যবহারকারীকে "কীবোর্ড স্ক্রিন" এর মতো উপস্থাপন করে পরিচালনা করা হয়েছিল:

পোকেমন রুবি কীবোর্ড

'অক্ষর পয়েন্টার' চিঠি উ ব্যবহারকারী সঙ্গে প্রতিটি পছন্দসই চরিত্র নেভিগেট করবে শুরু হবে ডি-প্যাড এর চারটি বাটন ( UP, DOWN, LEFTএবং RIGHT), তারপর প্রেস BUTTON Aচূড়ান্ত স্ট্রিং এটা সংযোজন করতে হবে।

দয়া করে নোট করুন:

  • গ্রিডটি প্রায় আবৃত হয় , সুতরাংUPA অক্ষরের উপরচাপ দেওয়াআপনাকে টি-তে নিয়ে যায় would
  • 'অক্ষর পয়েন্টার' একটি চিঠি যুক্ত করার পরে রাখা হয়

চ্যালেঞ্জ

উপরের কীবোর্ডে কেস পরিবর্তন করার বিকল্প রয়েছে এবং এটি একটি অনিয়মিত আকার। সুতরাং, সরলতার জন্য, এই চ্যালেঞ্জে আমরা নিম্নলিখিত কীবোর্ডটি ব্যবহার করব (নীচের ডানদিকে ASCII চর 32, একটি স্থান):

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

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

আউটপুট কী হওয়া উচিত:

  • > জন্য RIGHT
  • < জন্য LEFT
  • ^ জন্য UP
  • v জন্য DOWN
  • .জন্য BUTTON A(স্ট্রিং বর্তমান অক্ষর যুক্ত)

উদাহরণস্বরূপ, যখন স্ট্রিংটি দেওয়া হয় DENNIS, সমাধানটি এর মতো দেখায়:

>>>.>.>>v..>>.>>>v.

বিধি / বিশদ

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

পরীক্ষার মামলা

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

FLP.TKC  ->  25 steps:  <<.<v.<<<v.<<<v.^.<<^.<^.
MOYLEX   ->  23 steps:  <<v.>>v.>>>v.>^^.^.<<^.
FEERSUM  ->  18 steps:  <<.<..<vv.>.>>.<^.
MEGO     ->  14 steps:  <<v.<^.>>.>vv.

A CAT    ->  17 steps:  .<^.>>>v.<<.<<vv.
BOB      ->  10 steps:  >.<vv.>^^.

(space)  ->  3 steps:   <^.
(empty)  ->  0 steps:   (empty)

আপনি repl.it এ আমার টেস্টকেস জেনারেটরটি দেখতে পারেন - কোনও বাগ থাকলে দয়া করে আমাকে জানান।

সাবমিশনের জন্য সবাইকে ধন্যবাদ! ব্যবহারকারী এনএনজিএন বর্তমানে by১ বাইট সহ বিজয়ী, তবে যে কেউ যদি একটি সংক্ষিপ্ত সমাধান আবিষ্কার করতে পারে তবে সামান্য সবুজ রঙের টিকটি সরানো যেতে পারে;)


নোট করুন যে এটি স্যান্ডবক্সের মধ্য দিয়ে গেছে, এবং একই রকম চ্যালেঞ্জ পাওয়া গিয়েছিল, তবে চ্যাট এবং স্যান্ডবক্সে আলোচনার ফলে সিদ্ধান্তটি পৌঁছেছে যে এটি কোনও ধরণের নয়, কেবল নিবিড়ভাবে সম্পর্কিত :)
ফ্লিপট্যাক

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

উত্তর:


4

ডায়ালগ এপিএল , 61 বাইট

4 7∘{∊'.',⍨⍉↑b⍴¨¨'^v' '<>'⌷¨⍨⊂¨a>b←a⌊⍺-a←⍺|↓2-/0,⍺⊤⍵⍳⍨⎕a,'.'}

অনুমান ⎕IO←0

⎕a,'.' বর্ণমালা একটি সম্পূর্ণ স্টপ পরে

⍵⍳⍨সূচক 0..26 হিসাবে যুক্তির চরিত্রগুলি সন্ধান করুন ( ' 'এবং অন্য সমস্ত 27 হবে)

⍺⊤বেস 7 এ এনকোড করুন (নম্বরে বাম দিকটি আবদ্ধ হবে 4 7), একটি 2 × n ম্যাট্রিক্স পান

0, বামে শূন্যগুলি প্রিপেন্ড করুন

2-/ সংলগ্ন কলামগুলির মধ্যে পার্থক্য

ম্যাট্রিক্সকে এক জোড়া ভেক্টর বিভক্ত করুন

a←⍺| তাদের যথাক্রমে 4 এবং 7 মডিউল নিন, বরাদ্দ করুন a

b←a⌊⍺-aকরতে bছোট aএবং তার মডুলার ইনভার্স

'^v' '<>'⌷¨⍨⊂¨a>bযেখানে পৃথক হয় তার উপর ভিত্তি করে প্রথম ভেক্টর এবং বা দ্বিতীয়টির জন্য ^বা বেছে নিনv<>ab

b⍴¨¨এই bসময়ের প্রতিটি পুনরাবৃত্তি

⍉↑ দুটি ভেক্টরকে একটি একক ম্যাট্রিক্সে মিশিয়ে এটিকে স্থানান্তর করুন, একটি এন n 2 ম্যাট্রিক্স পান get

'.',⍨.ডানদিকে সংযোজন

চেপটান


6

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

s=>s.replace(/./g,c=>(q=p,p="AHOVBIPWCJQXDKRYELSZFMY.GNU ".indexOf(c),"<<<>>>".substring(3,((p>>2)+10-(q>>2))%7)+["","v","vv","^"][p-q&3]+"."),p=0)

একটি আকর্ষণীয় আচরণ substringহ'ল এটি যদি দ্বিতীয়টির চেয়ে প্রথমটি কম হয় তবে এটি যুক্তিগুলি আদান প্রদান করে। এর অর্থ হ'ল আমি যদি বাম / ডান টিপসের অনুকূলতম সংখ্যাটি -3 এবং 3 এর মধ্যে একটি সংখ্যা হিসাবে গণনা করি তবে আমি 3 যুক্ত করতে পারি এবং 3 থেকে <<<>>>শুরু করার স্ট্রিংটি নিতে পারি এবং আমি তীরের সঠিক সংখ্যা পেয়ে যাব। এদিকে ডাউন / আপ প্রেসগুলি সামান্য বিটওয়াসা ব্যবহার করে একটি অ্যারে এবং 3 সহ সারিগুলির পার্থক্যের সাহায্যে পরিচালনা করা হয়; কম অ্যারে উপাদান হওয়ায় এই উপায়টি খানিকটা খাটো।


4

রুবি, 107 বাইট

->s{c=0
s.tr(". ","[\\").bytes{|b|b-=65
print ["","^","^^","v"][c/7-b/7],(d=(c-c=b)%7)>3??>*(7-d):?<*d,?.}}

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->s{                                 #Input in s.
  c=0                                  #Set current position of pointer to 0.
  s.tr(". ","[\\").                    #Change . and space to the characters after Z [\
  bytes{|b|                            #For each byte b,
    b-=65                              #subtract 65 so A->0 B->1 etc.
    print ["","^","^^","v"][c/7-b/7],  #Print the necessary string to move vertically.
    (d=(c-c=b)%7)>3?                   #Calculate the horizontal difference c-b (mod 7) and set c to b ready for next byte.
       ?>*(7-d):?<*d,                  #If d>3 print an appropriate number of >, else an appropriate number of <.
    ?.                                 #Print . to finish the processing of this byte.
  }
}

#call like this and print a newline after each testcase
f["FLP.TKC"];puts  
f["MOYLEX"];puts   
f["FEERSUM"];puts  
f["MEGO"];puts     
f["A CAT"];puts    
f["BOB"];puts      

1

গণিত, 193 বাইট

গলফ

StringJoin@@(StringTake[">>><<<",Mod[#〚2〛,7,-3]]<>StringTake["vv^",Mod[#〚1〛,4,-1]]<>"."&/@Differences[FirstPosition[Partition[ToUpperCase@Alphabet[]~Join~{"."," "},7],#]&/@Characters["A"<>#]])&

সুপাঠ্য

In[1]:= characters = ToUpperCase@Alphabet[]~Join~{".", " "}

Out[1]= {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", ".", " "}

In[2]:= keyboard = Partition[characters, 7]

Out[2]= {{"A", "B", "C", "D", "E", "F", "G"}, {"H", "I", "J", "K", "L", "M", "N"}, {"O", "P", "Q", "R", "S", "T", "U"}, {"V", "W", "X", "Y", "Z", ".", " "}}

In[3]:= characterPosition[char_] := FirstPosition[keyboard, char]

In[4]:= xToString[x_] := StringTake[">>><<<", Mod[x, 7, -3]]

In[5]:= yToString[y_] := StringTake["vv^", Mod[y, 4, -1]]

In[6]:= xyToString[{y_, x_}] := xToString[x] <> yToString[y] <> "."

In[7]:= instructionsList[input_] := xyToString /@ Differences[characterPosition /@ Characters["A" <> input]]

In[8]:= instructions[input_] := StringJoin @@ instructionsList[input]

In[9]:= instructions["DENNIS"]

Out[9]= ">>>.>.>>v..>>.>>>v."

1

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

এটি হওয়া উচিত তার চেয়ে দীর্ঘ, তবে ...

def l(c):i="ABCDEFGHIJKLMNOPQRSTUVWXYZ. ".index(c);return[i%7,i/7]
def d(f,t,a=abs):
 v,h=l(t)[1]-l(f)[1],l(t)[0]-l(f)[0]
 if a(h)>3:h=h-7*h/a(h)
 if a(v)>2:v=v-4*v/a(v)
 return'^v'[v>0]*a(v)+'<>'[h>0]*a(h)
s="A"+input()
print''.join([d(p[0],p[1])+'.'for p in[s[n:n+2]for n in range(len(s))][:-1]])

কোন সাহায্যের ব্যাপকভাবে প্রশংসা হবে!

উদ্ধৃতি চিহ্নগুলিতে ইনপুট নেয়।

l কীবোর্ডে একটি অক্ষরের অবস্থান প্রদান করে।

ifমাঝখানে দুটি বিবৃতি dযাচাই করার জন্য এটি কী-বোর্ডের চারপাশে 'মোড়ানো' সর্বোত্তম হবে কিনা।

ইনপুটটি এতে চাপ sদিয়েছে "A"কারণ কার্সারের প্রাথমিক অবস্থান A

জোড়ের [:-1]দুটি অংশের মধ্যে সর্বনিম্ন দূরত্বটি সন্ধান করে আমরা শেষটি (যা কোনও জুড়ি নয় ) ছাড়িয়ে জোড়গুলিতে লুপ করি through

Flp.Tkc কে ধন্যবাদ জানানোর জন্য যা আমি প্রতিবারই বলার a=absপরিবর্তে করতে পারি abs!


0

জাভা 8, 1045 বাইট

গলফ

staticchar[][]a={{'A','B','C','D','E','F','G'},{'H','I','J','K','L','M','N'},{'O','P','Q','R','S','T','U'},{'V','W','X','Y','Z','.',''}};staticintm=Integer.MAX_VALUE;staticStringn="";staticboolean[][]c(boolean[][]a){boolean[][]r=newboolean[4][];for(inti=0;i<4;i)r[i]=a[i].clone();returnr;}staticvoidg(inti,intj,boolean[][]v,chard,Stringp){v[i][j]=true;if(a[i][j]==d&&p.length()<m){m=p.length();n=p;}if(i-1<0){if(!v[3][j])g(3,j,c(v),d,p"^");}elseif(!v[i-1][j])g(i-1,j,c(v),d,p"^");if(i1>3){if(!v[0][j])g(0,j,c(v),d,p"v");}elseif(!v[i1][j])g(i1,j,c(v),d,p"v");if(j-1<0){if(!v[i][6])g(i,6,c(v),d,p"<");}elseif(!v[i][j-1])g(i,j-1,c(v),d,p"<");if(j1>6){if(!v[i][0])g(i,0,c(v),d,p">");}elseif(!v[i][j1])g(i,j1,c(v),d,p">");}publicstaticvoidmain(String[]args){boolean[][]v=newboolean[4][7];Scannerx=newScanner(System.in);Strings=x.next();Stringpath="";intp=0;intq=0;for(inti=0;i<s.length();i){chart=s.charAt(i);g(p,q,c(v),t,"");path=n".";n="";m=Integer.MAX_VALUE;for(intj=0;j<4;j){for(intk=0;k<7;k){if(a[j][k]==t){p=j;q=k;}}}}System.out.println(path);}

সুপাঠ্য

static char[][] a = {
        {'A','B','C','D','E','F','G'},
        {'H','I','J','K','L','M','N'},
        {'O','P','Q','R','S','T','U'},
        {'V','W','X','Y','Z','.',' '}
};
static int m = Integer.MAX_VALUE;
static String n="";


static boolean[][] c(boolean[][] a){
    boolean [][] r = new boolean[4][];
    for(int i = 0; i < 4; i++)
        r[i] = a[i].clone();
    return r;
}

static void g(int i, int j,boolean[][] v,char d,String p) {

    v[i][j] = true;
    if (a[i][j]==d && p.length()<m){
        m=p.length();
        n=p;
    }

    if (i-1<0) {
        if(!v[3][j])
            g(3, j, c(v), d, p + "^");
    }
    else if (!v[i-1][j])
        g(i-1, j, c(v), d, p + "^");


    if (i+1>3) {
        if(!v[0][j])
            g(0, j, c(v), d, p + "v");
    }
    else if(!v[i+1][j])
        g(i+1, j, c(v), d, p + "v");


    if (j-1<0) {
        if(!v[i][6])
            g(i, 6, c(v), d, p + "<");
    }
    else if (!v[i][j-1])
        g(i, j-1, c(v), d, p + "<");


    if (j+1>6) {
        if (!v[i][0])
            g(i, 0, c(v), d, p + ">");
    }
    else if (!v[i][j+1])
        g(i, j+1, c(v), d, p + ">");

}

public static void main(String[] args) {
    boolean[][] v = new boolean[4][7];
    Scanner x = new Scanner(System.in);
    String s = x.next();
    String path="";
    int p=0;
    int q=0;
    for(int i=0;i<s.length();i++){
        char t=s.charAt(i);
        g(p,q,c(v),t,"");
        path+=n+".";
        n="";
        m=Integer.MAX_VALUE;
        for(int j=0;j<4;j++){
            for(int k=0;k<7;k++){
                if(a[j][k]==t) {
                    p=j;
                    q=k;
                }
            }
        }

    }
    System.out.println(path);
}

ব্যাখ্যা

সমাধানটি প্রত্যক্ষ পন্থা: দুর্বলভাবে অনুকূলিত প্রাণশক্তি। পদ্ধতিটি g(...)প্রতিটি অনুক্রমের (উপরে, নীচে, বাম, ডান) মধ্য দিয়ে যাওয়া প্রথম মৌলিক গভীর অনুসন্ধান। পরীক্ষার কেসগুলির ক্রম কিছুটা সংশোধন করে আমি আউটপুটটি পাই:

<<.v<.v<<<.v<<<.^.^<<.^<.
v<<.v>>.v>>>.^^>.^.^<<.
<<.<..^^<.>.>>.^<.
v<<.^<.>>.^^>.
.^<.v>>>.<<.^^<<.
>.^^<.^^>.
^<.
// new line for the last
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.