Membuat akronim


24

Objektif

Tujuan Anda adalah membuat program yang mengubah input ke akronimnya. Masukan Anda dijamin hanya memiliki huruf dan spasi. Input akan memiliki tepat satu spasi di antara kata-kata. Anda harus menampilkan akronim dari input.

Aturan

  • Kode Anda tidak boleh peka huruf besar-kecil (mis. fooDan Foosama)
  • Kode Anda harus mengabaikan kata-kata berikut dan tidak menempatkannya dalam akronim: and or by of
  • Anda tidak dapat berasumsi bahwa kata-katanya semua huruf kecil.
  • Keluaran harus sepenuhnya ditulis dalam huruf kapital, tanpa pemisahan antara karakter.
  • Newline tambahan diterima tetapi tidak perlu.
  • Jika bahasa Anda memiliki fungsi akronim bawaan, Anda mungkin tidak menggunakannya.

Contohnya

(input / output dikelompokkan)

United States of America
USA

Light Amplification by Stimulation of Emitted Radiation
LASER

united states of america
USA

Jordan Of the World
JTW

Mencetak gol

Ini adalah tantangan sehingga kode terpendek menang.

Papan peringkat

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>


Saya telah menambahkan 2 kasus uji.
Aplet123

1
@ Aplet123 Apakah Anda yakin itu yang Anda inginkan? Karena jika itu masalahnya, tantangannya adalah menghilangkan spasi dan menurunkan huruf. (Misalnya 4 byte dalam Retina :) T` l)
Martin Ender

4
Agak terlambat untuk mengubahnya, tetapi umumnya Anda juga mengharapkan kata-kata seperti "a", "an", "the", "untuk", "to", dll dihapus.
Darrel Hoffman

2
Ini mengesampingkan fakta bahwa AS bukan akronim, ini singkatan? NASA adalah akronim karena Anda mengucapkan kata "nasa". Jika Anda mengeja huruf-hurufnya, itu bukan akronim.
corsiKa

1
Bisakah kita berasumsi bahwa input akan selalu memiliki output yang tidak kosong?
Downgoat

Jawaban:


10

Pyth, 25 21 20 byte

shM-crz1dc4."@YK½¼

Coba di sini!

Terima kasih kepada @Jakube karena telah menghemat satu byte!

Penjelasan

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

     rz1 # ubah input menjadi huruf besar
    masukan masukan cd # pada spasi
         c4. "@ YK½¼ # buat daftar kata-kata dari string yang dikemas yang akan diabaikan
   - # saring kata-kata itu
 hM # hanya mengambil huruf pertama dari semua kata
s # gabungkan mereka menjadi satu string

String yang dikemas menjadi ANDBYOROF


Trik mengemas string kecil: ."@YK½¼menghemat satu byte lebih "ANDORBYOF. Itu pada dasarnya @ANDBYOROFdikemas.
Jakube

Dang, karakter non-ascii dihapus. Hanya berkemas @ANDBYOROFdan lihat apa yang Anda dapatkan.
Jakube

@ Jakube Terima kasih! Mencoba mengepaknya sebelumnya, tetapi selalu berakhir dengan panjang yang sama atau lebih lama.
Denker

10

Jelly , 21 20 byte

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

Cobalah online!

(-1 terima kasih kepada @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

Kamus Jelly agak aneh karena memiliki ANDhuruf besar namun bydalam huruf kecil ...


8

Retina, 29 31 36 byte

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

Dimaksudkan baris baru di akhir.

Terima kasih kepada Martin Büttner karena telah menghemat 5 byte

Cobalah online

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

Saya tidak terbiasa dengan retina. Apa yang T`l`Lharus dilakukan
Cyoce

@Cyoce Lihat pembaruan dengan penjelasan
andlrc

6

JavaScript (ES6), 56 byte

Menyimpan satu byte berkat @ edc65.

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

Penjelasan

Kode ini cukup jelas, saya hanya akan menjelaskan regex:

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

Itu menghapus semua karakter yang cocok ini dan huruf besar kata


1
menempatkan .toUpperCase () sebelum regexp Anda dapat menghindari iflag
edc65

@ edc65 ide cerdas, terima kasih!
Downgoat

Cukup yakin bahwa orangtua tidak diperlukan di sini
Shaun H

5

JavaScript, 61 64 66 63 byte

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

Ini menggunakan Ekspresi Reguler untuk menemukan kata-kata yang bukan dari daftar and, or, of, by:, dan menangkap huruf pertama. Ini kemudian memanfaatkan huruf yang dihasilkan string.

EDIT: 64 Bytes - Memperbaiki kata mulai denganof,or,by,and

EDIT: 66 Bytes - Tetap untuk memeriksa semua kata termasuk kata terakhir.

EDIT: 63 Bytes - Disimpan 3 Bytes berkat @ edc65 dan @Cyoce !


Tidak berfungsi untukFoo Offline Bar
Downgoat

Konsensus umum adalah Anda tidak perlu menetapkan fungsi ke variabel.
Cyoce

menempatkan .toUpperCase () sebelum regexp Anda dapat menghindari iflag
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

Saya sangat menyukai bagian terakhir itu. Yang pertama .di regex cocok dengan karakter pertama dari baris. Kemudian kita gunakan \zsuntuk memulai bagian "sebenarnya sedang diganti", secara efektif tidak menggantikan karakter awal. .*cocok dengan sisa baris, dan \ncocok dengan baris tambahan. Karena kami tidak menentukan string pengganti, vim hanya menghapus semua yang ada dalam pertandingan, hanya menyisakan inisial.


vimadalah bahasa pemrograman
CousinCocaine

4

CJam, 28 24 22 byte

qeuS/"AOBONRYFD"4/z-:c

Cobalah online . Terima kasih kepada Sp3000 karena menunjukkan bug dan menyarankan perbaikan, dan kepada Dennis untuk menyimpan 4 6 (!) Byte.

Penjelasan

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 menyarankan trik ini untuk memperpendek daftar kata: Kita bagi AOBONRYFDmenjadi empat bagian, kita dapatkan

AOBO
NRYF
D

Memindahkan kolom ke dalam baris dengan z operator, kami mendapatkan kata-kata yang tepat!


4

Julia, 72 63 61 55 byte

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

Ini adalah fungsi anonim yang menerima string dan mengembalikan string. Untuk menyebutnya, tetapkan ke variabel.

Kami mengonversi string menjadi uppercase, memilih setiap kecocokan dari ekspresi reguler \b(?!AND|OR|OF|BY)\Ssebagai array, danjoin itu menjadi string.

Disimpan 8 byte berkat Dennis!



3

Ruby, 45 43 byte

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

Ini adalah fungsi lambda yang menerima string dan mengembalikan string. Untuk menyebutnya, tetapkan ke variabel dan lakukan f.call(input).

Ini menggunakan pendekatan yang sama dengan jawaban Julia saya , yaitu dikonversi ke huruf besar, dapatkan kecocokan dari ekspresi reguler \b(?!AND|OR|OF|BY)\S, dan bergabung menjadi string.

Coba di sini

Disimpan 2 byte berkat manatwork!


3
.join*''. Ngomong-ngomong, tidak perlu untuk menetapkan apa pun untuk menyebutnya. Cukup berikan argumen sebagai subskrip:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
manatwork

@manatwork Oh bagus, terima kasih!
Alex A.

3

PHP, 92 byte

Usaha pertama di kode golf.

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

Variabel $sadalah frase yang akan dikonversi: $s = "United States of America".

Membutuhkan PHP 5.4 atau lebih tinggi untuk sintaks array pendek agar berfungsi.


Hanya FYI, kode-golf diberi skor byteskecuali dinyatakan lain, dan Anda dapat menggunakan hanya #pada awal baris untuk membuat header.
kucing

2
Ada masalah. Menggunakan $smembutuhkan register_globals, tetapi yang telah dihapus dari PHP sejak 5.4, jadi jawaban Anda tidak dapat berfungsi karena Anda memerlukan 5.4 untuk sintaks array pendek. Anda perlu mendapatkan string input sebagai argumen ( $argv, argumen fungsi atau yang serupa).
aross

3

Bash + GNU coreutils, 103 76 byte

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

Jalankan dengan

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

baik dengan argumen tunggal yang dikutip atau dengan banyak argumen.

(Saya terdistorsi kata terakhir mengandung dari ).


60 byte

Terima kasih kepada @manatwork.

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

Maaf, tapi awkpanggilan itu terlihat mengerikan. Bagaimana dengan menggantinya ${@^^}?
manatwork

@manatwork, poin bagus, tidak memikirkan hal itu ...
rexkogitans

Terlihat jauh lebih baik. Sekarang tolong gantikan greppanggilannya [[ $i = @(AND|OR|BY|OF) ]]. ;) Dan dengan itu Anda juga dapat menghapus bagian "+ GNU coreutils" dari header posting.
manatwork

Satu hal lagi: Anda bisa mengganti echodengan printf. Selanjutnya Anda dapat menerapkan Digital Trauma 's penjepit ujung juga. (Lebih lanjut dalam Tip untuk bermain golf di Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
manatwork

Saya sedang mencari notasi pesta mirip dengan grep 's \btetapi couldnot menemukannya ... Dan aku tidak tahu bahwa do...donebisa mengganti dengan kurung kurawal.
rexkogitans

3

JavaScript, 104 85 byte

Disimpan 19 byte berkat @ Aplet123 .

Pisahkan string dengan spasi kemudian periksa apakah itu kata-kata, atau, dan, atau oleh. Jika ya, ia mengabaikannya, jika tidak maka ia harus huruf pertama. Kemudian bergabung dengan array dan membuat string huruf besar.

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

Tidak Disatukan:

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

Mengapa ada backtick di bagian akhir? Itu menyebabkan kesalahan dan tidak dimaksudkan untuk berada di sana. Anda mungkin harus menghapus backtick.
Aplet123

Anda juga tidak perlu var. Kami tidak khawatir mencemari ruang lingkup global dalam kode golf: P
NinjaBearMonkey

Tidak bekerja. Jika Anda melihat contoh input `amerika
serikat`

Ya, saya perhatikan itu. Nama fungsi bawaan super panjang yang bodoh.
clamchowder314

Anda dapat mengatur Z _.map(v=>/o(f|r)|and|by/.test(v)?"":v[0]) sebagai ganti "". Anda dapat menghapus _.forEach(p=>Z+=p[0].toUpperCase());baris Anda dan mengganti return Zbaris Anda dengan return Z.join("").toUpperCase()
Aplet123

3

MATL , 34 27 byte

1 byte lebih sedikit berkat @AndN

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

Cobalah 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
Mungkin ini bekerja dengan 33 byte? XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
Adnan

2

05AB1E , 33 32 28 byte

Kode:

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

Menggunakan pengodean 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 bytes

Saya cukup yakin ini bisa dipersingkat lebih banyak karena saya masih payah dalam menggunakan $, .dll. Jadi saya tetap menggunakan ()insted =)

Terima kasih @nimi untuk sihir bantuan Anda!

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

Contoh:

*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

bab 6 dari Pelajari Anda Haskell untuk Great Good! memiliki pengantar yang baik untuk aplikasi fungsi $dan komposisi dengan. .
nimi

1
Beralih kembali ke non-pointfree dan pemahaman daftar adalah bahkan lebih pendek: a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
nimi

Sekarang ini jelas di atas kepala saya, saya harus belajar lebih cepat =)
flawr

2

Python, 103 96 byte

Ini adalah upaya pertama saya di golf kode, dan ini mungkin bisa lebih banyak golf. Terima kasih kepada DenkerAffe karena telah menyimpan tujuh karakter.

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

Dibutuhkan input, mengubahnya menjadi daftar kata dan mengambil huruf pertama mereka jika itu bukan salah satu kata terlarang, kemudian mengubah semuanya menjadi huruf besar.


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

Atau Anda hanya pergi dengan lambda yang mendapat masukan sebagai argumen. Ini selalu diizinkan di sini jika tantangan tidak melarangnya secara eksplisit.
Denker

@CatsAreFluffy Mungkin membantu untuk beralih ke Python 3, tapi saya lebih suka Python 2 daripada itu karena siapa yang suka tanda kurung?
mriklojn

Anda dapat menyimpan yang lebih rendah () saat Anda memasukkan input terlebih dahulu, sebelum Anda melakukan apa pun. Daftar filter Anda kemudian menjadi ['DAN', 'ATAU', ...]., Tetapi sisanya akan tetap sama. Anda juga dapat menjatuhkan beberapa spasi putih di belakang kawat gigi. x[0]for ...sepenuhnya valid dalam Python.
Denker

Hapus spasi antara simbol dan kata kunci (berfungsi)
CalculatorFeline

2

JavaScript, 80 72 55 53 byte

Kode

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

Saya baru saja membaca tentang fungsi panah dan menyadari bahwa saya dapat mempersingkat ini lebih jauh.

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

Menurut ini , Anda tidak menghitung tugas dalam panjangnya, jadi -2 byte.

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

Ini golf pertama saya, jadi tidak terlalu bagus.


2

PHP, 68 61 58 byte

Menggunakan penyandian ISO-8859-1.

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

Jalankan seperti ini ( -dditambahkan hanya untuk estetika):

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

Tidak Disatukan:

// 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 & "ß";
  • Disimpan 7 byte dengan menggunakan bitwise DAN bukannya menggunakan ucwords .
  • Disimpan 3 byte dengan menggunakan pengkodean ISO-8859-1 dan menggunakan ß(biner 11011111) untuk biner ANDalih-alih ruang dinegasikan (biner 00100000).

1

Mathematica, 132 117 byte

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

15 byte disimpan berkat @CatsAreFluffy.


1arg StringSplitdefault untuk dipisahkan di whitespace (-5bytes)
CalculatorFeline

1
Anda juga dapat mengganti daftar kata dengan "of"|"and"|"or"|"by". Juga {"a","b","c"}<>""==StringJoin[{"a","b","c"}]. Satu hal terakhir: Characterssecara otomatis memetakan daftar.
CalculatorFeline

1
Papan peringkat lebih suka Anda menempatkan koma setelah Mathematica. Anda juga dipersilakan :)
CalculatorFeline

1

PowerShell, 81 Bytes

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

Penjelasan

Berpisah pada spasi membuat array. Jatuhkan anggota yang menyinggung. Tarik karakter pertama dan bergabunglah bersama. Gunakan ToUpper()pada string yang dihasilkan.


Menyadari bahwa itu akan cocok dengan Anderson dan menjatuhkannya. Menambahkan 4 byte
Matt

1

Lua, 122 Bytes

Saya ingin sekali menggunakan pola untuk menghilangkan kata-kata yang dilarang, tetapi sayangnya, lua tidak dibuat untuk mencocokkan grup karakter ... Jadi saya harus menggunakan for for loop, yang jauh lebih mahal.

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

Tidak disatukan

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

Hei! Saya juga membuat pengajuan Lua, di sini: codegolf.stackexchange.com/a/75616/33183 .
Trebuchette

1

Faktor, 175 byte

Saya belajar banyak dengan menulis ini.

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 

Sebagai sebuah kata:

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

Tes unit:

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

Lulus!


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

Ya, saya melihat bahwa lebih mudah untuk menghapus AND OR BY OFketika memilih kata-kata ... Saya tidak menggunakan fungsi khusus karena harganya mahal, jadi saya gsub("(%a)%a+",string.upper)setelah menghapusnya akan lebih baik
Katenkyo

1

C #, 134 byte

Golf

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

Dapat dibaca

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

Jalankan dari baris perintah

75448.exe Amplifikasi Cahaya dengan Stimulasi Radiasi yang Dipancarkan

LASER

75448.exe Amerika Serikat

Amerika Serikat


0

IPOS - tidak bersaing, 27 byte

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

Ini berfungsi dalam versi saat ini (v0.2) dari juru bahasa .

Contoh dijalankan

python IPOS.py -i "Amerika Serikat" uS` \ "DAN | ATAU | DENGAN | DARI \" ER`% S! h% S-
Amerika Serikat

Garis miring terbalik hanya ada untuk lolos dari kutipan dan tidak diperlukan untuk program.

Penjelasan

u # Buat input huruf besar
S # Dorong spasi ke tumpukan
`" AND | OR | BY | OF "ER` # Dorong perintah ke stack, yang menggantikan kecocokan regex
                   # dengan string kosong
% # Membagi string input huruf besar pada spasi, menerapkan perintah dan
                   # Bergabung kembali di spasi. Ini menghilangkan kata-kata yang diperlukan dari input.
S # Dorong spasi ke tumpukan
! h # Dorong perintah yang hanya memilih karakter pertama dari sebuah string
% # Membagi spasi, menerapkan perintah dan bergabung kembali pada spasi
S- # Hapus ruang yang tersisa (lupa untuk membuat ini dapat digunakan
                   # dengan regex, akan menyelamatkan saya beberapa byte di sini :()

0

bash / GNU coreutils, 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 memiliki banyak karakter non-ASCII yang dihitung sebagai 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.