খুব অদ্ভুত শব্দ কাউন্টার


13

ইনপুট: ফাংশন আর্গুমেন্ট, কমান্ড লাইন আর্গুমেন্ট, STDIN, বা অনুরূপ মাধ্যমে কোনও স্ট্রিং একচেটিয়াভাবে ছোট হাতের অক্ষর দ্বারা গঠিত।

আউটপুট: একটি নম্বর মুদ্রণ করুন বা প্রত্যাবর্তন করুন যা নিম্নলিখিত মেট্রিক অনুযায়ী অক্ষরের দূরত্বগুলির যোগফলকে উপস্থাপন করবে:

আপনি প্রথম এবং দ্বিতীয় পত্রটি নিয়ে তাদের মধ্যকার দূরত্ব গণনা করুন। QWERTY কীবোর্ড লেআউটটি দিয়ে দূরত্বটি সংজ্ঞায়িত করা হয়েছে, যেখানে একই সারির প্রতিটি সংলগ্ন অক্ষরের দূরত্ব 1 এবং একই কলামের প্রতিটি সংলগ্ন অক্ষরের দূরত্ব 2 থাকে যা সংলগ্ন নয় এমন বর্ণগুলির মধ্যে দূরত্ব পরিমাপ করার জন্য আপনি সংক্ষিপ্ততম পথটি গ্রহণ করেন দুজনের মধ্যে

উদাহরণ:

q->w is 1 distance apart
q->e is 2 distance
q->a is 2 distance
q->s is 3 distance (q->a->s or q->w->s)
q->m is 10 distance

তারপরে আপনি দ্বিতীয় এবং তৃতীয় অক্ষর গ্রহণ করেন, তৃতীয় এবং চতুর্থ, ইত্যাদি, আপনি ইনপুটটির শেষে পৌঁছা পর্যন্ত। আউটপুট হ'ল সমস্ত দূরত্বের যোগফল।

ইনপুট এবং আউটপুট উদাহরণ:

INPUT: qwer
OUTPUT: 3

INPUT: qsx
OUTPUT: 5

INPUT: qmq
OUTPUT: 20

INPUT: tttt
OUTPUT: 0

একই কলামে কোন বর্ণগুলি রয়েছে তা দেখানোর জন্য এখানে একটি চিত্র রয়েছে:

কলামে অক্ষর

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!


1
আমার মনে হয় Q-> মিটার 8 টি কী ...
সুপারজেডি 224

2
আপনি যদি একটি সারি থেকে নীচে যান তবে এটি 2 দূরত্ব হিসাবে গণনা করা হয় তবে আপনি মূল দূরত্ব গণনা করবেন না
ভজুরা

এটি সেখানেও রয়েছে :)
ভজুরা

আমরা কি ধরে নিতে পারি যে ইনপুট স্ট্রিংটি সর্বদা নিরবচ্ছিন্ন থাকবে?
অ্যালেক্স এ

এটি কোডগলফ.স্ট্যাকেক্সেঞ্জার.কম / সেকশনস / 50722/… এর সাথে বেশ মিল । এটি বাদে অক্ষর ব্যবহার করে, অন্যটি সংখ্যা ব্যবহার করে।
রেটো কোরাাদি

উত্তর:


2

সিজেম, 50 বাইট

r{i",ÙZ°^ªýx´|"257b27b=A+Ab}%2ew::.-::z2fb:+

নোট করুন যে কোডটিতে অপ্রিন্টযোগ্য অক্ষর রয়েছে।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন । যদি পারমালিঙ্ক কাজ না করে তবে এই পেস্ট থেকে কোডটি অনুলিপি করুন

পটভূমি

আমরা শীর্ষ সারিতে বর্ণগুলি 0 থেকে 9 , হোম সারিতে বর্ণগুলি 10 থেকে 18 এবং নীচের সারিতে অক্ষরগুলিতে 20 থেকে 26 অবস্থান নির্ধারণ করি ing

বর্ণানুক্রমিকভাবে সমস্ত 26 টি বর্ণের অবস্থানগুলি

[10 24 22 12 2 13 14 15 7 16 17 18 26 25 8 9 0 3 11 4 6 23 1 21 5 20]

এই দৈর্ঘ্য 26. একটি অ্যারের অ্যারে যেহেতু CJam মধ্যে চারপাশে মোড়ানো, এবং চিঠির কোড বিন্দু হয় 104 = 4 × 26 , আমরা বাম অ্যারের 7 ইউনিট আবর্তিত, তাই প্রতিটি চিঠি অবস্থান অ্যাক্সেস করতে পারবেন তার কোড পয়েন্ট

[15 7 16 17 18 26 25 8 9 0 3 11 4 6 23 1 21 5 20 10 24 22 12 2 13 14]

এখন আমরা এই অ্যারেটিকে একটি বেস 27 সংখ্যার উপাদানগুলির সংখ্যাগুলি বিবেচনা করে এনকোড করি এবং ফলস্বরূপ পূর্ণসংখ্যাকে 257 বেসে রূপান্তর করি।

[6 153 44 8 217 90 176 156 94 24 170 253 147 120 180 124]

সংশ্লিষ্ট ইউনিকোড অক্ষর দ্বারা প্রতিটি পূর্ণসংখ্যা প্রতিস্থাপন করে আমরা উত্স কোড থেকে স্ট্রিংটি পাই।

কিভাবে এটা কাজ করে

r              e# Read a whitespace separated token from STDIN.
{              e# For each character:
  i            e#   Push its code point.
  ",ÙZ°^ªýx´|" e#   Push that string.
  257b27b      e#   Convert from base 257 to base 27.
  A+Ab         e#   Add 10 and convert to base 10.
               e#   Examples: 7 -> [1 7], 24 -> [3 4]
}%             e#
2ew            e# Push all overlapping slices of length 2.
::.-           e# Subtract the corresponding components of the pairs in each slice.
::z            e# Apply absolute value to the results.
2fb            e# Convert each to integer (base 2).
               e# Example: [2 5] -> 2 × 2 + 5 = 9
:+             e# Add the distances.

1
মানুষ এটি এমনকি কীভাবে কাজ করে
বাজুরা

@ বাজুরা ডেনিস সাধারণত ব্যাখ্যা যোগ করতে পারে, আপনি যদি অপেক্ষা করেন তবে তিনি সম্ভবত একটি যুক্ত করবেন :) আপনি যদি আরও অস্পষ্ট / মৌলিক ব্যাখ্যা চান, তবে ইউএসফ্রেন্ডরা সিজেএম ব্যাখ্যক তৈরি করেছিলেন যা আপনি এখানে
কেড

@ বাজুরা: আমি আমার উত্তর সম্পাদনা করেছি।
ডেনিস

7

পাইথন 2, 220 ... 124 119 বাইট

একটি সংরক্ষণ করার জন্য Sp3000 বিশাল ধন্যবাদ অনেক বাইটের।

f='qwertyuiopasdfghjkl zxcvbnm'.find
g=lambda i:sum(abs(f(x)%10-f(y)%10)+2*abs(f(x)/10-f(y)/10)for x,y in zip(i,i[1:]))

ব্যবহার:

g("tttt") -> 0

এটি এখানে দেখুন।

কিছুটা অবহেলিত + ব্যাখ্যা:

f='qwertyuiopasdfghjkl zxcvbnm'.find  # Defining keyboard rows and aliasing find
g=lambda i:                           # Defining a function g which takes variable i
    sum(                              # Sum of 
        abs(f(x)%10-f(y)%10)          # horizontal distance, and
        + 2*abs(f(x)/10-f(y)/10)      # vertical distance,
        for x,y in zip(i,i[1:]))      # for each pair in the zipped list

# Example of zipping for those unaware:
# Let i = asksis, therefore i[1:] = sksis, and zip would make
# the list of pairs [(a,s),(s,k),(k,s),(s,i),(i,s)].

5

জাভা, 266 বাইট

int c(String q){String[]r={"qwertyuiop","asdfghjkl","zxcvbnm"};int v=0,l=q.length();int[][]p=new int[l][2];for(int i=0;i<l;i++){while(p[i][0]<1)p[i][0]=r[p[i][1]++].indexOf(q.charAt(i))+1;v+=i<1?0:Math.abs(p[i][0]-p[i-1][0])+2*Math.abs(p[i][1]-p[i-1][1]);}return v;}

অবরুদ্ধ সংস্করণ:

int c(String q) {
    String[] r = {
        "qwertyuiop",
        "asdfghjkl",
        "zxcvbnm"
    };
    int v = 0, l = q.length(); // v=return value, l = a shorter way to refer to input length
    int[][] p = new int[l][2]; // an array containing two values for each
                               // letter in the input: first its position
                               // within the row, then its row number (both
                               // 1 indexed for golfy reasons)
    for(int i = 0; i<l; i++) { // loops through each letter of the input
        while (p[i][0] < 1) // this loop populates both values of p[i]
            p[i][0] = r[p[i][1]++].indexOf(q.charAt(i))+1;
        v += (i<1) ? 0 : Math.abs(p[i][0]-p[i-1][0])+2*Math.abs(p[i][1]-p[i-1][1]); // adds onto return value
    }
    return v;
}

আপনি ব্যবহার করে কয়েকটি বাইট সংরক্ষণ করতে পারেনint v=0,l=q.length(),p[][]=new int[l][2];
Ypnypn

3

এসডাব্লুআই-প্রোলোগ, 162 বাইট

a(A):-a(A,0).
a([A,B|C],T):-Z=`qwertyuiopasdfghjkl0zxcvbnm`,nth0(X,Z,A),nth0(Y,Z,B),R is T+(2*abs(Y//10-X//10)+abs(Y mod 10-X mod 10)),(C=[],print(R);a([B|C],R)).

উদাহরণ: a(`qmq`)আউটপুট 20(এবং এর trueপরে কিন্তু আমি এটি সম্পর্কে কিছুই করতে পারি না)।

সম্পাদনা: আরও 3 বাইট ব্যবহার করতে হয়েছিল। আমার আসল প্রোগ্রামটি প্রদত্ত পরীক্ষার কেসগুলি পাস করেছে তবে প্রকৃতপক্ষে ভুল ছিল (পরম মানগুলি ভুল জায়গায় প্রতিস্থাপন করা / নিখোঁজ হয়েছিল)

দ্রষ্টব্য: আপনি যদি আইডিয়ন বলার জন্য এটি ব্যবহার করতে চান তবে আপনাকে সমস্ত ব্যাককোটগুলি `ডাবল উদ্ধৃতিতে প্রতিস্থাপন করতে হবে "। আমার ক্ষেত্রে ব্যাককোটিস (যা এসডাব্লুআই-প্রোলোগের বর্তমান মান) স্ট্রিংগুলির জন্য কোডের তালিকা এবং ডাবল-কোট অক্ষরগুলির স্ট্রিং উপস্থাপন করে তবে এসডাব্লুআই-প্রোলোগের পুরানো সংস্করণে এটি আলাদা is

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