অনুবাদ সারণীটি সন্ধান করুন


17

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

সম্ভবত উদাহরণের মাধ্যমে খুব সহজে সংজ্ঞায়িত:

বৈধ কেস

"bat", "sap" => ["bt","sp"]

অর্ডারিং লক্ষ করুন, এর ["tb","ps"]চ্যালেঞ্জের জন্য একটি আউটপুট বৈধ নয়।

"sense", "12n12" => ["se","12"]

এটি কীভাবে nঅনুবাদ করা হয়নি তা লক্ষ্য করুন কারণ এটি 1 থেকে 1 সম্পর্ক।

"rabid", "snail" => ["rabd","snal"]

এটি কীভাবে iঅনুবাদ করা হয়নি তা লক্ষ্য করুন কারণ এটি 1 থেকে 1 সম্পর্ক।

"ass", "all" => ["s","l"]

এ অন্তর্ভুক্ত নয়, এটি একই থাকে, প্যাটার্ন মিলের কারণে sমানচিত্র তৈরি করতে lপারে।

"3121212", "ABLBLBL" => ["312","ABL"]

পুরোপুরি প্যাটার্ন মেলে।

মিথ্যা মামলা

"banana", "angular" => false

(একই দৈর্ঘ্য নয়, অসম্ভব)।

"animal", "snails" => false

(প্রতিটি অক্ষর কেবল অনুবাদের প্রতিটি দিকেই ব্যবহার করা যেতে পারে)।

"can","cnn" => false

(এন অনুবাদে স্পষ্টভাবে ব্যবহৃত হয়, সুতরাং, এন-> এ দিয়ে অনুবাদ টেবিলটি সংজ্ঞায়িত করা অবৈধ হবে)

এইভাবে, [aimal,sails]এটি একটি মিথ্যা জবাব তৈরি করে একটি অবৈধ উত্তর।

"a1", "22" => false

"সাবধান" দেখুন, এটি মিথ্যা হিসাবে তালিকাভুক্ত করা হয়েছে। এই ক্ষেত্রে, এটি কারণ aএবং 1উভয়ই মানচিত্র করতে পারে না 2। (প্রতিটি অক্ষর কেবল অনুবাদের প্রতিটি দিকেই ব্যবহার করা যেতে পারে)।


এই উত্তরটি একটি ভাল মানদণ্ড বলে মনে হচ্ছে: /codegolf//a/116807/59376

দুটি তালিকাভুক্ত শব্দের জোড়গুলির কার্যকারিতা সম্পর্কে আপনার কাছে যদি প্রশ্ন থাকে তবে এই বাস্তবায়নটি পিছিয়ে দিন।


আই / ও বিধি

  • ইনপুট 2 টি উপাদান অ্যারের হিসাবে বা 2 পৃথক ইনপুট হিসাবে থাকতে পারে।
  • আউটপুট অ্যারে বা নিউলাইন / স্পেস সীমিত হিসাবে হতে পারে, আমি এটি কীভাবে দেখিয়েছি তার অনুরূপ।
  • মিথ্যা আউটপুট 0, -1 বা মিথ্যা হতে পারে। ত্রুটিযুক্ত / খালি আউটপুটও ঠিক আছে।
  • আপনি নিশ্চিত করছেন যে aসমান হবে না bএবং কেউই aকিংবা bখালি হবে।
  • aএবং bপ্রিন্টযোগ্য-এএসসিআইআই-কেবলমাত্র অক্ষরের ক্রম।

আদেশ সহকারে

  • অনুবাদগুলি বাম থেকে ডানে হতে হবে, উদাহরণ 1 দেখুন।
  • আপনার অক্ষরগুলি একইরকম থাকবে না not
  • আপনার প্রোগ্রামটি কেবল দুটি স্ট্রিং এ নিতে পারে aএবং b
  • প্রতিটি অক্ষর কেবল অনুবাদের প্রতিটি দিকেই ব্যবহার করা যেতে পারে। এই অনুবাদ করে তোলে snailsকরার animalsঅসম্ভব।
  • পুনরাবৃত্তির প্রতিস্থাপনগুলি হওয়া উচিত নয়। পুনরাবৃত্তির প্রতিস্থাপনের উদাহরণ: "a1","22"->[a1,12]যেখানে প্রথমে একটি 1 দ্বারা প্রতিস্থাপন করা হয়, তারপরে ফলাফলগুলি উভয়ই 2 এর সাথে প্রতিস্থাপিত হয়। এটি সঠিক নয়, ধরে নিন যে সমস্ত অনুবাদগুলি একে অপরের থেকে স্বতন্ত্র হয়, যার অর্থ এটি মিথ্যা। অর্থ: [a1,12] এর অনুবাদ টেবিল সহ "এ 1" 12 (22 নয়) এর মূল্যায়ন করে

একটি সহজ প্রতিস্থাপন সাইফার হিসাবে এই "অনুবাদ" লেবেল উদ্দেশ্য উদ্দেশ্য পরিষ্কার করতে সাহায্য করতে পারে।
গ্রেগ মার্টিন

এসোসিয়েটিভ অ্যারেগুলি কি আউটপুট হিসাবে অনুমোদিত? এটি আমার কিছু বাইটগুলি বাঁচাতে পারে
জার্গ হালসারম্যান

@ জার্গহেলসারম্যান আমি এটির অনুমতি দেবার কী কী প্রভাব ফেলবে তা সম্পর্কে পুরোপুরি নিশ্চিত নই, সম্ভবত 2 টি সংস্করণ তৈরি করুন যাতে আমি পার্থক্যটি দেখতে পারি? যদি আমি মনে করি এটি চ্যালেঞ্জের পক্ষে ক্ষতিকারক না হয় তবে আমি এটি সম্পাদনা করব।
যাদু অক্টোপাস উরন

আমার পোস্টটির প্রথম সমাধানটি স্ট্রিং হিসাবে দেখুন এবং দ্বিতীয়টির আউটপুট হিসাবে একটি এসোসিয়েটিভ অ্যারে রয়েছে
জার্গ হালসারম্যান

@ জার্গহ্লসারম্যান আহ্হ ... আমি দেখতে পাচ্ছি আপনি এখন এটি কীভাবে ব্যবহার করছেন, আমি মনে করি আমি এটিকে অস্বীকার করব, সব ভাষা হ্যাশ-জাতীয় কাঠামো সমর্থন করে না।
ম্যাজিক অক্টোপাস উরন

উত্তর:


7

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

f=
(s,t)=>!t[s.length]&&[...s].every((c,i)=>n[d=t[i]]==c||d&&!m[c]&&!n[d]&&(n[m[c]=d]=c,c==d||(a+=c,b+=d)),m={},n={},a=b='')&&[a,b]
<div oninput=o.textContent=f(s.value,t.value)><input id=s><input id=t><pre id=o>


এর জন্য কাজ করে না assএবং allহওয়া উচিত s,l
ম্যাজিক অক্টোপাস উরন

হ্যাঁ, এই স্নিপেটটি ট্রিপিন হ'ল, এটি যাচাইও হয়েছে, ঠিক আছে।
যাদু অক্টোপাস উরন

1
@ কারাসোকম্পুটিং এটি একটি পরিবর্তনশীল নাম সংঘর্ষ ছিল - এটি এখন ঠিক করা হয়েছে। এর জন্যে দুঃখিত.
নীল

7

জাভাস্ক্রিপ্ট (ES6), 108 107 105 106 বাইট

সম্পাদনা করুন : ইনপুটগুলিকে সমর্থন করার জন্য স্থির করে যেমন "22" / "a1"মিথ্যা বলা উচিত।


হয় হয় 0বা দুটি স্ট্রিং এর একটি অ্যারে প্রদান করে।

f=(a,b,x)=>[...a].some((c,i)=>d[C=b[i]]?d[C]!=c:(d[C]=c)!=C&&(s+=c,t+=C,!C),s=t='',d=[])?0:x||f(b,a,[s,t])

বিন্যাসিত এবং মন্তব্য

f = (                       // given:
  a,                        // - a = first string
  b,                        // - b = second string
  x                         // - x = reference result from previous iteration,
) =>                        //       or undefined
  [...a].some((c, i) =>     // for each character c at position i in a:
    d[                      //   if we already have a translation
      C = b[i]              //   of the character C at the same position in b,
    ] ?                     //   then:
      d[C] != c             //     return true if it doesn't equal c
    :                       //   else:
      (d[C] = c) != C &&    //     store the translation C -> c in the dictionary
      (                     //     if the characters are different:
        s += c, t += C,     //       append them to the translation strings s and t
        !C                  //       return true if C is undefined
      ),                    //
    s = t = '', d = []      //   initialize s, t and d  
  ) ?                       // if some() returns true:
    0                       //   there was a translation error: abort
  :                         // else:
    x ||                    //   if this is the 2nd iteration, return x
    f(b, a, [s, t])         //   else do a recursive call with (b, a)

পরীক্ষার মামলা


f('22')('a1')খুব মিথ্যা হতে হবে।
নীল

আশা করি এই মুহূর্তে আমি এটি পেয়েছি।
আর্নৌল্ড

1
আপনার বাগফিক্সটি আরও ছোট কিছুতে সহজ করার জন্য এটি সর্বদা সহজ!
নীল

7

পিএইচপি> = 7.1, 130 বাইট

18 টি বাইটস @ টিটাস দ্বারা সংরক্ষিত

for([,$x,$y]=$argv;a&$o=$y[$i];)$o==($p=$x[$i++])?:$k[$c[$p]=$o]=$p;echo$y==strtr($x,$c)&$x==strtr($y,$k)?join($k)." ".join($c):0;

Testcases

সম্প্রসারিত

for([,$x,$y]=$argv;a&$o=$y[$i];)
$o==($p=$x[$i++])?:$k[$c[$p]=$o]=$p; # if char string 1 not equal char string 2 make key=char1 value=char2 and key array
echo$y==strtr($x,$c) # boolean replacement string 1 equal to string 2
    &$x==strtr($y,$k) # boolean replacement string 2 equal to string 1
    ?join($k)." ".join($c) # output for true cases
:0; #Output false cases

পিএইচপি> = 7.1, 148 বাইট

স্ট্রিং হিসাবে সত্য মিথ্যা আউটপুট জন্য 0 মুদ্রণ

for([,$x,$y]=$argv;a&$o=$y[$i];$i++)$x[$i]==$o?:$c[$x[$i]]=$o;echo$y==strtr($x,($f=array_flip)($k=$f($c)))&$x==strtr($y,$k)?join($k)." ".join($c):0;

Testcases

সম্প্রসারিত

for([,$x,$y]=$argv;a&$o=$y[$i];$i++)
$x[$i]==$o?:$c[$x[$i]]=$o; # if char string 1 not equal char string 2 set key=char1 value=char2
echo$y==strtr($x,($f=array_flip)($k=$f($c))) # boolean replacement string 1 equal to string 2
&$x==strtr($y,$k) # boolean replacement string 2 equal to string 1
    ?join($k)." ".join($c) # output for true cases
:0; #Output false cases

পিএইচপি> = 7.1, 131 বাইট

যদি উত্তরীয় অ্যারেগুলিকে অনুমতি দেওয়া হয় তবে দ্বিতীয় উত্তরটি এতে সংক্ষিপ্ত করা যেতে পারে

মিথ্যা আউটপুট সত্য হিসাবে স্ট্রিংয়ের পরিবর্তে সহযোগী অ্যারে হিসাবে 0 প্রিন্ট করে

for([,$x,$y]=$argv;a&$o=$y[$i];$i++)$x[$i]==$o?:$c[$x[$i]]=$o;print_r($y==strtr($x,($f=array_flip)($f($c)))&$x==strtr($y,$k)?$c:0);

Testcases

পিএইচপি> = 7.1, 227 বাইট

প্রিন্ট 0 মিথ্যা জন্য

[,$x,$y]=$argv;echo strlen($x)==strlen($y)?strtr($x,$c=array_filter(($f=array_flip)($z=$f(array_combine(($p=str_split)($x),$p($y)))),function($v,$k){return$k!=$v;},1))==$y&$x==strtr($y,$z)?join(array_keys($c))." ".join($c):0:0;

Testcases

সম্প্রসারিত

[,$x,$y]=$argv; # 
echo strlen($x)==strlen($y) #compare string lengths
?strtr($x,  # replace function
$c=array_filter( # filter 
($f=array_flip)($z=$f( # # remove doubles like in testcase: a1 => 22
    array_combine(($p=str_split)($x),$p($y))  # replacement array keys string 1 values string 2 
))
    ,function($v,$k){return$k!=$v;},1)) # remove all keys that equal to values in array
    ==$y # boolean replacement string 1 equal to string 2
&$x==strtr($y,$z) # boolean replacement string 2 equal to string 1        
?join(array_keys($c))." ".join($c) # output for true cases
    :0 # Output if replacement from string 1 is not equal to string 2
:0; #Output for different lengths

1
@ কারাসোকম্পুটিং প্রশংসা করার জন্য আপনাকে ধন্যবাদ। আমি একটু কৌশল ভুলে গেছি। আমি জানি যে এখানে আমার চেয়ে অনেক বেশি লোক আছেন
জার্গ হালসারম্যান

2
সমাধানগুলি খুঁজে পেতে আপনার অবশ্যই ভাল +1 তবে এর array_values()ভিতরে join()সম্পূর্ণ অকেজো এবং এটি ফেলে দেওয়া যেতে পারে।
ক্রিস্টোফ

1
এটি a1 22 => falseপরীক্ষার ক্ষেত্রে ব্যর্থ । এছাড়াও, আপনার প্রথম প্রোগ্রামটি অনলাইন পরীক্ষকটিতে কাজ করছে বলে মনে হয় না।
mbomb007

1
চুপ কর. এটি দুর্দান্ত।
তিতাস

1
ফ্লিপারগুলি যেতে পারে: ($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;লুপে এবং $y==strtr($x,$c)প্রথম পরীক্ষার জন্য 18 বাইট সংরক্ষণ করুন ।
তিতাস

5

জেলি , 18 বাইট

ẠaQ⁼µ€Ạ
z0EÐḟQZẋÇ$

নামহীন মনাদিক লিঙ্ক (এক ইনপুট ফাংশন) একটি তালিকা নিচ্ছে, যা প্রত্যাবর্তন করবে:
মিথ্যা মামলায় খালি তালিকা; বা
সত্যের ক্ষেত্রে অক্ষরের দুটি তালিকা সমেত একটি তালিকা।

এটি অনলাইন চেষ্টা করুন! (পাদলেখ একটি ধোঁয়া প্রতিনিধিত্ব মুদ্রণ এড়ানোর জন্য একটি স্থান দিয়ে তালিকা বিভক্ত)
... বা একটি পরীক্ষা স্যুট দেখুন

কিভাবে?

ẠaQ⁼µ€Ạ - Link 1, valid?: mapping list
    µ€  - perform the code to the left for €ach mapping entry
Ạ       -     none of mapping entry falsey? (this & Main's z0 handle unequal input lengths)
  Q     -     deduplicate mapping entry
   ⁼    -     is equal to mapping list? (non-vectorising)
 a      -     and
      Ạ - none falsey (both mapping lists must pass that test)
        - The whole function returns 1 if the mapping list is acceptable, 0 if not

z0EÐḟQZẋÇ$ - Main link: list of strings
z0         - transpose with filler 0 (unequal lengths make pairs containing zeros)
   Ðḟ      - filter discard:
  E        -     all equal? (removes the untranslated character pairs)
     Q     - deduplicate (removes the repeated translation pairs)
      Z    - transpose (list of pairs to pair of lists)
         $ - last two links as a monad:
       ẋ   -     repeat list this many times:
        Ç  -         call last link (1) as a monad

5

রেটিনা , 194 191 185 229 225 241 বাইট

.+
$&;$&
+`^\w(\w*;)\w
$1
^;\w.*|.+;;.*|;;

^((.)*)(.)(.*;(?<-2>.)*(?(2)(?!)))\3
$1$4
+`((.)(.)*)\2((.)*;.*(.)(?<-3>.)*(?(3)(?!)))\6((?<-5>.)*(?(5)(?!)))$
$1$4$7
^(.)*(.)(.)*(\2)?.*;(?<-1>.)*(?(1)(?!))(.)(?<-3>.)*(?(3)(?!))(?(4)(?!\5)|\5).*

এটি অনলাইন চেষ্টা করুন!

ইনপুট নেয় ;para আউটপুট এছাড়াও ;পৃথক করা হয়। মিথ্যা ইনপুটগুলি খালি আউটপুট দ্বারা চিহ্নিত করা হয়।

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

সম্পাদনাগুলি

  • দেখা যাচ্ছে যে আমার প্রোগ্রামের সাথে আমার একটি গুরুত্বপূর্ণ ত্রুটি ছিল। এটি এখন ঠিক করা হয়েছে, তবে 40 বাইটের বেশি দামে।

  • অন্য একটি ভুল পাওয়া গেছে যেখানে আমার প্রোগ্রামটি ইনপুটটিকে a1;22মিথ্যা ঘোষণা করে নি , তবে আমি প্রোগ্রামটি ঠিক করার পরে 250 বাইটের নিচে রাখতে সক্ষম হয়েছি

ব্যাখ্যা

(আরও বিস্তারিত ব্যাখ্যা শীঘ্রই আসবে)

প্রথম আমরা যদি স্ট্রিং লেন্থ চেক করতে aএবং bএকই বা হয় না। যদি তা না হয় তবে আমরা সমস্ত কিছু মুছব।

আমরা কিছু দৈর্ঘ্য-পরীক্ষা করার সময় এটি সংরক্ষণের জন্য ইনপুটটিকে নকল করে।

.+                      Matches everything
$&;$&                   $& indicates the match, so $&;$& will duplicate the match and separate it with a semi-colon

এখন একটি লুপে, আমরা এর প্রথম অক্ষর aএবং প্রথম অক্ষর মুছে bফেলব যতক্ষণ না একটি স্ট্রিং খালি হয়ে যায়।

+`                     Repeatedly (until no more substitutions could be made) replace
  ^\w                   A word character (letter or number) at the beginning
     (\w*;)             Capture Group 1: matches any number of word characters and a semicolon
           \w           And a word character after the semi-colon
                       with
$1                      The result of the first capture group

এখন "প্যাটার্ন স্পেস" এর সম্ভাবনা রয়েছে।

  • ;;abc উভয় স্ট্রিং সমান দৈর্ঘ্যের হয়
  • def;;abc a এর চেয়ে লম্বা b
  • ;def;abc b এর চেয়ে লম্বা a

স্ট্রিংগুলি একই দৈর্ঘ্যের না হলে আমাদের ইনপুটটি খালি করতে হবে (2 এবং 3 এর দৃশ্যপট)। নীচে এই প্রতিস্থাপনটি এটি করে। এটি 2 এবং 3 দৃশ্যের সাথে মেলে এমন পাঠ্য সরিয়ে দেয়।

^;\w.*|.+;;.*|;;

এই অক্ষর আছে যা স্ট্রিং বর্ণান্তরিত নেই সরিয়ে ফেলা হবে aএবং babc;1b2=>ac;12

^((.)*)(.)(.*;(?<-2>.)*(?(2)(?!)))\3
$1$4

এর পরে, আমাদের সদৃশ অক্ষর মুছে ফেলতে হবে। sese;1212=> se;12, কিন্তু এটি ইনপুটগুলি সংরক্ষণ করেaba;123

+`((.)(.)*)\2((.)*;.*(.)(?&lt;-3&gt;.)*(?(3)(?!)))\6((?&lt;-5&gt;.)*(?(5)(?!)))$
$1$4$7

পরিশেষে, আমরা ইনপুট যদি ডুপ্লিকেট অক্ষর আছে যা মত বিভিন্ন অক্ষর ম্যাপ মুছে ফেলতে aba;123বা a1;22

^(.)*(.)(.)*(\2)?.*;(?.)*(?(1)(?!))(.)(?.)*(?(3)(?!))(?(4)(?!\5)|\5).*

এবং অবশেষে, সদৃশ অক্ষর মুছে ফেলুন।


আমি দেখছি যে ভারসাম্যপূর্ণ গ্রুপগুলি!
নীল

@ নিল সত্যই! আমি (?(1)(?!))আপনার উত্তর থেকে শিখেছি ব্যবহার করেছি :)
কৃতিমিক লিথোস

আমি প্রথমে সদৃশগুলি মুছে ফেলা এবং তারপরে অবশিষ্ট সেটগুলি বৈধতা দেওয়ার জন্য আরও খাটো হবে কিনা তা আমি ভাবছি - প্রতিটির প্রতিটি পাশের প্রতিটি অক্ষরের মধ্যে কেবল একটির লেখা থাকা উচিত ;
নীল

@ নীল আমি আমার কোডটি এটির সাথে পরীক্ষায় একটি ত্রুটি পেয়েছি। আমি সকালে এটি আরও তাকান।
ক্রিটিকি লিথোস

4

জেলি , 28 26 বাইট

QL$€⁼L€
EÐḟQZK0Ç?
ZÇ0L€E$?

এটি অনলাইন চেষ্টা করুন!

QL$€⁼L€      Checks validity of mapping
QL$€          number of unique characters in mapping
    ⁼         equals
     L€       number of characters in mapping

EÐḟQZK0Ç?  Writes valid mapping or 0
EÐḟ           filter maps where a = b
   Q          filter duplicate maps
    Z         zip by column [["ac"],["bd"]] => ["ab","cd"]
     K0Ç?   print if valid map, else print 0

ZÇ0L€E$?      main link: takes an array of 2 strings
Z              zip by column: ["ab", "cd"] => [["ac"],["bd"]]
 Ç     ?       print mapping if
   L€E$         all pairs are same length (returns 0 if initial strings were
  0             else 0

1
পিপিসিজিতে আপনাকে স্বাগতম! কিভাবে জাহান্নাম যদি আপনার আগে থেকেই শুধুমাত্র 21 পয়েন্ট সঙ্গে জেলি জানো? খুব চিত্তাকর্ষক!
ম্যাজিক অক্টোপাস উরন

2
ধন্যবাদ। সাইটের চারপাশে কিছুটা তাকিয়ে দেখে মনে হয়েছিল এটি একটি ঝরঝরে ভাষা শেখা উচিত।
layagyasz

05AB1E হ'ল আরেকটি সহজ এবং মজাদার।
ম্যাজিক অক্টোপাস উরান

3

রুবি, 133 বাইট

->a,b{a.size!=b.size||(m=a.chars.zip b.chars).any?{|i,j|m.any?{|k,l|(i==k)^(j==l)}}?0:m.select{|x,y|x!=y}.uniq.transpose.map(&:join)}

এটি অনলাইন চেষ্টা করুন!

আরও পঠনযোগ্য:

->a, b{
    # Pair the letters in each string - [AB, AB, AB,...]
    pairs = a.chars.zip(b.chars)

    # If there's any combination of two pairs that share one character but not both,
    # or if the strings have different lengths, then the input's invalid.
    if a.size != b.size || pairs.any?{|i,j| pairs.any? {|k, l| (i==k)!=(j==l) }} 
        return 0 # 0 isn't actually falsy in Ruby, but this challenge allows it anyway
    end
    return pairs.select{|x,y| x != y} # Remove unchanged letters
                .uniq                 # Remove duplicates
                .transpose            # Change [AB, AB, AB] form to [AAA, BBB] form.
                .map(&:join)          # Convert the arrays back into strings
}

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

->a,b{a.sz!=b.sz||(m=a.ch.z b).ay?{|i,j|m.y?{|k,l|(i==k)^(j==l)}}?0:m.rj{|x,y|x==y}.u.tr.m(&:j)}

গুরুবি বাস্তবায়নের সাথে দ্বিতীয় উত্তর পোস্ট করবেন না কেন? এটি কি স্বীকৃত গল্ফ করার ভাষা নয়?
ম্যাজিক অক্টোপাস উরন

এই টুইটটি সম্পূর্ণরূপে; এটি কেবল আমার কাছে নিজের উত্তরটির যোগ্যতা না বলে মনে হয়েছিল - এটি আমার প্রধান উত্তর হিসাবে একই, কেবলমাত্র নামগুলির সংক্ষেপে সংক্ষেপে। সম্ভবত যদি আমি গুরুবির ভিন্নতাগুলির আরও সুবিধা নেওয়ার কোনও উপায় খুঁজে পাই তবে আমি একটি পৃথক উত্তর পোস্ট করব।
টুটলম্যান

3

পাইথন 2 , 198,193,189,182,179,175,169, 165 বাইট

def f(a,b):
 r=([""]*2,0)[len(a)!=len(b)]
 for u,v in zip(a,b):
	if r:
		q,w=r
		f=q.find(u)
		if u!=v:r=(([q+u,w+v],r)[f>-1 and w[f]==v],0)[f<0 and v in w]
 print r

এটি অনলাইন চেষ্টা করুন!

  • -4 বাইট! স্থান পরিবর্তে ট্যাব ব্যবহার করার পরামর্শ দেওয়ার জন্য mbomb007 ধন্যবাদ।

  • ইনপুট ফর্ম্যাটটি পরিবর্তন করেছে, আবার ধন্যবাদ mbomb007।


এর মানে কি বোঝাতে চাচ্ছো? দয়া করে অযাচিত সম্পাদনা করা বন্ধ করুন যা উত্তরের কোনও মূল্য যুক্ত করে না!
কীর্তনা প্রভাকরণ

ট্যাব প্রায় 4 বাইট সঞ্চয়! ধন্যবাদ!
কীর্তনা প্রভাকরণ


এবং আমি আপনার প্রোগ্রামটির প্রতিটি পরীক্ষার কেস একক লাইনে তৈরি করেছি, যা আপনার প্রোগ্রামটি পরীক্ষা করে যে কেউ তার পক্ষে অত্যন্ত সহায়ক।
mbomb007

আমি যদি আপনার সম্পাদনা মন্তব্যে এটি উল্লেখ করতে পারতাম তবে আরও ভাল হত!
কেরথানা প্রভাকরণ

3

পাইথন 3.6, 211 185 181 178 বাইট

মিথ্যা ফলাফলের জন্য একটি ত্রুটি সহ প্রস্থান করে।

def f(x,y,d={}):
    for a,b in zip(x,y):1/(a not in d or b==d[a]or len(x)-len(y));d[a]=b;1/([*d.values()].count(b)<2)
    return map(''.join,zip(*[x for x in d.items()if x[0]!=x[1]]))

এর জন্য পাইথন ৩. 3. প্রয়োজন, যা আপনি এখানে একটি শেল চালাতে পারেন ।

আপনি এখানে টিআইও-তে সঠিক আউটপুট অর্ডার না করে এটি পরীক্ষা করতে পারেন । (টিআইওর 3.6 নেই)।

Ungolfed:

from collections import*
d=OrderedDict()                     # keep order
x,y=input()
if len(x)!=len(y):1/0               # equal lengths
for a,b in zip(x,y):
    if a in d and d[a]!=b:1/0       # no duplicate keys
    else:d[a]=b
    if d.values().count(b)>1:1/0    # no duplicate values
print map(''.join,zip(*[x for x in d.items()if x[0]!=x[1]])) # format, no no-ops

যদি কেবল অর্ডারই কিছু যায় আসে না ...


পরিবর্তে a1,12ফিরে আসা উচিত নয় ? ক্যাভেটস বিভাগের অধীনে বলা হয় যে [a1 "অনুবাদ a [a1,12] এর সাথে 12 টি মূল্যায়ন করেa1,12False
ফার্গুসক

1
ভাল, আপনার টিআইও লিঙ্কে প্রোগ্রামটি রিটার্ন দেয় False1a 21ওডারটি সংরক্ষণ করতে হবে বলেও ভুল হতে পারে।
ফার্গুসক

@fergusq ফিক্সড তবে লক্ষ্য করুন যে আপনি যে পরীক্ষার ক্ষেত্রে উল্লেখ করছেন সেটি যদি আপনার মন্তব্যে টাইপো রয়েছে তবে যেহেতু আপনি a1,12পরিবর্তে বলেছিলেন a1,22
mbomb007

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

এটি একটি পৃথক নিয়ম পরিচালনা করে, তবে এটি এখনও বলে যে সেই পরীক্ষার মামলার ফলাফলটি মিথ্যা, যা গুরুত্বপূর্ণ।
mbomb007

2

রদা , 108 119 বাইট

{c=[{_<>_|[[_,_]]|orderedUniq}()]d=[]e=[]c|_|{{d+=a;e+=b}if[a!=b]}for a,b[d,e]if[0,1]|{|n|c|[_[n]]|sort|count|[_2=1]}_}

এটি অনলাইন চেষ্টা করুন!

এটি এমন একটি ফাংশন যা স্ট্রিম থেকে অক্ষরের দুটি তালিকা নিয়ে যায় এবং দুটি তালিকাকে স্ট্রিমে ঠেলে দেয়।

যদি আমাকে জোড়া ফেরত দেওয়ার অনুমতি দেওয়া হয় তবে এটি আরও বাছাই হতে পারে।

ব্যাখ্যা (পুরানো):

{
    c=[{
        _<>_|       /* pull two lists and interleave them */
        [[_,_]]|    /* "unflat", create lists from pairs */
        orderedUniq /* remove duplicates */
    }()]            /* c is a list of the pairs */
    d=[]
    e=[]
    c| /* push the pairs to the stream */
    _| /* flat */
    {  /* for each pair (a, b): */
        { /* if a != b (remove "1-to-1 relations"):  */
            d+=a;
            e+=b
        }if[a!=b]
    }for a,b
    /* return d and e if no character is mapped to more than one character */
    [d,e]if c|[_[0]]|sort|count|[_2=1]
}

এখানে একটি আন্ডারস্কোর সমাধান রয়েছে যাতে কোনও ভেরিয়েবল (114 বাইট) নেই:

{[[{_<>_}()|[[_,_]]|unorderedUniq]]|[[_()|_|[_]if[_1!=_2]],[_1()|_|[_2]if[_1!=_2]]]if[[_1()|_][::2],[_1()|_][1::2]]|[sort(_)|count|[_2=1]]}

এটি অনেকগুলি আন্ডারস্কোর।



@ ক্রিতিক্সিলিথোস এটি ইন্টারলিভ অপারেটর। a() <> b()হিসাবে একই interleave([a()], [b()])(বা শুধু interleave(a, b), যদি aএবং bঅ্যারে আছে)।
ফার্গুসক

এটি a1 22 => falseপরীক্ষার ক্ষেত্রে ব্যর্থ । "সমস্ত অনুবাদগুলি একে অপরের থেকে পৃথক হয়, যার অর্থ এটি মিথ্যা।"
mbomb007

@ mbomb007 আপনি যা বলছেন তা আমি যথেষ্ট বুঝতে পারছি না? আপনি কি বোঝাতে চেয়েছেন এটি একটি বাইজেকশন হতে হবে, অর্থাত্‍। কোনও দুটি চরিত্রকে একই চরিত্রে ম্যাপ করতে হবে?
ফার্গুসক

হ্যাঁ. প্রশ্ন তাই বলে। ( প্রতিটি চরিত্র কেবল অনুবাদের প্রতিটি দিকেই ব্যবহার করা যেতে পারে )
mbomb007

1

এডাব্লুকে, 140 বাইট

BEGIN{RS="(.)"}RT~/\W/{S=1}RT~/\w/&&S{if(RT!=x=A[++b]){if(B[z=RT]==""){B[z]=x
c=c x
d=d z}a=B[z]!=x?0:a}}!S{A[++a]=RT}END{if(a==b)print c,d}

ব্যবহার: FILEএরপরে স্থানের কোড :

awk -f FILE <<< "string1 string2"

ইনপুট স্ট্রিংগুলিকে সাদা স্থান আলাদা করতে হবে।

ফলাফল ব্যর্থ হলে আউটপুট খালি থাকে বা 2 টি স্ট্রিং একটি স্পেস দ্বারা পৃথক করা হয়।


1

k, 28 বাইট

{$[(y?y)~x?x;+?(~=/)#x,'y;]}

ব্যাখ্যা:

{                          } /function that takes in two strings, x and y
 $[         ;            ;]  /if statement (to check if there is a mapping)
         x?x                 /first index of [each letter in x] in x
   (y?y)                     /first index of [each letter in y] in y
        ~                    /make sure they match
                     x,'y    /zip together the two strings
               (~=/)#        /remove equal pairs
              ?              /unique pairs only
             +               /transpose ("unzip", in a way)

1

এজিএল , 22 বাইট সহ এপিএল (ডায়ালগ)

{≡/⍳⍨¨⍺⍵:↓⍉↑∪⍺(≠é,¨)⍵}

এটি অনলাইন চেষ্টা করুন!

{...}  বেনামে ফাংশন:

 তাহলে ...

  ⍺⍵ যুক্তি

  ⍳⍨¨ যখন স্ব-সূচকযুক্ত (অর্থাত্ তাদের উপাদানগুলির প্রথম উপস্থিতি)

  ≡/ সমতুল্য

: তারপর:

  ⍺()⍵ আর্গুমেন্টে নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

    সংশ্লিষ্ট উপাদানগুলি (মিলের দৈর্ঘ্যের ক্ষেত্রে ত্রুটি)

   é তারপরে ফিল্টার করুন ( éএটি কেবলমাত্র প্রাথমিক কাজ /)

    যেখানে স্ট্রিং আলাদা are

   অনন্য (সদৃশ অপসারণ)

  ↓⍉↑ জোড়ের তালিকাগুলিতে জোড়ের তালিকান স্থানান্তর করুন (লিট টেবিলের সাথে মিশ্রিত করুন, টেবিলটি স্থানান্তর করুন, তালিকায় বিভক্ত করুন)

 অন্যথায়, কিছুই করবেন না


1
ধৈর্য সহকারে এই উত্তরটির ব্যাখ্যাটির জন্য অপেক্ষা করছে : পি
ম্যাজিক অক্টোপাস উরন

1
এই টুইটটি আমার পছন্দ নয়
অ্যাডম

@ কারাসোকম্পুটিং ঠিক আছে?
অ্যাডম

আমি উত্তরটি মিস করলাম, দুঃখিত! ↓⍉↑এখনও আমাকে কিছুটা বিভ্রান্ত করেছে
ম্যাজিক অক্টোপাস উরন

1
@ কারাসোকম্পুটিং সম্ভবত এটি সাহায্য করবে? নোট করুন যে এপিএল এবং জেতে, ম্যাট্রিক্স তালিকার তালিকার মতো নয়।
অ্যাডাম

0

সিজেম, 38 বাইট

{_:,~={1\/;}:K~z{)\c=!},L|z_{_L|=K}%;}

ইনপুট এবং আউটপুট স্ট্যাকের অ্যারে হয়।


0

পিএইচপি (> = 7.1), 165 বাইট

for([,$x,$y]=$argv;a&$c=$x[$i];$t[$c]=$d)$z+=($d=$y[$i++])&&$d==($t[$c]??$d);foreach($t as$a=>$b)$a==$b?:$r[$a]=$b;print_r($z<$i|array_unique($r)<$t||a&$y[$i]?0:$t);

0মিথ্যা, সাহসী অ্যারে অন্যের জন্য মুদ্রণ । এটি দিয়ে চালান -rবা এটি অনলাইনে পরীক্ষা করুন

ভাঙ্গন

for([,$x,$y]=$argv;         # import arguments to $x and $y
    a&$c=$x[$i];            # loop through $x
    $t[$c]=$d)                  # 2. add pair to translation
$z+=                            # 1. increment $z if
    ($d=$y[$i++])&&             # there is a corresponding character in $y and
    $d==($t[$c]??$d);           # it equals a possible previous replacement
                            # remove identities from translation
foreach($t as$a=>$b)$a==$b?:$r[$a]=$b;
print_r(
    $z<$i                   # if not all tests passed
    |array_unique($t)<$t    # or there are duplicates in the translation
    ||a&$y[$i]              # or $y has more characters
    ?0                      # then print 0
    :$r                     # else print translation
);

আউটপুট হিসাবে অনুমতিযুক্ত অ্যারেগুলি কি অনুমোদিত? আপনি দয়া করে এটি যুক্ত করতে পারেন যে এটি 7.1 সংস্করণের উপরে কাজ করে
জার্গ হালসারম্যান

@ জার্গহালসারম্যান Output can be as an array or ..., তাই আমি হ্যাঁ বলি। বর্তমান পিএইচপি সংস্করণ আমার সমস্ত পোস্টিংয়ের জন্য অন্তর্ভুক্ত; তবে আমি সম্পাদনা করার জন্য গুরুত্বপূর্ণ কিছু খুঁজে পেলে আমি সংস্করণটি যুক্ত করব।
তিতাস

বৈধ কেসগুলি অ্যারে আউটপুটটির কেবল একটি অর্থ দেখায়। যদি এসোসিয়েটিভ অ্যারেগুলিকেও অনুমতি দেওয়া হয় তবে আমি কয়েকটি বাইট সংরক্ষণ করতে পারি। যদি এটি অনুমোদিত array_unique($r)!=$rহয় এবং প্রতিটি ক্ষেত্রে হয় তবে array_unique($r)<$rআমি এই কৌশলটির জন্য আপনার পোস্টকে একাই আপভেস্ট করব। এই মুহুর্তে আমি একটি ব্যাখ্যা অনুসন্ধান করছি
জার্গ হালসারম্যান

@ JörgHülsermann array_unique($t)<$t(পরিবর্তন করতে হয়েছে যে কারণ canথেকে cnnঅবৈধ) কাজ করে, কারণ অ্যারের তুলনা (স্ট্রিং তুলনা অসদৃশ) অন্য কিছু করার আগে লেন্থ তুলনা করা হয়।
তিতাস

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