কাটা টানা ধারাবাহিক অক্ষর n দৈর্ঘ্যে চলে


14

চ্যালেঞ্জ

একটি ইনপুট স্ট্রিং দেওয়া হয়েছে এবং একটি পূর্ণসংখ্যা n - ক্রমাগত অক্ষরগুলির যে কোনও রান সর্বাধিক n দৈর্ঘ্যে ছিন্ন করে । চরিত্রগুলি বিশেষ অক্ষরগুলি সহ যে কোনও কিছু হতে পারে। ফাংশনটি কেস সংবেদনশীল হওয়া উচিত এবং এন 0 থেকে অসীম হতে পারে।

ইনপুট / আউটপুট উদাহরণ:

f("aaaaaaabbbccCCCcc", 2) //"aabbccCCcc" 
f("aaabbbc", 1) //"abc"
f("abcdefg", 0) //""
f("aaaaaaabccccccccCCCCCC@", 4) //"aaaabccccCCCC@"

স্কোরিং

স্কোরিং ব্যবহৃত বাইট সংখ্যা উপর ভিত্তি করে। এইভাবে

function f(s,n){return s.replace(new RegExp("(.)\\1{"+n+",}","g"),function(x){return x.substr(0, n);});}

104 পয়েন্ট হবে।

শুভ গল্ফিং!

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


1
কেন ES6 অনুমতি দেয় না?
টুকস্রাফটিং

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

ভাষার সীমাবদ্ধতা এবং ফলস্বরূপ স্কোরিং বিধি পরিবর্তন করেছে। আমি এখনও জাভাস্ক্রিপ্ট এন্ট্রি দেখতে পছন্দ করব তবে আমার ধারণা আমি প্রায় 4-5 টি চরিত্রের গল্ফ ভাষা নিয়ে বাঁচতে পারি।
TestSubject06

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! কোড গল্ফ চ্যালেঞ্জগুলি ডিফল্টরূপে বাইটে দৈর্ঘ্যে স্কোর করে । যদিও দৈর্ঘ্যের দ্বারা স্কোরিং অক্ষর সম্ভব, আপনার মত কিছু উত্তর পেতে আবদ্ধ করছেন এই এক
ডেনিস

ওহ খোদা. বাইট স্কোরিংয়ে পরিবর্তন করা হয়েছে।
TestSubject06

উত্তর:


6

পাইথন 2, 52 বাইট

lambda s,n:reduce(lambda r,c:r+c*(r[-n:]!=c*n),s,'')

প্রোগ্রাম হিসাবে লিখিত (54 বাইট):

s,n=input();r=''
for c in s:r+=c*(r[-n:]!=c*n)
print r

ইনপুট স্ট্রিংয়ের মাধ্যমে আইট্রেট করে sপ্রতিটি অক্ষরকে আউটপুট স্ট্রিংয়ে সংযোজন করা হয় rযদি না যে শেষ nঅক্ষরটি rসেই অক্ষর না হয়।

আমি যদিও এটি ব্যর্থ হব n==0কারণ r[-0:]সর্বশেষ 0 টি অক্ষর (খালি স্ট্রিং) নয়, তবে পুরো স্ট্রিং। তবে, এটি কাজ করে কারণ স্ট্রিংটি খালি থাকে, সুতরাং এটি 0-টির অক্ষরের সাথে মেলে।

lambdaপুনরাবৃত্তির কারণে একটি পুনরাবৃত্তি 56 দিয়েছে

f=lambda s,n:s and s[:f(s[1:],n)[:n]!=s[0]*n]+f(s[1:],n)

iশেষ চরিত্রটির পুনরাবৃত্তিগুলির পাল্টা রাখার একটি বিকল্প কৌশলও কেবলমাত্র শেষ nঅক্ষরগুলি সরাসরি পরীক্ষা করে দেখার চেয়ে দীর্ঘতর হয়ে ওঠে ।


6

সি, 81 78

আগত স্ট্রিংটি পরিবর্তন করে।

c,a;f(p,n)char*p;{char*s=p;for(;*p;s+=c<n)*s=*p++,a^*s?c=0:++c,a=*s;c=a=*s=0;}

পরীক্ষা প্রোগ্রাম

দুটি প্যারামিটার প্রয়োজন, প্রথমটি কাটা স্ট্রিং, দ্বিতীয়টি দৈর্ঘ্যের সীমা।

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, const char **argv)
{
    char *input=malloc(strlen(argv[1])+1);
    strcpy(input,argv[1]);
    f(input,atoi(argv[2]));
    printf("%s\n",input);
    free(input);
    return 0;
}

ব্যাখ্যা:

c,a;                 //declare two global integers, initialized to zero.
                     //c is the run length, a is the previous character
f(char*p,int n){...} //define function f to truncate input
char*s=p;            //copy p to s; p is source, s is destination
for(;*p              //while there is a source character
;s+=c<n)             //increment copied pointer if run is under the limit
*s=*p++,             //copy from source to destination, increment source
a^*s?c=0:++c,        //if previous character != current then run=0 else increment run
a=*s;                //previous character = current source character
c=a=*s=0;            //after loop, terminate destination string with NUL and reset c and a.

এটি কাজ করে কারণ উত্স পয়েন্টারটি সর্বদা গন্তব্য পয়েন্টারের সমান বা তার চেয়ে বড় হবে, সুতরাং আমরা যখন স্ট্রিংটি পার্স করি তখন তা লিখতে পারি।


এটি আশ্চর্যজনক, আপনি এটি ব্যাখ্যা করতে পারেন?
টেস্টসুবিজেট 06

@ TestSubject06 - একটি ব্যাখ্যা যুক্ত করেছে।
17

এটি কি এন = 0 কেসের সাথে কাজ করে? আমি এখানে পরীক্ষা করার জন্য এটি সংকলন করতে পারি না।
TestSubject06

হ্যাঁ এটা করে. আমি একটি পরীক্ষা প্রোগ্রাম যুক্ত করেছি যাতে আপনি সংকলন করতে পারেন।
owacoder

দুর্দান্ত, কোনও পাল্টা উদাহরণ খুঁজে পেল না। সংক্ষিপ্ত এবং এটি কাজ করে!
TestSubject06

5

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

import Data.List
(.group).(=<<).take

বিন্দু মুক্ত সংস্করণ \n s -> concatMap (take n) (group s)


4

জাভাস্ক্রিপ্ট ES6, 60 54 55 43 বাইট

-12 বাইটস @ টেস্টসুবজেক্ট06 এবং @ ডাউনগোটকে ধন্যবাদ

(s,n)=>s.replace(/(.)\1*/g,x=>x.slice(0,n))

উদাহরণ রান:

f("aaaaaaabbbccCCCcc"      , 2) -> "aabbccCCcc" 
f("aaabbbc"                , 1) -> "abc"
f("abcdefg"                , 0) -> ""
f("aaaaaaabccccccccCCCCCC@", 4) -> "aaaabccccCCCC@"
f("a"                      , 1) -> "a"

f ("a", 1) -> ""
TestSubject06

1
যেহেতু আপনার রেজইপেক্সটি কোনওভাবেই গতিশীলভাবে নিয়ন্ত্রিত নয় আপনি RegExp ("(।) \\ 1 *", "g") -> /(.)\1*/g
পরীক্ষার

1
রূপান্তর RegExp("(.)\\1*","g")করুন/(.)\1*/g
ডাউনগোট

1
আমি এটি সম্পূর্ণরূপে আলাদা কোণ থেকে না আসা পর্যন্ত জেএসে আরও ছোট হয়ে দেখছি না। ভাল কাজ @ ডেনড্রোবিয়াম!
টেস্টসুবিজেট 06

1
পরিবর্তন করে এক বাইট শেভ (s,n)করতে s=>n, এবং ব্যবহার হয়েf("aaaaaaabbbccCCCcc")(2)
প্যাট্রিক রবার্টস

3

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

Y'i2$X<Y"

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

ব্যাখ্যা

        % Implicitly grab input as a string
Y'      % Perform run-length encoding. Pushes the values and the run-lengths to the stack
i       % Explicitly grab the second input
2$X<    % Compute the minimum of the run lengths and the max run-length
Y"      % Perform run-length decoding with these new run lengths
        % Implicitly display the result

'@@@@@bbbbbcccddeegffsassss' 3 ফিরে এসেছে'৮৮ বিবিবিসিসিডিডিইগফসাস 'যা চূড়ান্ত' গুলি 'অনুপস্থিত
টেস্টসুবিজেট ০

@ টেস্টসুবজেক্ট06 এটি উল্লেখ করার জন্য ধন্যবাদ।
সোয়েভার




2

gs2, 6 বাইট

সিপি 437 এ এনকোড হয়েছে :

╠c╨<ΘΣ

এটি একটি বেনাম ফাংশন (ব্লক) যা স্ট্যাকের শীর্ষে একটি নম্বর এবং তার নীচে একটি স্ট্রিং আশা করে।

     Σ   Wrap previous five bytes in a block:
╠          Pop number into register A.
 c         Group string.
    Θ      Map previous two bytes over each group:
  ╨<         Take the first A bytes.

এটি অনলাইনে চেষ্টা করুন। (এখানে কোডটি lines, dump, read number, [the answer], run-block।)


1

পার্ল 6 ,  38  36 বাইট

->$_,$n {S:g/(.)$0**{$n..*}/{$0 x$n}/}
->$_,\n{S:g/(.)$0**{n..*}/{$0 x n}/}

ব্যাখ্যা:

-> $_, \n { # pointy block lambda
  # regex replace ( return without modifying variant )
  # globally
  S:global /
    # a char
    (.)
    # followed by 「n」 or more identical chars
    $0 ** { n .. * }
  /{
    # repeat char 「n」 times
    $0 x n
  }/
}

টেস্ট:

#! /usr/bin/env perl6
use v6.c;
use Test;

my &truncate-char-runs-to = ->$_,\n{S:g/(.)$0**{n..*}/{$0 x n}/}

my @tests = (
  ("aaaaaaabbbccCCCcc", 2) => "aabbccCCcc",
  ("aaabbbc", 1) => "abc",
  ("abcdefg", 0) => "",
  ("aaaaaaabccccccccCCCCCC@", 4) => "aaaabccccCCCC@",
);

plan +@tests;

for @tests -> $_ ( :key(@input), :value($expected) ) {
  is truncate-char-runs-to(|@input), $expected, qq'("@input[0]", @input[1]) => "$expected"';
}
1..4
ok 1 - ("aaaaaaabbbccCCCcc", 2) => "aabbccCCcc"
ok 2 - ("aaabbbc", 1) => "abc"
ok 3 - ("abcdefg", 0) => ""
ok 4 - ("aaaaaaabccccccccCCCCCC@", 4) => "aaaabccccCCCC@"

0

জাভাস্ক্রিপ্ট ES5, 73

function f(s,n){return s.replace(RegExp("(.)(\\1{"+n+"})\\1*","g"),"$2")}

লিনের রেজেক্সকে তার পাইথনের উত্তর থেকে পুনরায় ব্যবহার করে ।


আপনার কোড সেই ক্ষেত্রে হ্যান্ডেল করে না যেখানে এন শূন্য, এটি কেবল পুরো মূল স্ট্রিংটি দেয়।
TestSubject06

হ্যাঁ, ফায়ারফক্সে আপনি ধনুর্বন্ধনী এবং রিটার্ন স্টেটমেন্ট ফেলে দিতে পারেন , যদিও সিনট্যাক্সটি (দুঃখজনকভাবে) অবচিত হয়ে গেছে এবং সরানো হবে (এটি আসলে কয়েকটি সংস্করণে অনুপস্থিত ছিল, বুঝতে পারছিল না তারা এটিকে ফিরিয়ে এনেছে)।
ডেন্ড্রোবিয়াম

আপনি new-4 বাইটের জন্য কীওয়ার্ডটিও ফেলে দিতে পারেন ।
ডেনড্রোবিয়াম

@ টেস্টসুবজেক্ট06 ধন্যবাদ, আমি আমার উত্তরটি সম্পাদনা করেছি এবং আমি বিশ্বাস করি এটি এখন পরীক্ষার কেসগুলিতে পাস করেছে।
FryAmTheEggman

0

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

46 বাইট কোড + 3 -iএবং 1 এর জন্য-p

এর মাধ্যমে সংক্ষিপ্তসার করতে সংখ্যাটি নেয় -i

s!(.)\1+!$&=~s/(.{$^I}).+/$1/r!ge

ব্যবহার

perl -i4 -pe 's!(.)\1+!$&=~s/(.{$^I}).+/$1/r!ge' <<< 'aaaaaaabccccccccCCCCCC@'
aaaabccccCCCC@

কেন -pকেবল একটি বাইট?
কাউকে ছাড়াই

@ someonewithpc যখন -eএই বিকল্পগুলির সাথে একত্রিত হতে পারে কেবলমাত্র 1 বাইট ব্যবহার করে। যদি স্ক্রিপ্টটি কোনও ফাইল থেকে চালাতে হয় তবে তার জন্য জায়গার জন্য 3 খরচ হয় এবং সে নিজেই পতাকাঙ্কিত করে। একটি মেটা পোস্ট রয়েছে আমি চেষ্টা করব এবং খুঁজে পাব তবে আমি এখনই মোবাইলে।
ডম হেস্টিংস


0

46 বাইট বাশ

read c;sed -r ":l;s/(.)(\1{$c})(.*)/\2\3/;t l"

ব্যবহার: সীমাবদ্ধ করতে অক্ষরের সংখ্যা লিখুন, এন্টার টিপুন এবং স্ট্রিংটি প্রবেশ করুন। Ctrl+ + Dপ্রস্থান sed(পাঠানো ফাইলের শেষে)।


0

জাভা 7, 107 106 বাইট

String c(String s,int i){String x="";for(int i=-1;++i<j;)x+="$1";return s.replaceAll("(.)\\1{"+i+",}",x);}

স্ট্রিং কনটেনটেশনের জন্য পূর্ববর্তী বিকল্প ইনলাইন-লুপ (যা String s="";for(int i=-1;++i<j;)s+="$1";দুর্ভাগ্যক্রমে 1 বাইট বেশি ):

String c(String s,int i){return s.replaceAll("(.)\\1{"+i+",}",new String(new char[i]).replace("\0","$1")));}

অবহেলিত ও পরীক্ষার কেস:

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

class Main {
  static String c(String s, int i){
    String x="";
    for(int j = -1; ++j < i;){
      x += "$1";
    }
    return s.replaceAll("(.)\\1{"+i+",}", x);
  }

  public static void main(String[] a){
    System.out.println(c("aaaaaaabbbccCCCcc", 2));
    System.out.println(c("aaabbbc", 1));
    System.out.println(c("abcdefg", 0));
    System.out.println(c("aaaaaaabccccccccCCCCCC@", 4));
    System.out.println(c("@@@@@bbbbbcccddeegffsassss", 5));
  }
}

আউটপুট:

aabbccCCcc
abc

aaaabccccCCCC@
@@@@@bbbbbcccddeegffsassss

0

জাভাস্ক্রিপ্ট (বাইরের গ্রন্থাগার ব্যবহার করে) (১১৮ বাইট)

(s,r)=>_.From(s).Aggregate((c,n)=>{if(c.a!=n){c.c=1;c.a=n}else{c.c++}if(c.c<=r){c.b+=n}return c},{a:"",b:"",c:0}).b

লিবের লিঙ্ক: https://github.com/mvegh1/ গণনাযোগ্য

কোড ব্যাখ্যা: স্ট্রিংটি লাইব্রেরিতে লোড করুন, যা অভ্যন্তরীণভাবে চর অ্যারে হিসাবে পার্স করে। ক্রমটিতে একটি সংযোজক প্রয়োগ করুন, একটি বীজ মান হিসাবে একটি কাস্টম অবজেক্টে পাস করুন। সম্পত্তি A হ'ল বর্তমান উপাদান, খ সঞ্চিত স্ট্রিং এবং সি বর্তমান উপাদানটির ক্রমিক গণনা। বর্তমান পুনরাবৃত্তির মান, এন, শেষ উপাদানটির সমান, সিএ না হলে সঞ্চালক পরীক্ষা করে থাকে, যদি না হয়, তবে আমরা গণনাটিকে 1 এ পুনরায় সেট করে এবং বর্তমান উপাদানটি সেট করি। যদি বর্তমান উপাদানটির গণনা কাঙ্ক্ষিত দৈর্ঘ্যের চেয়ে কম বা সমান হয়, আমরা এটি রিটার্ন স্ট্রিংয়ে জমা করি। অবশেষে, আমরা সম্পত্তি বি, জমা হওয়া স্ট্রিংটি ফিরিয়ে দেব। গল্ফিয়াস্ট কোড নয়, তবে খুশি আমি একটি সমাধান পেয়েছি যা কাজ করে ...

এখানে চিত্র বর্ণনা লিখুন


0

জে, 31 30 বাইট

((<.#@>)#{.@>@])]<;.1~1,2~:/\]

ইনপুট স্ট্রিংটিকে অভিন্ন অক্ষরের রানে (সাবস্ট্রিংগুলি) গোষ্ঠীভূত করে এবং সেই রানের দৈর্ঘ্যের সর্বনিম্ন এবং স্ট্রিংটি কাটানোর জন্য যে ইনপুট ছিল তার সর্বাধিক দৈর্ঘ্য নেয়। তারপরে প্রতিটি রানের প্রথম অক্ষরটি বহুবার অনুলিপি করে।

ব্যবহার

   f =: ((<.#@>)#{.@>@])]<;.1~1,2~:/\]
   2 f 'aaaaaaabbbccCCCcc'
aabbccCCcc
   1 f 'aaabbbc'
abc
   0 f 'abcdefg'

   4 f 'aaaaaaabccccccccCCCCCC@'
aaaabccccCCCC@

ব্যাখ্যা

((<.#@>)#{.@>@])]<;.1~1,2~:/\]  Input: k on LHS, s on RHS
                             ]  Get s
                        2~:/\   Test if each pair of consecutive chars are not equal
                      1,        Prepend a 1
                ]               Get s
                 <;.1~          Chop s where a 1 occurs to get the runs in s
    #@>                         Get the length of each run
  <.                            Take the min of the length and k
         {.@>@]                 Get the head of each run
        #                       Copy the head of each run min(k, len(run)) times
                                Return that string as the result

0

ডায়ালগ এপিএল , 22 20 বাইট

(∊⊢↑¨⍨⎕⌊⍴¨)⊢⊂⍨1,2≠/⊢

N এর জন্য প্রম্পট করে এবং যুক্তি হিসাবে ইনপুট স্ট্রিং নেয় takes

(মৌন ফাংশন ...
    চেপ্টা
    ⊢↑¨⍨যুক্তি (অর্থাত প্রতিটি পার্টিশন) এর ছেঁটে ফেলা প্রতিটি উপাদান
    ⎕⌊⍴¨সাংখ্যিক ইনপুটের সর্বনিম্ন এবং বর্তমান দৈর্ঘ্য
)[মৌন ফাংশন শেষে] প্রয়োগ
⊢⊂⍨ইনপুট এ বিভক্ত ᴛʀᴜᴇ এর গুলি
1, ᴛʀᴜᴇ আগে লেখা করার জন্য ( প্রথম অক্ষরটি এর অস্তিত্বহীন পূর্বসূরীর
2≠/⊢সমান নয় ) জোড়-ভিত্তিক ইনপুটটিতে অক্ষরের সমান নয়



-1

টিসিসি, 7 5 বাইট

$~(;)

ইনপুটটি একটি স্ট্রিং এবং একটি সংখ্যা, স্থান দ্বারা পৃথক করা।

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

       | Printing is implicit
$~     | Limit occurence
  (;   | First part of input
    )  | Second part of input

1
আপনার উত্তরের কোনও পুনর্বিবেচনা tcc.luaটাইমস্ট্যাম্প সহ ফাইলটির সাথে কাজ করে না 16-07-25 16:57 ইউটিসি, যা একবারে একাধিক ইনপুট পড়ার ক্ষমতা রাখে না। যদি আপনার উত্তরের এমন ভাষার কোনও সংস্করণ প্রয়োজন যা চ্যালেঞ্জ পোস্ট করে, তবে আপনাকে অবশ্যই এটির শিরোনামে প্রতিদ্বন্দ্বী হিসাবে লেবেল করা উচিত । আপনি যখন করবেন তখন আমি আমার ডাউনটোট সরিয়ে ফেলব।
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.