약어 만들기


24

목표

목표는 입력을 약어로 변환하는 프로그램을 만드는 것입니다. 입력 한 문자와 공백 만 보장됩니다. 입력은 단어 사이에 정확히 하나의 공백이 있습니다. 입력의 약어를 출력해야합니다.

규칙

  • 코드는 대소 문자를 구분 수 (예 : 수 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
그게 당신이 원하는 것입니까? 그런 경우에는 공백과 소문자를 제거해야합니다. (예 : 4는 망막에 바이트 : T` l)
마틴 청산

4
너무 늦어서 변경하기는 쉽지 않지만 일반적으로 "a", "an", "the", "for", "to"등과 같은 단어는 제거 될 것으로 예상됩니다.
Darrel Hoffman

2
이것은 미국이 약어가 아니라 약어라는 사실을 제외하고 있습니다. NASA는 "nasa"라는 단어를 사용하기 때문에 약어입니다. 글자를 쓰면 약어가 아닙니다.
corsiKa

1
입력에 항상 비어 있지 않은 출력이 있다고 가정 할 수 있습니까?
Downgoat

답변:


10

Pyth, 25 21 20 바이트

shM-crz1dc4."@YK½¼

여기 사용해보십시오!

1 바이트를 절약 한 @Jakube에게 감사합니다!

설명

shM-crz1dc4. "@ YK½¼ #z = 입력

     rz1 # 입력을 대문자로 변환
    공백으로 cd # split 입력
         c4. "@ YK½¼ # # 묶은 문자열에서 단어 목록을 생성합니다.
   -단어를 걸러 내십시오
 hM #은 모든 단어의 첫 글자 만 사용합니다
# 하나의 문자열로 결합

묶인 줄은 ANDBYOROF


작은 문자열 패킹 트릭 : ."@YK½¼1 바이트를 절약 "ANDORBYOF합니다. 기본적으로 @ANDBYOROF포장되어 있습니다.
Jakube

Dang, ASCII가 아닌 문자가 삭제되었습니다. 그냥 포장 @ANDBYOROF하고 당신이 무엇을 얻을 참조하십시오.
Jakube

@Jakube 감사합니다! 전에 포장하려고했지만 항상 같은 길이 이상으로 끝났습니다.
Denker

10

젤리 , 21 20 바이트

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

온라인으로 사용해보십시오!

(@Dennis 덕분에 -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 바이트를 절약 한 Martin Büttner 에게 감사 합니다

온라인으로 사용해보십시오

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

@Cyoce 설명이있는 업데이트 참조
andlrc

6

자바 스크립트 (ES6), 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 ()를 넣으면 i플래그를 피할 수 있습니다
edc65

@ edc65 똑똑한 아이디어, 감사합니다!
Downgoat

여기에 괄호가 필요하지 않다는 것을 확신하십시오
Shaun H

5

자바 스크립트, 61 64 66 63 바이트

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

정규 표현식을 사용하여 list :에없는 단어를 찾고 and, or, of, by첫 번째 문자를 캡처합니다. 그런 다음 결과 문자열을 대문자로 표시합니다.

편집 : 64 바이트-단어로 시작 고정of,or,by,and

편집 : 66 바이트-마지막 단어를 포함한 모든 단어를 확인하도록 수정되었습니다.

편집 : 63 바이트- @ edc65@Cyoce 덕분에 3 바이트를 절약했습니다 !


작동하지 않습니다Foo Offline Bar
Downgoat

일반적인 합의는 함수를 변수에 할당 할 필요가 없다는 것입니다.
Cyoce

정규 표현식 앞에 .toUpperCase ()를 넣으면 i플래그를 피할 수 있습니다
edc65

5

정력, 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

Dennis는 단어 목록을 단축하기 위해이 트릭을 제안했습니다 .4 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합니다.

Dennis 덕분에 8 바이트가 절약되었습니다!



3

루비, 45 43 바이트

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

문자열을 받아들이고 문자열을 반환하는 람다 함수입니다. 호출하려면 변수에 할당하고 수행하십시오.f.call(input) .

Julia 응답 과 동일한 접근 방식을 사용합니다 . 즉 대문자로 변환하고 정규 표현식과 일치합니다.\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 아, 고마워요!
Alex 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
문제가 있습니다. $srequires을 사용 register_globals하지만 5.4 이후로 PHP에서 제거되었으므로 짧은 배열 구문에 5.4가 필요하면 답변을 사용할 수 없습니다. 입력 문자열을 인수 ( $argv, 함수 인수 또는 이와 유사한)로 가져와야합니다.
14:52

3

Bash + GNU 코어 유틸리티, 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

단일 인수가 인용되거나 여러 인수가 있습니다.

(I는 포함 할 마지막 말을 왜곡 ).


60 바이트

@manatwork에게 감사합니다.

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

미안하지만 그 awk전화는 끔찍해 보인다. 그것을 대체하는 것은 ${@^^}어떻습니까?
manatwork

@manatwork, 좋은 지적, 그것을 생각하지
않았다

훨씬 좋아 보인다. 이제 grep통화 를로 바꾸십시오 [[ $i = @(AND|OR|BY|OF) ]]. ;) 그리고이를 통해 게시물 헤더에서 "+ GNU coreutils"부분을 제거 할 수도 있습니다.
manatwork

한 가지 더 :를로 바꿀 수 echo있습니다 printf. 또한 Digital Trauma버팀대 팁 도 적용 할 수 있습니다 . ( Bash에서의 골프 팁에 대한 자세한 내용 )for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
manatwork

나는 비슷한 bash 표기법을 찾고있었습니다. grep으로\b하지만 couldnot 그것을 발견 ... 그리고 나는 몰랐 do...done중괄호로 대체 할 수있다.
rexkogitans

3

자바 스크립트, 104 85 바이트

@ Aplet123 덕분에 19 바이트 절약 .

문자열을 공백으로 나눈 다음 단어가 or 또는 and 또는 by인지 확인합니다. 만약 그렇다면, 그것을 무시하고, 그렇지 않으면 그것의 첫 글자를 취합니다. 그런 다음 배열을 결합하고 문자열을 대문자로 만듭니다.

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

언 골프 드 :

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

작동하지 않습니다. 예제를 보면`미국의`입력은`
USA`가

그래, 나는 그것을 알아 차렸다. 바보 같은 긴 내장 함수 이름.
clamchowder314

_.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 바이트

@AandN 덕분에 1 바이트 감소

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)!
Adnan

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 바이트

나는 확신 그것이 내가 아직 사용에 흡입으로 더 많이 단축 할 수 있어요 $, .내가 계속 사용할 수 있도록 등 ()insted =)

당신의 도움 마법에 대한 @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"

아, 그 .작곡 연산자는 매우 직관적으로 보입니다. 나는 무엇이 어떤 순서로 평가되는지 전혀 확신하지 못한다.
flawr

6 장 위대한 선을위한 하스켈 배우기! 기능 적용 $및 구성에. 대한 좋은 소개가 있습니다 .
nimi

1
비 포인트 프리 및 목록 이해로 다시 전환하는 것이 훨씬 짧습니다 a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
nimi

이제 이것은 확실히 내 머리 위에 있습니다. 더 빨리 배울 것입니다 =)
flawr

2

파이썬, 103 96 바이트

이것은 코드 골프에서 처음 시도한 것이며 아마도 더 많은 골프를 쳤을 것입니다. 7자를 저장해 주신 DenkerAffe에게 감사드립니다.

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

입력을 받아 단어 목록으로 바꾸고 금지 된 단어 중 하나가 아닌 경우 첫 글자를 가져온 다음 모든 것을 대문자로 바꿉니다.


2
그것은 입력을 실행하려고합니다. 파이썬 3에서는 그렇지 않습니다. (필자는 파이썬 3으로 전환하기 위해 2 바이트를 절약 할 수 있다고 생각한다. (-4는 inputvs raw_input, +2는 print("".join..)vs print"".join..) 또한 기호와 키워드 사이에는 공백이 없다.
CalculatorFeline

또는 입력을 인수로 가져 오는 람다를 사용하십시오. 챌린지에서 명시 적으로 금지하지 않은 경우 항상 여기에서 허용됩니다.
Denker

@ CatsAreFluffy Python 3으로 전환하는 데 도움이 될 수 있지만 어쨌든 괄호를 좋아하기 때문에 Python 2를 선호합니다.
mriklojn

입력을 먼저 대문자로 할 때 lower ()를 저장할 수 있습니다. 그러면 필터 목록이 [ 'AND', 'OR', ...]가되지만 나머지는 동일하게 유지됩니다. 중괄호 뒤에 공백을 넣을 수도 있습니다. x[0]for ...파이썬에서 완전히 유효합니다.
Denker

기호와 키워드 사이의 공백을 제거하십시오 (작동)
CalculatorFeline

2

자바 스크립트, 80 72 55 53 바이트

암호

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,"")}

나는 화살표 기능에 대해 읽었고 이것을 더 단축 할 수 있음을 깨달았습니다.

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

에 따르면 , 당신은 너무 -2 바이트, 길이의 할당을 계산에 포함되지 않습니다.

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

이것은 나의 첫 번째 골프이므로 그리 좋지 않습니다.


2

PHP, 68 61 58 바이트

ISO-8859-1 인코딩을 사용합니다.

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

다음과 같이 실행하십시오 ( -d미학에만 추가됨).

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

언 골프 드 :

// 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 & "ß";
  • 대신 비트 단위 AND를 사용하여 7 바이트 저장 ucwords .
  • ISO-8859-1 인코딩을 사용 하고 음수 공간 (binary ) 대신 이진에 ß(binary 11011111)를 사용하여 3 바이트를 AND절약했습니다 00100000.

1

매쓰, 132 117 바이트

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

@CatsAreFluffy 덕분에 15 바이트가 절약되었습니다.


1arg StringSplit는 공백 (-5 바이트)으로 기본 분할됩니다.
CalculatorFeline

1
단어 목록을로 바꿀 수도 있습니다 "of"|"and"|"or"|"by". 또한 {"a","b","c"}<>""==StringJoin[{"a","b","c"}]. 마지막 Characters으로 : 목록을 자동으로 매핑합니다.
CalculatorFeline

1
리더 보드는 Mathematica 다음에 쉼표를 넣는 것을 선호합니다. 또한 당신은 환영합니다 :)
CalculatorFeline

1

PowerShell, 81 바이트

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

설명

공간을 분할하여 배열을 만듭니다. 문제가있는 멤버를 삭제하십시오. 첫 번째 캐릭터를 당겨 함께 결합하십시오. ToUpper()결과 문자열에 사용하십시오 .


앤더슨과 어울릴 것이라는 것을 깨달았습니다. 4 바이트 추가
Matt

1

루아, 122 바이트

금지 된 단어를 제거하기 위해 패턴을 사용하고 싶었지만 슬프게도 루아는 문자 그룹과 일치하도록 만들어지지 않았습니다. 그래서 대신 for 루프를 사용해야했습니다.

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","").."")

언 골프

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


1

요소, 175 바이트

나는 이것을 써서 많은 것을 배웠다.

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 

한마디로 :

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

단위 테스트 :

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

패스!


1

루아, 113 (112) 93 바이트

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

와, 존재를 완전히 잊었다 %w! 대단해!
Katenkyo

Katenkyo : 글쎄, 이것은 또한 작동합니다 %a; %a문자를 %w일치시키고 문자와 숫자를 일치시킵니다. 가장 중요한 것은에서 사용자 정의 함수를 사용하는 것입니다 gsub.
Trebuchette

그래, 나는 그것을 제거하기 쉽다는 것을보고 AND OR BY OF그들은 많은 비용 때문에 나는 비록 있도록 단어를 선택할 때 ... 나는 더 사용자 정의 기능을 사용하지를 gsub("(%a)%a+",string.upper)을 제거한 후 더 좋았을 것
Katenkyo

1

C #, 134 바이트

골프

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

읽을 수있는

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

명령 줄에서 실행

방출 된 방사선의 자극에 의한 75448.exe 광 증폭

원자 램프

75448.exe 미국

미국


0

IPOS- 비경쟁, 27 바이트

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

이것은 현재 버전의 인터프리터 (v0.2) 에서 작동합니다. .

예제 실행

python IPOS.py -i "미국"uS` \ "AND | OR | BY | OF \"ER` % S! h % S-
미국

백 슬래시는 따옴표를 이스케이프하는 데만 사용되며 프로그램에는 필요하지 않습니다.

설명

u # 입력을 대문자로한다
S # 스택에 공간을 밀어 넣습니다
` "AND | OR | BY | OF"ER` # 정규식과 일치하는 명령을 스택으로 푸시
                   # 빈 문자열
% # 공백으로 대문자 입력 문자열을 나누고 명령을 적용하고
                   # 스페이스에 다시 참여하십시오. 입력에서 필요한 단어를 제거합니다.
S # 스택에 공간을 밀어 넣습니다
! h # 문자열의 첫 문자 만 선택하는 명령을 밉니다
% # 공백으로 분할하고 명령을 적용한 후 공백으로 다시 결합
S- # 남은 공간을 제거하십시오 (이를 쓸모있게 만드는 것을 잊었습니다)
                   # 정규 표현식을 사용하면 몇 바이트를 절약 할 수 있습니다. ()

0

bash / GNU coreutils, 60 바이트

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


0

Pylongolf2 , 14 바이트 (UTF-8)

c| l1╨3♀~

Pylongolf2에는 2 바이트로 계산되는 많은 비 ASCII 문자가 있습니다.

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.