एक पहचान बनाना


24

लक्ष्य

आपका लक्ष्य एक ऐसा कार्यक्रम बनाना है जो किसी इनपुट को उसके संक्षिप्त नाम में परिवर्तित करता है। आपके इनपुट में केवल अक्षर और स्थान होने की गारंटी है। इनपुट में शब्दों के बीच एक स्थान होगा। आपको इनपुट के संक्षिप्त विवरण को आउटपुट करना होगा।

नियम

  • आपका कोड केस संवेदी नहीं हो (उदाहरण के लिए कर सकते हैं fooऔर Fooएक ही हैं)
  • आपके कोड को निम्नलिखित शब्दों को अनदेखा करना चाहिए और उन्हें संक्षिप्त में नहीं रखना चाहिए: and or by of
  • आप यह नहीं मान सकते कि शब्द सभी लोअरकेस हैं।
  • वर्णों के बीच कोई पृथक्करण नहीं होने के साथ, उत्पादन पूरी तरह से पूंजीकृत होना चाहिए।
  • एक अनुगामी न्यूलाइन स्वीकार किया जाता है लेकिन आवश्यक नहीं है।
  • यदि आपकी भाषा में एक संक्षिप्त रूप से निर्मित फ़ंक्शन है, तो आप इसका उपयोग नहीं कर सकते हैं

उदाहरण

(इनपुट / आउटपुट समूहीकृत)

United States of America
USA

Light Amplification by Stimulation of Emitted Radiation
LASER

united states of america
USA

Jordan Of the World
JTW

स्कोरिंग

यह एक चुनौती है, इसलिए सबसे छोटा कोड जीतता है।

लीडरबोर्ड

var QUESTION_ID=75448,OVERRIDE_USER=8478;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


मैंने 2 परीक्षण मामले जोड़े हैं।
अप्प्ल्ट्ज

1
@ Aplet123 क्या आप सुनिश्चित हैं कि आप क्या चाहते हैं? क्योंकि अगर ऐसा है, तो रिक्त स्थान और लोअर केस लेटर्स को हटाने के लिए चुनौती उबलती है। (उदाहरण के लिए 4 रेटिना में बाइट्स: T` l)
मार्टिन Ender

4
इसे बदलने में बहुत देर हो चुकी है, लेकिन आप आम तौर पर "a", "a", "the", "for", "to", आदि जैसे शब्दों को हटाने की अपेक्षा करेंगे।
डारेल हॉफमैन

2
यह इस तथ्य को अलग कर रहा है कि यूएसए एक परिचित नहीं है, यह एक संक्षिप्त नाम है? नासा एक परिचित है क्योंकि आप "नासा" शब्द कहते हैं। यदि आप अक्षरों को वर्तनी देते हैं, तो यह एक संक्षिप्त नहीं है।
corsiKa

1
क्या हम मान सकते हैं कि इनपुट में हमेशा एक गैर-रिक्त आउटपुट होगा?
अधोगति

जवाबों:


10

पायथ, 25 21 20 बाइट्स

shM-crz1dc4."@YK½¼

यहाँ यह कोशिश करो!

एक बाइट को बचाने के लिए @Jakube का धन्यवाद!

व्याख्या

shM-crz1dc4। "@ YK z # z = इनपुट

     rz1 # इनपुट को अपरकेस में बदलें
    सीडी # रिक्त स्थान पर इनपुट विभाजित करें
         c4। "@ YK½¼ # पैक्ड स्ट्रिंग से शब्दों की एक सूची बनाते हैं जिसे अनदेखा किया जाएगा
   - # उन शब्दों को फ़िल्टर करें
 hM # केवल सभी शब्दों का पहला अक्षर लें
s # उन्हें एक स्ट्रिंग में शामिल करें

पैक्ड स्ट्रिंग बन जाता है ANDBYOROF


थोड़ा स्ट्रिंग पैकिंग ट्रिक: ."@YK½¼एक बाइट को बचाता है "ANDORBYOF। यह मूल रूप से @ANDBYOROFपैक किया गया है।
जकुबे

डांग, गैर-एससीआई-चार्म हटा दिया गया। बस पैक करें @ANDBYOROFऔर देखें कि आपको क्या मिलता है।
जकुबे

@Jakube धन्यवाद! पहले इसे पैक करने की कोशिश की, लेकिन हमेशा एक ही लंबाई या लंबे समय तक समाप्त हुआ।
डेनकर

10

जेली , 21 20 बाइट्स

,“°ɲịĊs°gɗ»ṣ€⁶Œuḟ/Ḣ€

इसे ऑनलाइन आज़माएं!

(-1 धन्यवाद @ डेनिस।)

,“°ɲịĊs°gɗ»              Pair input with the string "OR OF by AND"
           ṣ€⁶           Split both by spaces
              Œu         Uppercase
                ḟ/       Reduce filter (removing ignored words from input)
                  Ḣ€     Keep first letters of remaining words

जेली का शब्दकोश थोड़ा अजीब है कि यह ANDअपरकेस में अभी तक अपरकेस byमें है ...


8

रेटिना, 29 31 36 बाइट्स

T`l`L
 |(AND|OR|BY|OF)\b|\B.

अंत में इरादा नईलाइन।

5 बाइट बचाने के लिए मार्टिन ब्यूटनर को धन्यवाद

इसे ऑनलाइन आज़माएं

T`l`L                  # Replace lowercase with uppercase
 |(AND|OR|BY|OF)\b|\B. # Regex match, it doesn't matter if we match 'AND' in SHAND
                       #   since the 'SH' will still become 'S' or am I missing something?
                       # Replace with nothing

मैं रेटिना से अपरिचित हूं। क्या करता T`l`Lहै?
साइओस

@Cyoce स्पष्टीकरण के साथ अपडेट देखें
andlrc

6

जावास्क्रिप्ट (ईएस 6), 56 बाइट्स

@ Edc65 को एक बाइट धन्यवाद दिया।

s=>s.toUpperCase().replace(/\B.| |(AND|O[RF]|BY)\b/g,"")

व्याख्या

कोड स्व व्याख्यात्मक है, मैं सिर्फ रेगेक्स समझाऊंगा:

\B.          // Matches any character (`.`), that's not the start of a word
|            // Matches spaces
|(...)\b     // Matches all the words that should be ignored

इसने इन सभी मिलान किए गए अध्यायों को हटा दिया और शब्द को अपरकेस कर दिया


1
.toUpperCase () regexp से पहले आप iध्वज से बच सकते हैं
edc65

@ edc65 स्मार्ट विचार, धन्यवाद!
डाउनगेट

बहुत यकीन है कि यहाँ परियों की ज़रूरत नहीं है
शॉन एच

5

जावास्क्रिप्ट, 61 64 66 63 बाइट्स

a=>a.toUpperCase().replace(/(AND|O[FR]|BY|(\w)\w+)( |$)/g,"$2")

यह उन शब्दों को खोजने के लिए एक नियमित अभिव्यक्ति का उपयोग करता है जो सूची से नहीं हैं: and, or, of, byऔर पहला अक्षर पकड़ता है। इसके बाद अक्षरों के परिणामी स्ट्रिंग को बड़ा किया जाता है।

संपादित करें: 64 बाइट्स - शब्दों के लिए निश्चित शुरुआत के साथof,or,by,and

संपादित करें: 66 बाइट्स - अंतिम शब्द सहित सभी शब्दों को जांचने के लिए निर्धारित।

संपादित करें: 63 बाइट्स - 3 बाइट्स @ edc65 और @Cyoce के लिए धन्यवाद !


के लिए काम नहीं करता हैFoo Offline Bar
Downgoat

सामान्य सर्वसम्मति है कि आपको फ़ंक्शन को वैरिएबल में असाइन करने की आवश्यकता नहीं है।
साइओस

.toUpperCase () regexp से पहले आप iध्वज से बच सकते हैं
edc65

5

विम, ४६

gUU:s/ /\r/g<cr>:g/\vAND|OR|OF|BY/d<cr>:%s/.\zs.*\n<cr>
gUU                      make line uppercase
:s/ /\r/g<cr>            replace all spaces with newlines
:g/\vAND|OR|OF|BY/d<cr>  remove unwanted words
:%s/.\zs.*\n<cr>         remove all non-initial characters and newlines

मैं विशेष रूप से उस अंतिम बिट को पसंद करता हूं। पहले .regex में पंक्ति के पहले अक्षर से मेल खाता। फिर हम \zs"वास्तव में बदले जा रहे" भाग को शुरू करने के लिए उपयोग करते हैं , प्रभावी रूप से प्रारंभिक चरित्र की जगह नहीं लेते हैं। .*बाकी की रेखा से \nमेल खाता है , और अनुगामी न्यूलाइन से मेल खाता है। चूँकि हम एक बदले हुए तार को निर्दिष्ट नहीं करते हैं, विम केवल मैच के दौरान ही सबकुछ हटा देता है।


vimएक प्रोग्रामिंग लैंग्वेज है
CousinCocaine

4

CJam, 28 24 22 बाइट्स

qeuS/"AOBONRYFD"4/z-:c

इसे ऑनलाइन आज़माएं । एक बग को इंगित करने और एक फिक्स का सुझाव देने के लिए Sp3000 के लिए धन्यवाद, और 4 6 (!) बाइट बचाने के लिए डेनिस के लिए ।

व्याख्या

qeuS/  e# Convert the input to uppercase and split on spaces
"AOBONRYFD"4/z  e# Push the array of short words. See more below
-      e# Remove each short word from the input words
:c     e# Cast the remaining words to characters, which is a
       e# shorter way of taking the first letter

डेनिस ने शब्द सूची को छोटा करने के लिए इस चाल का सुझाव दिया: AOBONRYFDचार के टुकड़े में विभाजित , हमें मिलता है

AOBO
NRYF
D

zऑपरेटर के साथ पंक्तियों में स्तंभों को स्थानांतरित करना , हमें उचित शब्द मिलते हैं!


4

जूलिया, 72 63 61 55 बाइट्स

s->join(matchall(r"\b(?!AND|OR|OF|BY)\S",uppercase(s)))

यह एक अनाम फ़ंक्शन है जो एक स्ट्रिंग को स्वीकार करता है और एक स्ट्रिंग लौटाता है। इसे कॉल करने के लिए, इसे किसी वैरिएबल पर असाइन करें।

हम स्ट्रिंग को रूपांतरित करते हैं uppercase, रेगुलर एक्सप्रेशन के प्रत्येक मैच \b(?!AND|OR|OF|BY)\Sको एक एरे के रूप में चुनते हैं , और joinइसे एक स्ट्रिंग में।

डेनिस के लिए 8 बाइट्स बचाए गए!



3

रूबी, 45 43 बाइट्स

->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}

यह एक लंबोतरा फ़ंक्शन है जो एक स्ट्रिंग को स्वीकार करता है और एक स्ट्रिंग लौटाता है। इसे कॉल करने के लिए, इसे एक वैरिएबल पर असाइन करें और करें f.call(input)

यह मेरे जूलिया उत्तर के समान दृष्टिकोण का उपयोग करता है , अर्थात् अपरकेस में परिवर्तित होता है, नियमित अभिव्यक्ति के मैच प्राप्त करता है \b(?!AND|OR|OF|BY)\S, और एक स्ट्रिंग में शामिल होता है।

इसे यहाँ आज़माएँ

सहेजा गया 2 बाइट्स मैनटवर्क के लिए धन्यवाद!


3
.join*''। वैसे, इसे कॉल करने के लिए किसी भी चीज़ को असाइन करने की आवश्यकता नहीं है। बस इसे तर्क के रूप में पारित करें:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
मैनटवर्क

@manatwork ओह अच्छा, धन्यवाद!
एलेक्स ए।

3

PHP, 92 बाइट्स

कोड गोल्फ में पहला प्रयास।

foreach(explode(" ",str_replace(["AND","OR","BY","OF"],"",strtoupper($s)))as$x){echo$x[0];}

चर $sवाक्यांश परिवर्तित किया है: $s = "United States of America"

काम करने के लिए छोटे सरणी सिंटैक्स के लिए PHP 5.4 या उससे ऊपर की आवश्यकता होती है।


बस FYI करें, कोड-गोल्फ s bytesतब तक स्कोर किए जाते हैं जब तक कि अन्यथा नोट न किया गया हो, और आप #हेडर बनाने के लिए लाइन की शुरुआत में बस का उपयोग कर सकते हैं ।
बिल्ली

2
एक समस्या है। का उपयोग करने की $sआवश्यकता है register_globals, लेकिन 5.4 से PHP से हटा दिया गया है, इसलिए आपका जवाब काम नहीं कर सकता है क्योंकि आपको लघु सरणी सिंटैक्स के लिए 5.4 की आवश्यकता होती है। आपको इनपुट स्ट्रिंग को एक तर्क ( $argv, एक फ़ंक्शन तर्क या समान) के रूप में प्राप्त करने की आवश्यकता है ।
15:52

3

बैश + जीएनयू कोरुटिल्स, 103 76 बाइट्स

for i in ${@^^};do grep -qE '\b(AND|OR|BY|OF)\b'<<<$i||echo -n ${i:0:1};done

साथ दौड़ो

./codegolf.sh Light Amplification BY Stimulation of Emitted Radiationofo

या तो एकल तर्क के साथ या कई तर्कों के साथ।

(मैं अंतिम शब्द विकृत करने के लिए )।


60 बाइट्स

@Manatwork को धन्यवाद।

for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}

क्षमा करें, लेकिन यह awkकॉल भयानक लग रहा है। इसे बदलने के बारे में क्या ${@^^}?
मैनेटवर्क

@manatwork, अच्छी बात, यह नहीं सोचा ...
rexkogitans

बहुत बेहतर लग रहा है। अब कृपया grepकॉल को बदलें [[ $i = @(AND|OR|BY|OF) ]]। ;) और इसके साथ ही आप पोस्ट हेडर से "+ GNU कोरुटिल्स" भाग को भी हटा सकते हैं।
मैनेटवर्क

एक और बात: आप के echoसाथ बदल सकता है printf। इसके अलावा आप डिजिटल ट्रामा के ब्रेस टिप भी लगा सकते हैं। ( बैश में गोल्फ के लिए और अधिक टिप्स ।)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
मैनेटवर्क

मैं करने के लिए इसी बैश अंकन लिए देख रहा था grep की \bलेकिन couldnot इसे खोजने ... और मैं नहीं जानता था कि do...doneघुंघराले ब्रेसिज़ द्वारा की जगह किया जा सकता है।
रेक्सकोगिटंस

3

जावास्क्रिप्ट, 104 85 बाइट्स

सहेजे गए 19 बाइट @ Aplet123 की बदौलत

स्ट्रिंग को रिक्त स्थान से विभाजित करता है फिर जाँचता है कि क्या यह, या, और, या के शब्द हैं। यदि यह है, तो इसे अनदेखा करता है, अन्यथा यह इसका पहला अक्षर लेता है। यह फिर एरे से जुड़ता है और स्ट्रिंग को अपरकेस बनाता है।

a=_=>_.split` `.map(v=>/\b(o(f|r)|and|by)\b/i.test(v)?"":v[0]).join("").toUpperCase()

Ungolfed:

function a(_) {
       _ = _.split` `; //Split on spaces
       _ = _.map(function(v){return new RegExp("\b(o(f|r)|and|by)\b","i").test(v)}); //Check if the banned words are in the result
       _ = _.join(""); //Join it into a string
       _ = _.toUpperCase(); //Convert it to uppercase
};

आखिर में बैकटिक क्यों है? यह एक त्रुटि का कारण बनता है और वहां होने का इरादा नहीं है। आपको शायद बैकटिक को हटा देना चाहिए।
Aplet123

इसके अलावा, आप की जरूरत नहीं है var। हम कोड गोल्फ में वैश्विक गुंजाइश को प्रदूषित करने के बारे में चिंता नहीं करते हैं: P
NinjaBearMonkey

यह काम नहीं करता। यदि आप उदाहरणों को देखते हैं तो इनपुट `संयुक्त राज्य अमेरिका
के`

हाँ, मैंने उस पर ध्यान दिया। बेवकूफ सुपर लंबे अंतर्निहित फ़ंक्शन नाम।
क्लैमचाउडर 314

के _.map(v=>/o(f|r)|and|by/.test(v)?"":v[0]) बजाय Z सेट कर सकते हैं ""। आप अपने को दूर कर सकते हैं _.forEach(p=>Z+=p[0].toUpperCase());लाइन और अपने को बदलने return Zके साथ लाइन return Z.join("").toUpperCase()
Aplet123

3

MATL , 34 27 बाइट्स

1 बाइट @AandN को कम धन्यवाद

KkYb'OF AND OR BY'YbX-c1Z)!

इसे ऑनलाइन आज़माएं!

Xk                  % convert to uppercase
Yb                  % split by spaces. Gives a cell array of input words
'AND OR BY OF'      % ignored words separated by spaces
Yb                  % split by spaces. Gives a cell array of ignored words
X-                  % setdiff: remove ignored words (result is stable)
c                   % convert to 2D char array, padding words with spaces
1Z)                 % take first column
!                   % transpose into a row

1
शायद यह 33 बाइट्स के साथ काम करता है? XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
अदनान

2

05AB1E , 33 32 28 बाइट्स

कोड:

‘€ƒ€—€‚€‹‘ð¡)Uuð¡)vXyQO>iy¬?

CP-1252 एन्कोडिंग का उपयोग करता है ।


2

पायथन, 81 बाइट्स

lambda s:''.join(c[0]for c in s.upper().split()if c not in'AND OF OR BY'.split())

2

हास्केल, 100 99 98 82 75 बाइट्स

मुझे पूरा यकीन है कि इसे और अधिक छोटा किया जा सकता है क्योंकि मैं अभी भी इसका उपयोग कर रहा हूं $, .आदि। इसलिए मैं ()इंस्टेड =) का उपयोग करता रहता हूं

आपकी मदद के जादू के लिए धन्यवाद @nimi!

import Data.Char
w=words
x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]

उदाहरण:

*Main> a "united states by america"
"USA"

ओह, वह .रचना ऑपरेटर काफी सहज लगता है। मुझे यकीन नहीं है कि किस क्रम में मूल्यांकन किया जाता है।
दोष

chapter 6 of Learn you a Haskell for Great Good! has a good introduction to function application with $ and composition with ..
nimi

1
Switching back to non-pointfree and a list comprehension is even shorter: a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
nimi

Now this is definitely over my head, I'm going to have to learn quicker=)
flawr

2

Python, 103 96 bytes

This is my first attempt at code golf, and this could probably be golfed a lot more. Thanks to DenkerAffe for saving seven characters.

lambda x:"".join([x[0]for y in x.split(" ") if y.lower() not in ['and','or','of','by']]).upper()

It takes the input, turns it into a list of words and takes their first letter if it's not one of the forbidden words, then turns everything to uppercase.


2
It was trying to execute the input. In Python 3 that doesn't happen. (I think it saves 2 bytes to switch to Python 3 (-4 for input vs raw_input, +2 for print("".join..) vs print"".join..) Also no space between a symbol and a keyword.
CalculatorFeline

Or you just go with a lambda which gets the input as argument. This is always allowed here if the challenge doesn't forbid it explicitly.
Denker

@CatsAreFluffy It might help to switch to Python 3, but I highly prefer Python 2 over it because who likes parentheses anyways?
mriklojn

You can save the lower() when you uppercase the input first, before you do anything. Your filter list then becomes ['AND','OR',...]., but the rest would stay the same. You can also drop some whitespaces behind braces. x[0]for ... is completly valid in Python.
Denker

Remove spaces between symbols and keywords(it works)
CalculatorFeline

2

JavaScript, 80 72 55 53 bytes

Code

function a(t){t=t.toUpperCase();t=t.replace(/AND|OR|BY|OF|\B.| |/g,"");return t}

function a(t){return t.toUpperCase().replace(/AND|OR|BY|OF|\B.| |/g,"")}

I just read about arrow functions and realized I could shorten this up even more.

a=t=>t.toUpperCase().replace(/AND|OR|BY|OF|\B.| |/g,"")

According to this, you don't count the assignment in the length, so -2 bytes.

t=>t.toUpperCase().replace(/AND|OR|BY|OF|\B.| |/g,"")

This is my first golf, so it's not very good.


2

PHP, 68 61 58 bytes

Uses ISO-8859-1 encoding.

for(;$w=$argv[++$x];)stripos(_AND_OR_BY_OF,$w)||print$w&ß;

Run like this (-d added for aesthetics only):

php -d error_reporting=30709 -r 'for(;$w=$argv[++$x];)stripos(_AND_OR_BY_OF,$w)||print$w&ß; echo"\n";' united states oF america

Ungolfed:

// Iterate over the CLI arguments (words).
for(;$w = $argv[++$x];)
    // Check if the word is one of the excluded words by substring index.
    // The check is case insensitive.
    stripos("_AND_OR_BY_OF", $w) ||
        // Print the word, converting to uppercase and getting only the
        // first char by using bitwise AND.
        print $w & "ß";
  • Saved 7 bytes by using bitwise AND instead of using ucwords.
  • Saved 3 bytes by using ISO-8859-1 encoding and using ß (binary 11011111) for binary AND instead of a negated space (binary 00100000).

1

Mathematica, 132 117 bytes

ToUpperCase[First/@Characters@DeleteCases[StringDelete[StringSplit@#,"of"|"and"|"or"|"by",IgnoreCase->True],""]<>""]&

15 bytes saved thanks to @CatsAreFluffy.


1arg StringSplit defaults to splitting on whitespace (-5bytes)
CalculatorFeline

1
Also you can replace the word list with "of"|"and"|"or"|"by". Also {"a","b","c"}<>""==StringJoin[{"a","b","c"}]. One last thing: Characters automatically maps over lists.
CalculatorFeline

1
The leaderboard would prefer that you put a comma after Mathematica. Also you're welcome :)
CalculatorFeline

1

PowerShell, 81 Bytes

(-join($args[0].Split(" ")|?{$_-notmatch"^(and|or|by|of)$"}|%{$_[0]})).ToUpper()

Explanation

Split on the spaces creating an array. Drop the offending members. Pull the first character and join together. Use ToUpper() on the resulting string.


Realized that would match Anderson and drop it. Added 4 bytes
Matt

1

Lua, 122 Bytes

I would have love to use a pattern to get rid of the banned words, but sadly, lua isn't made to match groups of characters... So I had to use a for loop instead, which is much more expensive.

s=arg[1]for k,v in next,{"of","and","by","or"}do
s=s:gsub(v,"")end
print(s:gsub("(%a)%a+",string.upper):gsub("%s","").."")

Ungolfed

s=arg[1]                               -- initialise s with the argument
for k,v in next,{"of","and","by","or"} -- iterate over the array of banned words
do
    s=s:gsub(v,"")                     -- replace the occurences of v by 
end                                    --   an empty string
print(s:gsub("(%a)%a+",                -- replace words (separated by spaces)
              string.upper)            -- by their first letter capitalised
         :gsub("%s","")                -- replace spaces with empty strings
                       .."")           -- concatenate to prevent the number of 
                                       -- substitutions to be shown

Hey! I also made a Lua submission, here: codegolf.stackexchange.com/a/75616/33183.
Trebuchette

1

Factor, 175 bytes

I learned a lot by writing this.

USING: strings ascii sets splitting kernel sequences math.ranges ;
>lower " " split [ { "and" "or" "by" "of" } in? not ] filter [ first dup [a,b] >string ] map "" join >upper 

As a word:

USING: strings ascii sets splitting kernel sequences math.ranges ;

: >initialism ( str -- str )
  >lower " " split                            ! string.lower.split(" ")
  [ { "and" "or" "by" "of" } in? not ] filter ! word in { } ?
  [ first dup [a,b] >string ]          map    ! word[0]
  "" join >upper ;                            ! "".join.upper

Unit tests:

USING: tools.test mk-initialism ;
IN: mk-initialism.tests

{ "LASER" } [ "Light Amplification by Stimulation of Emitted Radiation" >initialism ] unit-test
{ "USA"   } [ "United States OF Americaof" >initialism ]                              unit-test
{ "USA"   } [ "united states and america" >initialism ]                               unit-test
{ "JTW"   } [ "Jordan Of the World" >initialism ]                                     unit-test

Pass!


1

Lua, 113 112 93 bytes

arg[1]:upper():gsub("%w+",function(w)io.write(("AND OR BY OF"):find(w)and""or w:sub(0,1))end)

Wow, totally forgot the existence of %w! That's a great one!
Katenkyo

Katenkyo: Well, this would also work with %a; %a matches letters, and %w matches letters and numbers. The main thing is using a custom function in gsub.
Trebuchette

Yeah, I see that it is easier to remove AND OR BY OF when selecting words... I used no custom function because they cost a lot, so I though gsub("(%a)%a+",string.upper) after removing them would have been better
Katenkyo

1

C#, 134 bytes

Golfed

class P{static void Main(string[] a){foreach (var s in a){if(!"AND OR BY OF".Contains(s.ToUpper())){Console.Write(s.ToUpper()[0]);}}}}

Readable

class P
{
    static void Main(string[] a)
    {
        foreach (var s in a)
        {
            if (!"AND OR BY OF".Contains(s.ToUpper()))
            {
                Console.Write(s.ToUpper()[0]);
            }
        }
    }
}

Execute from command line

75448.exe Light Amplification by Stimulation of Emitted Radiation

LASER

75448.exe united states of america

USA


0

IPOS - non competing, 27 bytes

uS`"AND|OR|BY|OF"ER`%S!h%S-

This works in the current version (v0.2) of the interpreter.

Example run

python IPOS.py -i "United States of America" uS`\"AND|OR|BY|OF\"ER`%S!h%S-
USA

The backslashes there are only for escaping of the quotes and are not needed for the program.

Explanation

u                  # Make the input uppercase
S                  # Push a space to the stack
`"AND|OR|BY|OF"ER` # Push a command to the stack, that replaces matches of the regex
                   # with an empty string
%                  # Split the uppercased input string on spaces, apply the command and
                   # join back on spaces. This removes the required words from the input.
S                  # Push a space to the stack
!h                 # Push a command that only selects the first character of a string
%                  # Split on spaces, apply the command and join back on spaces
S-                 # Remove the remaining spaces (forgot to make this usuable
                   # with regexes, would have saved me some bytes here :( )


0

Pylongolf2, 14 bytes (UTF-8)

c| l1╨3♀~

Pylongolf2 has many non-ASCII characters that count as 2 bytes.

c| l1╨3♀~
c         read input
 |        split by space (note the space after |)
   l1     substring(0, 1)
     ╨3   convert to uppercase
       ♀~ pop the array into the stack and print it.

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.