Objetivo
Seu objetivo é criar um programa que converta uma entrada em sua sigla. Sua entrada é garantida para ter apenas letras e espaços. A entrada terá exatamente um espaço entre as palavras. Você deve gerar o acrônimo da entrada.
Regras
- Seu código não diferencia maiúsculas de minúsculas (por exemplo,
foo
eFoo
é o mesmo) - Seu código deve ignorar as seguintes palavras e não colocá-las na sigla:
and or by of
- Você não pode assumir que as palavras são todas minúsculas.
- A saída deve ser totalmente maiúscula, sem separação entre caracteres.
- Uma nova linha à direita é aceita, mas não é necessária.
- Se o seu idioma tiver uma função de acrônimo embutida, você não poderá usá-lo.
Exemplos
(entradas / saídas agrupadas)
United States of America
USA
Light Amplification by Stimulation of Emitted Radiation
LASER
united states of america
USA
Jordan Of the World
JTW
Pontuação
Este é um desafio de código-golfe , de modo que o código mais curto vence.
Entre os melhores
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
)Respostas:
Pitão,
252120 bytesExperimente aqui!
Agradecemos a @Jakube por salvar um byte!
Explicação
A sequência empacotada se torna
ANDBYOROF
fonte
."@YK½¼
economiza um byte"ANDORBYOF
. É basicamente@ANDBYOROF
embalado.@ANDBYOROF
e ver o que você recebe.Geléia ,
2120 bytesExperimente online!
(-1 graças a @Dennis.)
O dicionário de Jelly é um pouco estranho, pois possui
AND
letras maiúsculas eby
minúsculas ...fonte
Retina, 29
3136bytesNova linha pretendida no final.
Obrigado a Martin Büttner por salvar 5 bytes
Experimente online
fonte
T`l`L
faz?JavaScript (ES6), 56 bytes
Guardou um byte graças a @ edc65.
Explicação
O código é auto-explicativo, apenas explicarei a regex:
Ele removeu todos esses caracteres correspondentes e maiúscula a palavra
fonte
i
flagJavaScript,
61646663 bytesEle usa uma expressão regular para encontrar palavras que não são da lista:
and, or, of, by
e captura a primeira letra. Em seguida, coloca em maiúscula a sequência de letras resultante.EDIT: 64 bytes - corrigido para palavras que começam com
of,or,by,and
EDIT: 66 bytes - corrigido para verificar todas as palavras, incluindo a última palavra.
EDIT: 63 bytes - economizou 3 bytes graças a @ edc65 e @Cyoce !
fonte
Foo Offline Bar
i
flagvim, 46
Eu particularmente gosto dessa última parte. O primeiro
.
na regex corresponde ao primeiro caractere da linha. Em seguida, usamos\zs
para iniciar a parte "realmente sendo substituída", efetivamente não substituindo o caractere inicial..*
corresponde ao restante da linha e\n
corresponde à nova linha à direita. Como não especificamos uma string de substituição, o vim simplesmente remove tudo na correspondência, deixando apenas as iniciais.fonte
vim
é uma linguagem de programaçãoCJam,
282422 bytesExperimente online . Agradecemos ao Sp3000 por apontar um erro e sugerir uma correção e a Dennis por salvar
46 (!) Bytes.Explicação
Dennis sugeriu este truque para encurtar a lista de palavras: dividindo-se
AOBONRYFD
em pedaços de quatro, obtemosTranspondo colunas em linhas com o
z
operador, obtemos as palavras adequadas!fonte
Julia,
72636155 bytesEsta é uma função anônima que aceita uma string e retorna uma string. Para chamá-lo, atribua-o a uma variável.
Convertemos a string em
uppercase
, selecionamos cada correspondência da expressão regular\b(?!AND|OR|OF|BY)\S
como uma matriz ejoin
ela em uma string.Economizou 8 bytes graças a Dennis!
fonte
Perl, 32 bytes
+1 byte para o
-n
sinalizador.Algoritmo roubado da resposta Julia de @ AlexA .
fonte
Ruby,
4543 bytesEsta é uma função lambda que aceita uma string e retorna uma string. Para chamá-lo, atribua-o a uma variável e faça
f.call(input)
.Ele usa a mesma abordagem da minha resposta Julia , ou seja, converter em maiúsculas, obter correspondências da expressão regular
\b(?!AND|OR|OF|BY)\S
e ingressar em uma string.Experimente aqui
Economizou 2 bytes graças ao manatwork!
fonte
.join
→*''
. By the way, não há necessidade de atribuir a qualquer coisa para chamá-lo. Apenas passe-os argumentos como subscrito:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
PHP, 92 bytes
Primeira tentativa de código de golfe.
A variável
$s
é a frase a ser convertido:$s = "United States of America"
.Requer PHP 5.4 ou superior para que a sintaxe de matriz curta funcione.
fonte
bytes
menos que seja indicado o contrário, e você pode usar apenas um#
no início da linha para criar um cabeçalho.$s
exigeregister_globals
, mas que foi removido do PHP desde a versão 5.4, portanto, sua resposta não pode funcionar, pois você precisa da versão 5.4 para sintaxe de matriz curta. Você precisa obter a string de entrada como argumento ($argv
, argumento de função ou similar).Bash + núcleo GNU,
10376 bytesCorrer com
com argumento único citado ou com vários argumentos.
(Distorci a última palavra a conter de ).
60 bytes
Graças a @manatwork.
fonte
awk
ligação parece horrível. Que tal substituí-lo${@^^}
?grep
chamada por[[ $i = @(AND|OR|BY|OF) ]]
. ;) E com isso você também pode remover a parte “+ GNU coreutils” do cabeçalho do post.echo
comprintf
. Além disso, você pode aplicar Trauma Digital 's ponta cinta também. (Mais em Dicas para golfe em Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
\b
mas não a encontrei ... E eu não sabia que issodo...done
poderia ser substituído por chaves.JavaScript,
10485 bytesEconomizou 19 bytes graças a @ Aplet123 .
Divide a sequência por espaços e verifica se são as palavras de, ou, e, ou por. Se for, ele a ignora; caso contrário, recebe a primeira letra. Em seguida, junta-se à matriz e torna a string maiúscula.
Ungolfed:
fonte
var
. Não nos preocupamos em poluir o escopo global no código golf: P_.map(v=>/o(f|r)|and|by/.test(v)?"":v[0])
vez de""
. Você pode remover sua_.forEach(p=>Z+=p[0].toUpperCase());
linha e substituir seureturn Z
porreturn Z.join("").toUpperCase()
MATL ,
3427 bytes1 byte menos graças a @AandN
Experimente online!
fonte
XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
05AB1E ,
333228 bytesCódigo:
Usa CP-1252 codificação .
fonte
Python, 81 bytes
fonte
Haskell,
10099988275 bytesTenho certeza de que pode ser reduzido muito mais, pois ainda sou péssimo em usar$
,.
etc. , então continuo usando()
insted =)Obrigado @nimi pela sua ajuda mágica!
Exemplo:
fonte
.
operador de composição parece bastante intuitivo. Eu nunca tenho certeza do que é avaliado em que ordem.$
e composição com.
.a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]
.Python,
10396 bytesEsta é a minha primeira tentativa de código de golfe, e isso provavelmente poderia ser muito mais. Agradecemos a DenkerAffe por salvar sete caracteres.
Ele pega a entrada, a transforma em uma lista de palavras e pega a primeira letra, se não for uma das palavras proibidas, depois transforma tudo em maiúsculas.
fonte
input
vsraw_input
, +2 paraprint("".join..)
vsprint"".join..
) Também há espaço entre um símbolo e uma palavra-chave.x[0]for ...
é completamente válido em Python.JavaScript,
80725553 bytesCódigo
Acabei de ler sobre as funções das setas e percebi que poderia encurtar ainda mais isso.De acordo com isso , você não conta a atribuição no comprimento, portanto, -2 bytes.Este é o meu primeiro golfe, por isso não é muito bom.
fonte
PHP,
686158 bytesUsa a codificação ISO-8859-1.
Execute assim (
-d
adicionado apenas para estética):Ungolfed:
ucwords
.ß
(binário11011111
) para binário emAND
vez de um espaço negado (binário00100000
).fonte
Mathematica,
132117 bytes15 bytes salvos graças a @CatsAreFluffy.
fonte
StringSplit
padrão para a divisão em espaços em branco (-5bytes)"of"|"and"|"or"|"by"
. Também{"a","b","c"}<>""==StringJoin[{"a","b","c"}]
. Uma última coisa:Characters
mapeia automaticamente as listas.PowerShell, 81 bytes
Explicação
Divida os espaços criando uma matriz. Solte os membros ofensores. Puxe o primeiro personagem e junte-se. Use
ToUpper()
na sequência resultante.fonte
Lua, 122 bytes
Eu adoraria usar um padrão para se livrar das palavras proibidas, mas, infelizmente, lua não é feita para combinar com grupos de caracteres ... Então, eu tive que usar um loop for, o que é muito mais caro.
Ungolfed
fonte
Fator, 175 bytes
Eu aprendi muito escrevendo isso.
Como uma palavra:
Testes unitários:
Passar!
fonte
Lua,
11311293 bytesfonte
%w
! Essa é ótima!%a
;%a
corresponde a letras e%w
corresponde a letras e números. O principal é usar uma função personalizada nogsub
.AND OR BY OF
quando selecionar palavras ... Eu usei nenhuma função personalizada porque eles custam muito, então eu emboragsub("(%a)%a+",string.upper)
depois de removê-los teria sido melhorC #, 134 bytes
Golfe
Legível
Executar a partir da linha de comando
Amplificação da luz 75448.exe por estimulação da radiação emitida
75448.exe estados unidos da américa
fonte
IPOS - não concorrente, 27 bytes
Isso funciona na versão atual (v0.2) do intérprete .
Exemplo de execução
As barras invertidas existem apenas para escapar das aspas e não são necessárias para o programa.
Explicação
fonte
coreutils do bash / GNU, 60 bytes
sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'
fonte
Pylongolf2 , 14 bytes (UTF-8)
Pylongolf2 possui muitos caracteres não-ASCII que contam como 2 bytes.
fonte
05AB1E , 19 bytes (não concorrente ...?)
Experimente online!
Uma versão certamente concorrente (21 bytes):
Experimente online!
fonte