একটি সংখ্যার স্ট্রিং সঙ্কুচিত করুন


12

কোনও স্ট্রিং 1এবং 2যেকোন দৈর্ঘ্যের দিক দিয়ে কিছু কোড লিখুন ( আর কোনও ফাংশন হতে হবে না, সবকিছু ঠিকঠাক হবে) যা এই মানদণ্ড অনুসরণ করে চূড়ান্ত আকারে স্ট্রিং সঙ্কুচিত করার জন্য কয়টি পদক্ষেপের প্রয়োজন তা গণনা করে:

আপনার স্ট্রিং হয় তাহলে 112112, এর মানে হল আপনি একটি 1, দুই 1s এবং 2, এই মত প্রিন্ট করতে আছে: 1112। আপনি যখন আবার অপারেশন করবেন তখন আপনাকে একটি 1 এবং একটি 2 মুদ্রণ করতে হবে You আপনি পাবেন 12। তারপর আপনি এক 2 মুদ্রণ প্রাপ্তির 2। এটি একটি চূড়ান্ত রূপ, যেহেতু এই স্ট্রিংটি আর পরিবর্তন হবে না। আপনার কোডটি আউটপুট দেবে 3, যেহেতু আপনাকে চূড়ান্ত ফর্মটিতে পৌঁছানোর জন্য 3 টি ধাপের দরকার ছিল।

অন্যান্য বিধি

  • যদি স্ট্রিংটির অসম দৈর্ঘ্য থাকে তবে শেষ সংখ্যাটি অচ্ছুত থাকে।

  • প্রতিটি স্ট্রিং যা আর পরিবর্তন করতে পারে না (যেমন 222222) চূড়ান্ত রূপ হিসাবে বিবেচনা করা হয়।

  • আপনি কোনও বাহ্যিক উত্স ব্যবহার করতে পারবেন না।

  • আপনার কোড অবশ্যই প্রতিটি স্ট্রিং 1এবং এর সাথে কাজ করবে 2

  • সংক্ষিপ্ততম কোডটি জয়ী হয়, কারণ এটি কোড-গল্ফ।

  • আপনার কোড প্রতিটি পদক্ষেপ মুদ্রণ করা উচিত।

  • প্রতিটি ইনপুট পদ্ধতি ঠিক থাকবে।

উদাহরণ

Input >> 122122122121212212

Your code has to print:
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps:7 (you can omit the "Steps")
---- ---- ---- ----
Input >> 22222221

Your code has to print:
22222211
2222221
2
---- ---- ---- ----
Input >> 2222

Your code has to print:
0

সম্পাদনা: ভারী সম্পাদিত। যে সম্পর্কে দুঃখিত।


3
"যদি আপনার স্ট্রিংটি 112112 হয়, তার অর্থ এই যে আপনাকে এই হিসাবে একটি 1, দুটি 1 এবং একটি 2 মুদ্রণ করতে হবে: 1112" "আমি এটি পাই না।
ফেবিনআউট

7
জোরে জোরে এটি পড়ার চেষ্টা করুন। এটি "একটি এক", "দুজন" এবং "একটি দুটি"। মানে, "1 সময় 1", "2 বার 1" এবং "1 সময় 2"।
Vereos

5
যদি রেজেক্সগুলি "এমনকি দরকারী না" হয় তবে আপনি কেন তাদের নিষিদ্ধ করেন?
জেবি

1
রেজেক্সের সীমাবদ্ধতা সরানো হয়েছে।
ভেরিয়োস

1
@ProgramFOX "এক 1, দুই 1s, এবং একটি 2": 1 11 2। প্রতি দুটি সংখ্যাই একটি জুড়ি: জোড়াটির প্রথম সংখ্যাটি বলে যে জোড়ায় দ্বিতীয় সংখ্যাটি কতবার রেন্ডার করতে হয়। জুটির অংশীদার ছাড়া কোনও চূড়ান্ত বিজোড় অঙ্ক যেমন হয় তেমনভাবে রেন্ডার করা হয়।
এপসিলারস

উত্তর:


7

রুবি 1.9+, 73 টি অক্ষর

আমি নো-রেজেক্স নিয়মটিকে নির্বোধ এবং স্বেচ্ছাসেবক হিসাবে দেখছি, সুতরাং এখানে একটি স্পেটিফুল রেজেক্স ভিত্তিক সমাধান রয়েছে:

gets
($.+=1;puts$_.gsub!(/(.)(.)/){$2*$1.to_i})until~/^(22)*[12]?$/
p~-$.

পরীক্ষা রান:

$ ruby 21.rb <<< 122122122121212212
211222111111222
11222111222
122111222
2111222
111222
1222
222
7

শেষ লাইনটি ধাপগুলির সংখ্যা।

সম্পাদনা করুন: ভেরোস দ্বারা রেজেক্সের বিধিনিষেধ অপসারণ করা হয়েছে।


3

সি - 156 154

আমার প্রথম কোড গল্ফ এখানে!

f(char*s,c){puts(s);char*a=s,*b=s,m=50,x,y;while(*a){
x=*a++;y=*a++;if(y)m&=x&y;*b++=y?:x;x-49?*b++=y:(*b=0);}
*b=*a;return m/50?printf("%i",c),c:f(s,c+1);}

টেস্ট:

char c[] = "12211122211222221";
f(c,0);

আউটপুট:

12211122211222221
21112211222221
111221222211
121122221
21222211
1122221
122221
22211
22111
2211
221
10

2

গল্ফস্ক্রিপ্ট: 69 টি অক্ষর

0\{\)\.p.[]\{~10base{.,1>{(\(@\{''+*}++~@\+\.}{~+0.}if}do;}~.@=!}do;(

অভ্যন্তরীণ লুপের প্রতিটি পুনরাবৃত্তি স্ট্রিংয়ে প্রথম 2 সংখ্যা খুঁজে বের করে এবং তাদের ফর্মের একটি ব্লক তৈরি করতে ব্যবহার করে {num1 num2 '' + *}। যখন এই ব্লকটি মূল্যায়ন করা হয়, আমরা সেই সংখ্যাগুলির কাঙ্ক্ষিত পাঠ পাই। আর কোনও অক্ষর না পাওয়া পর্যন্ত এটি পুনরাবৃত্তি করুন। তারপরে, পুনরাবৃত্তি এবং মুদ্রণের সংখ্যা ট্র্যাক করে সেই লুপটি পুনরাবৃত্তি করুন।

নমুনা:

echo '12211122211222221' | ruby golfscript.rb g.gs
"12211122211222221"
"21112211222221"
"111221222211"
"121122221"
"2122221"
"1122221"
"122221"
"22211"
"22111"
"2211"
"221"
10

2

পাইথন - 126

def f(s):
 j=0
 while 1:
    n="";i=0
    for c in s:n+=c*i;i=[int(c),0][i>0]
    if i:n+=`i`
    if s==n:break
    s=n;print s;j+=1
 print j

এটি ইনপুট মানটি প্রিন্ট করে না। যদি এটির প্রয়োজন হয় তবে print s;ডানদিকে চলে যানn="";

দ্রষ্টব্য: আপনি "ফাংশন" বলেছিলেন তাই এটি একটি ফাংশন। এখানে একটি সংস্করণ যা কোনও ফাংশন নয় (127 অক্ষর):

s=raw_input();j=0
while 1:
    n="";i=0
    for c in s:n+=c*i;i=[int(c),0][i>0]
    if i:n+=`i`
    if s==n:break
    s=n;print s;j+=1
print j

(যদি আমি 118- তে নম্বরটি পেস্ট করতে পারি তবে ব্যবহারকারীরা প্রথম লাইনে উদ্ধৃতিগুলির মধ্যে ডেটা পেস্ট করুন):

s="";j=0
while 1:
    n="";i=0
    for c in s:n+=c*i;i=[int(c),0][i>0]
    if i:n+=`i`
    if s==n:break
    s=n;print s;j+=1
print j

নমুনা রান:

211222111111222
11222111222
122111222
2111222
111222
1222
222
7

বোনাস হিসাবে, এই সমাধানগুলির প্রতিটি বৃহত্তর সংখ্যক (9 অবধি) স্ট্রিংয়ের জন্য কাজ করে তবে কিছু স্ট্রিং বৃহত্তর এবং বৃহত্তর আউটপুট উত্পাদন করে (উদাহরণস্বরূপ, 99)


1

জাভাস্ক্রিপ্ট, 107

(তীর ফাংশন সমর্থন প্রয়োজন, যেমন ফায়ারফক্সের মতো)

for(p=prompt,s=p(),k=0;r=s.match(/.?.?/g).map(a=>a>2?a[1]+(a<13?'':a[1]):a).join(''),p(s),r!=s;s=r)k++;p(k)
  • s ইনপুট স্ট্রিং হয়

  • প্রতিটি রাউন্ডে, আমরা দ্বি-চরিত্রের স্ট্রিংগুলির একটি অ্যারেতে .?.?বিস্ফোরিত করার জন্য রেজেক্স ব্যবহার করি s, তারপরে mapসেই স্ট্রিংগুলি তাদের হ্রাসকৃত আকারগুলিতে যায় এবং অ্যারেটিকে আবার একসাথে আঠালো করে দেয়

  • r আগেরটির তুলনায় বর্তমান রাউন্ডের ফলাফল সংরক্ষণ করে s

  • k গোলাকার পাল্টা

  • আমরা ইনপুট এবং আউটপুট প্রক্রিয়া উভয় হিসাবে মারাত্মকভাবে অপব্যবহার করি prompt(aliised p), কারণ এটি ব্যবহারকারীর কাছে কোনও বার্তা উপস্থাপন করতে পারে


for(p=prompt,s=p(),k=0;
    r=s.match(/.?.?/g).map(
        a=>
            a>2?                     // if a is more than one char
                a[1]+(a<13?'':a[1])  // double the second char if the first char is 2
               :a                    // if not two chars, return a
    ).join(''),                      // glue new array together
     p(s),                           // print s
     r!=s;                           // test if string has changed
    s=r)
        k++;
p(k)

1

পার্ল - 50 (+2) বাইট

$a-=print while"$_"ne(s/(.)(.)/$2x$1/ge,$_);$_=-$a

-plকমান্ড লাইন সুইচ প্রয়োজন ।

নমুনা ব্যবহার:

$ more in.dat
122122122121212212

$ perl -pl rev-count.pl < in.dat
211222111111222
11222111222
122111222
2111222
111222
1222
222
7

$ more in.dat
22222221

$ perl -pl rev-count.pl < in.dat
22222211
2222221
2

$ more in.dat
2222

$ perl -pl rev-count.pl < in.dat
0

1

পিএইচপি, 240

<?php
$s=$_GET['i'];$h=$s;for($t=1;$h!=r($h);$t++){echo$h.'<br>';$h=r($h);}echo r($s)==$s?0:$h.'<br>'.$t;function r($c){for($i=0;$i<strlen($c)-1;$i+=2){$s.=$c[$i]==1?$c[$i+1]:$c[$i+1].$c[$i+1];if($i+3==strlen($c))$s.=$c[$i+2];}return$s;}?>

উদাহরণ: http://skyleo.de/codegolf.php?i=211222111111222

211222111111222
11222111222
122111222
2111222
111222
1222
222
7

আমি কোডগল্ফ এ খারাপ আছি ._। সম্ভবত আমার কেবল জাভা এবং পিএইচপি ব্যবহার করা উচিত নয় (এবং আমার আরও জটিল মনে করা উচিত)


1
কোডগল্ফ সবচেয়ে জটিল সমাধান সন্ধান করার জন্য নয়, বরং সবচেয়ে সহজ সমাধান।
প্রিমো

আপনি str_splitপিএইচপি-তে অ্যারের মতো স্ট্রিংয়ের মধ্যে পৃথক অক্ষরগুলি অ্যাক্সেস করতে পারার কারণে আপনাকে আসলেই করার দরকার নেই ।
গ্যারেথ

হ্যাঁ, কিছুক্ষণ পরে আমি ভেবেছিলাম যে আমি নিজেই, তবে আমি এটি সম্পাদনা করতে খুব অলস হয়েছি। তবে এখন আমি এটি পরিবর্তন করেছি।
লিও পিফ্লুগ

0

আর, 158

s=utf8ToInt(scan(,""))-48;i=0;while(any(!!s-2)){t=(a<-sum(s|T))%%2;u=s[seq(a-t)];cat(s<-c(rep(u[c(F,T)],u[c(T,F)]),s[a*t]),"\n",sep="");i=i+1};cat("Steps:",i)

উদাহরণ:

122122122121212212

211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps: 7

0

ম্যাথেম্যাটিকা, ১১7

s="122122122121212212";
Grid@FixedPointList[(Partition[#,2,2,1,{}]/.{{1,1}->{1},{1,2}->{2},{2,1}->{1,1}}//Flatten)&,FromDigits/@Characters@s]

122122122121212212
211222111111222
11222111222
122111222
2111222
111222
1222
222
222

0

পাওয়ারশেল, ২

ওপি-র মন্তব্যে আমার প্রশ্নের কাছে ভেরিয়োসের প্রতিক্রিয়ার ভিত্তিতে "আপনি যে কোনও ইনপুট পদ্ধতি আপনার কোডটি সংক্ষিপ্ত করে ব্যবহার করতে পারেন", নিম্নলিখিত স্ক্রিপ্টটি ফলাফলটি অর্জন করে:

$a

"122122122121212212" এর জন্য রান উদাহরণ:

# Input method is to assign answer to $a:
$a = @"
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps: 7
"@

# Execute script
$a

# Answer follows:
211222111111222
11222111222
122111222
2111222
111222
1222
222

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


0

জে, 41 অক্ষর

একটি ফাংশন হিসাবে (ই প্যারেনস তাদের সম্পর্কে ভীষণ খুশি নয়):

(,":@#)@}:@(([:;_2&(<@((".@[#])/)\))^:a:)
বিস্তারিত দেখুন
                _2&(            )\          NB. on non-overlapping 2-grams:
                       (      )/            NB.   insert between the two chars:
                        ".@[                NB.     read left operand ([) as a number
                            #]              NB.     and repeat right this many times,
                    <@(           )         NB.   then put it in a box
            ([:;                   )        NB. open and concatenate the boxes
           (                        ^:a:)   NB. repeat until fixpoint (keeping intermediates)
        }:@                                 NB. drop first element (the input)
(,":@#)@                                    NB. append length of array (# steps)
নমুনা রান
   (,":@#)@}:@(([:;_2&(<@((".@[#])/)\))^:a:) '1121121'
1121121
11121  
121    
21     
11     
5      
   (,":@#)@}:@(([:;_2&(<@((".@[#])/)\))^:a:) '122122122121212212'
122122122121212212
211222111111222   
11222111222       
122111222         
2111222           
111222            
1222              
7                 

0

পার্ল, 107 অক্ষর

অন্যান্য পার্ল কোড স্পষ্টভাবে এটিকে মারধর করে তবে এটির মূল্য কী, এটি এখানে। আমি অতিরিক্ত অক্ষরের দামে -l সুইচটি ব্যবহার করেছি:

$_=<>;while(1){$l=$_;$_=join"",map{($a,$b)=split//;$b?$b x$a:$a}grep/./,split/(..?)/;last if$l eq$_;print}

এর আরও সুস্পষ্ট সংস্করণ:

$x = <>; while(1) { $l = $x; $x = join "", map{ ($a,$b) = split//, $_; $b ? $b x $a: $a } grep /./, split /(..?)/, $x; last if $l eq $x; print $x}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.