শুন্যস্তান পূরণ


14

ইনপুট

একটি nonnegative পূর্ণসংখ্যার n, এবং sকেবলমাত্র বর্ণানুক্রমিক অক্ষর এবং আন্ডারস্কোর সমন্বিত একটি নোম্পটি স্ট্রিং _। এর প্রথম চরিত্রটি sনয় _। এর আন্ডারস্কোরগুলি sফাঁকা ফাঁকা স্থান হিসাবে ব্যাখ্যা করা হয় যা অন্যান্য অক্ষর দিয়ে পূর্ণ হতে পারে।

আমরা নিম্নলিখিত হিসাবে "অসীম স্ট্রিং" এর একটি অসীম অনুক্রমকে সংজ্ঞায়িত করি। স্ট্রিংটি অসীমভাবে বহুবার পুনরাবৃত্তি হয় । সব জন্য , স্ট্রিং থেকে প্রাপ্ত হয় অক্ষর সঙ্গে তার ফাঁকা স্পেস পূরণ করে , যাতে প্রথম এর সঙ্গে প্রতিস্থাপিত হয় , দ্বিতীয় , ইত্যাদি। যেহেতু প্রথম অক্ষরটি নয় , প্রতিটি খালি স্থান অবশেষে ভরাট হয়ে যায় এবং আমরা অসীম স্ট্রিং দ্বারা চিহ্নিত করি যেখানে প্রতিটি তার পরিবর্তিত মান দ্বারা প্রতিস্থাপিত হয়েছে।s1 = s s s...sk > 1sk+1sks1_sks1[0]s1[1]s_s_

আউটপুট

স্ট্রিং হিসাবে প্রথম nঅক্ষর ।s

উদাহরণ

ইনপুট n = 30এবং বিবেচনা করুন s = ab_c_। আমাদের আছে

s1 = ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_...

শূন্যস্থান প্রতিস্থাপন , আমাদের আছেs1s1

s2 = abacbab_ccab_caabbc_abcc_abacbab_cc...

আমরা আবার ফাঁকা জায়গায় প্রতিস্থাপন , ফলাফল যাs1

s3 = abacbabaccabbcaabbc_abcccabacbab_cc...

আরও একটি প্রতিস্থাপন:

s4 = abacbabaccabbcaabbcaabcccabacbabbcc...

এটি থেকে আমরা ইতিমধ্যে প্রথম 30 টি অক্ষর , যা হ্রাস করতে পারিs

abacbabaccabbcaabbcaabcccabacb

এটি সঠিক আউটপুট।

বিধি

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

পরীক্ষার কেস

0  "ab__"    -> ""
1  "ab__"    -> "a"
3  "ab__"    -> "aba"
20 "ab"      -> "abababababababababab"
20 "ab__"    -> "abababababababababab"
20 "ab_"     -> "abaabbabaabaabbabbab"
30 "ab_c_"   -> "abacbabaccabbcaabbcaabcccabacb"
50 "ab_a_cc" -> "abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"
50 "abc____" -> "abcabcaabcbcaaabcbcbcabcaaababccbcbabccabcabcaaaba"

আমরা কি বিপরীত ক্রমে ইনপুট নিতে পারি (যে ভাষাগুলিতে অর্ডারটি গুরুত্বপূর্ণ?)
মার্টিন এন্ডার

@ মার্টিনবাটনার অবশ্যই, আমি এটির অনুমতি দেব।
জাগারব

উত্তর:


4

পাইথ, 17

<ussC,cG\_GUQ*zQQ

প্রথম লাইনে স্ট্রিং এবং দ্বিতীয়টির দৈর্ঘ্য এসটিডিআইএন দিয়ে ইনপুট দেওয়া উচিত। উদাহরণ স্বরূপ:

abc____
50

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

ব্যাখ্যা:

                             Implicit:
                             z = input()              z is the string.
                             Q = eval(input())        Q is the length.

<               Q            First Q characters of
 u         UQ*zQ             Reduce, with an initial value of z repeated Q times, 
                             on the list range(len(Q)).
                             Since the reduce function doesn't use the sequence variable H
                             this function amounts to applying the inner code Q times to
                             the initial value, where the working variable is G.
  ss                         Sum from list of tuples of strings, to tuple of strings,
                             to string.
    C,                       Zip together
      cG\_                   G split on underscores
          G                  with G.
                             This inserts a character of G between every underscore
                             separated group of G, which amounts to replacing the
                             underscores with characters of G, after summation.

7

এপিএল 29 28

{a⊣(b/a)←a↑⍨+/b←'_'=a←⍺⍴⍵}⍣≡

এটি এভাবে ব্যবহার করা হয়:

fun←{a⊣(b/a)←a↑⍨+/b←'_'=a←⍺⍴⍵}⍣≡
20 fun 'ab_c_'
abacbabaccabbcaabbca

ব্যাখ্যা:

a←⍺⍴⍵           makes vector long as left argument using repeated chars in right argument
a↑⍨+/b←'_'=a   takes a string from the beginning of string a (a↑⍨), long as the number of _'s in a (+/b←'_'=a)
(b/a)←          puts those chars in place of the _'s in the original vector
a⊣             and returns a
{}⍣≡            repeats function ( {} ) until results doesn't change anymore

Tryapl.org


⍣≡একটি নিফটি ধারণা। হতে পারে আমার এটিকে জেতে বন্দরের চেষ্টা করা উচিত ...
FUZxxl

7

CJam, 26 24 20 বাইট

4 বাইট পিটারকে ধন্যবাদ রক্ষা করেছে।

l~:I*{_'_/[\]zsI<}I*

এটি এখানে পরীক্ষা করুন। nSTDIN এ প্রথম এবং দ্বিতীয় স্ট্রিং নেয় ।

আপনি সমস্ত পরীক্ষার কেসগুলি ইনপুটটিতে যেমন আটকানো যায় তেমন চালাতে পারেন (এর মধ্যে অন্তর্ভুক্ত করুন -> output ) এবং নিম্নলিখিত পরীক্ষার জোতা (যা কোডের ক্রমকে বিপরীত করে) ব্যবহার করে :

qN/{"->"/0=S/W%S*

~:I*{_'_/[\]zsI<}I*

]oNo}/

ব্যাখ্যা

l~:I*{_'_/[\]zsI<}I*
l~                       "Read the input and evaluate.";
  :I                     "Store n in I for future use.";
    *                    "Repeat s n times to ensure it's long enough for the output.";
     {           }I*     "Repeat this block n times. This will always be enough passes.";
      _                  "Duplicate the string.";
       '_/               "Split the string on underscores.";
          [\]            "Swap with the other copy, putting both in an array.";
             z           "Zip the two arrays together, interleaving substrings from the split
                          copy with characters from the unsplit copy. Extraneous
                          characters from the unsplit copy just go at the end and
                          can be ignored.";
              s          "Convert the result into a string, flattening the array in the
                          process. This basically joins the two interleaved strings together.";
               I<        "Truncate to n characters.";

ফলাফলটি প্রোগ্রামের শেষে স্বয়ংক্রিয়ভাবে মুদ্রিত হয়।

একটি নোট [\]: নীতিগতভাবে, [স্ট্যাকের বর্তমান আকারটি ]মনে রাখে এবং একটি অ্যারেতে শেষ স্মরণ আকারে সবকিছু সংগ্রহ করে। যাইহোক, যদি অ্যারের আকারটি মনে রাখা আকারের নীচে পড়ে তবে অ্যারের শুরুটি সেই অনুসারে সামঞ্জস্য হয়। এখন আপনি ভাবতে পারেন যে শীর্ষ দুটি অ্যারে উপাদানগুলি অদলবদল করা অ্যারের আকারকে মোটেই প্রভাবিত করে না, তবে \আসলে দুটি মান পপ করে এবং তারপরে বিপরীত ক্রমে চাপ দেয়। এটিই অ্যারের শুরুটিকে দুটি দ্বারা ধাক্কা দেয়। সুতরাং, [\]একটি অ্যারে শীর্ষ দুটি স্ট্যাক উপাদান মোড়ানো সবচেয়ে সংক্ষিপ্ত উপায় way কখনও কখনও, বিপরীত ক্রমে এগুলি সংগ্রহের পার্শ্ব প্রতিক্রিয়া বেশ বিরক্তিকর, তবে এই ক্ষেত্রে, এটি আমার ঠিক প্রয়োজন।


আমার মনে হয় আপনি প্রতিস্থাপন করতে পারে _'_#) gসঙ্গে I*। গল্ফস্ক্রিপ্টে আমার জন্য কাজ করে।
পিটার টেলর

@ পিটারটেলর ওহ, খুব ভাল ধারণা, ধন্যবাদ!
মার্টিন এন্ডার

6

পাইথন 3, 110 বাইট

n=int(input())
*b,=input()*n
a=b[:n]
while"_"in a:b,a=b[:],[x*(x!="_")or b.pop(0)for x in a]
print("".join(a))

মোটামুটি আরও বেশি গল্ফের প্রয়োজন, তবে এখানে কিছু নিছক উন্মাদনা রয়েছে। পড়েn তারপর sstdin থেকে।

মজাদার অংশটি হ'ল, আমরা যে লুপের অ্যাসাইনমেন্টটি অনুলিপি করছি তার bপরে bতালিকা বোধের সময় থেকে পপিং শুরু করুন । যদি অ্যাসাইনমেন্টটি অন্যভাবে হয়ে থাকে তবে এটি কার্যকর হত না!



4

জাভা - 162 174

জাভাতে গল্ফ করার সময় আমি কোনও ডো / যখন লুপ ব্যবহার করতে পারি তা প্রতিদিন নয় D

এটি কেবল পুনরাবৃত্তি করে এবং তারা আসার সাথে ফাঁকা স্থানগুলি পূরণ করে। ফলাফলটিতে আর কিছু না পাওয়া পর্যন্ত এটি চলতে থাকে _

char[]a(int n,char[]s){char[]o=new char[n];if(n>0)do for(int i=0,j=0;i<n;i++)if(o[i]==95|o[i]<1)o[i]=s[j++%s.length];while(new String(o).contains("_"));return o;}

লাইন বিরতি সহ:

char[]a(int n,char[]s){
    char[]o=new char[n];
    if(n>0)
        do
            for(int i=0,j=0;i<n;i++)
                if(o[i]==95|o[i]<1)
                    o[i]=s[j++%s.length];
        while(new String(o).contains("_"));
    return o;
}

আমি এর উত্তর দিতে যাচ্ছি না, তবে অন্য জাভা উত্তরটি দাঁড়াতে খুব দীর্ঘ ছিল;)
জিওবিটস

3

জাভা 8, 238

(n,s)->{int i=0,j=0;for(s=String.join("",java.util.Collections.nCopies(n,new String(s))).toCharArray();j<1;){for(i=0;i<n;i++){for(;s[++j]!=95&j<n;);if(j<n)s[j]=s[i];}for(j=1,i=0;i<n;)j=s[++i]==95?0:1;}return java.util.Arrays.copyOf(s,n);}

কম গল্ফড:

(Integer n, char[] s) -> {
    int i = 0, j = 0;
    for (s = String.join("", java.util.Collections.nCopies(n, new String(s))).toCharArray(); j < 1;) {
        for (i = 0; i < n; i++) {
            for (; s[j] != 95 & j < n; j++);
            if (j < n) {
                s[j] = s[i];
            }
        }
        for (j = 1, i = 0; i < n;) {
            j = s[++i] == 95 ? 0 : 1;
        }
    }
    return java.util.Arrays.copyOf(s, n);
}

3

রুবি, 60

->n,s{eval"r=%1$p.chars;s.gsub!(?_){r.next};"*n%s*=n;s[0,n]}

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


এটি চালানোর জন্য সঠিক বাক্য গঠন কী? যখন আমি একে ডাকতে fএবং চালানোর puts f[10,"ab_"], আমি নিম্নলিখিত ত্রুটির পাবেন: in 'eval': undefined method 'next' for #<Array:...। যদিও স্ট্রিংটিতে কোনও আন্ডারস্কোর নেই তা কাজ করে বলে মনে হচ্ছে।
থিওফিল

ওহ, আকর্ষণীয়, এটি String#charsরুবি ১.৯.৩ এবং রুবি ২.০ এর মধ্যে পরিবর্তিত আচরণের মতো দেখায় ; রুবি 1 এ এটি কোনও পরিসংখ্যান প্রদান করে যখন রুবি 2 এ কোনও অ্যারে নেই। এটা তোলে পরিবর্তন করে সংস্করণ অবশ করা যেতে পারে charsথেকে each_char, কোড 4 আরও নেট বাইটের খরচে।
হিস্টোক্র্যাট

3

পাইথন 2, 75

n,s=input()
S='';c=0
for x in s*n:b=x=='_';S+=S[c:c+b]or x;c+=b
print S[:n]

এটি যেমন ইনপুট আশা করে (30,"ab_c_")

পাইথনে, স্ট্রিংগুলি অ্যাসাইনমেন্টের অনুমতি দেয় না। সুতরাং, কাঙ্ক্ষিত চরিত্রের সাথে ফাঁকা স্থান পরিবর্তন করা শক্ত। একটি তালিকায় এবং পিছনে রূপান্তর করে এটির কাছাকাছি যেতে পারে, তবে আমি একবারে পছন্দসই অক্ষরগুলিকে যুক্ত করে স্ক্র্যাচ থেকে আউটপুট স্ট্রিং উত্সাহিত করতে আরও সংক্ষিপ্ত দেখতে পেলাম।

নির্মিত হচ্ছে আউটপুট S, যা খালি শুরু হয়। আমরা ইনপুটটির অক্ষরগুলি লুপ sকরে একটি বৃত্ত অনুকরণ করতে বহুবার অনুলিপি করেছিলাম । বুলিয়ান হয়ে এটি ফাঁকা আছে কিনা তা আমরা পরীক্ষা করি b। আমরা সমতা পরীক্ষা করিx=='_' তুলনার চেয়ে কারণ মূলধন এবং ছোট হাতের অক্ষরের মধ্যে আন্ডারস্কোর থাকে।

চরিত্রটি যদি ফাঁকা না হয় তবে আমরা কেবল এটির সাথে যুক্ত করব S। যদি এটি ফাঁকা থাকে, আমরা এখন পর্যন্ত আউটপুটটির পরবর্তী অব্যবহৃত অক্ষর যুক্ত করি S। আমরা সূচক পয়েন্টার অনুসারে ব্যবহৃত অক্ষরগুলি ট্র্যাক করি cযা 0 থেকে শুরু হয় এবং প্রতিবার শূন্যের মুখোমুখি হওয়ার সাথে সাথে বৃদ্ধি করা হয়।

শেষে, আমরা nফলাফলের স্ট্রিংয়ের প্রথম অক্ষরগুলি মুদ্রণ করিS

আমরা ব্যবহার করতে হবে S[c:c+b]খাটো স্থানে b*S[c]যখন কারণ আধুনিক একটি আউট-অফ-বাউন্ডস ত্রুটি দেয় Sখালি শুরু c0. এটা গুরুত্বপূর্ণ না, কারণ আমরা প্রথম অক্ষরটি নিশ্চিত করছি sঅ ফাঁকা, তাই এই S[c], প্রয়োজন হয় না কোডটি এটি জানে না। orশর্ট-সার্কিটে ফ্লাইপ করাও এটিকে সমাধান করতে পারে তবে এর জন্য আরও বেশি অক্ষর ব্যয় হয়।


পাইথন 2, 83

আইস্যাকের সমাধানের পাইথ টু-পাইথন বন্দর যা প্রতিস্থাপনটি ব্যবহার করে splitএবং zipসম্পাদন করে:

n,s=input()
s*=n
exec"s=''.join(a+b for a,b in zip(s.split('_'),s));"*n
print s[:n]

এটি দীর্ঘতর হয়ে গেছে কারণ, আশ্চর্য, নামক পদ্ধতিগুলি অজগর দীর্ঘ। তবে এটি সম্ভবত রিফ্লিং sএবং আরও s.split('_')সংক্ষিপ্ত উপায়ে উন্নত করা যেতে পারে ।


নিস! স্ট্রিংটি এত ছোট হওয়ার পুনর্নির্মাণ আশা করেনি!
Sp3000

3

হাস্কেল (93) 67

আমি কিছুক্ষণের মধ্যে কোনও হাস্কেল লিখিনি, সুতরাং এটি সম্ভবত খুব কম করা যেতে পারে। তবে এটি খুব ভাল ছিল, আমাদের এটি সংক্ষিপ্ত করে আরও ভাল করে তুলতে হয়েছিল!

('_':b)&(d:e)=d:b&e;(a:b)&c=a:b&c
f n s=take n$q where q=cycle s&q

ব্যবহার:

*Main> f 50 "ab_a_cc"
"abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"

2

ব্যাচ - 425

আমি কি হারাব?

@echo off&setLocal enableDelayedExpansion&set s=%2
if "%3"=="" (for /l %%a in (1,1,%1)do set o=!o!%s%)else set o=%3
set o=!o:~0,%1!&set l=0
:c
if defined s set/al+=1&set "s=%s:~1%"&goto c
set s=%2&set/ap=%1-1
set y=&set c=0&for /l %%a in (0,1,%p%)do set x=!o:~%%a,1!&if !x!==_ (for %%b in (!c!)do set y=!y!!s:~%%b,1!&set/ac+=1)else (set y=!y!!x!)&if !c!==%l% set c=0
if "!y:_=!"=="!y!" echo !y!&goto :EOF
%0 %1 %2 !y!

ব্যাচের সীমাবদ্ধতা রয়েছে - আমি এটি গ্রহণ করি। উদাহরণ স্বরূপ; ভেরিয়েবল পার্সিং সিনট্যাক্সের সীমাবদ্ধতার কারণে আমাকে ব্যবহারযোগ্য বিন্যাসে একক ভেরিয়েবল পেতে লুপের জন্য একটি ব্যবহার করতে হয়েছিল। for %%b in (!c!)do... কেবলমাত্র বিদ্যমান তাই আমি %%bপরিবর্তে ব্যবহার !c!করতে পারি তাই আমি স্ট্রিং ম্যানিপুলেশনটি করতে পারি !s:~%%b,1!এবং সঠিক সময়ে ভেরিয়েবলগুলি প্রসারিত করতে পারি ।

এটি আরও গল্ফ করতে আমি করতে পারি বেশ কয়েকটি মৌলিক জিনিস, তবে সম্ভবত 400 বাইটের নিচে নয়। আমি শীঘ্রই অন্য একটি ক্র্যাক করব।


3
যদি না কেউ আরও ভাল ব্যাচের উত্তর পোস্ট না করে, আমি এটিকে হারাতে বলব না :)
Sp3000

@ Sp3000 কেবল যদি কেউ থাকে।
চাচাবিশেষ

2

ECMAScript 6, 78

f=(s,n,i=0)=>[...s.repeat(n)].reduce((s,x)=>s+(x=='_'?s[i++]:x),'').slice(0,n)

খালি স্ট্রিং দিয়ে শুরু হয় এবং আন্ডারস্কোরের প্রতিটি ঘটনার জন্য এটি বর্তমান স্ট্রিংয়ের পরবর্তী সূচীতে অক্ষরের সাথে প্রতিস্থাপন করে।


1

পাইথন 2 - 99 97 বাইট


কারণ 4 পাইথন-ভিত্তিক জমাগুলি পর্যাপ্ত নয় ...

n,s=input();S=s=s*n
while"_"in S:x=iter(s);S="".join(j>"_"and j or next(x)for j in S)
print S[:n]

উদাহরণ:

$ python2 t.py 
(50, "ab_a_cc")
abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca

0

ECMAScript 6, 93 91

(n,s)=>{for(x="_".repeat(n);n=0,/_/.test(x);)x=x.replace(/_/g,a=>s[n++%s.length]);return x}

প্রথম সংস্করণ থেকে 2 টি অক্ষর বন্ধ করে দেওয়া হয়েছে।

(n,s)=>{x="_".repeat(n);while(/_/.test(x)){n=0,x=x.replace(/_/g,a=>s[n++%s.length])}return x}

0

সি # - 162

আমি জিওবিটস দ্রবণ চুরি করে এটিকে সি # তে পরিবর্তন করেছি

char[]p(int n,string s){var r=new char[n];if(n>0)do for(int i=0,j=0;i<n;i++)if(r[i]=='_'||r[i]<1)r[i]=s[j++%s.Length];while(r.ToList().IndexOf('_')>=0);return r;}

1 টি আরও ভাল, যাতে আপনি Geobits উন্নতি করতে পারেন;)

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