আসুন কিছু "enciph5r47g" করি


35

এটি কিছু "deciph4r4ng" এর বিপরীত হয়


এই চ্যালেঞ্জে আপনার কাজটি একটি স্ট্রিংকে এনক্রিফার করা। ভাগ্যক্রমে, অ্যালগরিদমটি বেশ সহজ: বাম থেকে ডানে পাঠ্য, প্রতিটি সাধারণ রচনার অক্ষর (ASCII পরিসীমা 32-126) অবশ্যই একটি নম্বর N (0-9) দ্বারা প্রতিস্থাপন করতে হবে যে এটি এন + 1 অক্ষরের অনুরূপ এটা আগে অবস্থান। ব্যতিক্রমটি হ'ল যখন অক্ষরটি মূল স্ট্রিংয়ে আগের 10 পজিশনের মধ্যে উপস্থিত না হয়। সেক্ষেত্রে আপনার চরিত্রটি আবার মুদ্রণ করা উচিত। কার্যকরভাবে, আপনার আসল চ্যালেঞ্জ থেকে অপারেশনটি বিপরীত করতে সক্ষম হওয়া উচিত।

উদাহরণ

ইনপুট স্ট্রিংটি "Programming"এভাবে এনকোড করা হবে:

Example1

সুতরাং, প্রত্যাশিত আউটপুট হয় "Prog2am0in6"

ব্যাখ্যা এবং বিধি

  • ইনপুট স্ট্রিংটিতে 32 - 126 একচেটিয়াভাবে ASCII অক্ষর থাকবে। আপনি ধরে নিতে পারেন যে এটি কখনই খালি হবে না।
  • মূল স্ট্রিংটি কোনও অঙ্ক না রাখার গ্যারান্টিযুক্ত।
  • একটি অক্ষর একবার এনকোড হয়ে গেলে, পরবর্তী সময়ে এটি অঙ্কিত হতে পারে। উদাহরণস্বরূপ, "alpaca"হিসাবে এনকোড করা উচিত "alp2c1"
  • রেফারেন্সগুলি স্ট্রিংয়ের চারপাশে কখনই মোড়ানো হবে না: কেবলমাত্র পূর্ববর্তী অক্ষরগুলিই উল্লেখ করা যায়।
  • আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন, যা ফলাফল মুদ্রণ করে অথবা ফলাফলকে আউটপুট করে।
  • এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

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

Input : abcd
Output: abcd

Input : aaaa
Output: a000

Input : banana
Output: ban111

Input : Hello World!
Output: Hel0o W2r5d!

Input : this is a test
Output: this 222a19e52

Input : golfing is good for you
Output: golfin5 3s24o0d4f3r3y3u

Input : Programming Puzzles & Code Golf
Output: Prog2am0in6 Puz0les7&1Cod74G4lf

Input : Replicants are like any other machine. They're either a benefit or a hazard.
Output: Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.

6
আমি দেখতে পাচ্ছি যে আপনার পরীক্ষার ক্ষেত্রে সর্বদা সর্বনিম্ন সংখ্যাটি কোনও বিকল্পের জন্য ব্যবহার করা হয়। একাধিক সম্ভাবনা থাকা সত্ত্বেও কি এটি প্রয়োজনীয় আচরণ, বা আমরা উচ্চতর সংখ্যাগুলিও ব্যবহার করতে পারি?
লিও

@ লিও আপনি যে কোনও একক সংখ্যা 0-9 টি ব্যবহারের জন্য বৈধ হিসাবে ব্যবহার করতে পারেন
ইঞ্জিনিয়ার টোস্ট 16

এটি চলন্ত ব্যতীত সামনের এনকোডারের মতো চলুন :)
পাইপ

উত্তর:


6

05 এ বি 1 ই , 20 19 18 বাইট

-2 ধন্যবাদ এমিগানাকে

õ¹vDyåiDykëy}?yìT£

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

õ                  # Push an empty string
 ¹v y              # For each character in input
   D               # Duplicate the string on the stack (call this S)
     åi            # If this character is in S
       Dyk         #   Push the index of that that character 
          ë }      # Else
           y       #   Push the character 
             ?     # Print without newline
              yì   # Prepend this character to S
                T£ # Remove all but the first 10 elements from S

আমি মনে করি )¹vDyåiDykëy}?y¸ìT£পাশাপাশি কাজ করে।
Emigna

আসলে, আমার সাথে আপনার উত্তরটির সংমিশ্রণ õIvDyåiDykëy}?yìT£18
টির

@ এমিগনা আপনার সাথে আপডেট করতে নির্দ্বিধায় :)
রিলে

আপনার উত্তরের জন্য না হলে আমি এটি নিয়ে ভাবিনি, তাই আপনার এটি হওয়া উচিত। ভাল করেছ!
এমিগানা

@ এমিগনা আমি অনুমান করি যে এটি ন্যায্য। ধন্যবাদ!
রিলে

12

রেটিনা , 24 23 বাইট

(.)(?<=\1(.{0,9}).)
$.2

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

মোটামুটি সরল রেগেক্স সাবস্টিটিউশন। আমরা প্রতিটি চরিত্রের সাথে মেলে এবং এর আগে 0-9 টি অক্ষরের একটি অনুলিপি খুঁজে বের করার চেষ্টা করি। আমরা যদি এটি খুঁজে পাই তবে অনুলিপিটি পেতে আমরা যে অক্ষরটির সাথে মিল থাকতে হয়েছিল তার সংখ্যার সাথে আমরা অক্ষরটি প্রতিস্থাপন করি।

ফলাফলগুলি পরীক্ষাগুলির সাথে পুরোপুরি মেলে না, কারণ এটির মধ্যে সবচেয়ে ছোট সম্ভাব্য সংখ্যার পরিবর্তে বৃহত্তম সম্ভাব্য সংখ্যা ব্যবহার করা হয়।


4
পরিবর্তনশীল দৈর্ঘ্যের চেহারা পিছনে প্রতারণা করছে: পি
দাদা

8
@ দাদা পরিবর্তনশীল-দৈর্ঘ্যের বর্ণমালার পিছনে আলোকিত করার উপায় the
মার্টিন এন্ডার

দুঃখজনকভাবে এটি হ'ল ... যদি আপনি বিরক্ত হন তবে পার্লের ভিতরে এগুলি নির্দ্বিধায় প্রয়োগ করুন!
দাদা

মূল কার্যের বিষয়ে ওপির মন্তব্য অনুসারে, "আপনি যতটা 0-9 চান তার একক সংখ্যা ব্যবহার করতে পারেন যতক্ষণ না এটি বৈধ।" ... তাই সবচেয়ে বড় সম্ভাব্য হওয়া উচিত বৈধ
ডক্টর জে

@ ডক্টরজে হ্যাঁ, ওপি স্পষ্টতা যোগ করার পরে আমি এটিকে পরিবর্তন করেছি।
মার্টিন এন্ডার

8

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

(নীল দ্বারা অনুপ্রাণিত) p=/./gপরিবর্তে উজ্জ্বলতার সাথে ETH প্রোডাকশনগুলিকে 3 বাইট সংরক্ষণ করা হয়েছেp={}

s=>s.replace(p=/./g,(c,i)=>(i=p[c]-(p[c]=i))>-11?~i:c)

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


যেহেতু স্ট্রিংটিতে কোনও সংখ্যা না থাকার গ্যারান্টিযুক্ত, আপনি কি sপরিবর্তে ব্যবহার করতে পারেন p?
নীল

(আমি আপনার মূল findসংস্করণটি ব্যবহার করে আউটগল্ফ করতে সক্ষম হয়েছি lastIndexOf, এটি 11 অক্ষর দীর্ঘ হ'ল কিছুটা অবাক করে দিয়ে ....)
নীল

@ নীল আমি এখনই একটি কম্পিউটারের সামনে নেই তবে আমি মনে করি না যে জেএস স্ট্রিং অপরিবর্তনীয় হওয়ায় এটি কাজ করবে।
আরনাউল্ড

2
আমি নিশ্চিত করতে পারি যে স্ট্রিং লিটারালসে বৈশিষ্ট্যগুলি সেট করা কাজ করে না। তবে ... দেখে মনে হচ্ছে এটি রেগেক্সের সাথে কাজ করে, তাই আমি মনে করি আপনি সম্ভবত s=>s.replace(p=/./g,(c,i)=>(i=p[c]-(p[c]=i))>-10?~i:c)3 বাইট সংরক্ষণ করতে পারেন।
ETH প্রোডাকশনগুলি

1
@ আপনি এখানে কী হয়েছে তা আমি সত্যিই জানি না, তবে দেখা যাচ্ছে যে আমি আমার শেষ সম্পাদনায় সমস্ত ব্রাউজারের জন্য একটি বাগ প্রবর্তন করেছি। এটি এখন স্থির করা হয়েছে। দেখার জন্য ধন্যবাদ!
আরনৌল্ড

7

হাস্কেল , 72 66 বাইট

লাইকোনিকে 6 বাইট গল্ফ করার জন্য ধন্যবাদ !

(a:r)%s=last(a:[n|(n,b)<-zip['0'..'9']s,b==a]):r%(a:s)
e%s=e
(%"")

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

ফাংশনটি %আংশিক প্রক্রিয়াজাত স্ট্রিংটিকে তার দ্বিতীয় যুক্তিতে বিপরীতে রাখে, তাই এটি পরীক্ষিত চরিত্রটির উপস্থিতিগুলির জন্য এটি এই স্ট্রিংয়ের প্রথম 10 উপাদান অনুসন্ধান করতে সক্ষম হয়। জমাটি নামবিহীন ফাংশন নিয়ে গঠিত (%"")যা পূর্ববর্তী ফাংশনটিকে খালি স্ট্রিং দিয়ে দ্বিতীয় আর্গুমেন্ট হিসাবে ডাকে।


f(a:s)=f s++(last$[a]:[show n|(n,b)<-zip[0..9]s,b==a])দুটি বাইট সংরক্ষণ
লাইকনি

অপেক্ষা করুন, f(a:s)=f s++[last$a:[n|(n,b)<-zip['0'..'9']s,b==a]]আরও বেশি সঞ্চয় করে।
লাইকোনি

ব্যবহারের পরিবর্তে চলতে চলতে reverseআরও একটি বাইট সংরক্ষণ করে : অনলাইনে চেষ্টা করে দেখুন!
লাইকনি

@ লাইকনি আপনাকে ধন্যবাদ, এটি দুর্দান্ত!
লিও


3

পার্ল 5 , 36 বাইট

কোড 35 -pপতাকা বাইট ।

s/(\D)(.{0,9})\K\1/length$2/e&&redo

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

কিছু ব্যাখ্যা:
লক্ষ্যটি হ'ল একটি অ-অঙ্কের চরিত্রটি প্রতিস্থাপন করা ( \Dতবে এটি \1আমার রেজেক্সের পিছনের সাথে সামঞ্জস্যপূর্ণ ) যা 10-এর কম অক্ষরের ( .{0,9}) পূর্বে এবং একই অক্ষরটি ( (\D)... \1) দ্বারা .{0,9}গ্রুপের দৈর্ঘ্য অনুসারে হবে ( length$2)। এবং redoচরিত্রগুলি প্রতিস্থাপন করার সময়।


স্পষ্টতই .*প্রয়োজনীয় নয়, প্রতিস্থাপিত অঙ্কটি ঠিক হওয়ার আগে পরিসরে কোনও বৈধ চর char
কলসডু

@ কননরএলএসডাব্লিউ ইয়ুপ, আমি কেবলমাত্র চ্যালেঞ্জের সেই আপডেটটি দেখেছি এবং আমার উত্তরটি পরিবর্তন করেছি, এটি উল্লেখ করার জন্য ধন্যবাদ।
দাদা

3

পাইথন 2, 89 84 বাইট

m=input()[::-1];j=1;t=''
for i in m:s=m[j:].find(i);t=[i,`s`][0<s<10]+t;j+=1
print t

অনলাইনে চেষ্টা করে দেখুন!

আইট্রেটস বিপরীতে স্ট্রিংটি অতিক্রম করে এবং সঠিক সংখ্যার সাথে .োকানো একটি নতুন স্ট্রিং তৈরি করে।


3

জাপট , 18 বাইট

£¯Y w bX s r"..+"X

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

ব্যাখ্যা

£   ¯  Y w bX s r"..+"X
mXY{s0,Y w bX s r"..+"X}
                          // Implicit: U = input string
mXY{                   }  // Replace each char X and index Y in U by this function:
    s0,Y                  //   Take U.slice(0,Y), the part of U before this char.
         w bX             //   Reverse, and find the first index of X in the result.
                          //   This gives how far back this char last appeared, -1 if never.
              s           //   Convert the result to a string.
                r"..+"X   //   Replace all matches of /..+/ in the result with X.
                          //   If the index is -1 or greater than 9, this will revert to X.
                          // Implicit: output result of last expression


2

05 এ বি 1 ই , 20 বাইট

õIv¹N£RT£©yåi®ykëy}J

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

ব্যাখ্যা

õ                     # push an empty string
 Iv                   # for each [index,char] [N,y] in input
   ¹N£                # push the first N characters of input
      R               # reverse
       T£             # take the first 10 characters of this string
         ©            # save a copy in register
          yåi         # if y is in this string
             ®yk      #   push the index of y in the string in register
                ë     # else 
                 y    #   push y
                  }   # end if
                   J  # join stack as one string


2

সি (টিসিসি) , 113 বাইট

যেহেতু ফাংশনটি একটি ইনপুট স্ট্রিংয়ের একটি অনুলিপি তৈরি করে, তাই ইনপুটটির সর্বাধিক আকার 98 টি বর্ণ (দীর্ঘতম পরীক্ষার ইনপুট ফিট করার জন্য যথেষ্ট বেশি)। অবশ্যই, এটি অন্য যে কোনও মানতে পরিবর্তন করা যেতে পারে।

i,j;f(char*s){char n[99];strcpy(n,s);for(i=1;s[i];i++)for(j=i-1;j>-1&&i-j<11;j--)if(n[i]==n[j])s[i]=47+i-j;j=-1;}

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

সম্পাদন করা

-15 বাইট। ধন্যবাদ জোহান ডু Toit


AGH! ইনপুটটি 98 টি চরিত্রের মধ্যে সীমাবদ্ধ করুন এবং নিজেকে একটি বাইট সংরক্ষণ করুন!
পাইপ

দুর্দান্ত সমাধান তবে আপনি আরও 15 বাইট সংরক্ষণ করতে পারেন: i,j;f(char*s){char n[99];strcpy(n,s);for(i=1;s[i];i++)for(j=i-1;j>-1&&i-j<11;j--)if(n[i]==n[j])s[i]=47+i-j,j=-1;}
জোহান ডু টোইট

@ জোহান্দুটাইট ধন্যবাদ! আমার একটা প্রশ্ন আছে. কীভাবে [i] লুপের শর্ত হিসাবে কাজ করে? আমি এই ওয়েবসাইটটিতে অন্য ব্যক্তির জবাবগুলিতে এটি অনেক বার দেখেছি।
ম্যাক্সিম মিখায়লভ

@ ম্যাক্স লনবয় আপনার মূলত নিম্নলিখিতটি ছিল: 's [i] ^' \ 0 '' যা 's [i]! =' \ 0 '' এর জন্য শর্টহ্যান্ড। '\ 0' অক্ষর আক্ষরিক শূন্যের সমান তাই আপনি এটিকে এটি লিখতে পারেন: 's [i]! = 0'। সি-তে if স্টেটমেন্টটি কেবল যদি মানটি শূন্য বা অ-শূন্যকে মূল্যায়ণ করে তা পরীক্ষা করে যদি '! = 0' প্রয়োজন হয় না।
জোহান ডু টোইট


2

জাভা 7, 102 101 বাইট

void a(char[]a){for(int b=a.length,c;--b>0;)for(c=b;c-->0&c+11>b;)if(a[c]==a[b])a[b]=(char)(b-c+47);}

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

-1 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ । আমি সর্বদা গো-টু অপারেটরটি ব্যবহার করার একটি অজুহাত উপভোগ করি।


কেন --c>=0? c-->0বাইট সংরক্ষণ করতে আপনি এটির সাথে প্রতিস্থাপন করতে পারেন ।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন আমার মাথায় এটি কোনওরকম ছিল যে আমার পূর্বনির্দেশ করা দরকার অন্যথায় আসল গণনাটি ভুল হবে ... ভাল লাগল!
পোকে

1

এমএটিএল, 31 30 বাইট

&=R"X@@f-t10<)l_)t?qV}xGX@)]&h

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

ব্যাখ্যা

        % Implicitly grab input as a string
&=      % Perform element-wise comparison with automatic broadcasting.
R       % Take the upper-triangular part of the matrix and set everything else to zero
"       % For each column in this matrix
X@      % Push the index of the row to the stack
@f      % Find the indices of the 1's in the row. The indices are always sorted in
        % increasing order
-       % Subtract the index of the row. This result in an array that is [..., 0] where
        % there is always a 0 because each letter is equal to itself and then the ...
        % indicates the index distances to the same letters
t10<)   % Discard the index differences that are > 9
l_)     % Grab the next to last index which is going to be the smallest value. If the index
        % array only contains [0], then modular indexing will grab that zero
t?      % See if this is non-zero...
  qV    % Subtract 1 and convert to a string
}       % If there were no previous matching values
  x     % Delete the item from the stack
  GX@)  % Push the current character
]       % End of if statement
&h      % Horizontally concatenate the entire stack
        % Implicit end of for loop and implicit display

আপনি হয়ত কিছুটা দূরে থাকবেন তবে আমি সুপার কোথায় তা বলতে পারি না। পরিবর্তে ইনপুট this is a testফলন । দ্বিতীয়টি রূপান্তরিত হয় না । this 222a1te52this 222a19e52t9
ইঞ্জিনিয়ার টোস্ট

@ ইঞ্জিনিয়ারস্টাস্ট হাহাহা ধন্যবাদ আমি একবার দেখে নেব।
সোয়েভার

1

পিএইচপি, 104 বাইট

সামনের সমাধান

for($i=0;$i<strlen($a=&$argn);$f[$l]=$i++)$a[$i]=is_int($f[$l=$a[$i]])&($c=$i-$f[$l]-1)<10?$c:$l;echo$a;

পিছনের সমাধান

অনলাইন সংস্করণ

পিএইচপি, 111 বাইট

for(;++$i<$l=strlen($a=&$argn);)!is_int($t=strrpos($argn,$a[-$i],-$i-1))?:($p=$l-$i-$t-1)>9?:$a[-$i]=$p;echo$a;

পিএইচপি, 112 বাইট

for(;++$i<$l=strlen($a=&$argn);)if(false!==$t=strrpos($argn,$a[-$i],-$i-1))($p=$l-$i-$t-1)>9?:$a[-$i]=$p;echo$a;

অনলাইন সংস্করণ


1

রেক্সএক্স, 124 125 বাইট

a=arg(1)
b=a
do n=1 to length(a)
  m=n-1
  c=substr(a,n,1)
  s=lastpos(c,left(a,m))
  if s>0&m-s<=9 then b=overlay(m-s,b,n)
  end
say b

আপনি কিছুটা দূরে হতে পারেন। আমি জন্য REXX জানি না কিন্তু আমি অনুমান ত্রুটি লাইন 7 যেখানে এটা আছে হয় s<9পরিবর্তে s<10বা s<=9। পরিবর্তে ইনপুট this is a testফলন । দ্বিতীয়টি রূপান্তরিত হয় না । অনলাইনে এটি ব্যবহার করে দেখুনthis 222a1te52this 222a19e52t9
ইঞ্জিনিয়ার টোস্ট 19

ধন্যবাদ, এটি একটি বাইট ছাঁটাই করার বোকামি চেষ্টা ছিল। কোডটি ঠিক করা হয়েছে।
এপ্রিজ

1

সি (জিসিসি) , 117 103 বাইট

i,j;f(char*s){for(i=strlen(s)-1;s[i];i--)for(j=i-1;s[j]&&i-j<11;j--)if(s[i]==s[j]){s[i]=47+i-j;break;}}

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

স্ট্রিং .11 আমদানি ছাড়াই 103 বাইট, ডাব্লু / সতর্কতা কাজ করে। এটি যদি নিয়মের বিরুদ্ধে হয় তবে আমি এটি টানব

সুন্দর কোড:

i,j;
f(char *s) {
    // Chomp backwards down the string
    for(i=strlen(s)-1; s[i]; i--)
        // for every char, try to match the previous 10
        for(j=i-1; s[j] && i-j < 11; j--)
            // If there's a match, encode it ('0' + (i-j))
            if (s[i] == s[j]) {
                s[i] = 47+i-j;
                break;
            }
}

সম্পাদনা:

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

সুপারিশ (i=strlen(s);s[--i];)পরিবর্তে(i=strlen(s)-1;s[i];i--)
ceilingcat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.