বর্ণমালা জুড়ে


14

বর্ণমালা জুড়ে

এই চ্যালেঞ্জের ক্ষেত্রে, আপনার বর্ণমালার অক্ষরগুলি মনে রাখতে সমস্যা হয়। এটি রোধ করতে আপনি বর্ণমালাটি উপরে এবং নীচে যান, যতক্ষণ না আপনি চিঠিটি পান।

যেহেতু আপনি চান যে আপনার কোডটি পোর্টেবল হতে পারে, আপনি এটি লেটার ব্লক দিয়ে লিখবেন। আপনার কাছে সীমিত পরিমাণের লেটার ব্লক রয়েছে কারণ সেগুলির বেশিরভাগ চুরি হয়ে গেছে তাই আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত তা নিশ্চিত করা দরকার।

উদাহরণ

ইনপুট / আউটপুট জোড়া ফাঁকা রেখার দ্বারা পৃথক করা হয়:

Ac
ABc

Ad
ABcd

fA
fedCBA

adB
abcdcB


Hello, World!
HGfefghijkllmno, WVUTSrqpopqrqponmlkjihgfed!

চ্যালেঞ্জ

আপনার লক্ষ্য হ'ল A-Za-zতাদের মধ্যে বর্ণমালা ( ) এর মধ্যবর্তী অক্ষরগুলির সাথে সংলগ্ন বর্ণগুলি শৃঙ্খলাবদ্ধ করা । যদি মূলধন পৃথক হয় তবে মূলধনটি মাঝখানে পরিবর্তিত হওয়া উচিত। যদি মূলধনকে মাঝখানে সমানভাবে রূপান্তরিত করা না যায় তবে এটি মাঝের পরে ভেঙে যায় । যদি কোনও অক্ষর বর্ণমালার চরিত্র না হয় তবে কোনও রূপান্তর করা উচিত নয়।

জয়লাভ

এটি তাই বাইট জেতে সংক্ষিপ্ততম কোড!

-10% বোনাস: যদি আপনার কোড অঙ্কগুলি শৃঙ্খলাবদ্ধ করে


1
লেটার ব্লক বলতে কী বোঝ?
LegionMammal978

@ LegionMammal978 পত্র ব্লক । চ্যালেঞ্জের সাথে সত্যই প্রাসঙ্গিক নয়, কেবল একটি এলোমেলো কারণেই আমি সংক্ষিপ্ত কোডের জন্য নিয়ে এসেছি
ডাউনওয়েট

ঠিক আছে, শুধু যদি আপনি বোঝানো হতাশ সীমাবদ্ধ সোর্স
LegionMammal978

আপনার নিয়ম অনুসারে, আপনি ভাবেন না যে adBরূপান্তর করা উচিত abcdCBকারণ সি d এবং খ এর মাঝখানে রয়েছে।
জিওকাভেল

এনক্রিপশনের মধ্যে আমার বর্ণমালার মতো খুব সুন্দর , তবে এরই মধ্যে দ্বিগুণ ভোট রয়েছে তাই আমি কেবল আমার পতাকা চিহ্নিত করব।
ফেজ

উত্তর:



2

পাইথন 2, 303 291 288 282 276 261 253 বাইট

এটি হ্যানিস কার্পিলার চেয়ে সম্পূর্ণ আলাদা অ্যালগরিদম এবং প্রচুর গল্ফ করার পরে, আমি দৈর্ঘ্যের যথেষ্ট উন্নতি করতে পেরেছি। আমি মনে করি এই অ্যালগরিদম অন্যান্য ভাষাগুলির মধ্যেও সংক্ষিপ্ত কোডগুলির মধ্যে একটির জন্য বিশেষত ডু-ওয়েল লুপ এবং অন্তর্নির্মিত সাইনাম ফাংশনগুলির ভাষাগুলির জন্য মঞ্জুরি দেয়। আরও উন্নতির জন্য পরামর্শ স্বাগত জানাই। (কিছু আমাকে বলে যে পুরো অভ্যন্তরীণ লুপটি তালিকা বোধগম্য হিসাবে আবার লিখতে হবে))

l=map(ord,list(raw_input()));f=q=1
while q:
 q=0;m=~-f/2;c=m
 while abs(c)<len(l)-1:
  u=c+f;d=(l[u]-96)%32-(l[c]-96)%32
  if chr(l[c]).isalpha()*chr(l[u]).isalpha()*(d*d>1):l[:u-m]+=[l[c]+d/abs(d)];u+=f;q=1
  c=u
 f=-f
print "".join(map(chr,l))

1

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

f=s=>(o="",a=u=0,[...s].map(c=>{j=c.toUpperCase();p=j==c;b=j<"A"|j>"Z"?0:j.charCodeAt();for(i=0,m=a<b?b-a:a-b;a&&b&&++i<m;)o+=String.fromCharCode(i*(a<b||-1)+a+32*!(i>m/2?p:u));a=b;u=p;o+=c}),o)

ব্যবহার

f("Hello, World!")
=> "HGfefghijkllmno, WVUTSrqpopqrqponmlkjihgfed!"

ব্যাখ্যা

f=s=>(
  o="",                                   // o = output string
  a=                                      // a = previous character code (or 0 if symbol)
    u=0,                                  // u = 1 if previous character was upper-case
  [...s].map(c=>{                         // iterate through each letter of input

    // Get information about the current character
    j=c.toUpperCase();                    // j = current character in upper-case
    p=j==c;                               // p = current character is upper-case
    b=j<"A"|j>"Z"?0:j.charCodeAt();       // b = current character code (or 0 if symbol)

    // Interpolate characters (unless A or B is a symbol)
    for(i=0,m=a<b?b-a:a-b;a&&b&&++i<m;)   // loop for each character between A and B
      o+=String.fromCharCode(             // add interpolated character to output
        i*(a<b||-1)+a+                    // interpolate character code
          32*!(i>m/2?p:u)                 // apply case of the nearest character
      );

    // Set character A values to B for the next character
    a=b;
    u=p;
    o+=c                                  // add B itself to the output

  }),
  o                                       // return the output
)

1
ব্যবহার করে \wঅঙ্কগুলি ব্যর্থ হবে। '09'
edc65

কোনও যুক্তি ছাড়াই চারকোডএ্যাট () ব্যবহার করে 1 টি সংরক্ষণ করুন
21c 45 এডিসি 65

এবং ম্যাথ.এবস এড়ানো 2 টি অক্ষর সংরক্ষণ করুন a>b?a-b:b-a... এবং জাভাস্ক্রিপ্ট সংক্ষিপ্ত করার জন্য আরও 'মানক' কৌশল রয়েছে। আপনার ইন্টারপোলেশন পদ্ধতিতে আপনি আমার স্কোরকে হারাতে পারেন। এই সাইটে ইঙ্গিতগুলি দেখুন
edc65


তথ্যের জন্য ধন্যবাদ! আমি এখনও কোড গল্ফের হ্যাং পাচ্ছি। :)
user81655

1

জাভাস্ক্রিপ্ট ES6, 168 (186-10%) 176 193

সম্পাদন করা10% বোনাস পেতে

ইকামাস্ক্রিপ্ট comp অনুবর্তী ব্রাউজার ব্যবহার করে নীচে স্নিপেট চালনা পরীক্ষা করুন (আমি ফায়ারফক্স ব্যবহার করি)

f=s=>[...s].map(c=>{a=parseInt(c,36),m=(a-q)/(d=a>q?1:-1);for(n=1;m&&(a>9)==(q>9)&&(q+=d)!=a;n+=2)r=q.toString(36),o+=n<m&p<'a'|n>=m&c<'a'?r.toUpperCase():r;p=c,q=a,o+=c},o='',p=q=-f)&&o

// Explained
U=s=>(
  o = '', // initialize output
  p = '', // provious char, initialize to none
  q = NaN, // previous char code, initialize to none
  [...s].map( c => { // for each char 
    a = parseInt(c,36), // convert digit/letter to numeric code, case invariant, NaN if invalid
    d = a > q ? 1 : -1, // sign of difference (if not equal)
    m = (a - q) / d; // absolute value of difference or NaN 
    if (m && (a>9)==(q>9)) // if current and prev are different and both alpha or both digits  
      for( n = 1; 
          (q += d) != a; // loop from prev char (not included) to current (not included)
           n += 2)
        r=q.toString(36),
        // add intermediate char to output
        // upcase if: left side & prev is upcase or right side and current is upcase
        o+= n<m&p<'a'|n>=m&c<'a'?r.toUpperCase():r;
    p = c, // copy current to previous
    q = a, // copy current to previous
    o += c // add current char to ouput
  }),
  o
)  

// test
console.log=(...x)=>O.innerHTML+=x+'\n'

;['Ac','Ad','fA','adB','04aQ27','Hello World!'].
forEach(x=>console.log(x + ' -> ' + f(x)))
<pre id=O></pre>


0

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

এটি বেশ দীর্ঘ, তবে কমপক্ষে এটি প্রথম।

f=lambda p:ord(p.lower())
u=lambda p:"".join(p).upper()
s=raw_input()
w=s[0]
r=w
for q in s[1:]:
 o=q+w
 if q==w:o=""
 if o.isalpha():
  m=(f(w)<f(q))*2-1
  e=map(chr,range(f(w)+m,f(q)+m,m))
  if o==u(o):e=u(e)
  elif q==u(q):e[len(e)/2:]=u(e[len(e)/2:])
  elif -o.islower()+1:e[:len(e)/2]=u(e[:len(e)/2])
  r+="".join(e)
 else:
  r+=q
 w=q
print r
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.