শিরোনাম মূলধনের জন্য থাম্বের নিয়ম


30

মতে এই সাইটের একটি সাধারণ নিয়ম দ্বারা বাঞ্ছনীয় মার্কিন সরকার মুদ্রণ অফিস স্টাইল ম্যানুয়াল হয়

একটি, আ, দি, এ, এ, অন, টু, আপ, এবং, যেমন, তবে, বা, এবং এবং না থেকে সমস্ত প্রকাশনা এবং দলিলের শিরোনামে সমস্ত শব্দের মূলধন করুন।

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


চ্যালেঞ্জ

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

  • প্রথম এবং শেষ শব্দটি মূলধনযুক্ত।
  • অন্যান্য সকল শব্দের মূলধনী হয়, ব্যতীত একটি , একটি , , , দ্বারা , জন্য , মধ্যে , এর , উপর , থেকে , আপ , এবং , যেমন , কিন্তু , বা , এবং না

ইনপুট স্ট্রিং অন্তত একটি শব্দ উপস্থিত থাকবে এবং প্রতিটি শব্দ থেকে অন্তত একটি চিঠি এবং শুধুমাত্র অক্ষর রয়েছে aকরার z

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

Testcases

"the rule of thumb for title capitalization" -> "The Rule of Thumb for Title Capitalization"
"programming puzzles and code golf" -> "Programming Puzzles and Code Golf"
"the many uses of the letter a" -> "The Many Uses of the Letter A"
"title" -> "Title"
"and and and" -> "And and And"
"a an and as at but by for in nor of on or the to up" -> "A an and as at but by for in nor of on or the to Up"
"on computable numbers with an application to the entscheidungsproblem" -> "On Computable Numbers With an Application to the Entscheidungsproblem"

1
শুরু / শেষ শব্দের বর্জন তালিকায় থাকলেও কী মূলধন করা উচিত? আপনার উদাহরণগুলি হ্যাঁ বলে, তবে অনুমানগুলি কেবলমাত্র শব্দগুলিকে তালিকায় না রাখলে এবং প্রথম / শেষ শব্দ সম্পর্কে কিছুই না বলে কেবলমাত্র মূলধনকে বলে। নোট করুন যে দুটি সম্ভাবনা স্বতন্ত্রভাবে পৃথক, একটি সাধারণ ফিল্টার এবং দ্বিতীয়টি (আক্ষরিক) প্রান্ত ক্ষেত্রে বিশেষ আচরণের প্রয়োজন।
CAD97

3
@ CAD97 মূলধনটির নিয়মগুলি দুটি বুলেট পয়েন্ট, কোট নয়। এবং প্রথম বুলেট পয়েন্টটি বলে যে "প্রথম এবং শেষ শব্দটি মূলধন হয়" " এবং দ্বিতীয়টি বলে যে "অন্য সমস্ত শব্দকে মূলধন করা হয় ... ব্যতীত ..." অর্থ প্রথম এবং শেষ শব্দ সর্বদা মূলধন হয়।
লাইকনি

আমি একরকম মিস করেছি। তবুও, স্পষ্ট করার জন্য ধন্যবাদ।
CAD97

আমি নিশ্চিত নই যে প্রতিটি শব্দে কমপক্ষে একটি বর্ণ রয়েছে তা নির্দিষ্ট করে বলা দরকার। :)
ডেভিড কনরাড

উত্তর:


11

পাইথন 2, 118 বাইট

মা দেখুন, কোন রেইজেক্স!

for w in`input()`.split():print[w.title(),w][`w`in"'a'an'and'as'at'the'by'but'for'nor'in'of'on'or'to'up'"].strip("'"),

ইনপুট অবশ্যই উদ্ধৃতিতে আবৃত করা উচিত। আউটপুটটির একটি পিছনের স্থান এবং কোনও পেছনের নতুন লাইন নেই (আমি ধরে নিলাম এটি ঠিক আছে)। আইডিয়নে সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

a or anআমাদের উদাহরণ হিসাবে ইনপুট গ্রহণ করা যাক ।

পাইথন 2 এর ব্যবহার `x`জন্য শর্টকার্ট repr, আমরা একক উদ্ধৃতি ইনপুট মোড়ানো: 'a or an'। তারপরে আমরা শ্বেত স্পেসে বিভক্ত হয়ে শব্দগুলির উপরে পুনরাবৃত্তি করি।

লুপের ভিতরে, আমরা repr আবার নিই । প্রথম এবং শেষ শব্দের জন্য, এটি দেয় "'a"এবং "an'"। অন্য কথায়, এটি দেয় 'or'। আমরা যদি শব্দগুলির উত্তরোত্তর প্যাটার্ন মাপসই করে এবং সংক্ষিপ্ত-শব্দের তালিকায় থাকে তবে এটি মূলধনটি এড়াতে চাই। সুতরাং আমরা শব্দটির তালিকাটিকে স্ট্রিং হিসাবে উপস্থাপন করতে পারি "'a'an'...'up'"এবং জানতে পারি যে reprকোনও সংক্ষিপ্ত শব্দের একটি স্তর থাকবে।

`w` in "..."একটি বুলিয়ান মান দেয়, যা আমরা তালিকায় সূচকের উদ্দেশ্যে 0বা হিসাবে ব্যবহার করতে পারি । সংক্ষেপে, আমরা শিরোনাম-কেস শব্দটি যদি এটি শুরুতে হয়, শেষে হয় বা সংক্ষিপ্ত শব্দের তালিকায় না থাকে। অন্যথায়, আমরা একা এটি ছেড়ে। ভাগ্যক্রমে, এখনও ইনপুট মত হিসাবে প্রত্যাশিত হিসাবে কাজ করে ।1[w.title(), w]title()'a

পরিশেষে, আমরা শব্দটি থেকে যে কোনও একক উদ্ধৃতি সরিয়ে ফেলি এবং এটি একটি পিছনের স্থান সহ মুদ্রণ করি।


8

05AB1E , 68 61 বাইট

আদনানকে ধন্যবাদ 7 বাইট সংরক্ষণ করা

™ð¡Dg<UvyN__NXQ_“a€¤€€€›€‹€‡€†€‚€‰€„€¾€ƒ€œ€³€—š¯“#™yå&&il})ðý

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

ব্যাখ্যা

“a€¤€€€›€‹€‡€†€‚€‰€„€¾€ƒ€œ€³€—š¯“হিসাবে অনুবাদ করা একটি অভিধান স্ট্রিং a an the at by for in of on to up and as but or nor

™                          # title case input string
ð¡                         # split on spaces
Dg<U                       # store index of last word in X

vy                         # for each word
  N__                      # is it not first index?
     NXQ_                  # is it not last index
         “...“             # the compressed string 
              #            # split on spaces
               ™           # convert to title case
                yå         # is current word in this list?
                  &&       # and the 3 previous conditions together
                    il     # if all are true, convert to lower case
                      }    # end loop
)ðý                        # wrap stack in list and join by spaces

2
এটি সম্পূর্ণরূপে অপরিজ্ঞাত অক্ষরগুলির একটি ছোট স্ট্রিংয়ের সাথে আপনি কী অর্জন করতে পরিচালিত তা আমাকে বিস্মিত করার জন্য কখনই বিরতি দেয় না। দেখে মনে হচ্ছে এটি তখন কার্যকর হয় :) +1
এলপ্যাড্রো

বাঃ! আমি খুব কাছাকাছি, এবং আমি কোনও চরিত্র শেভ করার উপায় খুঁজে পাচ্ছি না।
mbomb007

@ এমবিম্ব ২০০7: জেলি, এমএটিএল বা সূচকগুলিতে ফাংশন প্রয়োগ করতে পারে এমন কোনও অন্য ভাষা আসার আগে তাড়াতাড়ি করা ভাল এবং এইটাকে পরাজিত করে: আমিও সংক্ষেপিত রেজেক্স সহ একটি ভাষা মনে করি বলে মনে করি তবে এটি কী বলা হয়েছিল তা মনে করতে পারছি না। এটি এত দীর্ঘ যে এটি এখনও গল্ফযোগ্য হতে পারে।
এমিগেনা

1
জন্য 62 বাইট :)
আদনান

@ আদনান: আমি এটি শুরু করেছিলাম তবে কেবল তিন-চর শব্দ (যা শেষ হয়েছে) দিয়ে, তবে আমি 2-চর শব্দগুলিও গ্রহণ করা বিবেচনা করিনি ... aপরিবর্তে €…অতিরিক্ত বাইট সংরক্ষণ করার পরিবর্তে যদি নেতৃত্ব দেওয়া হয় এটি সহ :) ধন্যবাদ!
এমিগানা

7

জিএনইউ সেড 81 74 73 বাইট

-R এর জন্য +1 অন্তর্ভুক্ত

s/\b./\u&/g
:;s/.(And?|A[st]?|The|By|But|[FN]or|In|O[fnr]|To|Up) /\L&/;t

প্রথম লাইন প্রতিটি শব্দের প্রথম অক্ষরকে মূলধন করে। দ্বিতীয়টি প্রয়োজনীয় সমস্ত শব্দকে ছোট হাতের কাছে ফিরে যায়।

অনলাইনে চেষ্টা করে দেখুন!


6

রেটিনা, 69 66 বাইট

প্রতিটি শব্দের প্রথম অক্ষর মূলধন করুন, তারপর নির্বাচিত শব্দগুলি প্রথম বা শেষ শব্দ না হলে ছোট হাতের অক্ষরে পরিবর্তন করুন। শেষ লাইনের শেষে একটি জায়গা রয়েছে।

T`l`L`\b.
+T`L`l` (And?|A[st]?|The|By|But|[FN]or|In|O[fnr]|To|Up) 

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

এটি .প্রথম স্থানের পরিবর্তে একটি দিয়েও কাজ করে ।

একই দৈর্ঘ্যের সাথে অনেকগুলি রেজিেক্স রয়েছে, তবে আমি এটি আর ছাঁটাই করার কোনও উপায় খুঁজে পাচ্ছি না ...


(এই পদ্ধতিটি পাইপের মধ্যেও 69 বাইট, তবে আমি +এটিকে ছোট করার জন্য কৌশলটি ব্যবহার করতে পারি না ))
DLosc

@DLosc ধন্যবাদ ইড্ক কেন আমি তা দেখিনি। আমি কাছাকাছি ছিলাম.
mbomb007

3

জাভাস্ক্রিপ্ট (ES6), 141 138 135 133 বাইট

Mbomb007 ধন্যবাদ 3 বাইট সংরক্ষণ করা

s=>s.replace(/(\w+)( ?)/g,(a,w,n,i)=>i&&n&&/^(a[nst]?|the|by|in|of|on|to|up|and|but|[fn]?or)$/.exec(w)?a:a[0].toUpperCase()+a.slice(1))

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


3

জেলি , 58 বাইট

“Ð/ṃƇ¬þṄẊƙ€,⁽ṙƬ®OṪJ"ɦ3×kf3Ṙç%ġu’b26ịØaṣ”z
e€¢¬T;2Ḷ¤
ḲŒtǦK

TryItOnline! বা সমস্ত পরীক্ষা চালান

কিভাবে?

শব্দের পৃথক করে স্পেস সহ একটি সংকুচিত স্ট্রিং 47বাইট হবে, এটি বিভক্ত করে 1বাইটের জন্য 48বাইট খরচ হয় ।

দৈর্ঘ্যের শব্দের দুটি অপরিবর্তিত সংক্ষিপ্ত স্ট্রিং 2এবং 3(একের শেষে 'ক' দিয়ে) যথাক্রমে 40বাইটগুলির 2জন্য প্রতিটি বিভক্ত এবং সেগুলিতে 1যোগদানের জন্য বাইটস প্লাস হবে 45

এক বেস 250 নম্বর হিসাবে নিচে আলোচনা করা হয়েছে 32বাইট, তারপর 3বেস 26 রূপান্তর, 3ছোট হাতের অক্ষর ব্যবহার বর্ণমালা মধ্যে সূচক এবং 3অব্যবহৃত চরিত্র তে এটি বিভক্ত করতে, 'z'জন্য 41বাইট।

সুতরাং, শব্দের মূলধন না করার জন্য অনুসন্ধানটি এইভাবে
“Ð/ṃƇ¬þṄẊƙ€,⁽ṙƬ®OṪJ"ɦ3×kf3Ṙç%ġu’
তৈরি হয়েছিল:

এই শব্দগুলি ধরুন এবং একটি বিভাজকের সাথে তাদের সাথে যোগ দিন:
s="a an the at by for in of on to up and as but or nor"

পরবর্তী ট্যাগ 'a'যেমন 1, 'b'যেমন 2যেমন বিভাজক সঙ্গে 0:

alpha = ' abcdefghijklmnopqrstuvwxyz'
x = [alpha.index(v) for v in s]
x
[1,0,1,14,0,20,8,5,0,1,20,0,2,25,0,6,15,18,0,9,14,0,15,6,0,15,14,0,20,15,0,21,16,0,1,14,4,0,1,19,0,2,21,20,0,15,18,0,14,15,18]

এটিকে একটি বেস 26সংখ্যায় রূপান্তর করুন (ব্যবহৃত শেষ বর্ণটি 'y'পৃথককারীটির জন্য একটি অঙ্কের চেয়ে বেশি, এর জন্য পাইথন কোডটি হ'ল:
n=sum(v*26**i for i,v in enumerate(x[::-1]))

এটিকে একটি বেস 250নম্বরে রূপান্তর করুন (অঙ্কগুলির জন্য একটি তালিকা ব্যবহার করে):

b=[]
while n:
    n,d = divmod(n,250)
    b=[d]+b
b
[16,48,220,145,8,32,202,209,162,13,45,142,244,153,9,80,207,75,35,161,52,18,108,103,52,205,24,38,237,118]

জেলির কোডপেজের সেই সূচীতে অক্ষরগুলি অনুসন্ধান করুন:

codepage = '''¡¢£¤¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻạḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż«»‘’“”'''
r=''.join(codepage[i-1] for i in b)
r
'Ð/ṃƇ¬þṄẊƙ€,⁽ṙƬ®OṪJ"ɦ3×kf3Ṙç%ġu'

(দ্রষ্টব্য: যেহেতু প্রকৃত বাস্তবায়ন দ্বিখণ্ডক, যদি bকোনও 0অঙ্ক থাকে তবে তার প্রথমে প্রথমে বহন করা প্রয়োজন)

বাকিটা:

ḲŒtǦK - Main link: title string
Ḳ      - split on spaces
    ¦  - apply to indexes
   Ç   -     given by calling the last link (1) as a monad (with the split title string)
 Œt    -     title case (first letter of each (only) word to upper case)
     K - join on spaces

e€¢¬T;2Ḷ¤ - Link 1, find indexes to capitalise: split title string
e€        - is an element of, for €ach
  ¢       - the result of calling the last link (2) as a nilad
   ¬      - logical not
    T     - get the truthy indexes (indexes of words that are not in the list)
     ;    - concatenate with
        ¤ - nilad followed by link(s) as a nilad
      2Ḷ  - range(2) -> [0,1]
                (we always want to capitalise the first index, 1, and the last index, 0)

“Ð/ṃƇ¬þṄẊƙ€,⁽ṙƬ®OṪJ"ɦ3×kf3Ṙç%ġu’b26ịØaṣ”z - Link 2, make the word list: no arguments
“Ð/ṃƇ¬þṄẊƙ€,⁽ṙƬ®OṪJ"ɦ3×kf3Ṙç%ġu’          - the base 250 number
                                b26       - convert to base 26
                                   ị      - index into
                                    Øa    - lowercase alphabet
                                      ṣ   - split on
                                       ”z - literal 'z' (the separator 0 indexes into `z`)

2

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

@ টিটাস দ্বারা 10 টি বাইট সংরক্ষণ করা হয়েছে

foreach($w=explode(" ",$argv[1])as$k=>$v)echo" "[!$k],$k&&$k+1<count($w)&&preg_match("#^(a[snt]?|and|[fn]or|up|by|but|the|to|in|o[rnf])$#",$v)?$v:ucfirst($v);

পূর্ববর্তী সংস্করণ পিএইচপি, 174 বাইট

foreach($w=explode(" ",$argv[1])as$k=>$v)$k&&$k+1<count($w)&&in_array($v,[a,an,the,at,by,"for",in,of,on,to,up,"and","as",but,"or",nor])?:$w[$k]=ucfirst($v);echo join(" ",$w);

লুপে প্রতিধ্বনি 10 বাইট সংরক্ষণ করে:foreach(...)echo" "[!$k],(condition)?$v:ucfirst($v);
টাইটাস

2

টিআই-বেসিক, 295 + 59 + 148 = 502 বাইট

এখন আপনি আপনার ক্যালকুলেটরটি মূলধন করতে পারেন। স্কুলের জন্য দুর্দান্ত :)

প্রধান প্রোগ্রাম, 295 বাইট

মূলত, ম্যাচিং শব্দ কৌতুক তাই সব Aহয়ে পড়ে না aব্যবধান সহ ঘিরা করতে যেমন প্রতিস্থাপন হয় " A "সঙ্গে " a "। এটি স্বয়ংক্রিয়ভাবে এটিকেও তৈরি করে যাতে প্রথম এবং শেষের শব্দগুলি মূলধন হয়ে যায়, কারণ তাদের উভয় পক্ষে কোনও স্থান নেই এবং এইভাবে কোনও শব্দের সাথে মেলে না। (জিনিয়াস, ঠিক? এবং সুপার দীর্ঘ কারণ ছোট হাতের অক্ষর দুটি করে বাইট হয় ...)

"("+Ans+")→Str1
"@A ~ a@An ~ an@The ~ the@At ~ at@By ~ by@For ~ for@In ~ in@Of ~ of@On ~ on@To ~ to@Up ~ up@And ~ and@As ~ as@But ~ but@Or ~ or@Nor ~ nor@→Str2
For(I,2,length(Ans
If "@"=sub(Str2,I-1,1
Then
" "+Str1+"~"+sub(Str2,I,inString(Str2,"@",I)-I)+" "
prgmQ
Ans→Str1
End
End

সাবপ্রগ্রাম ( prgmQ), 59 বাইট:

Ans→Str9
inString(Ans,"~
sub(Str9,Ans,length(Str9)-Ans+1→Str8
Str9
prgmR
Repeat Str9=Ans+Str8
Ans+Str8→Str9
prgmR
End

সাবপ্রগ্রাম ( prgmR), 148 বাইট:

Ans→Str0
inString(Ans,"~→Z
inString(Str0,"~",Ans+1→Y
inString(sub(Str0,1,Z-1),sub(Str0,Z+1,Ans-Z-1→X
sub(Str0,1,-1+inString(Str0,"~
If X
sub(Str0,1,X-1)+sub(Str0,Y+1,length(Str0)-Y)+sub(Str0,X+length(sub(Str0,Z+1,Y-Z-1)),Z-X-length(sub(Str0,Z+1,Y-Z-1

পিএস ~টোকেনকে উপস্থাপন করে 0x81এবং টোকেনকে @উপস্থাপন করে 0x7F, এখানে আরও শিখুন ।


2

জাভা 7, 271 259 258 বাইট

String c(String x){String a[]=x.split(" "),s=" ",r=w(a[0])+s;for(int i=0,l=a.length-1;i<l;r+=(!s.matches("^(a[nst]?|the|by|in|of|on|to|up|and|but|[fn]?or)$")|i==l?w(s):s)+" ")s=a[++i];return r;}String w(String w){return(char)(w.charAt(0)-32)+w.substring(1);}

অবরুদ্ধ এবং পরীক্ষার কোড:

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

class M{
  static String c(String x){
    String a[] = x.split(" "),
           s = " ",
           r = w(a[0]) + s;
    for(int i = 0, l = a.length-1; i < l; r += (!s.matches("^(a[nst]?|the|by|in|of|on|to|up|and|but|[fn]?or)$") | i == l
                                                 ? w(s)
                                                 : s)   + " "){
      s = a[++i];
    }
    return r;
  }

  static String w(String w) {
    return (char)(w.charAt(0) - 32) + w.substring(1);
  }

  public static void main(String[] a){
    System.out.println(c("the rule of thumb for title capitalization"));
    System.out.println(c("programming puzzles and code golf"));
    System.out.println(c("the many uses of the letter a"));
    System.out.println(c("title"));
    System.out.println(c("and and and"));
    System.out.println(c("a an and as at but by for in nor of on or the to up"));
    System.out.println(c("on computable numbers with an application to the entscheidungsproblem"));
  }
}

আউটপুট:

The Rule of Thumb for Title Capitalization 
Programming Puzzles and Code Golf 
The Many Uses of the Letter A 
Title 
And and And 
A an and as at but by for in nor of on or the to Up 
On Computable Numbers With an Application to the Entscheidungsproblem 

1

গ্রোভী, 131 129

কারুস্কোমপুটিংয়ের জন্য দুটি বাইট সংরক্ষণ করা হয়েছে

{it.split()*.with{a->a in "a an the at by for in of on to up and as but or nor".split()?a:a.capitalize()}.join(" ").capitalize()}

ভাল, আমি 137 এ ছিল; তুমি জিতেছ. এটি সরান i->এবং it2 বাইট সংরক্ষণ করতে ব্যবহার করুন । {it.split()*.with{a->a in "a an the at by for in of on to up and as but or nor".split()?a:a.capitalize()}.join(" ").capitalize()}
ম্যাজিক অক্টোপাস উরন

1
আমি গ্রোভিকে চিনি না তবে এটি কি প্রথম এবং শেষ শব্দটির সত্যই অর্থায়ন করে?
এমিগানা

@ এমিগনা একটি শব্দ দিয়ে শুরু করে চূড়ান্ত মূলধনকে কভার করে।
ম্যাজিক অক্টোপাস উরন

@ এমিগনা সত্যই নয়, আমি সেই প্রয়োজনীয়তাটি মিস করেছি (যে শেষ শব্দটির মূলধন হওয়া দরকার)। আমার অ্যাঞ্জার সামঞ্জস্য করা দরকার।
ক্রিজিসটফ আতাসিক

দুটি ব্যবহার .capitalize()অনেকগুলি বাইট নেয়। আপনি একটি উপাধি করতে পারেন একটি ছোট উপায় আছে .capitalize()?
সাইওস

1

সি #, 305 বাইট

উন্নতির জন্য প্রচুর জায়গা এখনও রয়েছে তবে আপনি এখানে যান:

s=>{;var b=s.Split(' ');b[0]=((char)(b[0][0]-32))+b[0].Substring(1);int i=0,n=b.Length;for(;++i<n;)if(!"a,an,the,at,by,for,in,of,on,to,up,and,as,but,or,nor".Split(',').Contains(b[i]))b[i]=((char)(b[i][0]-32))+b[i].Substring(1);b[n-1]=((char)(b[n-1][0]-32))+b[n-1].Substring(1);return string.Join(" ",b);};

1

রুবি, 123 117 111 102 বাইট

->s{s.gsub(/ .|^./,&:upcase).gsub(/ (A[nts]?|The|By|In|To|Up|And|But|[NF]or|O[rnf])(?= )/,&:downcase)}

সমস্ত সম্পাদনার জন্য দুঃখিত - এটি শেষ হওয়া উচিত।


1

পাইথন, 177 বাইট

বাইট সংরক্ষণের উদ্দেশ্যে ফাংশন ফর্ম্যাটে বিতরণ করা হয়েছে। এটি কোনও বিশেষভাবে প্রতিযোগিতামূলক উত্তর নয়, তবে এটি এমন একটি যা প্রয়োজন repr()বা regexকৌশল নয়। এটি ভার্সন-অজোনস্টিকও; এটি পাইথন 2 বা 3 এর সাথে কাজ করে।

যদিও এটি সম্ভবত খুব বিধি-বিধানের সমাধান।

def t(s):
 w="a an the the at by for in of on to up and as but or nor".split()
 l=[(s.title(),s)[s in w]for s in s.split()]
 for x in(0,-1):l[x]=l[x].title()
 return' '.join(l)

1

পিএইচপি, 109 142 বাইট

<?=preg_replace_callback("# (A[snt]?|And|[FN]or|Up|By|But|The|To|In|O[rnf])(?= )#",function($m){return strtolower($m[0]);},ucwords($argv[1]));

ব্যবহারকারীর একটি সংযোজন5917´´ এবং mbomb007´ উত্তর।

প্রতিটি শব্দের প্রথম অক্ষর বড় হয়, তারপরে ফাঁকা জায়গাগুলি থেকে তালিকা থেকে সমস্ত শব্দকে ছোট করে ফেলে।
দুর্ভাগ্যক্রমে, কলব্যাকটি সম্পূর্ণ সেটটিতে পরিচালনা করতে হবে; এর দাম 29 বাইট costs


এটি এর পক্ষে কার্যকর হয় নাa an and as at but by for in nor of on or the to up
Jurg Hnlsermann

1

রেকেট 353 বাইট

(define(cap i)(set! i(string-append i))(define c(string-ref i 0))(string-set! i 0(if(char-upper-case? c)c(integer->char(-(char->integer c)32))))i)
(let*((ex(list"a""an""the""at""by""for""in""of""on""to""up""and""as""but""or""and""nor"))(sl(string-split s)))
(string-join(for/list((i sl)(n(in-naturals)))(cond[(= n 0)(cap i)][(member i ex)i][(cap i)]))))

Ungolfed:

(define (f s)

  (define (cap i)                 ; sub-fn to capitalize first letter of a word
    (set! i (string-append i))
    (define c (string-ref i 0))
    (string-set! i 0
                 (if (char-upper-case? c)
                     c
                     (integer->char (-(char->integer c)32))))
    i)

  (let* ((ex (list "a""an""the""at""by""for""in""of""on""to""up""and""as""but""or""and""nor"))
         (sl (string-split s)))
    (string-join
     (for/list
         ((i sl)
          (n (in-naturals)))
       (cond
         [(= n 0) (cap i)]
         [(member i ex) i]
         [(cap i)]
         )))))

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

(f "the rule of thumb for title capitalization")

আউটপুট:

"The Rule of Thumb for Title Capitalization"

1

জাভা 7, 431 317 311 বাইট

114 বাইটের জন্য @ কেভিন ক্রুজসেনকে ধন্যবাদ । 6 র বাইট
সংরক্ষণ করার জন্য @ রসলুপকে ধন্যবাদ

String c(String s){String v="",x,l[]=s.split(" "),b[]={"a","an","the","at","but,"by","for","in","of","on","to","‌​up","as","or","and","nor"};int i=0,f=0,z=0;for(String c:l){for(f=0;f<b.length;z=c.equals(b[f++])|z>0?1:0);x=(char)(c.charAt(0)-32)+c.substring(1);v+=(z>0?i<1|i>l.length-2?x:c:x)+" ";i++;}return v;}

ungolfed

250 বাইট উপরে উপরে প্রথম উত্তর

 static String c(String s) {
      String v = "", x, l[] = s.split(" "),
b[]={"a","an","the","at","by","for","in","of","on","to",
                                         "‌​up","and","as","or","nor","but"};
    int i , f , z = i = f = 0;
    for (String c : l) {

   for (f = 0; f < b.length; z = c.equals( b[f++] ) | z > 0 ? 1 : 0);
        x = (char)(c.charAt(0) - 32) + c.substring(1);

        v += (z > 0 ? i < 1 | i > l.length - 2 ? x : c : x) + " ";
        i++;
   }
    return v;
    }

1
একটি মন্তব্যে সংক্ষিপ্তসারটি খুব বেশি ছিল, তবে আপনি এটিতে গল্ফ করতে পারেন: String f(String s){String v="",x,l[]=s.split(" "),b[]={"a","an","the","at","by","for","in","of","on","to","up","and","as","but","or","and","nor"};int i=0,f=0,z=0;for(String c:l){for(f=0;f<b.length;z=c.equals(b[f++])|z>0?1:0);x=(char)(c.charAt(0)-32)+c.substring(1);v+=z>0?i<1|i++==l.length-1?x:c:x)+" ";}return v;}( ৩১৪ বাইট ) আমি পরবর্তী সময়ের জন্য টিপস হিসাবে আমি কী পরিবর্তন করেছি তা একবার দেখে নেওয়ার পরামর্শ দিই। :) পিএস: আমি একটি ভিন্ন পদ্ধতির ( 259 বাইট ) সহ একটি উত্তর পোস্ট করেছি ।
কেভিন ক্রুইজসেন

1
বিশেষত যে জিনিসগুলির c.substring(0,1).toUpperCase()+c.substring(1,c.length())+" "জন্য আপনি দু'বার করেছেন তা আপনাকে এটিকে কোনওভাবে পুনরায় ব্যবহার করার বিষয়ে ভাবতে বাধ্য করা উচিত। এবং আপনার মতো সম্মিলিত সূচনাটি সঠিকভাবে দিয়েছিল intতবে কিছু কারণে এটির সাথে নয় String। এছাড়াও, booleanযখন আপনি int0 বা 1 হিসাবে সঞ্চয় করতে পারেন এবং তারপরে এটি পরীক্ষা করতে পারেন তখন অতিরিক্ত প্রয়োজন নেই >0। এবং আমি বন্ধনী এবং breakযথাসম্ভব এড়াতে চেষ্টা করব ; for(f=0;f<b.length;z=c.equals(b[f++])|z>0?1:0);আমি যেমন দেখিয়েছি , সাধারণত এগুলি থেকে মুক্তি পাওয়ার কৌশল রয়েছে । :)
কেভিন ক্রুইজসেন

1
সর্বদা সহায়ক হওয়ার জন্য শেখার জন্য অনেক ধন্যবাদ এবং ধন্যবাদ (দীর্ঘজীবী নেদারল্যান্ড;)
নোট

1
ওহ, আমি একটি অনুলিপি-পেস্ট ত্রুটি করেছি .. এটি হওয়া উচিত String c(String s){String v="",x,l[]=s.split(" "),b[]={"a","an","the","at","by","for","in","of","on","to","up","and","as","but","or","and","nor"};int i=0,f=0,z=0;for(String c:l){for(f=0;f<b.length;z=c.equals(b[f++])|z>0?1:0);x=(char)(c.charAt(0)-32)+c.substring(1);v+=(z>0?i<1|i++>l.length-2?x:c:x)+" ";}return v;}এবং কোনও সমস্যা নেই। :) আমি যখন কোড-গল্ফিংয়ে নতুন ছিলাম তখনও আমি অনেক কিছু শিখেছি। আমি শিখেছি এমন প্রতিটি সাধারণ কোডগল্ফ টিপ সহ একটি তালিকা তৈরি করি এবং কখনও কখনও এটি দেখি / আপডেট করি। তবে আমার কোডটি এখনও অন্যদের দ্বারা প্রচুর গল্ফ হয়।
কেভিন ক্রুইজসেন

1
স্ট্রিং বি [] তে 2 'এবং' ঠিক আছে কি?
রোজলুপি

1

পিএইচপি, 117 118 112 বাইট

<?=strtr(ucwords(preg_replace("# (?=(a[snt]?|and|[fn]or|up|by|but|the|to|in|o[rnf]) )#","!",$argv[1])),'!',' ');

এর আচরণ ব্যবহার করে ucwords()এবং প্রাসঙ্গিক শব্দগুলি যে স্পেস দ্বারা ঘিরে থাকে তার পরে পালানোর অক্ষরগুলি মুছে দেয় es

আমি কপি (a[snt]?|and|[fn]or|up|by|but|the|to|in|o[rnf]) জার্গ হালসারম্যানের উত্তরটি থেকে তবে পদ্ধতির সম্পূর্ণ ভিন্ন হওয়ায় আমি এটিকে পৃথক উত্তর হিসাবে পোস্ট করছি।

সম্পাদনা: তিতাসের দ্বারা বাগ লক্ষ্য করা গেছে, এটির জন্য 1 বাইট মূল্য নির্ধারণ করা হচ্ছে। এছাড়াও: 6 টি বাইট স্ট্রাইট সম্পর্কে তার সহায়ক মন্তব্যে ধন্যবাদ সংরক্ষণ করেছে


strtrপরিবর্তে 6 বাইট সংরক্ষণ করুন str_replace। অথবা এইচটিএমএল আউটপুট দিয়ে শব্দগুলি প্রিপেন্ড করুন <>এবং ছেড়ে দিন the str_replaceuse
তিতাস

কিছু ক্ষেত্রে আপনি এর preg_filterপরিবর্তে ব্যবহার করতে পারেন preg_replace। আমি আপনার সমাধান দিয়ে চেষ্টা করে
দেখিনি

রেজেক্সটি সারিবদ্ধভাবে দুটি শব্দ থেকে কাজ করবে না; পরীক্ষা nice try for a start। দৃ as়তার সাথে একটি স্পেস প্রতিস্থাপনের সাথে এটি সমাধান হয় (+4 বাইট)।
তিতাস

দুর্ভাগ্যক্রমে পরীক্ষার ক্ষেত্রে preg_filterব্যর্থ হবে title, কিছুই ফিরে।
ব্যবহারকারী59178

1

খাঁটি bash - 253

(কোনও বাহ্যিক প্রোগ্রাম বলা হয় না) - ব্যাশ ভি 4 দরকার

declare -A b;for x in A An The At By For In Of On To Up And As But Or Nor;do b[$x]=1;done
while read -a w;do
n=${#w[@]};o[0]=${w[0]^}
for((i=1;i<n-1;i++)){
g=${w[$i]^};((${b[$g]}))&&o+=(${g,,})||o+=($g);}
((n>1))&&o[$n]=${w[-1]^}
echo ${o[@]};o=()
done

মন্তব্য সঙ্গে সাধারণ দেখুন

#create the "blacklist"
declare -A b
for w in A An The At By For In Of On To Up And As But Or Nor
do
    b[$x]=1
done

# logic:
# read each line (split by words) into array
# and each word is assigned capitalized to the new output array
# but the blacklisted ones

#read each line to array w (split on spaces)
while read -a w
do
    n=${#w[@]}         # get the number of words
    o[0]=${w[0]^}          # copy the capitalized word1
    for((i=1 ; i<n-1 ; i++)) { # loop over 2 up to last -1 words

        g=${w[$i]^}    # for the given word
        # check if it is in the blacklisted ones
        # if yes - convert to lowercase, if not leave as it is
        # and append to the output array
        (( ${b[$g]} )) && o+=(${g,,}) || o+=($g)
    }
    # capitalize the last word if here is more words
    (( n>1 )) && o[$n]=${w[-1]^}
    # make a line from the words
    echo ${o[@]}
    o=() #cleanup
done

আউটপুট

Title
And and And
The Rule of Thumb for Title Capitalization
Programming Puzzles and Code Golf
The Many Uses of the Letter A
A an and as at but by for in nor of on or the to Up
On Computable Numbers With an Application to the Entscheidungsproblem

1

জাপট , 71 বাইট

£`a  e  by f     up d  ¿t  n`¸aX >0©Y¦0©YĦZl ?X:Xg u +XÅ}S

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

ব্যাখ্যা:

£`a  e  by f     up d  ¿t  n`¸aX >0©Y¦0©YĦZl ?X:Xg u +XÅ}S
£`...`qS aX >0&&Y!=0&&Y!=UqS l -1?X:Xg u +Xs1}S

£                                            }S   // Split at spaces and map each item X by this function:
 `...`                                            //  Backticks are used to decompress strings
      qS                                          //  Split the decompressed string at spaces.
         aX >J                                    //  If this contains X
              &&Y!=0                              //  and the index is non-zero (it's not the first word)
                    &&Y!=UqS l -1                 //  and the index is not the length of the input -1 (it's not the last word),
                                 ?X               //  return X.
                                   :Xg u +Xs1     //  Else, return X capitalized. (Literally X[0].toUpperCase() + X.slice(1))
                                             }S   // Rejoin with spaces

আমার প্রিয় জাপট বৈশিষ্ট্যগুলির মধ্যে একটি এটির স্ট্রিং সংক্ষেপণ যা শোক লাইব্রেরি ব্যবহার করে ।

আপনি স্ট্রিংটি Oc"{string}"→ এ মোড়ানো করে সংকোচন করতে পারেন →Oc"a an the at by for in of on to up and as but or nor"

তারপরে এটি ব্যাকটিকস বা with দিয়ে সংক্ষেপণ Od"{compressed string}"Od"a e by f up d ¿t n"


-Sপরে এই চ্যালেঞ্জ পোস্ট করা হয়েছে পতাকা যোগ করা হয়েছিল, তাই আপনার বর্তমান সমাধান অ প্রতিদ্বন্দ্বী নেই। যাইহোক, আমি মনে করি আপনি এটি করতে পারেন £...+XÅ}Sযা একই বাইট-কাউন্টের জন্য প্রতিযোগিতা করবে ( এটি অনলাইনে চেষ্টা করুন! )
ETH প্রোডাকশনগুলি ২৩:৩০

শোক কীভাবে আপনার মতে জেলির অভিধান সংক্ষেপের সাথে তুলনা করে?
রবার্ট ফ্রেজার

জারির তুলনায় @ রবার্টফ্রেজার, ইংরেজী শব্দের স্ট্রিং সংকোচন করা খুব ভাল নয়, তবে এটি মাঝে মাঝে ছোট ছোট অক্ষরের অক্ষরে অক্ষরে অক্ষরে সংক্ষেপণ করা খুব ভাল।
ETH প্রোডাকশনগুলি

1

খাঁটি bash - 205 192 181 বাইট

tc(){
while read -a x
do x=(${x[@]^})
for ((i=1;i<${#x[@]}-1;i++))
do
case "${x[i]}" in
A|A[nts]|The|By|[FN]or|In|O[fnr]|To|Up|And|But)x[i]=${x[i],};;
esac
done
echo ${x[@]}
done
}

ভালো লেগেছে jm66 এর উত্তর tc স্ট্যান্ডার্ড ইনপুট গ্রহণ করে।


0

আসলে , 79 বাইট

' ,ÿsd@p@`;0"A0An0The0At0By0For0In0Of0On0To0Up0And0As0But0Or0Nor"síu'ù*ƒ`Moq' j

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

ব্যাখ্যা:

' ,ÿsd@p@`;0"longstring"síu'ù*ƒ`Moq' j
' ,ÿs                                   title case input, split on spaces
     d@p@                               pop first and last words to stack
         `;0"longstring"síu'ù*ƒ`M       for every word except the first and last:
          ;0"longstring"s                 duplicate word, split the long string on 0s
                         íu               1-based index of word in list (0 if not found)
                           'ù*            "ù"*(index)
                              ƒ           execute the resulting string as a function (lowercases word if it's in the list)
                                 oq' j  put the first and last word back in the list, join with spaces

0

ব্যাচ, 323 বাইট

@echo off
set s=
for %%w in (@%*@)do call:w %%w
echo%s%
exit/b
:w
for %%s in (a an the at by for in of on to up and as but or nor)do if %%s==%1 set s=%s% %1&exit/b
set w=%1
set w=%w:@=%
set f=%w:~0,1%
for %%c in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)do call set f=%%f:%%c=%%c%%
set s=%s% %f%%w:~1%

মন্তব্য সহ:

@echo off
rem Start with an empty output string
set s=
rem Wrap the parameters in @ signs to identify the first and last words 
for %%w in (@%*@) do call :w %%w
rem Ignore the leading space when printing the result
echo%s%
exit/b
:w
rem Check whether this is a word that we don't change
for %%s in (a an the at by for in of on to up and as but or nor) do if %%s==%1 set s=%s% %1&exit/b
set w=%1
rem Delete any @ signs from the first and last words
set w=%w:@=%
rem Get the first character
set f=%w:~0,1%
rem Case insensitively replace each upper case letter with itself
for %%c in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set f=%%f:%%c=%%c%%
rem Concatenate with the rest of the word
set s=%s% %f%%w:~1%
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.