আন-ডি-সদৃশ স্ট্রিং


33

ভূমিকা

নিম্নলিখিত স্ট্রিং পর্যবেক্ষণ করা যাক:

AABBCCDDEFFGG

আপনি দেখতে পাচ্ছেন যে চিঠিটি বাদে প্রতিটি চিঠিই নকল হয়ে গেছে E। তার মানে এই যে চিঠিটি ডি-নকলE করা হয়েছে । সুতরাং, আমাদের এখানে কেবল একমাত্র কাজটি করতে হবে তা হল সেই প্রক্রিয়াটিকে বিপরীত করা, যা আমাদের নিম্নলিখিত ডি-ডুপ্লিকেট স্ট্রিং দেয়:

AABBCCDDEEFFGG

এর আরও শক্ত উদাহরণ নিই:

AAAABBBCCCCDD

আপনি দেখতে পাচ্ছেন যে একটানা সংখ্যক অসম সংখ্যা রয়েছে B, যার অর্থ এই যে এর মধ্যে একটির BBমূল স্ট্রিং থেকে ডি-সদৃশ হয়েছিল। আমাদের কেবল এই চিঠিটি অন-নকল করতে হবে, যা আমাদের দেয়:

AAAABBBBCCCCDD


চ্যালেঞ্জ

কেবলমাত্র বর্ণানুক্রমিক অক্ষর (কেবলমাত্র বড়হাঁটি বা কেবল ছোট হাতের অক্ষর) নিয়ে একটি খালি-খালি ডি-সদৃশ স্ট্রিং দেওয়া হয়েছে, অন-ডি-সদৃশ স্ট্রিংটি ফিরে আসুন। আপনি ধরে নিতে পারেন যে স্ট্রিংয়ে সর্বদা কমপক্ষে একটি ডি-ডুপ্লিকেট অক্ষর থাকবে।


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

AAABBBCCCCDDDD    -->    AAAABBBBCCCCDDDD
HEY               -->    HHEEYY
AAAAAAA           -->    AAAAAAAA
N                 -->    NN
OOQQO             -->    OOQQOO
ABBB              -->    AABBBB
ABBA              -->    AABBAA

এটি , তাই বাইটে স্বল্পতম বৈধ জমা দেওয়া!


@ mbomb007 হ্যাঁ, এর ফলস্বরূপ AABBBB
আদনান

1
আমি নিশ্চিত নয় যে আমি চ্যালেঞ্জটি বুঝতে পেরেছি। ABBBমানচিত্র কেন AABBBB, না AABBBBBB?
ডেনিস

2
@Dennis আপনি 2 এর দলে অক্ষরের প্রতিটি গ্রুপ পৃথক থাকে, তাহলে আপনি নিম্নলিখিত পেতে হবে: A BB B। যে অক্ষরগুলি যুক্ত করা হয়নি (এবং তাই নকল করা হয়নি) তার নকল করা দরকার, ফলস্বরূপ AA BB BB, এটি অন-ডি-সদৃশ স্ট্রিং।
আদনান

8
সুতরাং: নিশ্চিত হয়ে নিন যে প্রতিটি চরিত্রের রানটিতে সর্বাধিক একটি উপাদান যুক্ত করে একাধিক উপাদান রয়েছে?
ম্যাড পদার্থবিদ

1
@ ম্যাডফিসিসিস্ট হ্যাঁ, এটি সঠিক
আদনান

উত্তর:


20

এমএটিএল , 7 বাইট

Y'to+Y"

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

আসুন 'ABBA'উদাহরণ ইনপুট হিসাবে নেওয়া যাক ।

Y'   % Implicit input. Run-length decoding
     % STACK: 'ABA', [1 2 1]
t    % Duplicate top of the stack
     % STACK: 'ABA', [1 2 1], [1 2 1]
o    % Modulo 2
     % STACK: 'ABA', [1 2 1], [1 0 1]
+    % Add, element-wise
     % STACK: 'ABA', [2 2 2]
Y"   % Run-length encoding. Implicit display
     % STACK: 'AABBAA'

11

রেটিনা , 11 বাইট

(.)\1?
$1$1

এটি অনলাইনে চেষ্টা করে দেখুন - এতে সমস্ত পরীক্ষার কেস থাকে


1
আমি আশা করি রেটিনা জিতবে।
অ্যাডম

@ অ্যাডাম হ্যাঁ, এটি বেশ সংক্ষিপ্ত, তবে এমএটিএল উত্তরটি দুর্দান্ত। সমস্ত গল্ফিং ভাষা সংক্ষিপ্ত সমাধানের সাথে শেষ হয়েছিল।
mbomb007

8

পার্ল, 16 বাইট

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

s/(.)\1?/$1$1/g

এটি চালানোর জন্য:

perl -pe 's/(.)\1?/$1$1/g' <<< 'HEY'

7

হাস্কেল, 36 বাইট

u(a:b:c)=a:a:u([b|a/=b]++c)
u x=x++x

ব্যবহারের উদাহরণ: u "OOQQO"-> "OOQQOO"

যদি স্ট্রিংয়ের কমপক্ষে 2 টি উপাদান থাকে তবে প্রথমটির দুটি অনুলিপি নিন এবং সাথে একটি পুনরাবৃত্ত কলটি সংযোজন করুন

  • প্রথম উপাদান দুটি পৃথক বা যদি দ্বিতীয় উপাদান একটি বিশ্রাম
  • শুধু বাকি

যদি দুটিরও কম উপাদান (এক বা শূন্য) থাকে তবে তালিকার দুটি অনুলিপি নিন।


6

ব্র্যাচল্যাগ , 17 বাইট

@b:{~b#=.l#e,|}ac

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

ব্যাখ্যা

Example input: "ABBB"

@b                  Blocks: Split into ["A", "BBB"]
  :{          }a    Apply the predicate below to each element of the list: ["AA", "BBBB"]
                c   Concatenate: "AABBBB"

    ~b#=.             Output is the input with an additional element at the beginning, and
                        all elements of the output are the same (e.g. append a leading "B")
        .l#e,         The length of the Output is an even number
             |        Or: Input = Output (i.e. do nothing)


4

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

অনেক বেশি দক্ষ '$ 1 $ 1' মত ব্যবহার করে 7 বাইট সংরক্ষিত [OTHER] [উত্তর] করেনি

s=>s.replace(/(.)\1?/g,'$1$1')

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


4

গণিত, 41 বাইট

s=StringReplace;s[s[#,a_~~a_->a],b_->b~~b]&

অজানা ফাংশন যা স্ট্রিংকে ইনপুট দেয় এবং স্ট্রিংকে আউটপুট দেয়। সম্পূর্ণরূপে ডুপ্লিকেট করুন তারপরে সম্পূর্ণ অনুলিপি করুন। বাস্তব সংক্ষিপ্ত নয়, তবে আমি এখনকার চেয়ে আরও ভাল করতে পারি না।


4

বেফঞ্জ 98 , 24 বাইট

#@~#;:::#@,~-:!j;$,;-\,;

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

$এর সাথে সহজেই প্রতিস্থাপন করা যায় -এবং দ্বিতীয়টি @দিয়ে ;

আমি মনে করি -উভয় -,(বা $,উপরে) এবং এর শুরুতে এটি আরও গল্ফ করা যেতে পারে -\,

কিভাবে?

Stack notation:  bottom [A, B, C, D] top

#@~     Pushes the first character onto the stack (C henceforth) and ends if EOF
#;      No-op to be used later
:::     Now stack is [C, C, C, C]

#@,~    Prints C, and if EOF is next (odd consecutive Cs), prints again and ends
        Lets call the next character D

-       Now stack is [C, C, C-D]
:!j;    If C == D, go to "$," Else, go to "-\,"

===(C == D)===

$,      C == D (i.e. a pair of Cs) so we discard top and print C (Stack is now [C])
;-\,;   Skipped, IP wraps, and loop starts again

===(C != D)===

-       Stack is [C, C-(C-D)]  By expanding: [C, C - C + D] or just [C, D]
\,      Prints C (Stack is now [D])

;#@~#;  This is skipped, because we already read the first character of a set of Ds,
        and this algorithm works by checking the odd character in a set of
        consecutive similar characters. We already read D, so we don't
        need to read another character.

3

জাভা 7, 58 বাইট

String c(String s){return s.replaceAll("(.)\\1?","$1$1");}

Ungolfed:

String c(String s){
  return s.replaceAll("(.)\\1?", "$1$1");
}

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  static String c(String s){return s.replaceAll("(.)\\1?","$1$1");}

  public static void main(String[] a){
    System.out.println(c("AABBCCDDEFFGG"));
    System.out.println(c("AAAABBBCCCCDD"));
    System.out.println(c("AAABBBCCCCDDDD"));
    System.out.println(c("HEY"));
    System.out.println(c("AAAAAAA"));
    System.out.println(c("N"));
    System.out.println(c("OOQQO"));
    System.out.println(c("ABBB"));
    System.out.println(c("ABBA"));
  }
}

আউটপুট:

AABBCCDDEEFFGG
AAAABBBBCCCCDD
AAAABBBBCCCCDDDD
HHEEYY
AAAAAAAA
NN
OOQQOO
AABBBB
AABBAA

2

পিএইচপি, 65 বাইট, কোনও রেজেক্স নেই

while(""<$c=($s=$argv[1])[$i])if($c!=$s[++$i]||!$k=!$k)echo$c.$c;

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়। সাথে চালাও-r

Regex? পিএইচপি-তে, বেশিরভাগ উত্তরের দ্বারা ব্যবহৃত রেজেক্স প্রতিটি অক্ষরকে নকল করে। 44 বাইট হবে:

<?=preg_replace("#(.)\1?#","$1$1",$argv[1]);

2

মস্তিষ্ক-বিমানবিধ্বংসী কামান 69 বাইট

জন্য +3 অন্তর্ভুক্ত -c

{((({}<>))<>[({})]<(())>){((<{}{}>))}{}{(<{}{}>)}{}}<>{({}<>)<>}<>

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

ব্যাখ্যা:

Part 1:
{((({}<>))<>[({})]<(())>){((<{}{}>))}{}{(<{}{}>)}{}}<>

{                                                  }   # loop through all letters
 (   {}     [ {} ]<(())>){((<{}{}>))}{}                # equals from the wiki   
                                                       # but first:
  ((  <>))<>                                           # push the top letter on the other 
                                                       # stack twice  
             (  )                                      # push the second letter back on
                                       {        }      # if they were equal:
                                        (<    >)       # push a 0 to exit this loop
                                          {}{}         # after popping the 1 from the 
                                                       # comparison and the next letter
                                                       # (the duplicate)
                                                 {}    # pop the extra 0
                                                    <> # switch stacks

Part 2 (at this point, everything is duplicated in reverse order):
{({}<>)<>}<>

{        }   # for every letter:
 ({}<>)      # move the top letter to the other stack
       <>    # and switch back
          <> # Finally switch stacks and implicitly print


1

ভি 10 বাইট

ͨ.©±½/±±

TryItOnline

থ্রেডের বাকি সমস্তগুলির মতোই রেগেক্সকে সন্ধান এবং প্রতিস্থাপন করুন। পার্থক্যটি হ'ল আমি এমন কোনও কিছু প্রতিস্থাপন করতে পারি যার \সামনে একই আসকি মানের সাথে অক্ষরের সাথে একটি সামনে প্রয়োজন হয় তবে উচ্চ বিট সেট। (সুতরাং (, 00101000 হয়ে যায় ¨, 10101000)



1

র‌্যাকেট 261 বাইট

(let((l(string->list s))(r reverse)(c cons)(e even?)(t rest)(i first))(let p((l(t l))(ol(c(i l)'())))
(cond[(empty? l)(list->string(if(e(length ol))(r ol)(r(c(i ol)ol))))][(or(equal?(i ol)(i l))(e(length ol)))
(p(t l)(c(i l)ol))][(p(t l)(c(i l)(c(i ol)ol)))])))

Ungolfed:

(define (f s)
  (let ((l (string->list s)))
    (let loop ((l (rest l))
               (ol (cons (first l) '())))
      (cond
        [(empty? l)
         (list->string(if (even? (length ol))
                          (reverse ol)
                          (reverse (cons (first ol) ol))))]
        [(or (equal? (first ol) (first l)) 
             (even? (length ol)))
         (loop (rest l) (cons (first l) ol))]
        [else
         (loop (rest l) (cons (first l) (cons (first ol) ol)))] ))))

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

(f "ABBBCDDEFFGGG")

আউটপুট:

"AABBBBCCDDEEFFGGGG"


1

পাইথন 3, 102 94 বাইট

from collections import*
lambda s:"".join(c*(s.count(c)+1&-2)for c in OrderedDict.fromkeys(s))

Xnor 8 টি বাইট সংরক্ষণ করার জন্য ধন্যবাদ ! -> বিটহ্যাক।


এটি অক্ষরগুলি সঠিক ক্রমে রাখে না।
xnor

@ xnor উল্লেখ করার জন্য ধন্যবাদ! সংশোধন করা হয়েছে।
Yytsi

ভাল লাগছে। আপনি অভিব্যক্তি লিখতে পারেন x+x%2যেমন x&-2
xnor

@ এক্সনোর আমি চেষ্টা করেছিলাম s.count(c)&-2এবং এটি একটি খালি স্ট্রিং ফিরিয়ে দিয়েছে ...: / কোনও চিন্তা?
Yytsi

1
ওহ, আপনি ঠিক বলেছেন এবং আমি একটি ভুল করেছি। আমার মনে হয় x+1&-2এটা করা উচিত। সন্ধ্যাগুলি নিজের কাছে যায় এবং সন্ধ্যা পর্যন্ত প্রতিকূল হয়।
xnor

1

আর, 81 বাইট

r=rle(el(strsplit(scan(,""),"")));cat(do.call("rep",list(r$v,r$l+r$l%%2)),sep="")

স্টিডিন থেকে একটি স্ট্রিং পড়ে, অক্ষরের ভেক্টরে স্প্লিন করে রান-লেংথ এনকোডিং (rle) সঞ্চালন করে। এরপরে rle, দৈর্ঘ্যের যোগফল এবং দৈর্ঘ্যের মোড থেকে প্রতিটি মান পুনরাবৃত্তি করুন2

আমরা যদি স্থান দ্বারা পৃথক পৃথক ইনপুট পড়তে পারি (স্পষ্টভাবে ভেক্টর / অক্ষরের অ্যারে হিসাবে) তবে আমরা বিভাজন অংশটি এড়িয়ে যেতে পারি এবং প্রোগ্রামটি হ্রাস করে 64৪ বাইট:

r=rle(scan(,""));cat(do.call("rep",list(r$v,r$l+r$l%%2)),sep="")

1

> <> (মাছ) 39 বাইট

0v ;oo:~/:@@:@=?!voo
 >i:1+?!\|o !:  !<

খুব নিশ্চিত যে এটি একটি ভিন্ন কৌশল ব্যবহার করে প্রচুর গল্ফ করা যায়।

এটি একটি ইনপুট নেয় এবং বর্তমান স্ট্যাক আইটেমটির সাথে তুলনা করে, যদি এটি আলাদা হয় তবে এটি প্রথম স্ট্যাক আইটেমটি দু'বার মুদ্রণ করবে, একই যদি এটি উভয়ই প্রিন্ট করে।

খালি হয়ে গেলে স্ট্যাকটি 0 দিয়ে সরবরাহ করা হয় যা কখনই প্রিন্ট করে না তাই কখনই যুক্ত করা যায়।


1

পাইথ, 15 বাইট

Vrz8p*+hN%hN2eN

সমস্ত পরীক্ষার কেসগুলি এখানে যাচাই করুন।

পদ্ধতিটির জন্য লুই মেন্ডোকে ধন্যবাদ ।

ব্যাখ্যা

Vrz8p*+hN%hN2eN    z autoinitializes to the input
 rz8               run-length encode the input, returned as list of tuples (A -> [[1,"A"]])
V                  for every element N in this list
      +hN          add the head element of N (the number in the tuple)
         %hN2      to the head element of N mod 2
     *       eN    repeat the tail element of N that many times (the letter in the tuple)
    p              print repeated character without trailing newline

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


1

পাওয়ারশেল , 28 বাইট

$args-replace'(.)\1?','$1$1'

এটি অনলাইন চেষ্টা করুন!(সমস্ত পরীক্ষার কেস অন্তর্ভুক্ত)

রেটিনা উত্তর পোর্ট । নোটের কেবলমাত্র পয়েন্টগুলি হ'ল আমরা $argsস্বাভাবিকের পরিবর্তে পেয়েছি $args[0](যেহেতু -replaceইনপুট অ্যারেতে প্রতিটি আইটেমটি পুনরাবৃত্তি করবে, আমরা সূচকটি গল্ফ করতে পারি), এবং '$1$1'একক উদ্ধৃতি হওয়া দরকার যাতে তারা রেজেক্সের সাথে প্রতিস্থাপিত হয় পাওয়ারশেল ভেরিয়েবল হিসাবে বিবেচনা করার পরিবর্তে ভেরিয়েবলগুলি (যা তারা ডাবল-কোট হলে হত)।


1

সি, 67 বাইট

i;f(char*s,char*d){i=*s++;*d++=i;*d++=i;*s?f(i-*s?s:++s,d):(*d=0);}

সাথে কল করুন:

int main()
{
    char *in="AAABBBCCCCDDDD";
    char out[128];
    f(in,out);
    puts(out);
}

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