Objetivo
Su objetivo es hacer un programa que convierta una entrada a su acrónimo. Su entrada está garantizada para tener solo letras y espacios. La entrada tendrá exactamente un espacio entre palabras. Debe generar el acrónimo de la entrada.
Reglas
- Su código no puede distinguir entre mayúsculas y minúsculas (por ejemplo,
foo
yFoo
son iguales) - Su código debe ignorar las siguientes palabras y no ponerlas en el acrónimo:
and or by of
- No puede asumir que las palabras son todas minúsculas.
- La salida debe estar totalmente en mayúscula, sin separación entre caracteres.
- Se acepta una nueva línea final pero no es necesaria.
- Si el lenguaje tiene una función incorporada siglas, es posible que no lo utilizan.
Ejemplos
(entradas / salidas agrupadas)
United States of America
USA
Light Amplification by Stimulation of Emitted Radiation
LASER
united states of america
USA
Jordan Of the World
JTW
Tanteo
Este es un desafío de código de golf , por lo que gana el código más corto.
Tabla de clasificación
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
)Respuestas:
Pyth,
252120 bytesPruébalo aquí!
¡Gracias a @Jakube por guardar un byte!
Explicación
La cadena empaquetada se convierte
ANDBYOROF
fuente
."@YK½¼
ahorra un byte"ANDORBYOF
. Básicamente está@ANDBYOROF
lleno.@ANDBYOROF
y mira lo que obtienes.Jalea ,
2120 bytesPruébalo en línea!
(-1 gracias a @Dennis.)
El diccionario de Jelly es un poco extraño porque tiene
AND
mayúsculas yby
minúsculas ...fuente
Retina, 29
3136bytesNueva línea prevista al final.
Gracias a Martin Büttner por guardar 5 bytes.
Pruébalo en línea
fuente
T`l`L
hacer?JavaScript (ES6), 56 bytes
Guardado un byte gracias a @ edc65.
Explicación
El código se explica por sí mismo, solo explicaré la expresión regular:
Eliminó todos estos caracteres coincidentes y mayúsculas la palabra
fuente
i
banderaJavaScript,
61646663 bytesUtiliza una expresión regular para buscar palabras que no pertenecen a la lista:
and, or, of, by
y captura la primera letra. Luego capitaliza la cadena de letras resultante.EDITAR: 64 Bytes - Corregido para palabras que comienzan con
of,or,by,and
EDITAR: 66 Bytes - Se corrigió para verificar todas las palabras, incluida la última palabra.
EDITAR: 63 Bytes - ¡Guardado 3 Bytes gracias a @ edc65 y @Cyoce !
fuente
Foo Offline Bar
i
banderavim, 46
Particularmente me gusta esa última parte. El primero
.
en la expresión regular coincide con el primer carácter de la línea. Luego, usamos\zs
para comenzar la parte "en realidad siendo reemplazado", efectivamente no reemplazando el carácter inicial..*
coincide con el resto de la línea y\n
coincide con la nueva línea final. Como no especificamos una cadena de reemplazo, vim simplemente elimina todo en la coincidencia, dejando solo las iniciales.fuente
vim
es un lenguaje de programaciónCJam,
282422 bytesPruébalo en línea . Gracias a Sp3000 por señalar un error y sugerir una solución, y a Dennis por guardar
46 (!) Bytes.Explicación
Dennis sugirió este truco para acortar la lista de palabras: dividiéndonos
AOBONRYFD
en trozos de cuatro, obtenemosTransponiendo columnas en filas con el
z
operador, ¡obtenemos las palabras adecuadas!fuente
Julia,
72636155 bytesEsta es una función anónima que acepta una cadena y devuelve una cadena. Para llamarlo, asígnelo a una variable.
Convertimos la cadena a
uppercase
, seleccionamos cada coincidencia de la expresión regular\b(?!AND|OR|OF|BY)\S
como una matriz y lajoin
convertimos en una cadena.¡Guardado 8 bytes gracias a Dennis!
fuente
Perl, 32 bytes
+1 byte para la
-n
bandera.Algoritmo robado de la respuesta de Julia de @AlexA .
fuente
Ruby,
4543 bytesEsta es una función lambda que acepta una cadena y devuelve una cadena. Para llamarlo, asígnelo a una variable y haga
f.call(input)
.Utiliza el mismo enfoque que mi respuesta de Julia , es decir, convertir a mayúsculas, obtener coincidencias de la expresión regular
\b(?!AND|OR|OF|BY)\S
y unir en una cadena.Pruébalo aquí
¡Guardado 2 bytes gracias a manatwork!
fuente
.join
→*''
. Por cierto, no es necesario asignarlo a nada para llamarlo. Simplemente páselo los argumentos como subíndice:->s{s.upcase.scan(/\b(?!AND|OR|OF|BY)\S/)*''}['United States of America']
PHP, 92 bytes
Primer intento de código de golf.
La variable
$s
es la frase que ser convertidos:$s = "United States of America"
.Requiere PHP 5.4 o superior para que funcione la sintaxis de matriz corta.
fuente
bytes
menos que se indique lo contrario, y puede usar solo un#
al comienzo de la línea para hacer un encabezado.$s
requiereregister_globals
, pero eso se ha eliminado de PHP desde 5.4, por lo que su respuesta no puede funcionar, ya que requiere 5.4 para una sintaxis de matriz corta. Necesita obtener la cadena de entrada como argumento ($argv
, un argumento de función o similar).Bash + GNU coreutils,
10376 bytesCorre con
ya sea con un solo argumento citado o con múltiples argumentos.
(I distorsionado la última palabra para contener de ).
60 bytes
Gracias a @manatwork.
fuente
awk
llamada se ve horrible. ¿Qué hay de reemplazarlo con${@^^}
?grep
llamada con[[ $i = @(AND|OR|BY|OF) ]]
. ;) Y con eso también puede eliminar la parte "+ GNU coreutils" del encabezado de la publicación.echo
conprintf
. Además se puede aplicar digital Trauma 's punta corsé demasiado. (Más en Consejos para jugar golf en Bash .)for i in ${@^^};{ [[ $i = @(AND|OR|BY|OF) ]]||printf %c $i;}
\b
pero no pude encontrarla ... Y no sabía quedo...done
se puede reemplazar con llaves.JavaScript,
10485 bytesGuardado 19 bytes gracias a @ Aplet123 .
Divide la cadena por espacios y luego comprueba si son las palabras de, o, y, o por. Si es así, lo ignora, de lo contrario toma la primera letra. Luego se une a la matriz y hace que la cadena sea mayúscula.
Sin golf:
fuente
var
. No nos preocupamos de contaminar el alcance global en el código de golf: P_.map(v=>/o(f|r)|and|by/.test(v)?"":v[0])
lugar de""
. Puede eliminar su_.forEach(p=>Z+=p[0].toUpperCase());
línea y reemplazar sureturn Z
línea conreturn Z.join("").toUpperCase()
MATL ,
3427 bytes1 byte menos gracias a @AandN
Pruébalo en línea!
fuente
XkYb{'OF' 'AND' 'OR' 'BY'}X-c1Z)!
05AB1E ,
333228 bytesCódigo:
Utiliza la codificación CP-1252 .
fuente
Python, 81 bytes
fuente
Haskell,
10099988275 bytesEstoy bastante seguro de que se puede acortar mucho más, ya que sigo siendo un asco en el uso$
,.
etc. , así que sigo usando()
insted =)¡Gracias @nimi por tu ayuda mágica!
Ejemplo:
fuente
.
operador de composición parece bastante intuitivo. Nunca estoy seguro de qué se evalúa en qué orden.$
y composición con.
.a x=[h!!0|h<-w$toUpper<$>x,notElem h$w"OF BY OR AND"]
.Pitón,
10396 bytesEste es mi primer intento de código de golf, y esto probablemente podría jugarse mucho más. Gracias a DenkerAffe por salvar siete caracteres.
Toma la entrada, la convierte en una lista de palabras y toma su primera letra si no es una de las palabras prohibidas, luego convierte todo en mayúsculas.
fuente
input
vsraw_input
, +2 paraprint("".join..)
vsprint"".join..
) Además, no hay espacio entre un símbolo y una palabra clave.x[0]for ...
es completamente válido en Python.JavaScript,
80725553 bytesCódigo
Acabo de leer sobre las funciones de flecha y me di cuenta de que podría acortar esto aún más.De acuerdo con esto , no cuenta la asignación en la longitud, entonces -2 bytes.Este es mi primer golf, así que no es muy bueno.
fuente
PHP,
686158 bytesUtiliza la codificación ISO-8859-1.
Ejecutar así (
-d
agregado solo para estética):Sin golf:
ucwords
.ß
(binario11011111
) para binario enAND
lugar de un espacio negado (binario00100000
).fuente
Mathematica,
132117bytes15 bytes guardados gracias a @CatsAreFluffy.
fuente
StringSplit
defecto se divide en espacios en blanco (-5bytes)"of"|"and"|"or"|"by"
. También{"a","b","c"}<>""==StringJoin[{"a","b","c"}]
. Una última cosa:Characters
asigna automáticamente sobre listas.PowerShell, 81 bytes
Explicación
Dividir en los espacios creando una matriz. Suelta a los miembros infractores. Tira del primer personaje y únete. Usar
ToUpper()
en la cadena resultante.fuente
Lua, 122 bytes
Me encantaría usar un patrón para deshacerme de las palabras prohibidas, pero lamentablemente, lua no está hecho para unir grupos de caracteres ... Entonces tuve que usar un bucle for, que es mucho más costoso.
Sin golf
fuente
Factor, 175 bytes
Aprendí mucho escribiendo esto.
Como una palabra:
Pruebas unitarias:
¡Pasar!
fuente
Lua,
11311293 bytesfuente
%w
! ¡Esa es genial!%a
;%a
coincide con letras y%w
coincide con letras y números. Lo principal es usar una función personalizada engsub
.AND OR BY OF
la hora de seleccionar las palabras ... He utilizado ninguna función personalizada porque cuestan mucho, así que aunquegsub("(%a)%a+",string.upper)
después de la eliminación de ellos habría sido mejorC #, 134 bytes
Golfed
Legible
Ejecutar desde la línea de comando
75448.exe Amplificación de luz por estimulación de radiación emitida
75448.exe estados unidos de américa
fuente
IPOS - no competidor, 27 bytes
Esto funciona en la versión actual (v0.2) del intérprete .
Ejecución de ejemplo
Las barras invertidas solo existen para escapar de las comillas y no son necesarias para el programa.
Explicación
fuente
bash / GNU coreutils, 60 bytes
sed -e's/\b'{and,o[rf],by}'\W*//Ig' -re's/(\w)\S* ?/\u\1/g'
fuente
Pylongolf2 , 14 bytes (UTF-8)
Pylongolf2 tiene muchos caracteres no ASCII que cuentan como 2 bytes.
fuente
05AB1E , 19 bytes (¿no compite ...?)
Pruébalo en línea!
Una versión seguramente competidora (21 bytes):
Pruébalo en línea!
fuente