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,
fooyFooson 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
shM-crz1dc4. "@ YK½¼ # z = input rz1 # convierte la entrada a mayúsculas cd # entrada dividida en espacios c4. "@ YK½¼ # crea una lista de las palabras de una cadena empaquetada que se ignorará - # filtra esas palabras hM # solo toma la primera letra de todas las palabras s # únelos en una cadenaLa cadena empaquetada se convierte
ANDBYOROFfuente
."@YK½¼ahorra un byte"ANDORBYOF. Básicamente está@ANDBYOROFlleno.@ANDBYOROFy 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
ANDmayúsculas ybyminú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`Lhacer?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
ibanderaJavaScript,
61646663 bytesUtiliza una expresión regular para buscar palabras que no pertenecen a la lista:
and, or, of, byy captura la primera letra. Luego capitaliza la cadena de letras resultante.EDITAR: 64 Bytes - Corregido para palabras que comienzan con
of,or,by,andEDITAR: 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 Baribanderavim, 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\zspara comenzar la parte "en realidad siendo reemplazado", efectivamente no reemplazando el carácter inicial..*coincide con el resto de la línea y\ncoincide 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
vimes 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
AOBONRYFDen trozos de cuatro, obtenemosTransponiendo columnas en filas con el
zoperador, ¡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)\Scomo una matriz y lajoinconvertimos en una cadena.¡Guardado 8 bytes gracias a Dennis!
fuente
Perl, 32 bytes
+1 byte para la
-nbandera.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)\Sy 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
$ses 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
bytesmenos que se indique lo contrario, y puede usar solo un#al comienzo de la línea para hacer un encabezado.$srequiereregister_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
awkllamada se ve horrible. ¿Qué hay de reemplazarlo con${@^^}?grepllamada con[[ $i = @(AND|OR|BY|OF) ]]. ;) Y con eso también puede eliminar la parte "+ GNU coreutils" del encabezado de la publicación.echoconprintf. 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;}\bpero no pude encontrarla ... Y no sabía quedo...donese 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 Zlí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
inputvsraw_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í (
-dagregado solo para estética):Sin golf:
ucwords.ß(binario11011111) para binario enANDlugar de un espacio negado (binario00100000).fuente
Mathematica,
132117bytes15 bytes guardados gracias a @CatsAreFluffy.
fuente
StringSplitdefecto se divide en espacios en blanco (-5bytes)"of"|"and"|"or"|"by". También{"a","b","c"}<>""==StringJoin[{"a","b","c"}]. Una última cosa:Charactersasigna 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;%acoincide con letras y%wcoincide con letras y números. Lo principal es usar una función personalizada engsub.AND OR BY OFla 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
u # Hacer la entrada en mayúscula S # Empuja un espacio a la pila `" AND | OR | BY | OF "ER` # Empuja un comando a la pila, que reemplaza las coincidencias de la expresión regular # con una cadena vacía % # Divide la cadena de entrada en mayúsculas en los espacios, aplica el comando y # unirse de nuevo en los espacios. Esto elimina las palabras requeridas de la entrada. S # Empuja un espacio a la pila ! h # Presione un comando que solo selecciona el primer carácter de una cadena % # Dividir en espacios, aplicar el comando y volver a unir en espacios S- # Eliminar los espacios restantes (olvidé hacer esto útil # con expresiones regulares, me habría ahorrado algunos bytes aquí :()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