মধ্যম নামের জন্য কমা আছে?


18

আপনার চ্যালেঞ্জটি হ'ল ইনপুট হিসাবে কোনও নাম (স্ট্রিং) গ্রহণ করা

Albert Einstein

এবং আউটপুট:

Einstein, Albert

সুডোকোড:

set in to input
set arr to in split by " "
set last to the last element of arr
remove the last element of arr
set out to arr joined with " "
prepend ", " to out
prepend last to out
output out

আরও পরীক্ষার কেস:

John Fitzgerald Kennedy => Kennedy, John Fitzgerald
Abraham Lincoln => Lincoln, Abraham

বিধি

  • ইনপুটটি সবসময় রেজেসের সাথে মিলবে ^([A-Z][a-z]+ )+([A-Z][a-z]+)$
  • আপনার অদ্ভুত নামগুলি হ্যান্ডেল করার দরকার নেই , এমনকি যদি আউটপুটটি প্রযুক্তিগতভাবে ভুল হয় তবে এটি এখানে ভাল।
  • স্পেস স্পেস / নিউলাইন ঠিক আছে।
  • কোন প্রশ্ন? নিচে মন্তব্য করুন!

পেছনের স্থানগুলি কি অনুমোদিত?
মান কালি

আমি প্রতারিত যেমন কারণে বন্ধ সমাধান প্রায় কাছাকাছি siply প্রতিস্থাপন করতে পারেন leসঙ্গে ,এবং আপনি এই প্রশ্ন আছে
Downgoat

2
@ ডাউনগোট এই চ্যালেঞ্জটি দুটি শব্দ নির্দিষ্ট করে, যেখানে এর সমাধানগুলিতে নির্বিচারে অনেক শব্দের জন্য কাজ করতে হবে। যতদুর আমি বলতে পারেন, Tio লিঙ্ক সহ উত্তর, শুধুমাত্র সিরিয়াসলি সমাধান এই প্রশ্নের স্থলে জন্য সঠিক উত্তর দেয় leসঙ্গে ,
নেজেনিসিস

7
@ ডাউনগোট যে একটি আছে -4। কমপক্ষে এটির এক টাকা হিসাবে এটি বন্ধ করুন।
স্টিফেন

1
পিছনে স্থান ঠিক আছে?
টম কার্পেন্টার

উত্তর:


10

05 এ বি 1 ই , 7 বাইট

কোড:

',ì#Áðý

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

',ì         # Prepend the input to ","
   #        # Split on spaces
    Á       # Rotate every element one position to the right (wrapping)
     ðý     # Join the array by spaces

1
শুরুতে যোগ! আমি জানতাম তালিকায় এটি করার একটি উপায় থাকতে হবে।
এমিগানা

9

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

s=>s.replace(/(.+) (.+)/,'$2, $1')

ডেমো:

let f = s=>s.replace(/(.+) (.+)/,'$2, $1')

;[ 'Albert Einstein', 'John Fitzgerald Kennedy', 'Abraham Lincoln' ].forEach(
  s => console.log(`${s} => ${f(s)}`)
)


8

রেটিনা , 19 17 16 বাইট

সম্পাদনা করুন: 3 বাইট সংরক্ষণের জন্য রিকারকে ধন্যবাদ

(.+) (.+)
$2, $1

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


1
হোল্ড আপ, (.+)উভয় জন্য খুব কাজ করে।
শে

আপনি কেন \wপ্রথম স্থানে ব্যবহার করছেন তা আমি বুঝতে পারছি না
Theonlygusti

1
@ থিওনলিগুস্টি আমি ম্যাথামেটিকায় প্যাটার্ন ম্যাচের সাথে আরও বেশি পরিচিত, যা লোভীর চেয়ে অলস ম্যাচিং ব্যবহার করে।
ngenisis

7

জেলি , 7 বাইট

;”,Ḳṙ-K

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

আমি জেলিকে খুব ভাল করে চিনি না, তবে অন্যান্য উত্তরগুলি পড়তে দেখে মনে হচ্ছিল তারা কোনও অনুকূল অ্যালগরিদম ব্যবহার করেনি ... সুতরাং এটি এখানে:

ব্যাখ্যা

;”,Ḳṙ-K
;”,        Append a comma to the end of the string
   Ḳ       Split on spaces
    ṙ-     Rotate the array by -1 (1 time towards the right)
      K    Join with spaces

7

ভিম, 10 বাইট / কীস্ট্রোক

v$F dA, <esc>p

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


খুব ভাল, তবে আমি এটি কার্যকর করার জন্য লড়াই করেছি, <esc>আপনার কোডটিতে প্রদর্শিত হবে না। চেষ্টা করতে চান এমন অন্যদের বিজ্ঞপ্তির জন্য: এটি ধরে নিয়েছে যে নামটি সম্পাদকটিতে লেখা আছে এবং আপনি বর্তমানে ফাইলটির শুরুতে স্বাভাবিক মোডে রয়েছেন।
সিগভালডেম

7

ভি / ভিএম, 9 8 বাইট

$bD0Pa, 

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

একটি বাইট সংরক্ষণ করার জন্য ধন্যবাদ

নোট করুন এখানে একটি পিছনের স্থান অক্ষর রয়েছে। একটি পিছনের স্থান ছেড়ে দেয়, যা নিয়ম অনুসারে অনুমোদিত।

ব্যাখ্যা:

$       " move the cursor to the end of the line
 b      " move the cursor to the beginning of the current word
  D     " delete to the end of the line
   0    " move the cursor to the start of the line
    P   " paste in front of the cursor.
     a  " append (enter insert mode with the cursor one character forward)
      , " Literal text, ", "

সুন্দর! প্রয়োজন এড়ানোর জন্য শেষে theোকানো মোডটি রাখার জন্য ভাল চিন্তাভাবনা <esc>$bDপরিবর্তে না করে আপনি একটি বাইট সংরক্ষণ করতে পারেন $diw। :)
DJMcMayhem

ধন্যবাদ। $bDযদিও এক-চরিত্রের নাম হ্যান্ডেল করে না, আমি ওপিকে জিজ্ঞাসা করেছি যদি এটি অনুমোদিত হয়।
কেভিন

দেখে মনে হচ্ছে এটি তাই আপডেট হচ্ছে।
কেভিন




5

সি, 45 বাইট

সম্পাদনা: আমি এখনই সম্ভবত ইনপুটটির জন্য সম্ভবত দুটিরও বেশি শব্দের প্রয়োজনীয়তা লক্ষ্য করেছি। আমি এটি এটিকে একটি নোট সহ রেখে যাব যে এটি কেবল দুটি শব্দের জন্যই কাজ করে।

সম্পাদনা: সরানো হয়েছে \n। যদি আপনি এটি প্রয়োজনীয় বিবেচনা করেন তবে 2 বাইট যুক্ত করুন।

main(a,b)int**b;{printf("%s, %s",b[2],b[1]);}

সংকলন gcc name.c, জিসিসি 6.3.1। সতর্কতা উপেক্ষা করুন। ব্যবহার:

$./a.out Albert Einstein
Einstein, Albert

ভাষার অপব্যবহার:

  • অন্তর্নিহিত রিটার্ন টাইপ intএর mainকিছুই ফিরে আসেন।
  • এর অন্তর্নিহিত ঘোষণা printf। জিসিসি এটিকে যাইহোক অন্তর্ভুক্ত করবে।
  • ভুল ধরণের b। এর সাথে কিছু আসে যায় না%s

ব্যবহার main(a,b)int**b;না করার পরিবর্তে টিপসের জন্য @ খালেদ.কে ধন্যবাদ main(int a, int **b)


ভাল প্রথম গল্ফ, ওয়েবসাইটে স্বাগতম, main(a,**b){printf("%s, %s",b[2],b[1]);}40 বাইট হয়
খালেদ.কে

ধন্যবাদ :) আমি আসলে ধরণগুলি সম্পূর্ণ বাদ দেওয়ার বিষয়ে ভেবেছিলাম, তবে কোনও কারণে এটি সংকলন করবে না।
সিগভালডেম

1
এটি কাজ করেmain(a,b)int**b;{printf("%s, %s\n",b[2],b[1]);}
খালেদ.কে


4

সেড, 19 + 1 -E = 20 বাইটের জন্য

s/(.*) (.*)/\2, \1/

গ্রুপিং বন্ধন এড়াতে এড়াতে অবশ্যই -r (GNU) বা -E (BSD, সাম্প্রতিক GNUs) ব্যবহার করতে হবে।

কমান্ড-লাইনে লিখিত থাকলে শেল দ্বারা একাধিক টোকেন হিসাবে পার্স করা এড়াতে অবশ্যই উদ্ধৃতিতে আবদ্ধ থাকতে হবে:

sed -E 's/(.*) (.*)/\2, \1/'

4

সি, 68 বাইট

আশা করি অন্য পোস্ট যুক্ত করা ভুল নয় তবে এখানে আমার আগের পোস্ট করা সি সমাধানের চেয়ে কিছুটা আলাদা সমাধান রয়েছে। এটি যে কোনও নাম গ্রহণ করে।

main(a,b)int**b;{for(printf("%s,",b[--a]);--a;printf(" %s",*++b));}

gcc name.c(জিসিসি 6.3.1) দিয়ে সংকলন করুন এবং সতর্কতাগুলি উপেক্ষা করুন। ব্যবহার:

$./a.out John Fitzgerald Kennedy
Kennedy, John Fitzgerald

টিপসটির জন্য @ খালেদ.কে ধন্যবাদ main(a,b)int**b;

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


1
পরিবর্তে ব্যবহার করে আপনি 2 বাইট অর্জন করতে পারেন main(a,b)int**b;{for(printf("%s,",b[--a]);++b,--a;printf(" %s",*b));}
আলকানো

এটি পাগল বলে মনে হচ্ছে, তবে আপনি এটি করতে পারেনmain(a,b)int**b;{a&&printf("%s,"b[a-1])&&main(a-1,b);}
খালেদ.কে ২২

খুব সুন্দর কৌশল: আমি কখনই মূল পুনরাবৃত্তির সাথে কল করার কথা ভাবি নি। তবে এটি বেশ কার্যকর হয় না। এর আউটপুটটি ছিল "কেনেডি, ফিটজগারেল্ড, জন,। / এ.আউট," একটি আংশিক সমাধান হবে main(a,b)int**b;{--a&&printf("%s, ",b[a])&&main(a,b);}। এটি 2 বাইট সংক্ষিপ্ত এবং এটি নিশ্চিত করে যে আপনি প্রোগ্রামের নামটি মুদ্রণ করবেন না, তবে এটি প্রতিটি নামের মধ্যে কমা ব্যবহার করে।
সিগভালডেম

3

গণিত, 45 বাইট

#/.{a__,s=" ",b__}/;{b}~FreeQ~s->{b,",",s,a}&

স্ট্রিং না হয়ে অক্ষরের তালিকা হিসাবে ইনপুট নিয়ে নেজেনিসিসের উত্তরের উপর কয়েকটি বাইট সংরক্ষণ করা হয়েছে । খাঁটি ফাংশন যা কোনও প্যাটার্ন-প্রতিস্থাপনের নিয়ম ব্যবহার করে।

গণিত, 49 বাইট

#~Join~{","," "}~RotateLeft~Last@Position[#," "]&

আর একটি খাঁটি ফাংশন অক্ষরের একটি তালিকা ইনপুট হিসাবে গ্রহণ করে এবং অক্ষরের একটি তালিকা ফেরত দেয়। এটি একটি সংযোজন করে ","এবং ইনপুটটিতে এবং " "তারপরে অক্ষরের তালিকাটি শেষ স্থানটি শেষ না হওয়া পর্যন্ত ঘোরাবে। (সুতরাং উপরের প্রথম ফাংশনটির বিপরীতে আউটপুটটির পিছনের স্থান রয়েছে))


#/.{a__,s=" ",b:Except@s..}->{b,",",s,a}&হয় 4খাটো বাইট, কিন্তু আমি বুঝতে পারলাম যে Exceptস্ট্রিং নিদর্শনের জন্য অপ্রয়োজনীয় সংরক্ষণ আমাকে 12বাইট।
নেজেনিসিস

আহা, এটি কি xআপনার উত্তরের মধ্যে স্বয়ংক্রিয়ভাবে দীর্ঘতম চয়ন করে ?
গ্রেগ মার্টিন

হ্যাঁ, স্ট্রিং প্যাটার্নের মিলটি লোভজনক তবে নিয়মিত প্যাটার্নের মিলটি অলস।
নেজেনিসিস

দুর্দান্ত <ওয়েভস হোয়াইট ফ্ল্যাগ>
গ্রেগ মার্টিন

3

সি #, 76 72 বাইট

s=>System.Text.RegularExpressions.Regex.Replace(s,"(.+) (.+)","$2, $1");

@ কেভিন ক্রুজসেনের সহায়তায় 4 বাইট সংরক্ষণ করা হয়েছে

Old 76 বাইটের জন্য সাবস্ট্রিং ব্যবহার করে পুরানো সংস্করণ:

s=>s.Substring(s.LastIndexOf(' ')+1)+", "+s.Substring(0,s.LastIndexOf(' '));

1
খুব খারাপ খারাপ System.Text.RegularExpressions.Regexসি # তে জোর লম্বা .. s=>new System.Text.RegularExpressions.Regex("(.+) (.+)").Replace(s,"$2, $1");কেবল আরও একটি বাইট।
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন সত্য তবে Regex4 টি বাইট সংরক্ষণের জন্য আমি স্থিতির পদ্ধতিটি ব্যবহার করতে পারি
TheLethalCoder



2

05 এ বি 1 ই , 9 বাইট

#`',«.Áðý

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

ব্যাখ্যা

#           # split input on spaces
 `          # push each name separately to stack
  ',«       # concatenate a comma to the last name
     .Á     # rotate stack right
       ðý   # join stack by spaces

হ্যাঁ, স্পেস কমান্ডের মাধ্যমে আমার সম্ভবত একটি যোগদান করা উচিত: পি
আদনান

@ আদনান: এটি কতবার ব্যবহৃত হয় তা দেখে খুব ভাল লাগবে :)
এমিগানা


2

পিএইচপি, 45 বাইট

<?=preg_filter("#(.*) (.+)#","$2, $1",$argn);

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


1
এর \pL+বদলে কেন .+?
কেভিন ক্রুইজসেন 24'17

@ কেভিন ক্রুজসেন আপনি ঠিক বলেছেন রেইগেক্সের প্রথম অংশটি লোভী তাই এটি ব্যবহার করা কোনও ব্যাপার নয় .বা\pL
জার্গ হালসারম্যান ২

2

ম্যাটল্যাব / অকটাভ , 37 বাইট

@(a)regexprep(a,'(.+) (.+)','$2, $1')

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

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


পুরানো উত্তর:

আমি এই উত্তরটি এখানে রেখে যাচ্ছি পাশাপাশি বিবেচনা করে এটি একটি সাধারণ রেজেক্সের তুলনায় এটি করার আরও অনন্য উপায়।

অক্টাভা , 49 47 বাইট

@(a)[a((b=find(a==32)(end))+1:end) ', ' a(1:b)]

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

আউটপুট উত্পন্ন করার জন্য একটি বেনামী ফাংশন।

মূলত কোডটি প্রথমে স্ট্রিংয়ের সাহায্যে সর্বশেষ স্থানটি সন্ধান করে b=find(a==32)(end)। তারপরে এটি স্ট্রিংয়ের শেষ অংশটি ব্যবহার করে (স্থানের পরে) a(b+1:end)যেখানে bসর্বশেষ স্থানটি খুঁজে পাওয়ার আউটপুট। এটি স্ট্রিংটির সাথে a(1:b-1)শুরুও করে এবং ', 'এর মধ্যবর্তী স্থানে উভয়কেই একত্র করে ।

আমি ইতিমধ্যে সাধারণ কিছু বনাম সংরক্ষণ করেছি find(a==32,1,'last')। সংরক্ষণের জন্য আরও অনেক কিছু আছে তা পুরোপুরি নিশ্চিত নয়।


2

জেলি , 9 বাইট

ḲµṪ;⁾, ;K

ব্যাখ্যা করা হয়েছে, ইশ:

ḲµṪ;⁾, ;K
Ḳ           # Split the input by spaces
 µ          # Separate the link into two chains. Essentially calls the right half with the split string monadically.
  Ṫ         # The last element, (The last name), modifying the array.
   ;        # Concatenated with...
    ⁾,      # The string literal; ", "
       ;    # Concatenated with...
        K   # The rest of the array, joined at spaces.

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

সমস্ত পরীক্ষার ক্ষেত্রে চেষ্টা করুন।


2

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

lambda s:s.split()[-1]+", "+" ".join(s.split()[:-1])

খুব সহজ, গল্ফিং সহায়তা ব্যবহার করতে পারে। কেবলমাত্র শেষ শব্দটি সামনে রাখুন এবং তাদের সাথে "," যোগ দেয়।

পরীক্ষা ক্ষেত্রে:

>>> f=lambda s:s.split()[-1]+", "+" ".join(s.split()[:-1])
>>> f("Monty Python")
'Python, Monty'
>>> f("Albus Percival Wulfric Brian Dumbledore")
'Dumbledore, Albus Percival Wulfric Brian'


2

জাভা, 110 62 বাইট

String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}

অ স্থির পদ্ধতি।

-48 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ


String c(String s){int i=s.lastIndexOf(' ');return s.substring(i+1)+", "+s.substring(0,i);}সংক্ষিপ্ত ( 91 বাইট )।
কেভিন ক্রুইজসেন

এবং String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}এটি আরও ছোট ( 62 বাইট )।
কেভিন ক্রুইজসেন 24'17

@ কেভিন ক্রুজসেন ওহ গীজ সুন্দর ধন্যবাদ! আমার আরও ভাল
রেজেনেক্স

2

পিএইচপি , 62 59 বাইট

-৩ বাইটস, ধন্যবাদ জর্জ

$a=explode(' ',$argn);echo array_pop($a).', '.join(' ',$a);

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

পুরানো সমাধান, 63 বাইট

যদি ব্যক্তির 3 টি পুনরাবৃত্তি নাম থাকে তবে কাজ করে না।

<?=($a=strrchr($argv[1]," ")).", ".str_replace($a,'',$argv[1]);

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


আপনি এর $argnপরিবর্তে ব্যবহার করতে পারেন$argv[1]
Jörg Hülsermann

2

এক্সেল, 174 170 168 বাইট

ওয়ার্নিশকে 2 বাইট সংরক্ষণ করা হয়েছে

=MID(A1,FIND("^",SUBSTITUTE(A1," ","^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1))&", "&LEFT(A1,FIND("^",SUBSTITUTE(A1," ","^",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

এটি অভিনব বা চালাক নয়। এটি মোটামুটি প্রাথমিক পদ্ধতি method এটির মতো মনে হয় অ্যারের সূত্রগুলির সাথে আরও ছোট একটি উপায় থাকা উচিত তবে আমি কার্যকরভাবে কাজ করতে পারি না।


সমাধান কেবলমাত্র সেই ক্ষেত্রে ক্ষেত্রে কাজ করে যেখানে তিনটি নাম রয়েছে। উদাহরণস্বরূপ "অ্যালবার্ট আইনস্টাইন" পরিচালনা করে না।
ওয়ার্নিশ

@ ওয়ার্নিশ ধন্যবাদ! এটি এখন কাজ করা উচিত।
ইঞ্জিনিয়ার টোস্ট

প্রশ্ন অনুসারে শ্বেত স্পেস অনুসরণ করার অনুমতি দেওয়া হয়। মনে করুন আপনি -1বাম ফাংশনটি রেখে 2 বাইট সংরক্ষণ করতে পারেন ।
ওয়ার্নিশ


1

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

44hYb1YSZc

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

ব্যাখ্যা

44h    % Implicitly input a string. Postpend a comma
       % STACK: 'John Fitzgerald Kennedy,'
Yb     % Split on spaces
       % STACK: {'John', 'Fitzgerald', 'Kennedy,'}
1YS    % Circularly shift 1 step to the right
       % STACK: {'Kennedy,', 'John', 'Fitzgerald'}
Zc     % Join with spaces between. Implicitly display
       % STACK: 'Kennedy, John Fitzgerald'

1

গেমার, 23 টি অক্ষর

* =@append{s; *}
\Z=,$s

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

নমুনা রান:

bash-4.4$ echo -n 'John Fitzgerald Kennedy' | gema '* =@append{s; *};\Z=,$s'
Kennedy, John Fitzgerald
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.