頭字語を作る


24

目的

あなたの目標は、入力を頭字語に変換するプログラムを作成することです。入力には文字とスペースのみが含まれることが保証されています。入力には、単語間にちょうど1つのスペースがあります。入力の頭字語を出力する必要があります。

ルール

  • あなたのコードでは、大文字と小文字を区別すること(例えばすることができないfooFoo同じです)
  • コードでは次の単語を無視し、頭字語に入れないでください。 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つのテストケースを追加しました。
Aplet123

1
@ Aplet123それがあなたが望むものだと確信していますか?その場合は、スペースと小文字を削除することに挑戦することになるからです。(たとえば、Retinaの4バイト:T` l
マーティンエンダー

4
変更するには遅すぎますが、一般に「a」、「an」、「the」、「for」、「to」などの単語も削除されることを期待します。
ダレルホフマン

2
これは、米国が頭字語ではなく、略語であるという事実は別としてですか?NASAは「nasa」という言葉を言うための頭字語です。あなたが文字を綴るなら、それは頭字語ではありません。
corsiKa

1
入力に常に空でない出力があると仮定できますか?
ダウンゴート

回答:


10

Pyth、25 21 20バイト

shM-crz1dc4."@YK½¼

ここで試してみてください!

1バイト節約してくれた@ジャクベに感謝!

説明

shM-crz1dc4。 "@YK½¼#z =入力

     rz1#入力を大文字に変換します
    cd#スペースで入力を分割
         c4。 "@YK½¼#無視されるパックされた文字列から単語のリストを作成する
   -#これらの単語を除外
 hM#すべての単語の最初の文字のみを取得
s#それらを1つの文字列に結合する

パックされた文字列は ANDBYOROF


小さな文字列のパッキングトリック:."@YK½¼を1バイト節約し"ANDORBYOFます。基本的に@ANDBYOROFパックされています。
ジャクベ

ダン、非ASCII文字が削除されました。梱包して@ANDBYOROF、何が得られるかを確認してください。
ジャクベ

@ジャクベありがとう!以前にそれを梱包しようとしましたが、常に同じ長さまたはそれ以上になってしまいました。
デンカー

10

ゼリー21 20バイト

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

オンラインでお試しください!

(-1 @Dennisに感謝します。)

,“°ɲịĊ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

Jellyの辞書は、ANDまだ大文字であるという点で少し奇妙です。by小文字です...


8

網膜、29 31 36バイト

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

最後に意図された改行。

MartinBüttnerに感謝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

JavaScript(ES6)、56バイト

@ edc65のおかげで1バイト節約できました。

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()を正規表現の前に置くと、iフラグを回避できます
-edc65

@ edc65スマートアイデア、ありがとう!
ダウンゴート

ここには括弧が必要ないことを確認してください
ショーンH

5

JavaScript、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バイト- @ edc65@Cyoceのおかげで3バイト節約さました


動作しないFoo Offline Bar
-Downgoat

一般的なコンセンサスでは、関数を変数に割り当てる必要はありません。
チョイス

.toUpperCase()を正規表現の前に置くと、iフラグを回避できます
-edc65

5

vim、46

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

私は特にその最後のビットが好きです。最初の.正規表現では、行の最初の文字に一致します。次に\zs、実際に置換される部分を開始するために使用しますが、実際には初期文字置き換えられません.*行の残りの部分と\n一致し、末尾の改行と一致します。置換文字列を指定しないため、vimは一致するものをすべて削除し、イニシャルのみを残します。


vimはプログラミング言語です
-CousinCocaine

4

CJam、28 24 22バイト

qeuS/"AOBONRYFD"4/z-:c

オンラインでお試しください。バグを指摘して修正を提案してくれたSp3000と、4 6(!)バイトを節約してくれたDennisに感謝します。

説明

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。4つのチャンクに分割すると、

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

Ruby、45 43バイト

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

これは、文字列を受け入れて文字列を返すラムダ関数です。呼び出すには、変数に割り当ててdoを実行しますf.call(input)

私のジュリアの答えと同じアプローチ、つまり大文字に変換し、正規表現の一致を取得\b(?!AND|OR|OF|BY)\Sし、文字列に結合します。

ここで試してみてください

manatworkのおかげで2バイト節約されました!


3
.join*''。ところで、それを呼び出すために何かに割り当てる必要はありません。引数を下付き文字として渡すだけです:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
manatwork

@manatworkああ、いいね、ありがとう!
アレックスA.

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以降が必要です。


ちなみに、別段の注記がない限り、code-golfはスコアリングされbytesます#。ヘッダーを作成するには、行の先頭でaのみを使用できます。

2
問題があります。require を使用し$sますがregister_globals、5.4からPHPから削除されたため、短い配列構文には5.4が必要であるため、答えは機能しません。入力文字列を引数($argv、関数の引数など)として取得する必要があります。
アロス

3

Bash + GNU coreutils、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;}

Sorry, but that awk call looks horrible. What about replacing it with ${@^^}?
manatwork

@manatwork, good point, didnot think of that...
rexkogitans

Looks much better. Now please replace the grep call with [[ $i = @(AND|OR|BY|OF) ]]. ;) And with that you can also remove the “ + GNU coreutils” part from the post header.
manatwork

One more thing: you could replace the echo with printf. Furthermore you can apply Digital Trauma's brace tip too. (More in Tips for golfing in Bash.) for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
manatwork

I was looking for the bash notation similar to grep's \b but couldnot find it... And I did not know that do...done can be replace by curly braces.
rexkogitans

3

JavaScript, 104 85 bytes

Saved 19 bytes thanks to @Aplet123.

Splits the string by spaces then checks if it is the words of, or, and, or by. If it is, it ignores it, otherwise it takes the first letter of it. It then joins the array and makes the string uppercase.

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
};

Why is there a backtick at the end? It causes an error and is not intended to be there. You should probably remove the backtick.
Aplet123

Also, you don't need var. We don't worry about polluting the global scope in code golf :P
NinjaBearMonkey

It does not work. If you look at the examples the input ` united states of america ` it gives the output ` usa ` not ` USA `
Aplet123

Yeah, I noticed that. Stupid super long built-in function names.
clamchowder314

You can set Z to _.map(v=>/o(f|r)|and|by/.test(v)?"":v[0]) instead of "". You can remove your _.forEach(p=>Z+=p[0].toUpperCase()); line and replace your return Z line with return Z.join("").toUpperCase()
Aplet123

3

MATL, 34 27 bytes

1 byte fewer thanks to @AandN

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

Try it online!

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
Maybe this works with 33 bytes? XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
Adnan

2

05AB1E, 33 32 28 bytes

Code:

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

Uses CP-1252 encoding.


2

Python, 81 bytes

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

2

Haskell, 100 99 98 82 75 bytes

I am quite sure it can be shortened a lot more as I still suck at using $,. etc. so I keep using () insted=)

Thanks @nimi for your help magic!

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

Example:

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

Oh, that . composition operator looks quite intuitive. I am just never sure what is evaluated in what order.
flawr

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

bash / GNU coreutils, 60 bytes

sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'


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.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.