একটি তালিকা থেকে অক্সফোর্ড কমা দিয়ে একটি একক স্ট্রিং তৈরি করা


24

স্ট্রিংয়ের একটি তালিকা গ্রহণ এবং প্রতিটি উপাদানকে উদ্ধৃত করে তালিকা থেকে তৈরি করা এককভাবে সঠিকভাবে বিরামচিহ্নিত স্ট্রিং ফিরিয়ে আনার জন্য কিছু চালাক (সংক্ষিপ্ত এবং মুশকিল) পদ্ধতির কী কী?

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

def temp = things.collect({"\'${it}\'"})
switch (things.size()) {
    case 1:
        result = temp[0]
        break
    case 2:
        result = temp.join(" and ")
        break
    default:
        result = temp.take(temp.size()-1).join(", ") + ", and " + temp[-1]
        break
}

অর্থাৎ ['1']উত্পাদ উচিত '1', ['1','2']উত্পাদ উচিত '1 and 2', [দেখতে আমি সেখানে? কি] এবং ['1','2','3']উত্পাদ উচিত '1, 2, and 3'

গ্রোভির জন্য আমার কিছু ভাল উত্তর রয়েছে তবে আমি অন্যান্য ভাষা কী করতে পারে তা দেখতে চাই।

কিছু কি কি কম্প্যাক্ট বিভিন্ন ভাষায় যে বৈশিষ্ট্য এবং যারা ভাষার বাগধারার সদ্ব্যবহার মধ্যে চালাক পন্থা?


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

7
এটি সত্যিকারের বাক্যগুলির সাথে আরও আকর্ষণীয় হবে :['we invited the stripper','JFK','Stalin']
এইসুটসআইবলাকনট

1
আমরা কী ধরে নিতে পারি যে স্ট্রিংগুলিতে ইতিমধ্যে কমা নেই?
মার্টিন এন্ডার

2
চ্যালেঞ্জটির শিরোনাম হওয়া উচিত ছিল " অক্সফোর্ড কমা সম্পর্কে কে - কে দেয় ?"
ইগবি লার্জম্যান

3
@ ওल्डকুরিমডজিয়ন আমার মনে হয় আপনার অর্থ "আমেরিকানাইজড আবর্জনা";)
স্যুটস ব্ল্যাকনট

উত্তর:


76

সিএসএস, 132 116 115 বাইট

a:not(:last-child):nth-child(n+2):after,a:nth-last-child(n+3):after{content:","}a+:last-child:before{content:"and "

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

তালিকাটি প্রতিটি সংযুক্ত <a>ট্যাগের সাথে যুক্ত লিঙ্কযুক্ত এইচটিএমএল ফাইলের মধ্যে থাকা উচিত এবং লাইন ব্রেক দ্বারা পৃথক করা উচিত। তালিকার আইটেমগুলিতে তাদের পিতামাতার উপাদানগুলির একমাত্র উপাদান হওয়া উচিত

<a>one</a>
<a>two</a>
<a>three</a>

ব্যাখ্যা

a:not(:last-child):nth-child(n+2)::after,
a:nth-last-child(n+3)::after {
    content: ",";
}

a + :last-child::before {
    content: "and ";
}

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

আমরা দুটি শব্দের তালিকা ব্যতীত শেষ ব্যতীত প্রতিটি শব্দের পরে কমা যোগ করতে চাই, যা কোনও কমা পায় না। প্রথম নির্বাচক, a:not(:last-child):nth-child(n+2):afterপ্রথম এবং শেষটি বাদে সমস্ত উপাদান নির্বাচন করে। :nth-child(n+2)বলার একটি ছোট উপায় :not(:first-child)এবং এটি মূলত এমন উপাদানগুলি বেছে নিয়ে কাজ করে যার সূচকটি (1 থেকে শুরু) 2 এর চেয়ে বড় বা সমান ((হ্যাঁ, এটি এখনও আমাকে কিছুটা বিভ্রান্ত করে। এমডিএন ডক্স সাহায্য করতে পারে)))

মোট তিন বা ততোধিক উপাদান থাকলে কমা পাওয়ার জন্য আমাদের কেবল প্রথম উপাদানটি নির্বাচন করতে হবে । a:nth-last-child(n+3):afterমত কাজ করে :nth-child, তবে পিছন থেকে গণনা করা হয়, সুতরাং এটি শেষ দুটি বাদে সমস্ত উপাদান নির্বাচন করে। কমা দুটি সেটগুলির মিশ্রণ গ্রহণ করে এবং প্রতিটি সিলেক্ট এলিমেন্টের সাথে সাথেই আমরা :after সিউডো-এলিমেন্ট যুক্ত করতে ব্যবহার করি content

দ্বিতীয় নিয়ম সহজ। তালিকার শেষ উপাদানটির আগে আমাদের "এবং" যুক্ত করতে হবে, যদি না এটি একটি একক উপাদান থাকে। অন্য কথায়, আমাদের সর্বশেষ উপাদানটি নির্বাচন করা দরকার যা অন্য উপাদান দ্বারা পূর্বে রয়েছে। +হয় সংলগ্ন সহোদর নির্বাচক CSS এ।


1
উজ্জ্বল! আমি এটা ভালোবাসি. : ডি
COTO

যদি আপনি ব্যবহার করতে চান <li>
slebetman

1
<li>আদর্শ হতে পারে তবে এটি নির্বাচকদের জন্য দুটি অতিরিক্ত অক্ষর যুক্ত করবে। আমি বেছে নিয়েছি <a>কারণ এটি একটি অক্ষর এবং এটির নিজস্ব বিন্যাস প্রয়োগ করে না।
নিনজাবিয়ারমোনকি

বাহ ... এটি খুব চিত্তাকর্ষক। চতুরতা পুরষ্কার।

শীর্ষ উত্তর হিসাবে সিএসএস? খুশী হলাম।
ব্র্যান্ডন

13

হাস্কেল: 81, 77 74 অক্ষর

f[x]=x
f[x,y]=x++" and "++y
f[x,y,z]=x++", "++f[y++",",z]
f(x:y)=x++", "++f y

হাসেল বৈশিষ্ট্য: প্যাটার্ন মেলানো


আপনি কিছু স্থান সরিয়ে ফেলতে পারেন
রে

1
আপনি কেবল সরাতে পারেনf[x,y,z]

এবং এখন, এটি বেশ মানক পুনরাবৃত্তি। :)
seequ

আপনি অক্সফোর্ড কমা এবং কমাগুলি পরে স্পেসগুলি ভুলে গেছেনf["a","b","c"]"a, b, and c""a,b and c"
এমনটি

4
কীভাবে :) দ্বারা প্রতিস্থাপন y++", and "++zকরে গল্ফিং সম্পর্কেf[y++",",z]
গর্বিত হাসেলেলার

7

রুবি, 47 বাইট

q=" and ";p$*[2]?(a=$*.pop;$**", "+?,+q+a):$**q

ব্যাখ্যা

  • ইনপুট হ'ল কমান্ড লাইন আর্গুমেন্ট ( $*)।
  • যখন $*তৃতীয় উপাদান থাকে ( $*[2]শূন্য ফেরায় না), সমস্ত উপাদানকে সর্বনিম্ন বিয়োগ করে নিন এবং ব্যবহার করে সেগুলি কমা-বিচ্ছিন্ন স্ট্রিংয়ে পরিণত করুন Array#*। অবশেষে একটি অতিরিক্ত কমা, স্ট্রিং " and "এবং শেষ কমান্ড লাইন যুক্তি যুক্ত করুন।
  • যখন $*কোনও তৃতীয় উপাদান নেই, দুটি, এক, বা শূন্য আর্গুমেন্ট দেওয়া হয়েছিল। যুক্তিগুলি নিরাপদে স্ট্রিংয়ের সাথে যুক্ত হতে " and "পারে এবং সঠিক ফলাফল তৈরি করতে পারে।

6

পাইথন 2 (61)

s=input()
d=s.pop()
print", ".join(s)+", and "[8-7*len(s):]+d

প্রধান কৌশলটি হ'ল ", and "এক এবং দুটি উপাদানগুলির জন্য চূড়ান্ত সংযোজকের অংশটি কেটে দেওয়া । একটির জন্য, এর সবগুলি কেটে ফেলা হয়েছে এবং দুটির জন্য কমাটি সরানো হয়েছে। এটি কেটে টুকরো টুকরো করে করা হয় [8-7*len(s):]( sএরপরে এটি আরও ছোট pop)।

দুর্ভাগ্যক্রমে, dকেবল তার প্রকাশের সাথে প্রতিস্থাপন করা যায় না বা এটি popখুব দেরিতে ঘটে।


আপনিই প্রথম প্রতিস্থাপন করতে পারে sসঙ্গে s=input()এবং, প্রথম লাইন অপসারণ যদি আমি ভুল না। 2 টি অক্ষর সাশ্রয় করে।
6:43 এ টমসডিং

@ টমসডিং আপনি কী পরামর্শ দিচ্ছেন তা আমি বুঝতে পারছি না। কোডটি sএকাধিকবার উল্লেখ করছে ।
xnor

অপেক্ষা করুন, আমি আজ সকালে অদ্ভুত জিনিস করি। ভুলে যাও. :)
টেমসডিং

6

সিএসএস, 62 অক্ষর 112 চর

অন্যান্য এন্ট্রি দ্বারা অনুপ্রাণিত এমনকি আরও খাটো। মনে রাখবেন যে এটির দরকার হয় যে কোনও উপাদানগুলি সাদা স্পেস দ্বারা পৃথক করা হয় না:

a+a:before{content:", "}a+a:last-child:before{content:", and "

http://jsfiddle.net/olvlvl/1Ls79ocb/

"এক এবং দু'জনের জন্য ঠিক করুন, যেমন ডেনিস বলেছেন:

a+a:before{content:", "}a+a:last-child:before{content:", and "}a:first-child+a:last-child:before{content:" and "

http://jsfiddle.net/olvlvl/1Ls79ocb/3/


5

পার্ল (বনাম 5.10+) - 37 35 34 28

@F>2&&s/ /, /g;s/.* \K/and /

perl -apeতালিকা চালিত স্থানটি পৃথক করে দিয়ে চালানো হবে STDIN

বিভিন্ন ইনপুট জন্য আউটপুট:

$ perl -ape '@F>2&&s/ /, /g;s/.* \K/and /'
oxford
oxford
oxford cambridge
oxford and cambridge
oxford cambridge comma
oxford, cambridge, and comma
oxford cambridge comma space
oxford, cambridge, comma, and space

আপনি আপনার সর্বশেষ প্রতিস্থাপনটি পরিবর্তন করে 3 বাইট দ্বারা এটি হ্রাস করতে পারবেনs/(\S+)$/and $1/
এইসুইটস ব্ল্যাকনট

1
@ThisSuitIsBlackNot আপনি '\ n' (ধন্যবাদ) ড্রপ করতে পারেন, তবে আপনি স্পেসগুলি ফেলে দিতে পারবেন না, বা "x" এর একটি ইনপুট "এবং x" হয়ে যাবে
অল্লাইগ করুন

ওহো, আরও ইনপুট পরীক্ষা করা উচিত ছিল। যাইহোক, আপনি $আপনার সম্পাদনায় অ্যাঙ্করটি ভুলে গেছেন , তাই ইনপুট foo bar bazহয়ে যায় foo, and bar, baz। এছাড়াও, আপনি অপসারণ করতে পারেন এক করে স্পেসs/( \S+)$/ and$1/
ThisSuitIsBlackNot

আমার গত মন্তব্য এখনও 35 আপনি ছেড়ে, কিন্তু আপনি লিখতে পারেন $#F>1যেমন @F>2আরও একটি বন্ধ শেভ করতে। মাইক্রো উন্নতির জন্য সমস্ত পরামর্শের জন্য দুঃখিত, আমি এই উত্তরটি সত্যিই পছন্দ করি :)
এইসুইটস ব্ল্যাকনট

@ThisSuitIsBlackNot একেবারেই নয় - মাইক্রোডিটস স্বাগত। আমি গোপনে সিজেএমের 28 বাইট এবং গল্ফস্ক্রিপ্টের 30 বাইটের সাথে প্রতিযোগিতা করছি। তবে শেষের আগে আপনার মন্তব্যের অনুবাদ না করে আমি 34 এ পৌঁছে গেছি (পরীক্ষিত tested echo -n ... | wc -c)যদি আপনি (\S+)33 টি অক্ষর পাওয়ার আগে জায়গাটি মিস করেন তবে আপনি যদি রাখেন তবে আপনি দুটি স্থান test thisপেয়ে যাবেন ) সুতরাং আরও কিছু না করে আমি মনে করি যে ভুল হয়েছে।test and thistest
abligh

4

জাভাস্ক্রিপ্ট ()৩)

l=a.length;l>2&&(a[l-1]='and '+a[l-1]);a.join(l>2?', ':' and ')

মামলা:

  • a = [1] => 1
  • a = [1, 2] => 1 and 2
  • a = [1, 2, 3] => 1, 2, and 3

কেভেট: এটি দৈর্ঘ্য> 2 সহ একটি অ্যারের শেষ উপাদানটি পরিবর্তন করবে।


2
এর দুর্দান্ত ব্যবহার&&
ক্রিস ব্লুম

4

জিএনইউ সেড - -rপতাকা সহ 1 টি সহ 69 টি অক্ষর

s/ /, /g
s/( [^ ]+)( [^ ]+)$/\1 and\2/
s/^([^,]+),([^,]+)$/\1 and\2/

একটি স্থান-বিভাজিত তালিকা নেয় (শেল স্ক্রিপ্টগুলির জন্য মোটামুটি প্রতিমা)।

উদাহরণ

$ sed -r -f oxfordcomma.sed <<< "1"
1
$ sed -r -f oxfordcomma.sed <<< "1 2"
1 and 2
$ sed -r -f oxfordcomma.sed <<< "1 2 3"
1, 2, and 3
$

হ্যাঁ, চলুন কোড-গল্ফের সাথে চলুন ।
ওরোম

দ্বিতীয় আউটপুট এর 1 and 2পরিবর্তে হওয়া উচিত1, 2
অপ্টিমাইজার

@ অপ্টিমাইজার - বেশ ঠিক। সংশোধন করা হয়েছে।
ডিজিটাল ট্রমা

3

পাইথন 2 - 71, 70 68

s=input()
l=len(s)-1
print', '.join(s[:l])+', and '[l<2:]*(l>0)+s[l]

inputএবং উভয় সহ চরিত্রের গণনা print


3

রুবি, 57 বাইট

f=->l{s=l*', ';s.sub(/,(?!.*,)/,(l.size<3?'':?,)+' and')}

আমি স্ট্রিংটিতে যোগ দিচ্ছি ,এবং তারপরে আমি স্ট্রিংয়ের শেষ কমাটি একটি and(এবং তালিকার দৈর্ঘ্যের উপর নির্ভর করে alচ্ছিক কমা) এর সাথে প্রতিস্থাপন করছি ।


3

কোবরা - 60

do(l as String[])=l.join(', ',if(l.length<3,'',',')+' and ')

কোবারার List<of T>.joinফাংশন আপনাকে তালিকার চূড়ান্ত দুটি উপাদানগুলির জন্য পৃথক পৃথককারী নির্দিষ্ট করতে দেয়, যা এটিকে এত সংক্ষিপ্ত করে তোলে।


3

পার্ল - 59

sub f{$a=join', ',@_;$#_&&substr$a,(@_>2)-3,@_<3,' and';$a}

কমা দিয়ে তালিকাটিতে যোগ দেয়, তারপরে যদি তালিকার একাধিক উপাদান থাকে তবে হয় হয় ' and'শেষ কমা (যদি দৈর্ঘ্য> = 3) এর পরে যুক্ত হয়, বা এর সাথে শেষ কমাটি প্রতিস্থাপন করে (যদি দৈর্ঘ্য == 2)।


3

পিএইচপি, 192 167 146 136 টি অক্ষর:

$n=' and ';$s=count($a);echo ($s<3)?join($n,$a):join(', ',array_merge(array_slice($a,0,$s-2),Array(join(",$n",array_slice($a,-2,2)))));

কয়েক বছর আগে http://www.christopherbloom.com/2011/05/21/join-implode-an-array-of-string-values-with- formattting/ এ আমি লিখেছি এমন একটি ফাংশনের ভিত্তিতে


আপনি কি উত্তর কোডটিতে আপনার কোডটি (অক্সফোর্ড কমা সহ) লিখতে পারেন?

হ্যা দুঃক্ষিত. আমি আমার ফোনে ছিলাম এবং এটি কোডটি সঠিকভাবে পেস্ট করবে না। আমি আমার ডেস্কটপ থেকে আপডেট করব
ক্রিস ব্লুম

@ ক্রিসব্লুম add এমনকি যুক্ত করা তুচ্ছ হলেও, উত্তরে একটি কার্যকরী কোড অন্তর্ভুক্ত করা উচিত, এটি একটির মতো তৈরি করা যায় না। এছাড়াও, কারণ উদ্দেশ্যটি কোডটি যতটা সম্ভব ছোট করা, ওয়ার্কিং কোড পোস্ট না করা আপনার স্কোরকে অস্তিত্বহীন করে তোলে।
গর্বিত হাসেলেলার

আবার ক্ষমা চেয়ে নিলাম। সিজি তে প্রথমবারের পোস্টার। আমি আমার উত্তর ঠিক করেছি
ক্রিস ব্লুম

3

ব্যাচ - 151 বাইট

@echo off&set f=for %%a in (%~1)do
%f% set/aa+=1
%f% set/ac+=1&if !c!==1 (set o=%%a)else if !c!==!a! (set o=!o!, and %%a)else set o=!o!, %%a
echo !o!

বিঃদ্রঃ; আপনাকে এই হিসাবে স্যুইচ সেটটি cmdদিয়ে স্ক্রিপ্টটি কল করতে হবে , এটি তাই আমাকে স্ক্রিপ্টে দীর্ঘতমটি অন্তর্ভুক্ত করতে হবে না । অন্যথায় বাইট গণনায় 30 যুক্ত করুন এবং স্ক্রিপ্টটি সাধারণত কল করুন।/vonsetLocal enableDelayedExpansion

h:\uprof>cmd /von /c test.bat "1 2 3"
1, 2, and 3

h:\uprof>cmd /von /c test.bat "1 2 3 4 5"
1, 2, 3, 4, and 5

3

গ্রোভি, 47 43 57 টি অক্ষর, জাভাস্ক্রিপ্ট ES6 56 টি অক্ষর

খাঁজকাটা:

(a[1]?a[0..-2].join(", ")+(a[2]?",":"")+" and ":"")+a[-1]

যেহেতু অ্যারে অক্ষরগুলি পূর্ণ রয়েছে, তাই আমরা এটি a.size>1দ্বারা প্রতিস্থাপন করতে পারিa[1]

জাভাস্ক্রিপ্ট, ES6:

a.join(', ').replace(/,([^,]+)$/,`${a[2]?',':''} and$1`)

উভয় ক্ষেত্রে ধরে নেওয়া যায় যে ভেরিয়েবল এ-এর অ্যারে রয়েছে।


6
অক্সফোর্ড কমা একত্রিত হওয়ার আগে কমা is
ডেনিস

3

পিএইচপি, 86 84 অক্ষর

$a = ['one', 'two', 'three', 'four', 'five'];

অ্যারে শুরু হয়ে গেলে, আমরা গণনা শুরু করি:

$L=count($a)-1;$S=', ';$L<2?($S=' and '):($a[$L]='and '.$a[$L]);echo implode($S,$a);

Prettified:

$last_index = count($a) - 1;
$separator = ', ';
if ($last_index < 2) {
    $separator = ' and ';
} else {
    $a[$last_index] = 'and '.$a[$last_index];
}
echo implode($separator, $a);

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


3

সিজেম, 35 30 28 27 বাইট

q~)\_"and "L?@+a+_,2=", ">*

এটি এমন একটি প্রোগ্রাম যা STDIN থেকে পড়ে এবং STDOUT- এ প্রিন্ট করে। এটি অনলাইনে চেষ্টা করুন।

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

q~                                     " Q := eval(input())                               ";
  )                                    " P := Q.pop()                                     ";
   \_"and "L?@+                        " P := (Q ? 'and ' : '') + P                       ";
                a+                     " Q += [P]                                         ";
                  _,2=", ">            " J := ', '[(len(Q) == 2):]                        ";
                           *           " R := J.join(Q)                                   ";
                                       " print R (implicit)                               ";

উদাহরণ রান

$ cjam <(echo 'q~)\_"and "L?@+a+_,2=", ">*') <<< '["1"]'; echo
1
$ cjam <(echo 'q~)\_"and "L?@+a+_,2=", ">*') <<< '["1""2"]'; echo
1 and 2
$ cjam <(echo 'q~)\_"and "L?@+a+_,2=", ">*') <<< '["1""2""3"]'; echo
1, 2, and 3
$ cjam <(echo 'q~)\_"and "L?@+a+_,2=", ">*') <<< '["1""2""3""4"]'; echo
1, 2, 3, and 4

আমি আপনার লেজে আছি - নীচে দেখুন :-)
সংক্ষেপে

3

গুগল শিটস, 67 68 67 92 বাইট

=SUBSTITUTE(JOIN(", ",FILTER(A:A,A:A<>"")),",",IF(COUNTA(A:A)>2,",","")&" and",COUNTA(A:A)-1

ইনপুটটি সেল থেকে শুরু হয় A1এবং চালিয়ে যেতে থাকে তবে অনেকগুলি এন্ট্রি বিদ্যমান।
JOINএগুলির প্রত্যেককে কমা-স্পেসের সাথে একটি স্ট্রিংয়ে মার্জ করে।
FILTERযে কোনও নন-ফাঁকা স্থান সরিয়ে দেয় যাতে আপনি শেষে অসীম কমা দিয়ে শেষ না হন।
SUBSTITUTEশেষ কমা প্রতিস্থাপন করে ( COUNTAফাঁকা ইনপুট গণনা করে পাওয়া যায় )

এটি খুব উত্তেজনাপূর্ণ নয় তবে এটি একটি একক কক্ষে কার্যকর able


এটি অক্সফোর্ড কমা বেরিয়ে যায়।
ছাতা 21

@ ছত্রাক ভাল, এটা আমার বোকা, তাই না? +1 বাইটস
ইঞ্জিনিয়ার টোস্ট

আপনি )এই সূত্রটি -1 বাইটের জন্য টার্মিনালটি ফেলে দিতে সক্ষম হবেন ; ওয়েল ডাং, এটিই আমি সম্পাদিত দ্রুততম সম্পাদনা ছিল +1
টেলর স্কট

এটি পরীক্ষার পরে দুটি নোট - এ A:A>""রূপান্তর করা উচিত A:A<>""এবং এটি কেবলমাত্র 2 টি বস্তুর ক্ষেত্রে অক্সফোর্ড কমা বাদ দেওয়ার বাস্তবায়ন করে না
টেলর স্কট

@TaylorScott আমি শুধুমাত্র কখনও পাঠ্য সহ পরীক্ষা সঙ্গে সমস্যা মিস >""। আমি এর আগে ক্লিপিক সংশোধন করার বিষয়টি পরিষ্কারভাবে পরীক্ষা করা হয়নি। যে দিকটি গিয়েছিল আমি তার পছন্দ করি না ...
ইঞ্জিনিয়ার টোস্ট

2

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

ইনপুট অ্যারেতে কোনও খালি স্ট্রিং ধরে নেই

f=(a,b=a.pop())=>a[0]?a.join(', ')+(a[1]?',':'')+' and '+b:b

টেস্ট ফায়ারফক্স / ফায়ারবাগ কনসোলটি

console.log(f(['We invited the stripper','JFK','Stalin']))

আউটপুট

 We invited the stripper, JFK, and Stalin

আমি কীভাবে এটি চালাব? আমি এটি node --harmonyস্ট্রিংগুলির একটি অ্যারে দিয়ে চেষ্টা করেছি var a = 'abcdefgh'.split('');, তবে এটি কেবল একটি দিয়ে সেখানে বসে ...এবং কিছুই করার জন্য উপস্থিত হয় না। অনন্য ES6 বৈশিষ্ট্যটি ব্যবহারের জন্যও +1 ()=>
এড্রিয়ান

@ অ্যাড্রিয়ান ফাংশনটি কোনও আউটপুট ছাড়াই একটি স্ট্রিং প্রদান করে। আমি উত্তরে একটি পরীক্ষা যুক্ত করব।
edc65

আমি মনে করি f=(a,b=a.pop())=>a[0]?a.join(', ')+', and '+b:bএটিও সঠিক এবং 13 বাইট ছোট।
ইনগো বার্ক

1
@ ইনগোবার্ক যে অংশটি কেটে দেয় যা 2 টি আইটেমযুক্ত কমা পরিচালনা করে। কি অনুমান? 2 টি আইটেম সহ আউটপুট ভুল is
edc65

@ edc65 আহ, দোহ। খারাপ হতে পারে।
ইনগো বার্ক

2

জাভাস্ক্রিপ্ট - 60 56 71 67 63

হুবহু একটি মূ approach় পন্থা নয়, তবে আমি এটি লিখতে মজা পেয়েছি এবং আমি রেইগেক্স পছন্দ করি।

ধরে নিচ্ছি অ্যারে এতে সঞ্চিত আছে var a:

a.join((a.length>2?',':'')+' ').replace(/([^,\s])$/,"and $1")

কেবল সূচক জন্য পরীক্ষা করে সংক্ষিপ্ত [2]: (ইয়ে বুলিয়ান জবরদস্তি)

a.join((!!a[2]?',':'')+' ').replace(/([^,\s])$/,'and $1')

স্পষ্টতই আমি পরীক্ষায় স্তন্যপান এবং একটি একক-প্রবেশ পরীক্ষা এড়িয়ে গেছি। এখানে স্থির সংস্করণটি রয়েছে:

a.join((!!a[2]?',':'')+' ').replace(/([^,\s])$/,(!!a[1]?'and ':'')+'$1')

আমার বুলিয়ানগুলি উল্টিয়ে 2 টি অক্ষর ছাঁটাই এবং আরও তিনটি প্রথম ত্রৈমাসিকের তত্ক্ষণে / অন্য স্থানে কনক্রিটেশন থেকে স্থানটি সরিয়ে:

a.join((!a[2]?' ':', ')).replace(/([^,\s])$/,(!a[1]?'':'and ')+'$1')

@ টমসমেডিংকে আমাকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ যে আমাকে আমার বুলিয়ানদের জোর করতে হবে না কারণ জেএস আমার পক্ষে এটি করে। আমি আরও বুঝতে পেরেছিলাম যে আমি প্রথম ত্রৈমাসিকটিকে অভ্যন্তরের অভ্যন্তর থেকে পৃথক করে প্রথম বন্ধনী সরিয়ে নিতে ভুলে গেছি join():

a.join(a[2]?', ':' ').replace(/([^,\s])$/,(a[1]?'and ':'')+'$1')

আমি কি এটা সঠিকভাবে করেছি? বাধ্যতামূলক নতুন গল্ফার ক্ষমা।


1
পছন্দকারী রেজেক্স ম্যাসোকিজম নামে পরিচিত।

আসলে আপনার মোটেই দরকার ছিল না !!; a[2]?A:Bইতিমধ্যে কাজ করে। আপনার বুলিয়ানগুলি আবার উল্টাতে পারে ।
13:36

@ টমসমিডিং - আপনি সঠিক। আমি সবসময় জাভাস্ক্রিপ্টের ডিফল্ট বুলিয়ান জবরদস্তি আচরণ সম্পর্কে সতর্ক থাকি, তাই আমার বুলিয়ানদের নিজেই জোর করে দেওয়ার অভ্যাস আমার ...
অ্যাড্রিয়ান

@ অ্যাড্রিয়ান সংশোধন: কোনও মান ছাড়া খালি স্ট্রিংয়ের a[i]জন্য এটি সত্যের সমান । ভাল প্রায়. আমি ধরে নিচ্ছি যে আপনি যদি 2 ইনপুট পান তবে আপনার অ্যারের দৈর্ঘ্য দুটি হবে। তারপরে a[2]===undefinedএবং undefinedমূল্যায়ন করে false। সম্পাদনা করুন: আপনার সম্পাদনাটি আমি যা বোঝাতে
চাইছিলাম

2

গল্ফস্ক্রিপ্ট - 31 39 34 30

ওহে বিশ্ব! আমি দীর্ঘ সময়ের লুকার, প্রথমবারের পোস্টার। এখানে গল্ফস্ক্রিপ্টে আমার 30 বাইট সমাধান রয়েছে ([1 2 3] এর মতো অ্যারে ইতিমধ্যে স্ট্যাকের মধ্যে রয়েছে)।

.,3<" and ":A{~A(;\+]", "}if*

ফলাফল সকল পরীক্ষার ক্ষেত্রে উপযুক্ত।

সম্পাদনা করুন: সিজেম!


দৈর্ঘ্য 1 টি অ্যারের জন্য অ্যাকাউন্টে সম্পাদিত।
জোশিয়াহ উইনস্লো

আরও দক্ষ অ্যালগরিদমের জন্য সম্পাদিত।
জোশিয়াহ উইনস্লো

লড়াই চলছে। : পি
ডেনিস

আহ, তবে আমরা এখন সমান। : পি
জোশিয়াহ উইনস্লো

2

জোজো, 52 71 83 টি চর

dim i as int8=ubound(L)
L(i)=if(i=0,"","and ")+L(i)
Return L.Join(if(i=1," ",", ")

দ্রষ্টব্য যে UBound অ্যারের দৈর্ঘ্যের তুলনায় এক কম।


এটি 2 টি আইটেম থাকা অবস্থায়
কমাতে

ভালো বল ধরা. ঠিক করার জন্য সম্পাদিত।
সিলভারপি

2

এক্সেল ভিবিএ, 108 বাইট

বেনামে VBE তাত্ক্ষণিক উইন্ডো ফাংশন যা স্থান হিসাবে সীমানা A1এবং ভিবিই তাত্ক্ষণিক উইন্ডোতে আউটপুট থেকে ডিলিমিট অ্যারে হিসাবে ইনপুট নেয় ।

x=Split([A1]):y=UBound(x):For i=0To y-2:?x(i)", ";:Next:If y>0Then?x(i)IIf(y>1,",","")" and "x(i+1)Else?[A1]

1

র‌্যাকেট 87

(define(f x)(string-join(map ~a x)", "#:before-last(if(= 2(length x))" and "", and ")))

আমি এখনও গল্ফিংয়ের জন্য লম্বা হয়ে ফাংশনটির নামগুলি বেশ দীর্ঘ হতে পারি।
seequ

1

পাইথন 62 টি চর

ধরে নিচ্ছি যে আমি স্ট্রিংয়ের তালিকা:

(" and", ", and")[len(i) < 2].join(", ".join(i).rsplit(",",1))


1

জুলিয়া (53)

print(join(ARGS,", ",(endof(ARGS)>2?",":"")" and "))

STDIN থেকে আউটপুটগুলি STDOUT এ নিয়ে যায়

বেস.জয়েন (আইটেম, ডিলিম [, শেষ]) ব্যবহার করে সমাধান

সম্পাদনা:

পরীক্ষার মামলা

julia oxfordComma.jl 1

1

julia oxfordComma.jl 1 2

1 এবং 2

julia oxfordComma.jl 1 2 3

1, 2, এবং 3


1
আমি জুলিয়াকে চিনি না, তবে দেখে মনে হচ্ছে এটি অক্সফোর্ড কমা তৈরি করে না।
ফ্লর্নকোয়াক

@ ফ্লোরকোয়াক এটি অক্সফোর্ড কমাতে মুদ্রণ করে theচ্ছিক "শেষ" যুক্তিটির কারণে
ক্রুর

2
এটা হওয়া উচিত 1, 2, and 3, না 1, 2 and 3
ফ্লোরনারকোপ

1

ভাড়া (108)

[$[l:@b]:[r:each][s:[cmp:[rc];2;[is:different;,]]\s][before:[last:[notfirst:and\s]]][sync:;ordered][arg:b]]

Ungolfed:

[$[l:@b]:
    [r:each]                            # Repeat for each item
    [s:[cmp:[rc];2;[is:different;,]]\s] # Separate by comma if n > 2
    [before:[last:[notfirst:and\s]]]    # Insert "and" before last item
    [sync:;ordered]                     # Force forward order
    [arg:b]                             # Read list
]

ব্যবহার:

[$l:{A|B|C|D|E}]

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


1

পাইথ, 28

j>", "qlQ2+_t_Q+?"and "tQkeQ

উদাহরণ:

$ pyth programs/oxford.pyth <<< "['1']"
1

$ pyth programs/oxford.pyth <<< "['1','2']"
1 and 2

$ pyth programs/oxford.pyth <<< "['1','2','3']"
1, 2, and 3

ইনপুটটি কীভাবে ফর্ম্যাট করা উচিত তা আমি বুঝতে পারি না।
ডেনিস

@ ডেনিস আমি কয়েকটি পরীক্ষার কেস যুক্ত করব।
isaacg

আমি আসলে এটি চেষ্টা করেছিলাম, তবে এটি পাইথ ( TypeError: can only concatenate list (not "str") to list) এর আমার সংস্করণে কার্যকর হয়নি । এটি সর্বশেষতম সংস্করণে দুর্দান্ত কাজ করে।
ডেনিস

@ ডেনিস হ্যাঁ, তালিকার বিধিটিতে যোগ করার বিষয়টি সম্প্রতি সম্প্রতি যুক্ত হয়েছিল।
isaacg

1

পিএইচপি - 72

ইনপুট সেট আপ করুন:

$i=[1,2,3,4,5];

এবং তারপরে প্রক্রিয়া:

$x=count($i)-1;if($x) {$i[$x]=" and ".$i[$x];}echo join($x>1?",":"",$i);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.