ক্রিপ্টিক কিকার //


12

ক্রিপ্টিক কিকার

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

ইনপুট

বর্ণমালা অনুসারে ইনপুটটিতে ছোট হাতের শব্দ থাকে। এই শব্দগুলি ডিক্রিপ্ট হওয়া পাঠ্যে প্রদর্শিত হতে পারে এমন শব্দের অভিধান রচনা করে। অভিধান অনুসরণ করে ইনপুট বিভিন্ন লাইন। উপরে বর্ণিত হিসাবে প্রতিটি লাইন এনক্রিপ্ট করা হয়।

অভিধানে এক হাজারের বেশি শব্দ নেই words কোনও শব্দ 16 অক্ষরের বেশি নয়। এনক্রিপ্ট করা রেখাগুলিতে কেবল ছোট হাতের অক্ষর এবং স্পেস থাকে এবং দৈর্ঘ্যে 80 টি অক্ষরের বেশি হয় না।

আউটপুট

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

নমুনা ইনপুট

and dick jane puff spot yertle

bjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn
xxxx yyy zzzz www yyyy aaa bbbb ccc dddddd

নমুনা আউটপুট

dick and jane and puff and spot and yertle
**** *** **** *** **** *** **** *** ******

সমাধান এখানে । দয়া করে মনে রাখবেন যে আমি সংক্ষিপ্ততম বাইট / প্রতিযোগিতামূলক প্রোগ্রামার দৌড়ে ঘোড়া নই । আমি ঠিক ধাঁধা পছন্দ!

( উত্স )


1
দয়া করে আপনার> ইনপুট << এমন প্রতিটি ভাষার ক্ষেত্রে প্রযোজ্য এমন কিছুতে সীমাবদ্ধ করুন। উদাহরণস্বরূপ, অনেকগুলি ভাষা ঘৃণা করবে, এবং প্রশংসা করবে না যে ফর্ম্যাটটি with. দিয়ে শুরু হয় I'd
orlp

ঠিক আছে, আপনি সেখানে যান!
ধ্রুব রামানি

1
এটির জন্য রানটাইম সীমাবদ্ধতা আছে? একটি কাজ না হওয়া পর্যন্ত আমি কি প্রতিটি সম্ভাব্য প্রতিস্থাপনের সংমিশ্রণের মধ্য দিয়ে পুনরাবৃত্তি করতে পারি (যা সম্ভবত শেষ হতে কয়েক বছর সময় লাগবে)?
নাথান মেরিল

@ নাথানমিরিল এটি করুন, এবং যদি এটি কয়েক বছর সময় নিতে পারে তবে এটি কেবল স্টার আকারে মুদ্রণ করুন। বিহান, এটি কোনও সদৃশ নয়, দয়া করে প্রশ্নটি সঠিকভাবে পড়ুন।
ধ্রুব রামানি

আমরা কি কেবল শব্দগুলি আউটপুট করতে পারি বা সেগুলিতে আমাদের যোগ দিতে হবে?
ডাউনগোট

উত্তর:


3

পাইথন 3, 423 বাইট

import sys,re
S=re.sub
D,*L=sys.stdin.read().split('\n')
def f(W,M=[],V="",r=0):
 if len({d for(s,d)in M})==len(M):
  if[]==W:return V.lower()
  for d in D.split():p='([a-z])(?%s.*\\1)';m=re.match(S(p%'=',')\\1=P?(',S(p%'!',').>\\1<P?(',W[0].translate(dict(M))[::-1]))[::-1]+'$',d.upper());r=r or m and f(W[1:],M+[(ord(s),m.group(s))for s in m.groupdict()],V+d+" ")
  return r
for l in L:print(f(l.split())or S('\w','*',l))

নমুনা ইনপুট / আউটপুট হিসাবে একই ফর্ম্যাটটি ব্যবহার করে STDIN থেকে ইনপুট পড়ে এবং STDOUT এ আউটপুট লিখে।

ব্যাখ্যা

সিফারেক্সটেক্সের প্রতিটি লাইনের জন্য, আমরা নিম্নলিখিত পদ্ধতিটি সম্পাদন করি:

আমরা ইতিমধ্যে প্রতিষ্ঠিত সমস্ত অক্ষরের রূপান্তরগুলির একটি মানচিত্র, এম রাখি (যা প্রাথমিকভাবে খালি)। আমরা এটি এমনভাবে করি যাতে উত্স বর্ণগুলি সমস্ত ছোট হাতের হয় এবং গন্তব্য অক্ষরগুলি সমস্ত বড় হয় erc

আমরা শব্দগুলি ক্রমবর্ধমানভাবে প্রক্রিয়াজাত করি। প্রতিটি শব্দের জন্য, আমরা অভিধানে এটি মেলে এমন সমস্ত শব্দ খুঁজে পেতে পারি:

মনে করুন যে আমাদের শব্দ, ডাব্লু , glpplppljjlএবং এটিতে এম নিয়ম রয়েছে j -> P। আমরা প্রথম রুপান্তর W বিদ্যমান নিয়ম চালু করে এম , পেয়ে glpplpplPPl। আমরা তখন রুপান্তর W নিম্নলিখিত পাইথন-দান Regex মধ্যে:

(?P<g>.)(?P<l>.)(?P<p>.)(?P=p)(?P=l)(?P=p)(?P=p)(?P=l)PP(?P=l)

রূপান্তরের নিয়মগুলি নিম্নরূপ:

  • প্রতিটি ছোট হাতের অক্ষরের প্রথম উপস্থিতি x, প্রতিস্থাপন করা হয় । এটি একটি নামকৃত ক্যাপচার গ্রুপটিকে সংজ্ঞায়িত করে , এটি একটি একক ক্যাহ্যাক্টারের সাথে মেলে।(?P<x>.)x
  • প্রতিটি পরবর্তী ঘটনা প্রতিটি ছোট হাতের অক্ষর, এর xসাথে প্রতিস্থাপিত হয় । নামধারী গোষ্ঠীর দ্বারা চিহ্নিত চরিত্রটির এটি একটি প্রতিচ্ছবি ।(?P=x)x

আমরা reversing দ্বারা এই রূপান্তর সঞ্চালন W , তারপর দুই নিম্নলিখিত Regex বদল আবেদন:

s/([a-z])(?!.*\1)/)>\1<P?(/
s/([a-z])(?=.*\1)/)\1=P?(/

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

আমরা অভিধানের প্রতিটি শব্দের বিপরীতে ফলাফলের রেজেক্সের সাথে মেলে, যেখানে অভিধানের শব্দগুলি বড় হাতের আকার হিসাবে উপস্থিত হয়। উদাহরণস্বরূপ, উপরের রেজেক্স শব্দের সাথে মিলবে MISSISSIPPI। আমরা যদি কোনও মিল খুঁজে পাই, আমরা এটি থেকে নতুন রূপান্তর নিয়মগুলি বের করি এবং সেগুলিকে এম তে যুক্ত করি । নতুন রূপান্তর নিয়মগুলি হ'ল প্রতিটি ক্যাপচার গ্রুপগুলির দ্বারা ক্যাপচার করা অক্ষর। উপরের রেজেক্সে, গ্রুপ gম্যাচ M, গ্রুপ lম্যাচ I, এবং গ্রুপ pম্যাচগুলি S, আমাদের বিধিগুলি প্রদান করে g -> M, l -> I, p -> S। আমাদের নিশ্চিত করতে হবে যে ফলাফলের নিয়মগুলি সামঞ্জস্যপূর্ণ, অর্থাৎ কোনও দুটি উত্সের অক্ষর একই গন্তব্য চিঠির মানচিত্র নয়; অন্যথায়, আমরা ম্যাচটি প্রত্যাখ্যান করি।

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


2

সিজেম, 62 56 বাইট

qN%Sf/(f{\:C,m*{C..+`Sa`m2/Q|z_''f-Qf|=},C:,'*f*a+0=S*N}

বেশ ধীর এবং স্মৃতি ক্ষুধার্ত, তবে জাভা ইন্টারপ্রেটারের সাথে পরীক্ষার ক্ষেত্রে কাজ করে।

উদাহরণ রান

$ cat input; echo
and dick jane puff spot yertle

bjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn
xxxx yyy zzzz www yyyy aaa bbbb ccc dddddd
$ time cjam kicker.cjam < input
dick and jane and puff and spot and yertle
**** *** **** *** **** *** **** *** ******

real    5m19.817s
user    6m41.740s
sys     0m1.611s
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.