Составление аббревиатуры


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

счет

Это задача поэтому выигрывает самый короткий код.

Leaderboard

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», «for», «to» и т. Д., Будут удалены.
Даррел Хоффман

2
Это отменяет тот факт, что США это не аббревиатура, это аббревиатура? НАСА это аббревиатура, потому что вы говорите слово «НАСА». Если вы пишете буквы, это не аббревиатура.
CorsiKa

1
Можем ли мы предположить, что вход всегда будет иметь непустой вывод?
Downgoat

Ответы:


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

@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 умная идея, спасибо!
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 () перед регулярным выражением, вы можете избежать 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 за указание на ошибку и предложение исправления, и Деннису за сохранение 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 байта благодаря manatwork!


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

@ 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 или выше для работы с коротким синтаксисом массива.


Только к вашему сведению, код-гольф оценивается, 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, хорошая мысль, не думал об этом ...
rexkogitans

Выглядит намного лучше Теперь, пожалуйста, замените grepзвонок на [[ $i = @(AND|OR|BY|OF) ]]. ;) И с этим вы также можете удалить часть «+ GNU coreutils» из заголовка поста.
manatwork

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

Я искал обозначение bash, похожее на grep , \bно не смог его найти ... И я не знал, что do...doneможно заменить фигурными скобками.
rexkogitans

3

JavaScript, 104 85 байт

Сохранено 19 байт благодаря @ Aplet123 .

Разбивает строку на пробелы, а затем проверяет, является ли она словами, или, и, или by. Если это так, он игнорирует его, в противном случае он принимает первую букву. Затем он присоединяется к массиву и делает строку заглавной.

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

Почему в конце есть обратный удар? Это вызывает ошибку и не предназначено быть там. Вы, вероятно, должны удалить спину.
Aplet123

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

Это не работает. Если вы посмотрите на примеры ввода `
United States

Да, я это заметил. Глупые супер длинные имена встроенных функций.
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

Python, 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 для Великого Добра! имеет хорошее введение в функции приложения с $и композиции с. .
Nimi

1
Переключение обратно на неточность и понимание списка еще короче 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

Или вы просто используете лямбду, которая получает входные данные в качестве аргумента. Это всегда разрешено здесь, если вызов не запрещает это явно.
Денкер

@CatsAreFluffy. Это может помочь переключиться на Python 3, но я предпочитаю Python 2, потому что кому все равно нравятся скобки?
Марькойн

Вы можете сохранить нижнюю (), когда вводите заглавные буквы первым, прежде чем что-либо делать. Тогда ваш список фильтров становится ['AND', 'OR', ...]., Но остальные останутся прежними. Вы также можете оставить некоторые пробелы за скобками. 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

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умолчанию разделяется на пробелы (-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

Lua, 122 байта

Мне бы очень хотелось использовать шаблон, чтобы избавиться от запрещенных слов, но, к сожалению, lua не предназначен для соответствия группам символов ... Поэтому мне пришлось использовать цикл for, который намного дороже.

s=arg[1]for k,v in next,{"of","and","by","or"}do
s=s:gsub(v,"")end
print(s:gsub("(%a)%a+",string.upper):gsub("%s","").."")

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

Привет! Я также сделал представление Lua, здесь: 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.
Требушетт

Да, я вижу, что это легче удалить AND OR BY OFпри выборе слов ... Я не использовал пользовательских функций, потому что они стоят дорого, поэтому я gsub("(%a)%a+",string.upper)
думал,

1

C #, 134 байта

Golfed

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 "Соединенные Штаты Америки" США` \ "И | ИЛИ | BY | OF \" ER`% S! h% S-
Соединенные Штаты Америки

Обратная косая черта существует только для экранирования кавычек и не нужна для программы.

объяснение

u # Сделать ввод заглавными
S # Вставить пробел в стек
`" AND | OR | BY | OF "ER` # Вставить команду в стек, которая заменяет совпадения регулярного выражения
                   # с пустой строкой
% # Разделить строку ввода в верхнем регистре на пробелы, примените команду и
                   # присоединиться к пробелам. Это удаляет необходимые слова из ввода.
S # Вставить пробел в стек
! h # Нажмите команду, которая выбирает только первый символ строки
% # Разделить пробелы, применить команду и снова присоединиться к пробелам
S- # Удалить оставшиеся пробелы (забыл сделать это пригодным для использования
                   # с регулярными выражениями, сэкономил бы мне несколько байтов здесь :()


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.