চিঠিগুলি, চলাফেরা করুন!


35

একটি স্ট্রিং দেওয়া হয়েছে আপনাকে অবশ্যই প্রতিটি বর্ণ (প্রথম বর্ণ থেকে শুরু করে) বর্ণমালার অবস্থান অনুসারে স্থানান্তর করতে হবে। আপনি যদি স্ট্রিংয়ের শেষে পৌঁছে থাকেন তবে আপনাকে অবশ্যই চারপাশে মোড়ানো করতে হবে। নন-চিঠিগুলি সরানোর দরকার নেই।

উদাহরণ:

Dog

Dবর্ণমালার চতুর্থ অক্ষর তাই আমরা এটিকে ডানদিকে চারটি দাগ সরাই। চারপাশে মোড়ানো পরে, স্ট্রিং এ পরিবর্তন করে oDgo15 তম অক্ষর, (15 মড 3) = 0, তাই এটি সরানো হয় না। g7th ম অক্ষরটি - (mod টি Mod 3) = 1, সুতরাং স্ট্রিংটি হয়ে যায় goD

hi*bye

  • hএটি অষ্টম অক্ষর, এটি 8 স্পট - hi*bye=> এ সরানi*hbye
  • iএটি 9 ম অক্ষর, এটি 9 দাগ - i*hbye=> এ স্থানান্তর করুন*hbiye
  • bএটি ২ য় অক্ষর, এটিকে ২ টি দাগ - *hbiye=> সরান*hiybe
  • yএটি 25 তম অক্ষর, 25 স্পট - *hiybe=> এ সরান*hibye
  • eএটি 5 ম অক্ষর, এটি 5 স্পট - *hibye=> এ সরান*hibey

নন-চিঠিগুলি সরানোর দরকার নেই, তবে তারা এখনও জায়গা নেয়।

  • cat => tca
  • F.U.N => .F.NU
  • mississippi => msiisppssii

আমাদের কি একটি স্ট্যান্ড স্টোন প্রোগ্রাম করতে হবে বা একটি ফাংশন যথেষ্ট? এছাড়াও, আমরা স্ট্রিং মুদ্রণ করতে হবে?
কাটেনকিও

ইনপুটটিতে কোন অক্ষর উপস্থিত হতে পারে? মুদ্রণযোগ্য এএসসিআইআই? Linefeeds? কোন এএসসিআইআই? কোন ইউনিকোড?
মার্টিন এন্ডার

3
এছাড়াও বারবার চিঠিগুলির সাথে একটি পরীক্ষার কেস ভাল হবে।
মার্টিন এন্ডার

@ মার্টিন যে কোনও এএসসিআইআই।
জিওকাভেল

@ কেটেনকিও ফাংশন অনুমোদিত is আপনি যদি কোনও ফাংশন ব্যবহার করছেন তবে আউটপুট হ'ল রিটার্ন মান।
জিওকাভেল

উত্তর:


6

সিজেম, 44 42 40 বাইট

qN+ee_{Xa/~\+XW=eu__el=!\'@-*m<Xa+}fXWf=

আউটপুটে একটি পিছনের লাইনফিড রয়েছে।

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

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

lN+     e# Read input and append a linefeed.
ee      e# Enumerate the array, so input "bob" would become [[0 'b] [1 'o] [2 'b] [3 N]]
        e# This is so that we can distinguish repeated occurrences of one letter.
_{      e# Duplicate. Then for each element X in the copy...
  Xa/   e# Split the enumerated string around X.
  ~     e# Dump the two halves onto the stack.
  \+    e# Concatenate them in reverse order. This is equivalent to rotating the current
        e# character to the front and then removing it.
  XW=   e# Get the character from X.
  eu    e# Convert to upper case.
  _     e# Duplicate.
  _el=! e# Check that convert to lower case changes the character (to ensure we have a
        e# letter).
  \'@-  e# Swap with the other upper-case copy and subtract '@, turning letters into 1 to
        e# 26 (and everything else into junk).
  *     e# Multiply with whether it's a letter or not to turn said junk into 0 (that means
        e# everything which is not a letter will be moved by 0 places).
  m<    e# Rotate the string to the left that many times.
  Xa+   e# Append X to the rotated string.
}fX
Wf=     e# Extract the character from each pair in the enumerated array.

এটি সঠিক অবস্থানে কেন শেষ হয় তা দেখতে hi*byeউদাহরণের শেষ পুনরাবৃত্তিটি বিবেচনা করুন । আমরা প্রক্রিয়া করার পরে e, গণিত স্ট্রিংটি এই অবস্থানে রয়েছে:

[[4 'y] [6 N] [2 '*] [0 'h] [1 'i] [3 'b] [5 'e]]

প্রথমত, আমরা লাইনফিডের চারপাশে বিভক্ত হয়ে অংশগুলি বিপরীত ক্রমে সংমিশ্রিত করি:

[[2 '*] [0 'h] [1 'i] [3 'b] [5 'e] [4 'y]]

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

[[2 '*] [0 'h] [1 'i] [3 'b] [5 'e] [4 'y] [6 N]]

যদি কেউ দীর্ঘ পরীক্ষার কেসের তুলনা করতে চায় তবে কিছু অতিরিক্ত ফলাফল:

Hello, World!
,W oeHlo!lrld

Programming Puzzles & Code Golf
ago fgliPomomnrr elP& uC dezzsG

The quick brown fox jumps over the lazy dog
t eg chbi ko qfTounyzrj omw epx ueoahs rlvd

abcdefghijklmnopqrstuvwxyz
aqbrcdsetfguhivjwklxmnyozp

zyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyz

আমি শেষটি পছন্দ করি। :)


পাইথের তালিকায় চপ লিস্ট দরকার।
isaacg

@ আইসাক নাহ, আমি নিশ্চিত যে এটি হয় না। ;)
মার্টিন এন্ডার

আপনি এটি তৈরি করতে পারেন যাতে এটি বহু-লাইনের স্ট্রিংগুলিকে সমর্থন করে?
জিওকাভেল

@ জোকাভেল ওহ, ঠিক আছে।
মার্টিন এন্ডার

Sith খুশি, ডার্থ Büttner।
জিওকাভেল

4

রুবি 125 130 132 139 বাইট

->q{a=q.chars.map{|c|[c,c=~/[a-z]/i&&c.ord%32]}
while i=a.index{|c,s|s}
c,s=a.delete_at i
a.insert (i+s)%q.size,[c]
end
a*''}

পরীক্ষাগুলির সাথে অনলাইন ডেমো: http://ideone.com/GYJm2u

প্রাথমিক (অবারিত সংস্করণ): http://ideone.com/gTNvWY

সম্পাদনা করুন: তার পরামর্শের জন্য মানটওয়ার্ককে অনেক ধন্যবাদ !

সম্পাদনা 2 : নির্দিষ্ট অক্ষর গণনা (আমি প্রাথমিকভাবে সিআরএলএফ লাইন শেষ গণনা ছিল।)


সবেমাত্র পরীক্ষিত: c.upcase.ord-64c.ord%32
manatwork

@ মান্যাটওয়ার্ক যা ভাল কাজ করে, ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু

আবার খুঁজছি ... অপেক্ষা করুন! a.join??? আপনি কে এবং আপনি ডাব্লুএফএলএফ দিয়ে কি করেছেন? তিনি অবশ্যই এটি লিখতেন a*''
manatwork

@ মানাত ওয়ার্ক :) আমার কোডটিতে থাকা নিয়ে আমি এতটা বিরক্ত while ... endহয়েছিলাম যে আমি তা করতে ভুলে গেছি। দেখার জন্য ধন্যবাদ!
ক্রিশ্চিয়ান লুপাস্কু

আপনি যে চালু করা যাবে না while ... endবা (...)while ...?
মার্টিন এন্ডার

3

পাইথন 3, 278 275 273 270 260 258 249 248 243 238 বাইট

আমি সত্যিই গলফ এই নিচে ভাল উচিত, কিন্তু এখানে আমার সমাধান, ধন্যবাদ সাথে আছেন katenkyo এবং যুক্তি দিয়ে তাঁর সাহায্যের জন্য, এর Cyoce এবং ঐ মেগো golfing সঙ্গে তাদের সাহায্যের জন্য।

সম্পাদনা: সর্বশেষে, আমি এটি একটি তুলনা বিবৃতিতে পেয়েছিলাম। পাণিপ্রার্থনা! (এবং হ্যাঁ, আমি নড়তেও পারে যে z=-zমধ্যে a,m=m,aবিট, কিন্তু যে বাইট সংরক্ষণ না এবং এটা কোড আরো বলার চেয়ে আমি ভেবেছিলাম প্রয়োজন ছিল)

সম্পাদনা: বাইট গণনা বন্ধ ছিল।

def m(s):
 l=len(s);r=range(l);p=[[i,s[i]]for i in r]
 for i in r:
  if s[i].isalpha():
   a=p[i][0];p[i][0]=m=(a+ord(s[i])%32)%l;z=1
   if a>m:a,m=m,a;z=-z
   for j in r:p[j][0]-=z*(j!=i)*(a<=p[j][0]<=m) 
 return''.join(dict(p).values())

Ungolfed:

def move(string):
 length = len(string)
 places = [[i,string[i]]for i in range(length)]
 for index in range(length):
  char = string[index]
  if char.isalpha():
   a = places[index][0]
   mov = (a + ord(char)%32) % length
   places[index][0] = mov
   for j in range(length):
    k = places[j][0]
    if a <= k <= mov and j!=index:
     places[j][0]-=1
    elif mov <= k <= a and j != index:
     places[j][0]+=1
 return''.join(dict(places).values())

আমি * বিশ্বাস * যে p[j][0]সেটিং দ্বারা কমে যাবে J=p[j];, শুরুতে তারপর দৃষ্টান্ত প্রতিস্থাপন p[j][0]সঙ্গেP[0]
Cyoce

@ কিয়েস আমি মনে করি যে সমস্যাটি হ'ল আমার pসরাসরি সম্পাদনা করা দরকার , এবং এটি কোনও ভেরিয়েবল নয় p[j]it এছাড়াও, আপনি যদি আমার পুনর্বিবেচনার ইতিহাসটি দেখুন তবে আমার তুলনা করার k = p[j][0]জন্য একটি পরিবর্তনশীল ছিল a<=k<=m, তবে এটি প্রমাণিত হয়েছে যে ড্রপিং kআরও ভাল ছিল কারণ আমি kব্যবহার করে সংরক্ষণ করার চেয়ে অতিরিক্ত লাইন থেকে সেটগুলিতে ইন্ডেন্টগুলিতে আরও বাইট সংরক্ষণ করেছি k
শার্লক 9
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.