Viết tắt


24

Mục tiêu

Mục tiêu của bạn là tạo ra một chương trình chuyển đổi đầu vào thành từ viết tắt của nó. Đầu vào của bạn được đảm bảo chỉ có chữ cái và dấu cách. Đầu vào sẽ có chính xác một khoảng trắng giữa các từ. Bạn phải xuất từ ​​viết tắt của đầu vào.

Quy tắc

  • Mã của bạn không thể phân biệt chữ hoa chữ thường (ví dụ fooFoogiống nhau)
  • Mã của bạn phải bỏ qua các từ sau và không đặt chúng trong từ viết tắt: and or by of
  • Bạn không thể cho rằng các từ đều là chữ thường.
  • Đầu ra phải được viết hoa hoàn toàn, không có sự phân tách giữa các ký tự.
  • Một dòng mới được chấp nhận nhưng không cần thiết.
  • Nếu ngôn ngữ của bạn có hàm viết tắt, bạn không được sử dụng ngôn ngữ đó.

Ví dụ

(đầu vào / đầu ra được nhóm lại)

United States of America
USA

Light Amplification by Stimulation of Emitted Radiation
LASER

united states of america
USA

Jordan Of the World
JTW

Chấm điểm

Đây là một thử thách mã nên mã ngắn nhất sẽ thắng.

Bảng xếp hạng

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>


Tôi đã thêm 2 trường hợp thử nghiệm.
Aplet123

1
@ Aplet123 Bạn có chắc chắn đó là những gì bạn muốn? Bởi vì nếu đó là trường hợp, thách thức sẽ rút ngắn khoảng cách và chữ thường. (Ví dụ: 4 byte trong Retina T` l:)
Martin Ender

4
Bit quá muộn để thay đổi nó, nhưng nhìn chung bạn cũng mong muốn các từ như "a", "an", "the", "for", "to", v.v.
Darrel Hoffman

2
Điều này được đặt sang một bên thực tế rằng Hoa Kỳ không phải là từ viết tắt, nó là một từ viết tắt? NASA là từ viết tắt bởi vì bạn nói từ "nasa". Nếu bạn đánh vần các chữ cái, đó không phải là từ viết tắt.
corsiKa

1
Chúng ta có thể giả sử đầu vào sẽ luôn có đầu ra không trống?
Hạ cấp

Câu trả lời:


10

Pyth, 25 21 20 byte

shM-crz1dc4."@YK½¼

Hãy thử nó ở đây!

Cảm ơn @Jakube đã lưu một byte!

Giải trình

shM-crz1dc4. "@ YK½¼ # z = đầu vào

     rz1 # chuyển đổi đầu vào thành chữ hoa
    đầu vào phân chia cd # trên dấu cách
         c4. "@ YK½¼ # tạo danh sách các từ trong chuỗi đóng gói sẽ bị bỏ qua
   - # lọc những từ đó ra
 hM # chỉ lấy chữ cái đầu tiên của tất cả các từ
s # nối chúng thành một chuỗi

Chuỗi đóng gói trở thành ANDBYOROF


Một mẹo nhỏ đóng gói chuỗi: ."@YK½¼tiết kiệm hơn một byte "ANDORBYOF. Về cơ bản nó @ANDBYOROFđược đóng gói.
Jakube

Dang, những người không phải là ascii đã bị xóa. Chỉ cần đóng gói @ANDBYOROFvà xem những gì bạn nhận được.
Jakube

@Jakube Cảm ơn! Đã thử đóng gói trước đó, nhưng luôn kết thúc với cùng độ dài hoặc dài hơn.
Denker

10

Thạch , 21 20 byte

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

Hãy thử trực tuyến!

(-1 cảm ơn @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

Từ điển của Jelly hơi kỳ lạ ở chỗ nó có ANDchữ hoa nhưng bychữ thường ...


8

Võng mạc, 29 31 36 byte

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

Dự định dòng mới ở cuối.

Nhờ vào Martin Büttner vì đã tiết kiệm 5 byte

Dùng thử trực tuyến

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ôi không quen thuộc với võng mạc. Không gì T`l`Llàm gì?
Cyoce 14/03/2016

@Cyoce Xem cập nhật với lời giải thích
andlrc

6

JavaScript (ES6), 56 byte

Đã lưu một byte nhờ @ edc65.

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

Giải trình

Mã này là tự giải thích, tôi sẽ chỉ giải thích regex:

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

Nó loại bỏ tất cả các characers phù hợp và viết hoa chữ


1
đặt .toUpperCase () trước biểu thức chính quy bạn có thể tránh icờ
edc65

@ edc65 ý tưởng thông minh, cảm ơn!
Hạ cấp

Khá chắc chắn rằng các parens không cần thiết ở đây
Shaun H

5

JavaScript, 61 64 66 63 byte

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

Nó sử dụng Biểu thức chính quy để tìm các từ không có trong danh sách: and, or, of, byvà ghi lại chữ cái đầu tiên. Sau đó, viết hoa chuỗi ký tự kết quả.

EDIT: 64 Byte - Đã sửa lỗi cho các từ bắt đầu bằngof,or,by,and

EDIT: 66 Byte - Đã sửa lỗi để kiểm tra tất cả các từ kể cả từ cuối cùng.

EDIT: 63 Byte - Đã lưu 3 Byte nhờ @ edc65@Cyoce !


Không hoạt động choFoo Offline Bar
Downgoat 13/03/2016

Đồng thuận chung là bạn không cần gán hàm cho một biến.
Cyoce 14/03/2016

đặt .toUpperCase () trước biểu thức chính quy bạn có thể tránh icờ
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

Tôi đặc biệt thích chút cuối cùng đó. Đầu tiên .trong regex khớp với ký tự đầu tiên của dòng. Sau đó, chúng tôi sử dụng \zsđể bắt đầu phần "thực sự được thay thế", không thực sự thay thế ký tự ban đầu. .*khớp với phần còn lại của dòng và \nkhớp với dòng mới. Vì chúng tôi không chỉ định chuỗi thay thế, vim chỉ cần xóa mọi thứ trong trận đấu, chỉ để lại tên viết tắt.


vimlà ngôn ngữ lập trình
CousinCocaine

4

CJam, 28 24 22 byte

qeuS/"AOBONRYFD"4/z-:c

Hãy thử trực tuyến . Cảm ơn Sp3000 vì đã chỉ ra một lỗi và đề xuất cách khắc phục và Dennis đã lưu 4 byte (!).

Giải trình

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 đề xuất thủ thuật này để rút ngắn danh sách từ: Chia AOBONRYFDthành bốn phần, chúng tôi nhận được

AOBO
NRYF
D

Chuyển các cột thành hàng với ztoán tử, chúng ta có được các từ thích hợp!


4

Julia, 72 63 61 55 byte

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

Đây là một hàm ẩn danh chấp nhận một chuỗi và trả về một chuỗi. Để gọi nó, gán nó cho một biến.

Chúng tôi chuyển đổi chuỗi thành uppercase, chọn từng đối sánh của biểu thức chính quy \b(?!AND|OR|OF|BY)\Sthành một mảng và joinchuỗi đó thành một chuỗi.

Đã lưu 8 byte nhờ Dennis!



3

Ruby, 45 43 byte

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

Đây là hàm lambda chấp nhận một chuỗi và trả về một chuỗi. Để gọi nó, gán nó cho một biến và làm f.call(input).

Nó sử dụng cách tiếp cận tương tự như câu trả lời Julia của tôi , cụ thể là chuyển đổi thành chữ hoa, nhận các kết quả khớp của biểu thức chính quy \b(?!AND|OR|OF|BY)\Svà nối thành một chuỗi.

Hãy thử nó ở đây

Đã lưu 2 byte nhờ thao tác!


3
.join*''. Nhân tiện, không cần gán nó cho bất cứ điều gì để gọi nó. Chỉ cần vượt qua nó các đối số dưới dạng chỉ mục:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
manatwork 13/03/2016

@manatwork ơi, cảm ơn!
Alex A.

3

PHP, 92 byte

Nỗ lực đầu tiên tại mã golf.

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

Biến $slà cụm từ được chuyển đổi : $s = "United States of America".

Yêu cầu PHP 5.4 trở lên để cú pháp mảng ngắn hoạt động.


Chỉ cần FYI, golf-code được ghi vào bytestrừ khi có ghi chú khác và bạn có thể sử dụng chỉ một #ở đầu dòng để thực hiện một tiêu đề.
con mèo

2
Có vấn đề. Sử dụng $syêu cầu register_globals, nhưng đã bị xóa khỏi PHP từ 5.4, vì vậy câu trả lời của bạn không thể hoạt động vì bạn yêu cầu 5.4 cho cú pháp mảng ngắn. Bạn cần lấy chuỗi đầu vào làm đối số ( $argv, đối số hàm hoặc tương tự).
vào

3

Lõi lõi Bash + GNU, 103 76 byte

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

Chạy với

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

hoặc với một đối số được trích dẫn hoặc với nhiều đối số.

(Tôi bóp méo lời cuối cùng để chứa các ).


60 byte

Cảm ơn @manatwork.

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

Xin lỗi, nhưng awkcuộc gọi đó có vẻ khủng khiếp. Còn việc thay thế nó bằng ${@^^}gì?
manatwork 15/03/2016

@manatwork, điểm tốt, không nghĩ về điều đó ...
rexkogitans 15/03/2016

Có vẻ tốt hơn nhiều. Bây giờ hãy thay thế grepcuộc gọi bằng [[ $i = @(AND|OR|BY|OF) ]]. ;) Và cùng với đó, bạn cũng có thể loại bỏ phần lõi + GNU coreutils ra khỏi tiêu đề bài viết.
manatwork 15/03/2016

Một điều nữa: bạn có thể thay thế echobằng printf. Hơn nữa, bạn cũng có thể áp dụng mẹo niềng răng của Digital Trauma . (Thông tin thêm về Mẹo chơi gôn ở Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
manatwork 15/03/2016

Tôi đang tìm kiếm các ký hiệu bash tương tự như grep 's \bnhưng couldnot tìm thấy nó ... Và tôi không biết rằng do...donecó thể được thay thế bằng dấu ngoặc nhọn.
rexkogitans 15/03/2016

3

JavaScript, 104 85 byte

Đã lưu 19 byte nhờ @ Aplet123 .

Chia chuỗi theo khoảng trắng sau đó kiểm tra xem đó có phải là từ của, hoặc, và, bởi. Nếu có, nó bỏ qua nó, nếu không nó sẽ lấy chữ cái đầu tiên của nó. Sau đó, nó tham gia vào mảng và làm cho chữ hoa.

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

Ung dung:

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

Tại sao có một backtick ở cuối? Nó gây ra lỗi và không có ý định ở đó. Bạn có lẽ nên loại bỏ backtick.
Aplet123

Ngoài ra, bạn không cần var. Chúng tôi không lo lắng về việc gây ô nhiễm phạm vi toàn cầu trong môn đánh gôn: P
NinjaBearMonkey 13/03/2016

Nó không hoạt động. Nếu bạn nhìn vào các ví dụ đầu vào `united States of America ', nó sẽ cho đầu
ra` usa`

Vâng, tôi nhận thấy rằng. Tên ngu ngốc tích hợp siêu dài.
clamchowder314

Bạn có thể đặt Z thành _.map(v=>/o(f|r)|and|by/.test(v)?"":v[0]) thay vì "". Bạn có thể xóa _.forEach(p=>Z+=p[0].toUpperCase());dòng của mình và thay thế return Zdòng của bạn bằng return Z.join("").toUpperCase()
Aplet123 13/03/2016

3

MATL , 34 27 byte

Ít hơn 1 byte nhờ @AandN

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

Hãy thử trực tuyến!

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
Có lẽ điều này hoạt động với 33 byte? XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
Ad Nam

2

05AB1E , 33 32 28 byte

Mã số:

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

Sử dụng mã hóa CP-1252 .


2

Python, 81 byte

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 byte

Tôi khá chắc chắn rằng nó có thể được rút ngắn hơn rất nhiều vì tôi vẫn còn sử dụng $, .v.v. vì vậy tôi tiếp tục sử dụng ()insted =)

Cảm ơn @nimi vì sự giúp đỡ của bạn!

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

Thí dụ:

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

Oh, .toán tử thành phần đó trông khá trực quan. Tôi chỉ không bao giờ chắc chắn những gì được đánh giá theo thứ tự.
flawr

chương 6 của Tìm hiểu cho bạn một Haskell cho những điều tốt đẹp! có một giới thiệu tốt về ứng dụng chức năng với $và thành phần với. .
nimi

1
Chuyển trở lại thành không có điểm và một sự hiểu biết danh sách thậm chí còn ngắn hơn : a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
nimi

Bây giờ điều này chắc chắn nằm trong đầu tôi, tôi sẽ phải học nhanh hơn =)
flawr 15/03/2016

2

Python, 103 96 byte

Đây là nỗ lực đầu tiên của tôi về môn đánh gôn, và điều này có lẽ có thể được đánh gôn nhiều hơn nữa. Cảm ơn DenkerAffe đã lưu bảy ký tự.

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

Nó lấy đầu vào, biến nó thành một danh sách các từ và lấy chữ cái đầu tiên của chúng nếu đó không phải là một trong những từ bị cấm, sau đó biến mọi thứ thành chữ hoa.


2
đã cố gắng để thực hiện đầu vào. Trong Python 3 điều đó không xảy ra. (Tôi nghĩ rằng nó tiết kiệm 2 byte để chuyển sang Python 3 (-4 cho inputvs raw_input, +2 cho print("".join..)vs print"".join..) Cũng không có khoảng cách giữa biểu tượng và từ khóa.
CalculatorFeline

Hoặc bạn chỉ cần đi với một lambda mà nhận đầu vào là đối số. Điều này luôn được cho phép ở đây nếu thách thức không cấm nó một cách rõ ràng.
Denker

@CatsAreFluffy Có thể giúp chuyển sang Python 3, nhưng tôi rất thích Python 2 hơn nó vì ai thích dấu ngoặc đơn?
mriklojn

Bạn có thể lưu chữ thấp hơn () khi bạn viết hoa đầu vào trước, trước khi bạn làm bất cứ điều gì. Danh sách bộ lọc của bạn sau đó trở thành ['VÀ', 'HOẶC', ...]., Nhưng phần còn lại sẽ giữ nguyên. Bạn cũng có thể thả một số khoảng trắng phía sau niềng răng. x[0]for ...là hoàn toàn hợp lệ trong Python.
Denker

Xóa khoảng cách giữa các ký hiệu và từ khóa (nó hoạt động)
CalculatorFeline

2

JavaScript, 80 72 55 53 byte

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

Tôi chỉ đọc về các chức năng mũi tên và nhận ra tôi có thể rút ngắn điều này hơn nữa.

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

Theo đó , bạn không tính phép gán theo độ dài, vì vậy -2 byte.

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

Đây là sân golf đầu tiên của tôi, vì vậy nó không tốt lắm.


2

PHP 68 61 58 byte

Sử dụng mã hóa ISO-8859-1.

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

Chạy như thế này (-d thêm tính thẩm mỹ):

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

Ung dung:

// 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 & "ß";
  • Đã lưu 7 byte bằng cách sử dụng bitwise AND thay vì sử dụng ucwords .
  • Đã lưu 3 byte bằng cách sử dụng mã hóa ISO-8859-1 và sử dụng ß(nhị phân 11011111) cho nhị phân ANDthay vì không gian phủ định (nhị phân 00100000).

1

Toán học, 132 117 byte

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

15 byte được lưu nhờ @CatsAreFluffy.


1arg StringSplitmặc định để phân tách trên khoảng trắng (-5byte)
CalculatorFeline

1
Ngoài ra, bạn có thể thay thế danh sách từ với "of"|"and"|"or"|"by". Ngoài ra {"a","b","c"}<>""==StringJoin[{"a","b","c"}]. Một điều cuối cùng: Characterstự động ánh xạ qua danh sách.
Máy

1
Bảng xếp hạng muốn bạn đặt dấu phẩy sau Mathicala. Ngoài ra, bạn cũng được chào đón :)
Máy

1

PowerShell, 81 byte

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

Giải trình

Tách trên các không gian tạo ra một mảng. Thả các thành viên vi phạm. Kéo nhân vật đầu tiên và tham gia cùng nhau. Sử dụng ToUpper()trên chuỗi kết quả.


Nhận ra rằng nó sẽ phù hợp với Anderson và thả nó. Đã thêm 4 byte
Matt

1

Lua, 122 byte

Tôi rất thích sử dụng một mô hình để loại bỏ các từ bị cấm, nhưng thật đáng buồn, lua không được tạo ra để khớp với các nhóm nhân vật ... Vì vậy, tôi đã phải sử dụng một vòng lặp thay thế, tốn kém hơn nhiều.

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

Bị đánh cắp

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

Chào! Tôi cũng đã gửi một Lua, ở đây: codegolf.stackexchange.com/a/75616/33183 .
Trebuchette

1

Yếu tố, 175 byte

Tôi đã học được rất nhiều bằng cách viết này.

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 

Như một từ:

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

Bài kiểm tra đơn vị:

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

Vượt qua!


1

Lua, 113 112 93 byte

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

Wow, hoàn toàn quên sự tồn tại của %w! Đó là một trong những tuyệt vời!
Katenkyo

Katenkyo: Vâng, điều này cũng sẽ làm việc với %a; %aphù hợp với các chữ cái, và %wphù hợp với các chữ cái và số. Điều chính là sử dụng một chức năng tùy chỉnh trong gsub.
Trebuchette

Vâng, tôi thấy rằng việc xóa AND OR BY OFtừ dễ dàng hơn khi chọn từ ... Tôi không sử dụng chức năng tùy chỉnh vì chúng tốn rất nhiều tiền, vì vậy tôi mặc dù gsub("(%a)%a+",string.upper)sau khi xóa chúng sẽ tốt hơn
Katenkyo 17/03/2016

1

C #, 134 byte

Chơi gôn

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

Có thể đọc được

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

Thực thi từ dòng lệnh

75448.exe Khuếch đại ánh sáng bằng cách kích thích bức xạ phát ra

LASER

75448.exe Hoa Kỳ

Hoa Kỳ


0

IPOS - không cạnh tranh, 27 byte

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

Điều này hoạt động trong phiên bản hiện tại (v0.2) của trình thông dịch .

Chạy ví dụ

python IPOS.py -i "Hợp chủng quốc Hoa Kỳ" uS` \ "VÀ | HOẶC | BỞI | OF \" ER`% S! h% S-
Hoa Kỳ

Dấu gạch chéo ngược chỉ có để thoát dấu ngoặc kép và không cần thiết cho chương trình.

Giải trình

u # Tạo chữ hoa đầu vào
S # Đẩy một khoảng trắng vào ngăn xếp
`" AND | OR | BY | OF "ER` # Đẩy một lệnh vào ngăn xếp, thay thế các kết quả khớp của biểu thức chính quy
                   # với một chuỗi rỗng
% # Tách chuỗi đầu vào phía trên trên khoảng trắng, áp dụng lệnh và
                   # tham gia trở lại vào không gian. Điều này loại bỏ các từ cần thiết từ đầu vào.
S # Đẩy một khoảng trắng vào ngăn xếp
! h # Nhấn một lệnh chỉ chọn ký tự đầu tiên của chuỗi
% # Tách trên khoảng trắng, áp dụng lệnh và nối lại khoảng trắng
S- # Xóa các khoảng trống còn lại (quên làm cho có thể sử dụng được
                   # với regexes, sẽ lưu cho tôi một số byte ở đây :()

0

lõi bash / GNU, 60 byte

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


0

Pylongolf2 , 14 byte (UTF-8)

c| l1╨3♀~

Pylongolf2 có nhiều ký tự không phải ASCII được tính là 2 byte.

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.