ডি-প্যাডের মাধ্যমে আপনার নাম লিখুন


32

ধাঁধা:

ডি-প্যাড সহ কনসোল / হ্যান্ড-হোল্ডেড গেমটি বিবেচনা করুন যেখানে আপনাকে সাজানোর নাম লিখতে হবে। এটি QWERTY এর ব্যবহারটি কনসোলগুলিতে জনপ্রিয় হওয়ার আগে অনেকগুলি পুরানো গেমগুলিতে প্রকাশিত হয়েছিল (উদাঃ আমি বিশ্বাস করি যে ইনপুটটির জন্য Wii একটি QWERTY কীবোর্ড লেআউট ব্যবহার করে)। সাধারণত, অন-স্ক্রীন কীবোর্ড * এর প্রভাবকে দেখায়:

ডিফল্ট:

0 1 2 3 4 5 6 7 8 9
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 _ + ^ =

মামলাটি স্যুইচ করা সহ:

0 1 2 3 4 5 6 7 8 9
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 - + ^ =

এটি হ'ল সমস্ত বর্ণমালা কী এবং নিম্নলিখিত:

_: একটি একক স্থান
-: একটি হাইফেন
+: কেবলমাত্র পরবর্তী অক্ষরের
^জন্য কেস পরিবর্তন করুন: ক্যাপস লক টগল করুন (এটি সমস্ত অক্ষরের ক্ষেত্রে স্যুইচ করুন)
=: প্রবেশ করুন, সম্পূর্ণ

* স্পষ্টতই আমি "বিকেএসপি" এবং "ENTER" এর মতো কীগুলি সংক্ষিপ্ত সংস্করণ দিয়ে প্রতিস্থাপন করেছি

এবং তারপর হার্ডওয়্যার D- প্যাড (অথবা নিয়ন্ত্রণ কিছু ফর্ম যেখানে আপনি যেতে পারে অন্তর্ভুক্ত করা হবে up, down, leftএবং right)

স্ক্রিনটি সাধারণত আপনাকে একপাশ থেকে অন্যদিকে সরাসরি যেতে দেয়। এটি হ'ল, যদি আপনি চিঠির দিকে মনোনিবেশ করেন তবে Jচাপ rightদিয়ে আপনি চিঠির দিকে চলে যেতে পারবেন A

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

গোল:

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

বিবেচ্য বিষয়:

আসল অক্ষর টিপতে আপনাকে চাপানো কীটি অন্তর্ভুক্ত করার দরকার নেই ।
ফোকাস সবসময় A
এন্টার এ শুরু হয় =অবশ্যই শেষে টিপতে হবে

উদাহরণ:

input: Code Golf
output: 43

বর্ণিত:
A -> C= 2
C-> ^= 6 (বাম দিকে সরানো)
^-> o= 5
o-> d= 2
d-> e= 1
e-> += 5
+-> _= 1
_-> += 1
+-> G= 3
G-> o= 3
o-> l= 3
l-> f= 5
f-> == 6

দ্রষ্টব্য যে একবার এবং একবারের জন্য একবারের চেয়ে +দুবার আঘাত _করা Gতত দ্রুত ^, তারপরে আবার অদলবদল করুন।

বিজয়ী জমা (আমি কমপক্ষে 1w অনুমতি দেব) হ'ল সংক্ষিপ্ত সমাধান (বাইটে)। যেহেতু এটি আমার প্রথম প্রশ্ন, আমি আশা করি এটি পরিষ্কার এবং খুব বেশি কঠিন নয়।


12
দুর্দান্ত চ্যালেঞ্জ! মাত্র একটি পয়েন্ট, 48 ঘন্টা সম্ভবত খুব সামান্য। অনুদানের অনুমতি পেতে কত সময় লাগে, সুতরাং এটি আরও এক সপ্তাহের বেশি হওয়া উচিত।
মালটিসেন

@ মালটিসেন এই পরামর্শের জন্য ধন্যবাদ, আমি চ্যালেঞ্জটি আপডেট করেছি
তাস

1
আপনি কি উল্লম্বভাবে মোড়ানো করতে পারেন, বা খুব অনুভূমিকভাবে?
অ্যালেক্স রিঙ্কিং

2
@ অ্যালেক্সরিকিং যে দুর্দান্ত পয়েন্ট! হ্যা, তুমি পারো.
তাস

গ্রেট! আমার বাস্তবায়ন এটি করে, তাই আমি কেবল ডাবল-চেক করতে চেয়েছিলাম।
অ্যালেক্স রিঙ্কিং

উত্তর:


5

রুবি (369 বাইট)

কমান্ড লাইন থেকে ইনপুট নেয়।

K="0123456789"+('A'..'Z').to_a.join+" +^="
Q=K.downcase.sub' ','-'
def d x,y
t,s=(x/10-y/10).abs,(x%10-y%10).abs
[t,4-t].min+[s,10-s].min
end
def v s,i,l,a
return l if s.empty?
c,r=s[0],s[1..-1]
j=K.index(c.upcase)||36
return v(r,j,l+d(i,j),a)if a.include?c
s,p=d(i,37)+d(37,j),d(i,38)+d(38,j)
[v(r,j,l+s,a),v(r,j,l+p,a==K ? Q : K)].min
end
puts v("#{ARGV[0]}=",10,0,K)

@ চার্লি :) কে একগুচ্ছ বাইট সংরক্ষণ করা হয়েছে


j=(K.index(c.upcase) or 36)j=K.index(c.upcase)||364 বাইট সংরক্ষণ করতে প্রতিস্থাপন করা যেতে পারে। একটি বাইট সংরক্ষণ def d(x,y)করতে প্রতিস্থাপন করতে পারেন def d x,y, এবং একই জন্য যায় def vv(...) ifথেকে v(...)ifঅন্য বাইট জন্য। শেষ লাইনে, 1 বাইট সংরক্ষণ করার সাথে এবং অন্য একটি বাইট সংরক্ষণ করার সাথে v(...)প্রতিস্থাপন করা যেতে পারে । v ...true!!0
চার্লি

ধন্যবাদ! আমি আসলে রুবিকে চিনি না। আমি অজগর থেকে এটি অনুবাদ করেছি ...
অ্যালেক্স রিঙ্কিং

আমি &&সাথে &এবং ||সাথে প্রতিস্থাপন করতে পারেন |
অ্যালেক্স রিঙ্কিং

আপনার প্রথম লাইন ( K=...) একটি ব্যাপ্তি ( K='0123456789'+('A'..'Z').to_a.join+' +^=')
চার্লি

অন্য 2 শেভ অফ!
অ্যালেক্স পুনরায়

9

সুইফট 1.2, 812 588 670 বাইট

সম্পাদনা: 224 বাইট সরানো হয়েছে একটি রেঞ্জের সাথে সংখ্যার বৃহত অ্যারেগুলি প্রতিস্থাপন করে এবং পরিবর্তে এটিকে অ্যারেতে রূপান্তর করে।

সম্পাদনা 2: উল্লম্বভাবে লুপিং যুক্ত হয়েছে

typealias S=String
typealias I=Int
var A:(I)->S={S(UnicodeScalar($0))},B:(I)->(I,I)={a in(a%10,a/10)},a=Array(48...57).map{A($0)},b=[a+(Array(65...90)+[32,43,94,61]).map{A($0)},a+(Array(97...122)+[45,43,94,61]).map{A($0)}],z=Process.arguments
z.removeAtIndex(0)
func C(e:I,f:I)->I{let(a,b)=B(e),(c,d)=B(f)
return min(abs(d-b), abs(4-(d-b)))+min(abs(c-a),abs(10-(c-a)))}
func D(c:S,_ e:I=10,_ f:Bool=false,_ g:Bool=false)->I{if count(c)==0{return C(e,39)}
let h=c.startIndex,i=c.endIndex,j=S(c[h])
if let k=find(b[f ?1:0],j){return C(e,k)+D(c[advance(h,1)..<i],k,(g ?(!f):f),false)}else{return min(C(e,37)+D(c,37,!f,true),C(e,38)+D(c,38,!f,false))}}
print(D(" ".join(z)))

চালানোর জন্য, একটি .swiftফাইলের মধ্যে কোডটি রাখুন এবং এটি দিয়ে চালানswift <filename> <your name>


এটি এমন সহজ পদ্ধতির ব্যবহার করে যেখানে দুটি 'কীবোর্ড' অ্যারে হিসাবে সংরক্ষণ করা হয়।

B:(I)->(I,I)={a in(a%10,a/10)} ভার্চুয়াল কীবোর্ডের অ্যারে থেকে একটি সূচককে x, y অবস্থানে রূপান্তর করে।

func C(e:I,f:I)->I{let(a,b)=B(e),(c,d)=B(f) return abs(d-b)+min(abs(c-a),abs(10-(c-a)))} একটি সূচনা / শেষ সূচী নেয় এবং একবার থেকে অন্যটিতে যাওয়ার জন্য ন্যূনতম সংখ্যাটি ফেরত দেয় (অনুভূমিক মোড়কের জন্য অ্যাকাউন্টিং)

func D(c:S,_ e:I=10,_ f:Bool=false,_ g:Bool=false)->Iমূল recursive ফাংশন যা বেশিরভাগ গণনা করে। এটা লক্ষ্য অক্ষরে বর্তমান অবস্থান থেকে দূরত্ব হিসাব করে, যদি না যদি পরিবর্তন করা উচিত, তাহলে এটি হিসাব উভয় শিফট এবং ক্যাপস লক পদ্ধতি এবং ক্ষুদ্রতম লাগে।

swift codegolf.swift Code Golfপ্রিন্ট চলছে43


উল্লম্ব মোড়ানো জন্য অ্যাকাউন্ট প্রয়োজন।
অ্যালেক্স রিঙ্কিং

উল্লম্ব মোড়কের জন্য অ্যাকাউন্টে আপডেট হয়েছে।
ডেভিড স্ক্রান্ডজ

4

পাইথন 679 661 619 602 589 576 539 520 496 482 বাইট

এটি চালান এবং এটি কোনও ইনপুট চাইবে (প্রম্পট পাঠ্য ছাড়াই)। ইনপুট জন্য Code Golfএটি মুদ্রণ 43

a=input()+'=';b=0;c="0123456789abcdefghijklmnopqrstuvwxyz-+^=";d=0;e=[0,1];f='+';g='^';h=[i.isupper()or i==' 'for i in a];i=abs;p=lambda z:all([i==b for i in z]);q=0
def l(z):global s;k=c.index(z.lower().replace(' ','-'));s=[k%10,int(k/10)];m,n=s;return sum([min(i(m-e[0]),i(10-(m-e[0]))),min(i(n-e[1]),i(4-(n-e[1])))])
def o(z):global d,e;d+=l(z);e=s
for r in a:
 if p(h[q:q+3]):o(g);b^=1
 if p(h[q:q+2]):
  if l(f)<l(g):o(f)
  else:o(g);b^=1
 if p([h[q]]):o(f)
 o(r);q+=1
print(d)

সম্পূর্ণ প্রোগ্রাম:

input = input() + '='
capsOn = False

keys = "0123456789abcdefghijklmnopqrstuvwxyz-+^="
totalKeys = 0
caret = [0, 1]

shiftKey = '+'
capsKey = '^'

cases = [char.isupper() or char == ' ' for char in input]

def locate(char):
    """
        Find the location of the char on the keyboard
        regardless of case
    """
    location = keys.find(char.replace(' ', '-').lower())
    return [location % 10, int(location / 10)]


def dist(key):
    """
        Calculate the min dist to a char
    """
    nx, ny = locate(key)
    return sum([min(abs(nx - caret[0]), abs(10 - (nx - caret[0]))), min(abs(ny - caret[1]), abs(4 - (ny - caret[1])))])


def moveTo(char):
    """
        Move the caret to the char, ignoring case and
        adds the dist to the tally
    """
    global totalKeys, caret
    totalKeys = totalKeys + dist(char)

    print(keys[caret[0] + caret[1] * 10], '->', char, '=', dist(char))

    caret = locate(char)

diffCase = lambda case: all([i == capsOn for i in case])

for ind, ch in enumerate(input):
    if diffCase(cases[ind:ind + 3]): # use caps
        moveTo(capsKey)
        capsOn ^= 1
    elif diffCase(cases[ind:ind + 2]): # use closest
        if dist(shiftKey) < dist(capsKey):
            moveTo(shiftKey)
        else:
            moveTo(capsKey)
            capsOn ^= 1
    elif diffCase([cases[ind]]): # use shift
        moveTo(shiftKey)

    moveTo(ch) # apply the move

print('Total:', totalKeys)

সম্পূর্ণ প্রোগ্রাম থেকে বর্ধিত আউটপুট:

Code Golf
a -> C = 2
c -> ^ = 6
^ -> o = 5
o -> d = 2
d -> e = 1
e -> + = 5
+ -> _ = 1
- -> + = 1
+ -> G = 3
g -> o = 3
o -> l = 3
l -> f = 5
f -> = = 6
Total: 43

@ বিডিন https://codegolf.stackexchange.com/a/18983/42736
4 @xnor https://codegolf.stackexchange.com/a/40791/42736 19 অ্যালেক্সকে ধন্যবাদ জানাতে একটি বাইট ধন্যবাদ সংরক্ষণ করা হয়েছে


আমি এখনও অজগর শিখছি বলে কোনও সহায়তার প্রশংসা করা হয়েছে এবং এটি আমার প্রথম কোড গল্ফ।
জে আতকিন

আপনি আপনার অভ্যন্তরীণ টেবিলগুলিতে আন্ডারস্কোরের পরিবর্তে একটি স্থান ব্যবহার করতে পারেন।
অ্যালেক্স রিঙ্কিং

আমি এটি ভেবে দেখিনি, ধন্যবাদ;)
জে আটকিন

3

সি 675 বাইট

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়। পুনরাবৃত্ত মূল:

#define Y(_) (!isdigit(_)?!isalpha(_)?3:1+(toupper(_)-65)/10:0)
#define X(_) (!isdigit(_)?!isalpha(_)?_-32&&_-45?_-43?9-(_==94):7:6:(toupper(_)-5)%10:_-48)
x,y,z;char*s;main(a,_,p,q,r){a<2?s[_]?!isdigit(s[_])&&((s[_]-32&&!isupper(s[_]))||!a)&&((s[_]-45&&!islower(s[_]))||a)?q=x,r=y,main(3,43),p=z,x=X(43),y=Y(43),main(3,s[_]),p+=z,x=X(s[_]),y=Y(s[_]),main(a,_+1),p+=z,x=q,y=r,main(3,94),q=z,x=X(94),y=Y(94),main(3,s[_]),q+=z,x=X(s[_]),y=Y(s[_]),main(!a,_+1),q+=z,z=(q<p?q:p):(main(3,s[_]),q=z,x=X(s[_]),y=Y(s[_]),main(a,_+1),z+=q):(main(3,61)):(a<3?s=((char**)_)[1],x=0,y=1,main(1,0),printf("%d",z):(x=X(_)-x,y=Y(_)-y,x+=10*(x<0),y+=4*(y<0),z=(x>5?10-x:x)+(y>2?4-y:y)));}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.