ทำให้ตัวย่อ


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 กรณีทดสอบ
Aplet123

1
@ Aplet123 คุณแน่ใจหรือว่าต้องการสิ่งนั้น เพราะถ้าเป็นกรณีนี้ความท้าทายจะลดลงเพื่อลบช่องว่างและอักษรตัวพิมพ์เล็ก (เช่น 4 ไบต์ใน Retina: T` l)
มาร์ตินเอนเดอร์

4
ช้าเกินไปที่จะเปลี่ยน แต่โดยทั่วไปคุณจะคาดหวังว่าคำเช่น "a", "an", "the", "สำหรับ", "เป็น" ถึง "ฯลฯ จะถูกลบออก
Darrel Hoffman

2
นี่คือความจริงที่ว่าสหรัฐอเมริกาไม่ใช่คำย่อมันเป็นตัวย่อ? นาซ่าเป็นตัวย่อเพราะคุณพูดคำว่า "นาซ่า" หากคุณสะกดตัวอักษรมันไม่ใช่คำย่อ
corsiKa

1
เราสามารถสมมติว่าอินพุตจะมีเอาต์พุตไม่ว่างเสมอได้หรือไม่?
Downgoat

คำตอบ:


10

Pyth, 25 21 20 ไบต์

shM-crz1dc4."@YK½¼

ลองที่นี่!

ขอบคุณ @Jakube สำหรับการบันทึกหนึ่งไบต์!

คำอธิบาย

shM-crz1dc4. "@ YK½¼ # z = อินพุต

     rz1 # แปลงอินพุตเป็นตัวพิมพ์ใหญ่
    cd # split อินพุตบนช่องว่าง
         c4. "@ YK½¼ # สร้างรายการคำจากสตริงที่บรรจุซึ่งจะถูกละเว้น
   - # กรองคำเหล่านั้นออก
 hM # ใช้ตัวอักษรตัวแรกของทุกคำเท่านั้น
s # เข้าร่วมพวกเขาเป็นหนึ่งสาย

สตริงที่บรรจุกลายเป็น ANDBYOROF


เคล็ดลับเล็ก ๆ น้อย ๆ สตริงบรรจุ: บันทึกมากกว่าหนึ่งไบต์."@YK½¼ "ANDORBYOFมัน@ANDBYOROFอัดแน่นอยู่ทั่วไป
Jakube

Dang, non-ascii-chars ถูกลบไปแล้ว เพียงแพ็ค@ANDBYOROFและดูสิ่งที่คุณได้รับ
Jakube

@ Jakube ขอบคุณ! พยายามที่จะแพ็คมันก่อน แต่มักจะจบลงด้วยความยาวเท่ากันหรือนานกว่า
Denker

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

Retina 29 31 36ไบต์

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

บรรทัดใหม่ที่ตั้งใจไว้ในตอนท้าย

ขอบคุณMartin Bü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

@Cyoce ดูการอัปเดตพร้อมคำอธิบาย
andlrc

6

JavaScript (ES6), 56 ไบต์

บันทึกเป็นไบต์ด้วย @ edc65

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

คำอธิบาย

รหัสคือการอธิบายตนเองฉันจะอธิบาย regex:

\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 ขอบคุณ!
Downgoat

ค่อนข้างแน่ใจว่าไม่จำเป็นต้องมีการเลียนแบบที่นี่
Shaun 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 ไบต์ - บันทึก 3 ไบต์ขอบคุณ@ edc65และ@Cyoce !


ใช้งานไม่ได้Foo Offline Bar
Downgoat

ฉันทามติทั่วไปคือคุณไม่จำเป็นต้องกำหนดฟังก์ชันให้กับตัวแปร
Cyoce

วาง. toUpperCase () ก่อน regexp คุณสามารถหลีกเลี่ยงการ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

ฉันชอบบิตสุดท้ายโดยเฉพาะ ตัวแรก.ใน 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

Julia, 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/)*''}

นี่คือฟังก์ชั่นแลมบ์ดาที่ยอมรับสตริงและส่งคืนสตริง f.call(input)เรียกว่ากำหนดให้ตัวแปรและทำ

มันใช้วิธีการเดียวกันกับคำตอบ Juliaของฉันคือแปลงเป็นตัวพิมพ์ใหญ่รับการจับคู่ของนิพจน์ทั่วไป\b(?!AND|OR|OF|BY)\Sและเข้าร่วมเป็นสตริง

ลองที่นี่

บันทึก 2 ไบต์ด้วยการจัดการ!


3
.join*''→ โดยวิธีการที่ไม่จำเป็นต้องกำหนดให้กับสิ่งที่จะเรียกมันว่า เพียงแค่ส่งผ่านอาร์กิวเมนต์เป็นตัวห้อย:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
ทำ

@ การจัดการโอ้ดีขอบคุณ!
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 ขึ้นไปเพื่อให้สามารถทำงานได้


เพียงแค่ FYI โค้ดของกอล์ฟจะได้คะแนนbytesเว้นแต่จะระบุไว้เป็นอย่างอื่นและคุณสามารถใช้เพียง#จุดเริ่มต้นของบรรทัดเพื่อสร้างส่วนหัว
แมว

2
มีปัญหา การใช้$sต้องการregister_globalsแต่ที่ถูกลบออกจาก PHP ตั้งแต่ 5.4 ดังนั้นคำตอบของคุณไม่สามารถทำงานได้เนื่องจากคุณต้องการ 5.4 สำหรับไวยากรณ์ของอาร์เรย์แบบสั้น คุณต้องได้รับสตริงอินพุตเป็นอาร์กิวเมนต์ ( $argv, ฟังก์ชันอาร์กิวเมนต์หรือคล้ายกัน)
aross

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

ขออภัยการawkโทรนั้นดูน่ากลัว แล้วแทนที่ด้วยมัน${@^^}ล่ะ?
จัดการ

@manatwork จุดดี didnot คิดว่า ...
rexkogitans

ดูดีขึ้นมาก กรุณาเปลี่ยนการโทรที่มีgrep [[ $i = @(AND|OR|BY|OF) ]];) และคุณสามารถลบส่วน“ + GNU coreutils” ออกจากส่วนหัวของโพสต์ได้ด้วย
จัดการ

สิ่งหนึ่งที่เพิ่มเติม: คุณสามารถแทนที่ด้วยecho printfนอกจากนี้คุณยังสามารถใช้เคล็ดลับรั้งของDigital Traumaด้วย (เพิ่มเติมในเคล็ดลับสำหรับการเล่นกอล์ฟใน Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
จัดการ

ผมกำลังมองหาสัญกรณ์ทุบตีคล้ายกับgrep 's \bแต่ couldnot พบว่ามัน ... และผมไม่ทราบว่าdo...doneจะสามารถแทนที่โดยวงเล็บปีกกา
rexkogitans

3

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

ทำไมถึงมี backtick ในตอนท้าย มันทำให้เกิดข้อผิดพลาดและไม่ได้ตั้งใจจะอยู่ที่นั่น คุณน่าจะลบ backtick
Aplet123

varนอกจากนี้คุณไม่จำเป็นต้อง เราไม่ต้องกังวลเกี่ยวกับการสร้างมลภาวะระดับโลกในการแข่งขันกอล์ฟรหัส: P
NinjaBearMonkey

มันไม่ทำงาน. ถ้าคุณดูตัวอย่างอินพุต `อเมริกาของอเมริกา 'มันให้เอาต์พุต' usa 'ไม่ใช่` USA'
Aplet123

ใช่ฉันสังเกตเห็นว่า ชื่อฟังก์ชั่นบิวด์อินยาวสุดโง่
clamchowder314

คุณสามารถตั้งค่า Z เพื่อ แทน_.map(v=>/o(f|r)|and|by/.test(v)?"":v[0]) ""คุณสามารถลบ_.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)!
Adnan



2

Haskell, 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"

โอ้.ผู้ประกอบการแต่งเพลงนั้นดูเข้าใจได้ง่าย ฉันไม่เคยแน่ใจว่าสิ่งที่ประเมินในลำดับใด
ข้อบกพร่อง

บทที่ 6 ของเรียนรู้คุณ Haskell เพื่อประโยชน์ที่ดี! มีแนะนำที่ดีในการประยุกต์ใช้ฟังก์ชั่น$.และองค์ประกอบด้วย
nimi

1
เปลี่ยนกลับไปไม่ใช่ pointfree a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]และความเข้าใจเป็นรายการแม้สั้น:
nimi

ตอนนี้แน่นอนเหนือหัวของฉันฉันจะต้องเรียนรู้เร็ว =)
flawr

2

Python ขนาด103 96 ไบต์

นี่เป็นความพยายามครั้งแรกของฉันที่การตีกอล์ฟ ขอบคุณ DenkerAffe สำหรับการบันทึกตัวละครเจ็ดตัว

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

ใช้การป้อนข้อมูลเปลี่ยนเป็นรายการคำและใช้ตัวอักษรตัวแรกหากไม่ใช่คำที่ต้องห้ามจากนั้นเปลี่ยนทุกอย่างให้เป็นตัวพิมพ์ใหญ่


2
มันได้รับการพยายามที่จะดำเนินการป้อนข้อมูล ใน Python 3 ที่ไม่เกิดขึ้น (ฉันคิดว่ามันช่วยประหยัด 2 ไบต์เพื่อเปลี่ยนเป็น Python 3 (-4 สำหรับinputvs raw_input, +2 สำหรับprint("".join..)vs print"".join..) นอกจากนี้ยังไม่มีช่องว่างระหว่างสัญลักษณ์และคำหลัก
CalculatorFeline

หรือคุณแค่ไปกับแลมบ์ดาซึ่งรับอินพุตเป็นอาร์กิวเมนต์ สิ่งนี้ได้รับอนุญาตเสมอที่นี่หากความท้าทายไม่ได้ห้ามอย่างชัดเจน
Denker

@CatsAreFluffy มันอาจช่วยเปลี่ยนไปใช้ Python 3 แต่ฉันชอบ Python 2 มากกว่าเพราะใครชอบวงเล็บอยู่แล้ว?
mriklojn

คุณสามารถบันทึกส่วนล่าง () เมื่อคุณพิมพ์ใหญ่อินพุตก่อนที่คุณจะทำอะไรก็ได้ รายการตัวกรองของคุณจะกลายเป็น ['AND', 'OR', ... ]. แต่ส่วนที่เหลือจะคงเดิม นอกจากนี้คุณยังสามารถวางช่องว่างบางส่วนไว้ด้านหลังเครื่องหมายวงเล็บ x[0]for ...ถูกต้องสมบูรณ์ใน Python
Denker

ลบช่องว่างระหว่างสัญลักษณ์และคำหลัก (ใช้งานได้)
CalculatorFeline

2

JavaScript, 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

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 & "ß";
  • ที่บันทึกไว้ 7 ucwordsไบต์โดยใช้ค่าที่เหมาะสมและแทนการใช้
  • บันทึกแล้ว 3 ไบต์โดยใช้การเข้ารหัส ISO-8859-1 และการใช้ß(ไบนารี11011111) สำหรับไบนารีANDแทนพื้นที่เมื่อตะกี้ ​​(ไบนารี00100000)

1

Mathematica, 132 117 ไบต์

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

บันทึก 15 ไบต์ด้วย @CatsAreFluffy


1arg StringSplitเริ่มต้นที่แยกบนช่องว่าง (-5bytes)
CalculatorFeline

1
"of"|"and"|"or"|"by"นอกจากนี้คุณสามารถเปลี่ยนรายการคำที่มี {"a","b","c"}<>""==StringJoin[{"a","b","c"}]ด้วย สิ่งสุดท้ายที่: Charactersแผนที่โดยอัตโนมัติในรายการ
CalculatorFeline

1
กระดานแต้มนำต้องการให้คุณใส่เครื่องหมายจุลภาคหลัง Mathematica ยินดีต้อนรับคุณเช่นกัน :)
เครื่องคิดเลข

1

PowerShell, 81 ไบต์

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

คำอธิบาย

แยกช่องว่างที่สร้างอาร์เรย์ วางสมาชิกที่กระทำผิด ดึงตัวละครตัวแรกและเข้าด้วยกัน ใช้ToUpper()กับสตริงผลลัพธ์


ตระหนักว่าจะตรงกับแอนเดอร์สันและวางมันลง เพิ่ม 4 ไบต์
Matt

1

Lua, 122 ไบต์

ฉันชอบที่จะใช้รูปแบบในการกำจัดคำที่ถูกแบน แต่น่าเศร้าที่ lua ไม่ได้ถูกสร้างขึ้นเพื่อจับคู่กลุ่มของตัวละคร ... ดังนั้นฉันจึงต้องใช้ลูปแทนแทนซึ่งมีราคาแพงกว่ามาก

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

เฮ้! ฉันยังทำส่งลัวะที่นี่: codegolf.stackexchange.com/a/75616/33183
Trebuchette

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

Lua, 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 Light Amplification โดยการกระตุ้นการแผ่รังสีที่ปล่อยออกมา

LASER

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` # กดคำสั่งไปยังสแต็กซึ่งแทนที่การจับคู่ของ regex
                   # ด้วยสตริงว่าง
% # แยกสตริงอินพุตตัวพิมพ์ใหญ่บนช่องว่างใช้คำสั่งและ
                   # เข้าร่วมกลับบนช่องว่าง สิ่งนี้จะลบคำที่ต้องการออกจากอินพุต
S # ดันช่องว่างไปยังสแต็ก
! h # กดคำสั่งที่เลือกอักขระตัวแรกของสตริงเท่านั้น
% # แยกในช่องว่างใช้คำสั่งและเข้าร่วมกลับบนช่องว่าง
S- # ลบช่องว่างที่เหลือ (ลืมที่จะทำให้การใช้งานนี้
                   # ด้วย regexes จะช่วยฉันไบต์ที่นี่ :()


0

Pylongolf2 , 14 ไบต์ (UTF-8)

c| l1╨3♀~

Pylongolf2 มีอักขระที่ไม่ใช่ ASCII จำนวนมากที่นับเป็น 2 ไบต์

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.