Задача
Ваша цель - создать программу, которая преобразует входные данные в свою аббревиатуру. Ваш ввод гарантированно будет содержать только буквы и пробелы. На входе будет ровно один пробел между словами. Вы должны вывести аббревиатуру ввода.
правила
- Ваш код не может быть чувствительным к регистру (например,
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>
T` l
)Ответы:
Pyth,
252120 байтПопробуй это здесь!
Спасибо @Jakube за сохранение одного байта!
объяснение
Упакованная строка становится
ANDBYOROF
источник
."@YK½¼
экономит один байт"ANDORBYOF
. Это в основном@ANDBYOROF
упаковано.@ANDBYOROF
и посмотрите, что вы получите.Желе ,
2120 байтПопробуйте онлайн!
(-1 благодаря @Dennis.)
Словарь Желе немного странный, потому что он
AND
в верхнем иby
нижнем регистре ...источник
Сетчатка, 29
3136байтНамеченный перевод строки в конце.
Спасибо Мартину Бюттнеру за сохранение 5 байт
Попробуйте онлайн
источник
T`l`L
?JavaScript (ES6), 56 байт
Сохраненный байт благодаря @ edc65.
объяснение
Код не требует пояснений, я просто объясню регулярное выражение:
Он удалил все эти совпадающие символы и заглавные буквы
источник
i
флагаJavaScript,
61646663 байтаОн использует регулярное выражение для поиска слов, которых нет в списке:,
and, or, of, by
и захватывает первую букву. Затем он использует заглавную строку букв.РЕДАКТИРОВАТЬ: 64 байта - исправлено для слов, начинающихся с
of,or,by,and
РЕДАКТИРОВАТЬ: 66 байт - Исправлена проверка всех слов, включая последнее слово.
РЕДАКТИРОВАТЬ: 63 байта - сохранено 3 байта благодаря @ edc65 и @Cyoce !
источник
Foo Offline Bar
i
флагаvim, 46
Мне особенно нравится этот последний кусочек. Первый
.
в регулярном выражении соответствует первому символу строки. Затем мы используем\zs
для запуска «фактически заменяемой» части, фактически не заменяя начальный символ..*
соответствует остальной части строки и\n
соответствует завершающему символу новой строки. Поскольку мы не указываем строку замены, vim просто удаляет все в совпадении, оставляя только инициалы.источник
vim
это язык программированияCJam,
282422 байтаПопробуйте онлайн . Спасибо Sp3000 за указание на ошибку и предложение исправления, и Деннису за сохранение
46 (!) Байтов.объяснение
Деннис предложил этот трюк для сокращения списка слов: разделив
AOBONRYFD
на четыре части, мы получимТранспонируя столбцы в строки с помощью
z
оператора, мы получаем правильные слова!источник
Юлия,
72636155 байтЭто анонимная функция, которая принимает строку и возвращает строку. Чтобы вызвать его, присвойте его переменной.
Мы конвертируем строку в
uppercase
, выбираем каждое совпадение регулярного выражения\b(?!AND|OR|OF|BY)\S
в виде массива иjoin
превращаем его в строку.Благодаря Деннису сэкономлено 8 байт!
источник
Perl, 32 байта
+1 байт за
-n
флаг.Алгоритм, украденный у Джулии, ответ @ AlexA .
источник
Рубин,
4543 байтаЭто лямбда-функция, которая принимает строку и возвращает строку. Чтобы вызвать его, назначьте его переменной и выполните
f.call(input)
.Он использует тот же подход, что и мой ответ Джулии , а именно преобразование в верхний регистр, получение совпадений с регулярным выражением
\b(?!AND|OR|OF|BY)\S
и объединение в строку.Попробуй здесь
Сохранено 2 байта благодаря manatwork!
источник
.join
→*''
. Кстати, нет необходимости присваивать ему что-либо для вызова. Просто передайте ему аргументы как нижний индекс:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
PHP, 92 байта
Первая попытка кода гольф.
Переменная
$s
является фраза будет конвертирована:$s = "United States of America"
.Требуется PHP 5.4 или выше для работы с коротким синтаксисом массива.
источник
bytes
если не указано иное, и вы можете использовать только#
в начале строки, чтобы сделать заголовок.$s
требуетregister_globals
, но это было удалено из PHP с 5.4, поэтому ваш ответ не может работать, так как вам требуется 5.4 для короткого синтаксиса массива. Вам необходимо получить входную строку в качестве аргумента ($argv
аргумента функции или подобного).Bash + GNU coreutils,
10376 байтБежать с
либо с одним аргументом в кавычках или с несколькими аргументами.
(Я исказил последнее слово, чтобы содержать из ).
60 байт
Благодаря @manatwork.
источник
awk
звонок выглядит ужасно. Как насчет заменить его${@^^}
?grep
звонок на[[ $i = @(AND|OR|BY|OF) ]]
. ;) И с этим вы также можете удалить часть «+ GNU coreutils» из заголовка поста.echo
сprintf
. Кроме того , вы можете применить цифровой Trauma «s распорка наконечник тоже. (Больше в Совете по игре в гольф в Баше .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
\b
но не смог его найти ... И я не знал, чтоdo...done
можно заменить фигурными скобками.JavaScript,
10485 байтСохранено 19 байт благодаря @ Aplet123 .
Разбивает строку на пробелы, а затем проверяет, является ли она словами, или, и, или by. Если это так, он игнорирует его, в противном случае он принимает первую букву. Затем он присоединяется к массиву и делает строку заглавной.
Ungolfed:
источник
var
. Мы не беспокоимся о загрязнении глобального охвата в коде гольф: P_.map(v=>/o(f|r)|and|by/.test(v)?"":v[0])
вместо""
. Вы можете удалить_.forEach(p=>Z+=p[0].toUpperCase());
строку и заменитьreturn Z
строку сreturn Z.join("").toUpperCase()
MATL ,
3427 байтНа 1 байт меньше благодаря @AandN
Попробуйте онлайн!
источник
XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
05AB1E ,
333228 байтКод:
Использует кодировку CP-1252 .
источник
Python, 81 байт
источник
Haskell,
10099988275 байтЯ вполне уверен, что его можно сократить намного больше, так как я все еще отстой в использовании$
и.
т.д., поэтому я продолжаю использовать()
insted =)Спасибо @nimi за волшебную помощь!
Пример:
источник
.
оператор композиции выглядит довольно интуитивно. Я просто никогда не уверен, что оценивается в каком порядке.$
и композиции с.
.a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]
.Python,
10396 байтЭто моя первая попытка в код-гольфе, и это, вероятно, может быть гораздо больше. Спасибо DenkerAffe за сохранение семи символов.
Он принимает ввод, превращает его в список слов и берет их первую букву, если это не одно из запрещенных слов, а затем переводит все в верхний регистр.
источник
input
vsraw_input
, +2 дляprint("".join..)
vsprint"".join..
) Также нет пробела между символом и ключевым словом.x[0]for ...
полностью действителен в Python.JavaScript,
80725553 байтаКод
Я только что прочитал о функциях стрелок и понял, что могу сократить это еще больше.В соответствии с этим , вы не учитываете назначение по длине, поэтому -2 байта.Это мой первый гольф, так что это не очень хорошо.
источник
PHP,
686158 байтИспользует кодировку ISO-8859-1.
Запустите так (
-d
добавлено только для эстетики):Ungolfed:
ucwords
.ß
(двоичного11011111
) для двоичного кодаAND
вместо отрицательного пробела (двоичного00100000
).источник
Mathematica,
132117 байт15 байтов сохранено благодаря @CatsAreFluffy.
источник
StringSplit
умолчанию разделяется на пробелы (-5 байт)"of"|"and"|"or"|"by"
. Также{"a","b","c"}<>""==StringJoin[{"a","b","c"}]
. И последнее:Characters
автоматически сопоставляет списки.PowerShell, 81 байт
объяснение
Разделите на пробелы, создавая массив. Бросьте обидевших участников. Вытащите первого персонажа и объединитесь. Использовать
ToUpper()
полученную строку.источник
Lua, 122 байта
Мне бы очень хотелось использовать шаблон, чтобы избавиться от запрещенных слов, но, к сожалению, lua не предназначен для соответствия группам символов ... Поэтому мне пришлось использовать цикл for, который намного дороже.
Ungolfed
источник
Фактор, 175 байтов
Я многому научился, написав это.
Как слово:
Модульные тесты:
Проходят!
источник
Луа,
11311293 байтаисточник
%w
! Это здорово!%a
;%a
сопоставляет буквы и%w
сопоставляет буквы и цифры. Главное - использовать пользовательскую функцию вgsub
.AND OR BY OF
при выборе слов ... Я не использовал пользовательских функций, потому что они стоят дорого, поэтому яgsub("(%a)%a+",string.upper)
C #, 134 байта
Golfed
Удобочитаемый
Выполнить из командной строки
75448.exe Усиление света путем стимуляции испускаемого излучения
75448.exe Соединенные Штаты Америки
источник
IPOS - не конкурирует, 27 байтов
Это работает в текущей версии (v0.2) интерпретатора .
Пример запуска
Обратная косая черта существует только для экранирования кавычек и не нужна для программы.
объяснение
источник
coreutils bash / GNU, 60 байт
sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'
источник
Pylongolf2 , 14 байтов (UTF-8)
Pylongolf2 имеет много не-ASCII символов, которые считаются 2 байтами.
источник
05AB1E , 19 байтов (неконкурирующие ...?)
Попробуйте онлайн!
Конечно конкурирующая версия (21 байт):
Попробуйте онлайн!
источник