var QUESTION_ID=69385,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/69385/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>
**Leaderboard:**
"oozing snotter"
imo ~Respuestas:
Vim, 18 pulsaciones de teclas
El truco crucial es que pegar algo en el modo Visual en realidad coloca el contenido anterior de la selección visual en el búfer de pegado.
fuente
v
ser inclusivo e intentar seleccionar de la vocal de regreso.brainfuck,
238207 bytesRequiere
,
devolver 0 en EOF, celdas de ajuste de 8 bits y la capacidad de moverse hacia la izquierda desde la celda 0. En mi experiencia, estas son las configuraciones predeterminadas más comunes.Estoy bastante feliz con este. Mi primer intento fue de 314 bytes y esto es sin duda una mejora. :)
Funciona almacenando cada byte desde la entrada en dos celdas; uno con el valor real del byte y el otro con la salida del siguiente código cuando se proporciona (el valor del byte - 97):
Si el carácter es una consonante, sale de eso con un valor distinto de cero. Si es una vocal, se convierte en 0. A partir de ahí, solo es cuestión de encontrar dónde comienza la segunda palabra e imprimir todo en orden.
La versión de 238 bytes de este programa encontró el carácter de espacio después de recopilar toda la entrada. Fue un dolor de cabeza porque hacerlo implicaba crear una celda que contenía 0 justo donde estaba tratando de recorrerlo. La forma en que resolví eso tuvo el efecto de restar 30 de cada carácter en la primera palabra y 32 de cada carácter después de ella. Una porción bastante grande del código se dedicó a manejar esas tonterías.
Ahora, 32 se resta de cada carácter en el bucle de entrada, que es más corto y tiene un efecto secundario similar que es más fácil de manejar. Como beneficio adicional, hacerlo de esta manera me permitió crear mi propio personaje espacial de una manera más corta: en lugar de restar 139 de 171 (171 es lo que obtienes cuando pasas un espacio a través del detector de vocales anterior), el bucle que suma 32 cada personaje se sale de su camino para agregar también 32 a la celda 171. Esto cuesta cuatro bytes allí, pero significa que puedo restar 171 más tarde (en lugar de restar 139) para un total neto de 3 bytes guardados.
Con comentarios:
fuente
y
como una vocal, pero la pregunta dice que no lo es. (nye cat
->ce nyat
)y
como una consonante ... Investigaré por qué está haciendo eso.vim, 23
Me pregunto si vim es realmente competitivo en este desafío. Probablemente no con los idiomas de golf, pero tal vez con Ruby / Python / Perl / etc.
fuente
Python,
686360 bytesPruébelo en línea en Ideone .
Cómo funciona
La cadena del patrón se repite tres veces (
*3
), lo que resulta en el patrónTodas las instancias coincidirán con una cadena no vacía de no vocales, o una cadena no vacía seguida de un solo carácter de espacio.
La primera instancia coincidirá con las consonantes al comienzo de la primera palabra. Como
+
es codicioso, intentará igualar la mayor cantidad posible, es decir, todo hasta la primera vocal.Debido a esto, la segunda instancia comenzará en una vocal, por lo que coincidirá con el resto de la primera palabra, hasta e incluyendo el espacio que separa las palabras.
De manera similar a la primera instancia, la tercera coincidirá con todas las consonantes al comienzo de la segunda palabra, lo que dará como resultado una coincidencia exitosa para todo el patrón.
La cadena sin formato
\3\2\1
(r
evita que Python reemplace,\3
etc., con caracteres de control) invierte el orden de las coincidencias de los patrones entre paréntesis, es decir, los reemplaza con las consonantes al comienzo de la segunda palabra, luego todos los caracteres de la primera vocal de la primera palabra hasta el espacio, y finalmente las consonantes al comienzo de la primera palabra.El argumento final para
sub
(1
) hace que regrese inmediatamente después del primer reemplazo exitoso, para evitar reemplazos sin sentido en el resto de la segunda palabra. Esto es necesario ya que el patrón puede coincidir con cualquier cadena de tres o más consonantes consecutivas.fuente
JavaScript (ES6), 54 bytes
Explicación
Prueba
fuente
match
cuando llegue a casa+!i
truco es una buena solución. +1Python 3,
10810199 bytes(Sin uso de expresiones regulares)
Esta función espera entrada a través de 2 argumentos, por ejemplo
f('blushing','crow')
. Devuelve las nuevas palabras en una tupla.Hay muchas soluciones de expresiones regulares, así que quería escribir algo que no usara la biblioteca de Python.
Cómo funciona
La única parte complicada es la expresión lambda
S
(la abreviatura significa " S plit antes de la primera vocal"). Se "itera" recursivamente sobre la palabra dada, moviendo un carácter a la vez desde el principio des
(que comienza con la palabra completa) hasta el final dep
(que comienza vacío). En la primera vocal encontrada devuelve(p,s)
, es decir (prefijo, sufijo). ¡Observe que ese es el orden incorrecto en comparación con los parámetros!Pensé que tenía más sentido que el orden devuelto fuera prefijo, luego sufijo (porque generalmente un prefijo va antes que un sufijo). Este orden puede hacer que el
a,b=S(x)
código sea un poco más fácil de leer.Pero no tenía opción de orden en los parámetros de la lambda, por lo que no podía definir
p
antess
. El primer parámetro,s
, tuvo que tomar la palabra completa, porquep
tenía un valor por defecto, y los parámetros por defecto ir pasado. Al hacer eso, no necesité llamar a la funciónS
con una cadena vacía dos veces, y se pudieron guardar algunos bytes. Sin embargo, quizás fue simplemente una mala decisión devolver el prefijo / sufijo en el orden opuesto, ya que se utilizó dentro de la expresión lambda.En cuanto a la elección de la expresión lambda sobre la función, se necesita más bytes que decir
def S(s,p=""):return
queS=lambda s,p="":
. Puedo hacer esa elección porque Python tiene evaluación de cortocircuito y el operador ternario. Sin embargo, no puedo explicar adecuadamente cómo usé los cortocircuitos; Es difícil razonar sobre eso.Esta es mi primera respuesta. Espero haberlo hecho correctamente y que valga la pena publicar una solución que no pueda ganar.
Ediciones: Comentarios de agradecimiento: se redujo el recuento de bytes un poco, dos veces, y se eliminó la información innecesaria. Intentó mejorar la escritura. Ojalá no haya cometido errores.
fuente
C # 6, 115 bytes
Es un dolor que el espacio de nombres para la expresión regular sea tan largo.
fuente
System.Text.RegularExpressions.Regex.Replace
44 caracteres! +1 porque debe ser algún tipo de registro.CJam,
272422 bytesI / O es una palabra por línea. Pruébalo en línea!
Cómo funciona
fuente
Perl, 33 bytes
El código anterior tiene 32 bytes de longitud y requiere el
-p
conmutador ( +1 byte ).La sustitución es muy similar a la respuesta Retina de @ DigitalTrauma , pero esta respuesta aprovecha los subpatrones recursivos de PCRE .
Pruébelo en línea en Ideone .
fuente
Retina , 34
Pruébalo en línea.
fuente
JavaScript ES6,
935852 bytes¡Guardado 6 bytes gracias a ETHProductions!
¡Pruébalo! (Solo ES6)
Mostrar fragmento de código
fuente
$4
;)C,
255201199 bytesNo veo muchas respuestas C por aquí, así que disfrútenlo; Además, golf por primera vez, sugerencias y críticas son bienvenidas.
Si no se requiere main (), podemos guardar 24 bytes, llegando a 179 bytes
Sin golf:
EDITAR: Gracias a la sugerencia de feersum, ahorré 54 bytes. = D
fuente
strpbrk
.Python 2,
364352269251 bytesEDITAR: ¡ Muchas gracias a @Cyoce por ayudarme a jugar golf 83 bytes!
¡Por favor, ayúdame a jugar golf! De todos modos, al menos soy el primer respondedor de Python. ¡Y espero poder vencer a Java, si alguna vez hay una respuesta de Java!
Pruébalo aquí
fuente
Japt,
2625 bytesAfortunadamente, agregué una clase de vocal a las funciones de expresión regular de Japt hace unos días. Desafortunadamente, no agregué una clase sin vocales o una forma de evitar las barras invertidas dobles en las cadenas de expresiones regulares.
El
¿
debe ser el char en bruto U + 0093. La entrada es una cadena de varias líneas, una palabra / línea. Pruébalo en línea!EDITAR: ahora he agregado la clase sin vocal
\V
y una forma de evitarlo\\
(con%
), por lo que este código ahora funciona para 21 bytes : ( Pruébelo en línea )Cómo funciona
Versión anterior (26 bytes):
Pruébalo en línea!
Cómo funciona
fuente
Python 3, 100 (o 99) bytes
Jugué con algunas versiones, pero parece que no puedo obtenerlo a continuación. Puede bajarlo 99 bytes usando en su
def f(g)
lugar, por lo que toma una lista de cadenas en lugar de dos cadenas separadas, pero prefiero las dos arg argue.La alternativa es la misma longitud:
Intenté reemplazar, como los usos de @TanMath, pero no pude hacerlo más corto. Además, TanMath puede acortar su respuesta en un byte al usarla en
"[aeiou]"
lugar de hacerlo"[aeiou]+"
porque solo necesitamos hacer coincidir las instancias individuales. Finalmente, la implementación deinput()
parece haber cambiado entre py2 y py3: evalúa automáticamente stdin como una cadena.fuente
s=re.split
a la alternativa?*
en*g
. 2. La segunda versión puede ser reducida a golflambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
.f=
.s
es un argumento predeterminado, por lo que no tiene que especificarlo. Una lambda sin nombre es una presentación aceptable;f=
no es requerido.sed, 38 caracteres
Usando la expresión regular extendida de la solución Retina .
Lo anterior tiene 37 caracteres y requiere el
-r
cambio (+1 carácter).Ejemplo:
fuente
C # 6, 165 bytes
Expandido:
fuente
"aeiou".ToCharArray()
puede ser'a','e','i','o','u'
de -2 bytesIndexOfAny
no se necesitan parámetros, por lo que tendría que ser asínew[]{'a','e','i','o','u'}
IndexOfAny
es un método de params. De todos modos, gran respuesta𝔼𝕊𝕄𝕚𝕟, 24 caracteres / 42 bytes
Try it here (Firefox only).
Si necesita ayuda para comprender esto, esto se traduce en ES6 como
fuente
PowerShell, 52 bytes
Es una regex reemplazada con cuatro grupos de captura; con:
('(.*?)([aeiou]\S+) '*2)
a'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
fuerzas de la matriz args en una cadena, y añade un espacio al final por lo que el espacio al final de la expresión regular no romperlo.fuente
JavaScript (ES6),
1201071021019992 bytesEsto tiene en cuenta si los parámetros eran un objeto como este, y hacia atrás:
var a = {x: "man", y:"plaster"]}
fuente
.match(/[aeiou]/).index
puede llegar a ser:.search`[aeiou]`
Python,
129108105109 bytesEste programa incluye una lista de palabras como esta
["master","plan"]
EDITAR : Gracias @Volatility
EDITAR: ahora usando re.split
Esta respuesta usa expresiones regulares como la mayoría de ellas.
Pruébalo aquí
fuente
str.replace
reemplaza todas las instancias de una subcadena, por lo que debe limitarlo a un reemplazo al tener.replace(f,l,1)
. Sin embargo, puede guardar un montón al usari,j=input()
y volver a vincularre.findall
y'[^aeiou]+'
a variables de un solo carácter.input()
en dos variables. ¿Quiso deciri,j=input().split()
(yraw_input()
en Python 2)?"sass","bit" -> "babb", "sit"
.Java 8, 343 bytes
Aquí tienes tu primera respuesta Java. No es tan experimentado con el golf, por lo que se agradece cualquier sugerencia.
Sin golf:
fuente
java.util.function.Function
? Dudo mucho que deba estar allí, a menos queimport
se refiera, pero descarte la importación porque solo se refiere a ella una vez. Cambiarpublic class C{public static void Main(String[] a)
ainterface C{void Main(String[]a)
Function<String, Integer>
no necesita espacios en blancofor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
afor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
es un nombre de dominio terrible, demasiado largo.Function<String, Integer>
dejava.util.function.Function<String,Integer>
y soltar la importaciónOctava, 96 bytes
Gracias a las asignaciones en línea de Octave y la funcionalidad de 'indexar en cualquier lugar', todo esto es solo la definición de una única función anónima. Básicamente, reconstruimos la cuerda cuchara mientras almacenamos los puntos de corte en
a
yb
. Estoy especialmente contento con laf
función en línea , que encuentra el punto de corte, y me impidió tener que usar todo el procesofind(ismember(a,b),1)
dos veces. Además, no regex :) .fuente
TeaScript , 27 bytes
\w
es en realidad[^aeiou]
.fuente
\w
meta regex predeterminada a[^aeiou]
? ¿Por qué?\w
JavaScript ya lo usaba. Lo volveré a cambiar prontoelixir ,
143117 bytesDivida las dos cadenas (a, b) en la primera vocal y construya nuevas cadenas para regresar.
EDITAR: Obtuve unos pocos bytes usando la coincidencia de patrones en lugar de
elem
llamadas torpes para obtener los valores de las tuplas.fuente
Java, 147 bytes
Supongo que solo una función también está bien.
split(regex)
lamentablemente consume el delimitador, lo que significa que tengo que usarsubstring
para obtener los sufijos.fuente
Pyth,
3028 bytesToma entrada y da salida como una lista de las dos palabras.
Pruébalo en línea.
fuente
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
asigna una lista de dos elementos a G y H, y seC
transpone. Puede haber algo aún mejor.Python (sin expresiones regulares), 85 bytes
Ejecución de muestra:
t
es una función recursiva que calcula el índice de la vocal más temprana después del primer carácter en su argumentos
. Si el segundo carácters[1]
es una vocal, se evalúa comoTrue
, que tieneint
valor1
. De lo contrario, realiza una llamada recursiva con el primer carácter eliminado y agrega 1 al índice resultante usando-~
(complemento de dos del complemento de uno). Finalmente, los resultados det
se usan como índices para el corte de cuerdas para calcular el cuchara.fuente
GNU Awk 4.0, 48 caracteres
Ejecución de muestra:
fuente
PowerShell, 61 bytes
Utiliza expresiones regulares para intercambiar los primeros caracteres no vocales de cada palabra
fuente