Складання абревіатури


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", "a", "the", "for", "to" тощо, будуть видалені.
Даррель Гофман

2
Це відміняє той факт, що США - це не абревіатура, це абревіатура? NASA - це абревіатура, тому що ви говорите слово "nasa". Якщо ви пишете літери, це не є абревіатурою.
corsiKa

1
Чи можемо ми припустити, що вхід завжди матиме не порожній вихід?
Пуховик

Відповіді:


10

Pyth, 25 21 20 байт

shM-crz1dc4."@YK½¼

Спробуйте тут!

Дякуємо @Jakube за збереження одного байта!

Пояснення

shM-crz1dc4. "@ YK½¼ # z = вхід

     rz1 # перетворити вхід у великі регістри
    cd # розділений вхід на пробіли
         c4. "@ YK½¼ # створити список слів із упакованого рядка, який слід ігнорувати
   - # відфільтруйте ці слова
 hM # візьміть лише першу букву всіх слів
s # об'єднайте їх в один рядок

Упакований рядок стає ANDBYOROF


Невеликий трюковий пакувальний рядок: ."@YK½¼економить один байт "ANDORBYOF. Це в основному @ANDBYOROFупаковано.
Якубе

Данг, не-ассі-символи видалено. Просто запакуйте @ANDBYOROFі подивіться, що ви отримаєте.
Якубе

@Jakube Дякую! Спробував упакувати його раніше, але завжди закінчувався однаковою чи довшою.
Денкер

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

Словник Джеллі дещо дивний у тому, що він має ANDвеликі byрегістри, а ще малі ...


8

Сітківка, 29 31 36 байт

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

Задуманий новий рядок наприкінці.

Завдяки Мартіну Бюттнеру за збереження 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.

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 розумна ідея, дякую!
Пуховик

Напевно впевнені, що тут не потрібні парени
Shaun H

5

JavaScript, 61 64 66 63 байт

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

Він використовує регулярний вираз, щоб знайти слова, які не є зі списку: and, or, of, byі фіксує першу букву. Потім він пише з великої літери отриманий рядок літер.

EDIT: 64 байт - виправлено для слів, що починаються зof,or,by,and

EDIT: 66 Bytes - Виправлено для перевірки всіх слів, включаючи останнє слово.

EDIT: 63 байт - збережено 3 байти завдяки @ edc65 та @Cyoce !


Не працює для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 за те, що вказав на помилку та запропонував виправити, а також Dennis за збереження 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

Джулія, 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

Рубін, 45 43 байти

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

Це лямбда-функція, яка приймає рядок і повертає рядок. Щоб його зателефонувати, призначте його змінній та зробіть f.call(input).

Він використовує той самий підхід, що і у моїй відповіді Джулії , а саме перетворити на великі регістри, отримати збіги регулярного виразу \b(?!AND|OR|OF|BY)\Sта об'єднатись у рядок.

Спробуйте тут

Збережено 2 байти завдяки маневреній роботі!


3
.join*''. До речі, не потрібно привласнювати його ні до чого, щоб називати його. Просто передайте це аргументи як ->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
підзапис

@manatwork О, приємно, дякую!
Алекс А.

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якщо не зазначено інше, і ви можете використовувати лише a #на початку рядка, щоб скласти заголовок.
кіт

2
Є проблема. Використання $sвимагає register_globals, але це було видалено з PHP з 5.4, тому ваша відповідь не може працювати, як вам потрібно 5.4 для синтаксису короткого масиву. Потрібно отримати вхідний рядок як аргумент ( $argv, аргумент функції або подібний).
1616

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, хороший момент, не думав про це ...
rexkogitans

Виглядає набагато краще. Тепер замініть grepдзвінок на [[ $i = @(AND|OR|BY|OF) ]]. ;) І з цим ви також можете видалити частину "+ GNU coreutils" із заголовка повідомлення.
манатура

Ще одна річ: ви могли б замінити echoз printf. Крім того , ви можете застосувати цифровий Trauma «s распорка наконечник теж. (Докладніше в Підказки для гри в гольф на Баші .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
манатура

Я шукав позначення bash, схожі на grep 's, \bале не міг його знайти ... І я не знав, що 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()

Безголівки:

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.
Аплет123

Крім того, вам не потрібно var. Ми не турбуємось про забруднення глобальної сфери застосування коду для гольфу: P
NinjaBearMonkey

Вона не працює. Якщо ви подивитесь на приклади введення `Сполучені Штати Америки`, він дає вихід" США ", а не" США "
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)!
Аднан

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

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"

О, цей .оператор композиції виглядає досить інтуїтивно. Я просто ніколи не впевнений, що оцінюється в якому порядку.
flawr

Глава 6 Навчимося вам Haskell для великого блага! має гарне вступ до функціонального застосування $та складу. .
німі

1
Перемикання назад в не-pointfree і список розуміння ще коротше: a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"].
німі

Тепер це, безумовно, над головою, мені доведеться вчитися швидше =)
недолік

2

Пітон, 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

Або ви просто підете з лямбда, яка отримує вхід як аргумент. Тут завжди дозволено, якщо виклик не забороняє це прямо.
Денкер

@CatsAreFluffy Можливо, це допоможе перейти на Python 3, але я дуже віддаю перевагу Python 2 над ним, бо хто як і раніше любить дужки?
mriklojn

Ви можете зберегти нижній (), коли ви перший раз ввелите великі літери, перш ніж робити що-небудь. Потім ваш список фільтрів стає ['І', 'АБО', ...], але решта залишиться незмінною. Ви також можете опустити кілька білих просторів за брекети. x[0]for ...повністю дійсний у Python.
Денкер

Видаліть пробіли між символами та ключовими словами (це працює)
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

Безголівки:

// 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

Математика, 132 117 байт

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

15 байт збережено завдяки @CatsAreFluffy.


1 арг 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 байти

Мені б хотілося використовувати шаблон, щоб позбутися заборонених слів, але, на жаль, луа не створений для відповідності групам персонажів ... Тому мені довелося замість цього використати цикл, що значно дорожче.

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

Гей! Я також зробив подання про Луа тут: codegolf.stackexchange.com/a/75616/33183 .
Требушетта

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

Катенкьо: Ну, це теж би працювало %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` \ "І | АБО | BY | OF \" ER`% S! h% S-
США

Зворотні риски є лише для виходу з котирувань і не потрібні програмі.

Пояснення

u # Зробіть великі регістри введення
S # Натисніть пробіл до стеку
`" І | АБО | 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 є безліч символів, що не належать до 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.