একটি স্ট্রিং মধ্যে অক্ষর মিশ্রন


10

আপনাকে একটি ফাংশন / প্রোগ্রাম লিখতে হবে যা stdin/ কমান্ড-লাইন আর্গুমেন্ট / ফাংশন আর্গুমেন্টগুলির মাধ্যমে ইনপুট নেয় , একটি স্ট্রিংয়ের মধ্যে অক্ষর মিশ্রিত করে এবং তারপরে চূড়ান্ত স্ট্রিংটি আউটপুট দ্বারা আউটপুট দেয় stdout

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

এই ক্ষেত্রে:

Hello_world! 0 6

ফলাফল অবশ্যই

wello_Horld!

অনুমিতি

  • আপনি 0-ভিত্তিক এবং 1-ভিত্তিক সূচকগুলির মধ্যে চয়ন করতে পারেন এবং ধরে নিতে পারেন যে প্রদত্ত সূচকগুলি সর্বদা সীমার মধ্যে থাকবে।
  • স্ট্রিং 100 অক্ষরের বেশি হবে না এবং শুধুমাত্র সীমার মধ্যে ASCII অক্ষর উপস্থিত থাকবে !করার ~(চরিত্র কোড 0x7E করার 0x21, সমেত)। রেফারেন্সের জন্য ASCII টেবিলটি দেখুন ।
  • একটি জুড়ির দুটি সূচকগুলি অভিন্ন হতে পারে ( এক্ষেত্রে কিছুই সেই পদক্ষেপে বদলে যায় না)।

স্কোরিং

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে।

পরীক্ষার কেস

Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~

2
ভবিষ্যতের চ্যালেঞ্জগুলির জন্য, আমাকে স্যান্ডবক্সটি সুপারিশ করতে দিন যেখানে আপনি প্রতিক্রিয়া পেতে পারেন এবং আপনার চ্যালেঞ্জটি মূল পোস্ট করার আগে এটি পোলিশ করতে পারেন (যদি কেউ আপনার চ্যালেঞ্জের মধ্যে কোনও গুরুতর ত্রুটি আবিষ্কার করে যার সমাধানের প্রয়োজন হয় তবে এটি বিদ্যমান উত্তরগুলিকে অকার্যকর করার ঝুঁকি হ্রাস করে)।
মার্টিন এন্ডার

কেন স্টিডিনে ইনপুট প্রয়োজন, এবং না, যেমন কমান্ড লাইন আর্গুমেন্ট হিসাবে?
এলআরএন

@ এলআরএন, ডান। আরও 2 টি বিকল্প যুক্ত করা হয়েছে।
স্পিক্যাট্রিক্স

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

@ রিটোকোরাডি, নং ইনপুট সম্পূর্ণ স্ট্রিং নয়। এটিতে একটি স্ট্রিং রয়েছে এবং তারপরে সংখ্যাগুলি। সংখ্যাগুলি স্ট্রিংয়ের অন্তর্ভুক্ত নয়।
স্পিক্যাট্রিক্স

উত্তর:


6

সিজেম, 11 বাইট

rr{irie\r}h

কিভাবে এটা কাজ করে

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

r                 e# Read the first string
 r                e# Read the first number of the first number pair in the input
  {      }h       e# Do a do-while loop
   i              e# Convert the first number from the pair to integer
    ri            e# Read the second number from the pair and convert to intger
      e\          e# String X Y e\ works by swapping the Xth index with the Yth index in the
                  e# String
        r         e# This is our exit condition of the do-while loop. If we still have
                  e# a number on the input left, that means there are more pairs to swap.
                  e# Otherwise, we exit the loop and the result is printed automatically

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


6

পাইথন 3, 89 86 বাইট

[*s],*L=input().split()
while L:a,b,*L=map(int,L);s[a],s[b]=s[b],s[a]
print(*s,sep="")

সমস্ত জিনিস আনপ্যাক করুন। (3 বাইট সংরক্ষিত @ পোটাতো ধন্যবাদ)


কয়েকটি বাইট সংরক্ষণ করুন এবং এটি করুন: [*s],*L=input().split()আপনি তারপরে লাইনটি সরিয়ে ফেলতে পারেন। আমি আপনার বিটিডব্লিউশনটি সত্যিই পছন্দ করি, এটি খুব গল্ফযুক্ত হলেও এটি প্রায় মার্জিত।
আলু

@ পোটাতো ওহ বাহ, আমি জানতাম না যে আপনার মত দু'টি আনপ্যাক একসাথে থাকতে পারে (আমি ভেবেছিলাম আপনি কেবল এটি 3.5 এর মধ্যে করতে পারবেন)। ধন্যবাদ!
Sp3000

4

সিজেম, 13 বাইট

r[q~]2/{~e\}/

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

r             e# Read the first token, i.e. the string.
 [q~]         e# Read the rest of the input, eval it and wrap it in an array.
     2/       e# Split the array into pairs of consecutive elements.
       {   }/ e# For each pair.
        ~     e# Unwrap the array.
         e\   e# Swap the corresponding elements in the string.

দাঁড়ান। দ্রুত কোনও উত্তর আশা করিনি!
স্পিক্যাট্রিক্স

2

সি (১৩7 খ)

f(char*T,int*V,int L){int C=0;for(int j=0;j<strlen(T);C=++j){for(int i=L-1;i+1;i--)if(C==V[i]){C=V[i-i%2*2+1];i-=i%2;}printf("%c",T[C]);}}

ব্যাখ্যা আসছে ...

যুক্তি

টি = চর টাইপের একটি শব্দ ।

ভি = সমান সংখ্যক পূর্ণসংখ্যার উপাদানগুলির একটি অ্যারে।

এল = ভি এর দৈর্ঘ্য

আউটপুট

মিশ্র স্ট্রিং

এটা কিভাবে কাজ করে ? :

অ্যারে ভি এর বিপরীতে সংখ্যাগুলি স্যুইপ করে এবং প্রকৃত বিন্দু পর্যন্ত স্ট্রিংয়ের সমস্ত অগ্রগতি ট্র্যাক করার পরে স্ট্রিংয়ের নবম উপাদান রাখে। উদাহরণ

ইনপুট = টি = "প্রথম", ভি = {1,2,1,0,0,4}

ভি বিপরীত = {4,0,0,1,2,1}

V[0] = 4th element -> index 0
0 -> 1
1->2

4th element 't' receives the second = 'r'

V[1] = 0 -> index 4
4 isnt mentionned after so , no changes

0 element='F' receives the fourth= 't'

V[3] = 1st element -> index 0
no changes

V[4] = 2 -> index 1
no changes after ..

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


1
@ আগওয়া 1001, আপনি এটিকে আরও অনেক গল্ফ করতে পারেন। রিটার্ন টাইপের intপ্রয়োজন হয় না (অপ্রত্যাশিত আচরণের পরিণতি হতে পারে), এবং intপ্যারামিটারগুলির সাথে intভেরিয়েবলগুলির একটি , ভেরিয়েবলের প্রয়োজন হয় না , লুপে ঘোষণার পরিবর্তে লুপের বাইরে এক জায়গায় ঘোষণা করা যায়, ইত্যাদি putcharপরিবর্তে ব্যবহার করুনprintf
স্পিকট্রিক্স

2

পাইথন 3 - 161 149

import sys
t=sys.stdin.read().split()
q=list(t[0])
c=1
i=int
while c<len(t):n=q;a=i(t[c]);b=i(t[c+1]);n[a]=q[b];n[b]=q[a];q=n;c+=2;
print(''.join(q))

কিছু ভেরিয়েবলের চারপাশে অদলবদল করে, এবং ;টিমের মন্তব্য হিসাবে ব্যবহার করে আরও গল্ফড ed

আমি আশা করলাম এটি গল্ফ লাগছে, কেবল এতটা নয়।


1
আপনি এই অনেক গল্ফ করতে পারেন। পরিবর্তন whileকরার জন্য while c<len(t):line1;line2;line3...c=c+2যায়c+=2
টিম

@ টিম আপনার সহায়তার জন্য ধন্যবাদ!
ASCIIThenANSI

সি 0 থেকে শুরু করা উচিত নয়?
টিম

@ টিম নোপ আমাদের অদলবদল করতে হবে এমন অবস্থানগুলি পেতে cআসলে ইনডেক্সিং t(ইনপুট)। তবে যেহেতু t[0]স্ট্রিংটি আমাদের চারপাশে অদলবদল করা দরকার, t[1]এবং t[2]প্রথম জোড়া অদল বদল করতে হবে ।
ASCIIThenANSI

আহ আমি দেখছি, হ্যাঁ দুঃখিত, আমার সমাধান ইনপুট বন্ধ বিভক্ত, তাই আমি অনুমান আপনি কাজ শেষ করলেন একই :)
টিম

2

সি, 109 107 102 বাইট

i;f(l){l=sizeof(a)/sizeof(*a);char t;for(;i<l;i+=2){t=s[a[i]];s[a[i]]=s[a[i+1]];s[a[i+1]]=t;}puts(s);}

দ্রষ্টব্য: sএবং aএটি বিশ্বব্যাপী অ্যারে হিসাবে ঘোষণা করা দরকার। sআপনি যে স্ট্রিংটি অদলবদল করতে চান তা aহ'ল এবং intসমস্ত সংখ্যার মান সহ একটি অ্যারে ।

উপরের কোডটি যদি কাজ না করে তবে void f(){...}তার পরিবর্তে ব্যবহার করার চেষ্টা করুনf(){...}

অবরুদ্ধ কোড:

int a[]={1, 2, 1, 0, 0, 4};//Integer elements
char s[]="First";          //String to be swapped

i; //Auto initialized to 0 and defaults to type int
void f(l){ //Variables defaults to type int
  l=sizeof(a)/sizeof(*a); //Gets number of elements in array a
  char t;

  for(;i<l;i+=2){ 

    t=s[a[i]];
    s[a[i]]=s[a[i+1]];
    s[a[i+1]]=t;  //Swap each character

  }

  puts(s); //Print the final char array
}

এটি এখানে পরীক্ষা করুন



LOL পরিবর্তনশীল ঘোষণা কোথায়? আপনার কোডটি শক্ত করার জন্য একটি ছলনা করার উপায়টি রয়েছে: পি
Abr001am

@ আগওয়া 1001, আমি পরিবর্তনশীল ঘোষণাটি অন্তর্ভুক্ত করিনি কারণ প্রতিটি পরীক্ষার ক্ষেত্রে বাইটগুলি আলাদা হয়।
স্পিক্যাট্রিক্স

সমস্যাটিতে সংজ্ঞায়িত হিসাবে এটি ইনপুটটির সাথে মেলে না। ইনপুটটি একটি একক স্ট্রিং। যতক্ষণ না আমি সমস্যাটি পুরোপুরি ভুল বুঝেছি, আপনি ইনপুট স্ট্রিং থেকে সূচক মানগুলি বের করতে হবে।
রেটো কোড়াদি

1

পাইথন 3, 135

x=input().split()
y=list(x[0])
z=[int(i)for i in x[1:]]
while z:p,c=y[z[0]],y[z[1]];y[z[0]],y[z[1]]=c,p;del z[0],z[0]
print(''.join(y))

ব্যাখ্যা:

x=input().split()         # Split the input into a list at each space
y=list(x[0])              # First item in list (the word) into a list of chars
z=[int(i)for i in x[1:]]  # Make the list of numbers, into integers
while z:                  # Loop untill the list z is empty
    p,c=y[z[0]],y[z[1]]   # Assign p to the first char and c to the second
    y[z[0]],y[z[1]]=c,p   # Swap around using p and c
    del z[0],z[0]         # Remove the first 2 items in the list of integers
print(''.join(y))         # Print out the altered list as a string

1

সি, 70 বাইট

প্রদত্ত ইনপুট স্ট্রিংটি সর্বোচ্চ দৈর্ঘ্য 100 হয় আমি পূর্ণসংখ্যা অ্যারের সমাপ্তি নির্দেশ করে 'NULL' বাইট তৈরির সিদ্ধান্তটি দ্ব্যর্থহীন বলে সিদ্ধান্ত নিয়েছি 0xFF। সম্ভবত এটি অতিরিক্ত ইনপুট হিসাবে গণ্য হয় না, যদিও (সর্বাধিক) 7 এর ব্যয় 3 বাইটের জন্য এটি 1-ভিত্তিক সূচকে তৈরি করা যেতে পারে এবং '\0'অ্যারের শেষ হিসাবে ব্যবহার করা যেতে পারে ।

f(s,i,t)char*s,*i;{for(;~*i;)t=s[*i],s[*i]=s[*++i],s[*i++]=t;puts(s);}

বেশ কিছুটা কেবলমাত্র একটি টিএমপি ভেরিয়েবলের সাথে নিয়মিত অদলবদল করে এবং ব্যবহার করে যে কমা অপারেটর সিকোয়েন্স পয়েন্টগুলি সংজ্ঞায়িত আচরণের জন্য উপস্থাপন করে (জোর অদলবদলের কিছু প্রকাশের বিপরীতে যেটির অক্ষরের সংখ্যা কম থাকে তবে অপরিবর্তিত আচরণ হতে পারে)।

সম্পাদনা করুন: অনুরোধ হিসাবে আপনি এটি পরীক্ষা করে দেখতে পারেন: http://rextester.com/OVOQ23313


আমি মনে করি না আপনি ধরে নিতে পারেন যে আপনি সূচকগুলি অদলবদলের সাথে একটি অ্যারে পেয়েছেন। সূচকগুলি ইনপুট স্ট্রিংয়ের অংশ, এবং আপনাকে পোস্ট (এবং গণনা করা) কোডের অংশ হিসাবে স্ট্রিংয়ের বাইরে পার্স করতে হবে। বর্ণনা থেকে: "ইনপুটটিতে প্রথমে একটি স্ট্রিং, একটি স্পেস এবং তারপরে স্পেস দ্বারা পৃথক পৃথক সংখ্যক অ-নেতিবাচক সংখ্যা থাকবে।"
রেটো কোরাদি

1

ডার্ট - 123

কমান্ড-লাইনের ইনপুটটি ফাঁকা জায়গায় স্বয়ংক্রিয়ভাবে বিভক্ত হয়ে গেছে। অন্যথায় এটি x=x[0].split(' ');স্ট্রিংটিকে পাঠ্য এবং সূচকে বিভক্ত করার জন্য প্রাথমিক প্রয়োজন ।

main(x,{c,i:1,a,t}){c=x[0].split("");n()=>a=int.parse(x[i++]);for(;i<x.length;t=c[n()],c[a]=c[n()],c[a]=t);print(c.join());}

আরও সাদা জায়গা সহ:

main(x,{c,i:1,a,t}){
  c=x[0].split("");
  n()=>a=int.parse(x[i++]);
  for(;i<x.length;t=c[n()],c[a]=c[n()],c[a]=t);
  print(c.join());
}

Dartpad.dartlang.org এ এটি চালান / পরীক্ষা করুন ।


আপনি কি এমন কোনও অনলাইন সংকলক সম্পর্কে জানেন যেখানে আমি এটি পরীক্ষা করতে পারি?
স্পিক্যাট্রিক্স 17'15

ডার্টপ্যাডে লিঙ্ক যুক্ত করুন।
lrn

1

রিবোল - 71

s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s

Ungolfed:

s: take i: split input " " 
foreach [a b] i [swap at s do a at s do b]
print s

আমি এটি কীভাবে পরীক্ষা করব? এটি পরীক্ষা করার জন্য কোনও অনলাইন সংকলক আছে?
স্পিক্যাট্রিক্স 17'15

@CoolGuy - হ্যা আপনি এটি পরীক্ষা করতে পারেন try.rebol.nlinput ক্রিয়াটি সেখান থেকে stdin ডাকতে সক্ষম হবে। inputআপনি পরীক্ষা করতে চান এমন মান হিসাবে কার্যকরীটি হ'ল সহজ সেট । এখানে প্রথম পরীক্ষার সম্পূর্ণ উদাহরণ - input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s এবং রেবোল 3 এনবি- তে ক্লিক করুন । রেবোল 1-ভিত্তিক সূচক ব্যবহার করে।
ড্র্যাগটুন

@ কুলগুয়ে - বিকল্পভাবে আপনি রিবোলস্রোর্নসট্র্যাট থেকে রেবোল
ড্রইগটুন

0

সি, 143 বাইট

main(a,v,i)char** v;{i=2;char s[101],t;strcpy(s,v[1]);for(;i<a;i+=2){t=s[atoi(v[i])];s[atoi(v[i])]=s[atoi(v[i+1])];s[atoi(v[i+1])]=t;}puts(s);}

উপরের প্রোগ্রামটি কমান্ড-লাইন আর্গুমেন্টগুলি থেকে ইনপুট নেয়, স্ট্রিংটিকে একটি অ্যারেতে অনুলিপি করে, সংশ্লিষ্ট অক্ষরগুলিকে অদলবদল করে এবং তারপরে পরিবর্তিত স্ট্রিংকে আউটপুট দেয়।

অবরুদ্ধ কোড:

main(int a,char** v,int i){ //Arguments of main 
  i = 2;
  char s[101],t;

  strcpy(s,v[1]); //Copy string literal into an array

  for(;i<a;i+=2){
    t=s[atoi(v[i])];
    s[atoi(v[i])]=s[atoi(v[i+1])];
    s[atoi(v[i+1])]=t;  //Swap each character
  }

  puts(s); // Output the final string
}

আপনি কি ধরে নিচ্ছেন যে সংখ্যাগুলির কেবল একটি অঙ্ক আছে? ইনপুটটি 100 টি অক্ষর পর্যন্ত হতে পারে তা বিবেচনা করে, আমি মনে করি না এটি বৈধ হবে। এছাড়াও তৃতীয় উদাহরণ দেখুন, যা 10সূচকগুলির একটি হিসাবে রয়েছে ।
রেটো কোরাডি

@ রিটোকোরাডি, এটি সন্ধান করার জন্য ধন্যবাদ। আমি কোডটি ঠিক করে দিয়েছি।
স্পিক্যাট্রিক্স

0

জাভাস্ক্রিপ্ট (ES6), 95

একক স্ট্রিং ইনপুট সহ 95 বাইট (নীচে ফাংশন এফ)

2 পরামিতি, স্ট্রিং এবং সংখ্যা অ্যারে সহ 75 বাইট (নীচে ফাংশন জি)

(একমা স্ক্রিপ্ট,, কেবল ফায়ারফক্স)

f=i=>
(
  n=i.split(' '),
  s=[...n.shift()],
  n.map((v,i)=>i&1?[s[v],s[w]]=[s[w],s[v]]:w=v),
  s.join('')
)

g=(s,n)=>
  n.map((v,i)=>i&1?[s[v],s[w]]=[s[w],s[v]]:w=v,s=[...s])
  &&s.join('')

// TEST
out=x=>O.innerHTML+=x+'\n'

;[['Hello_world! 0 6', 'wello_Horld!']
,['First 1 2 1 0 0 4','tFisr']
,['(Second!$$) 8 7 10 1','()econd$!$S']
,['~Third~ 0 0 6 6 0 6 6 0','~Third~']]
.forEach(t=>{
  u=f(t[0]),
  ok=u==t[1],
  out('Test '+(ok?'OK: ':'FAIL: ')+t[0]+'\n Result:' +u + '\n Check: '+t[1]+'\n')
})
<pre id=O></pre>

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