En inglés, está la diversión y diferencia simple entre an
y a
: se usa an
cuando precede una palabra que comienza con un sonido de vocal y a
cuando la palabra comienza con un sonido de consonante.
En aras de la simplicidad en este desafío, an
precede a una palabra que comienza con una vocal ( aeiou
), y a
precede a una palabra que comienza con una consonante.
Entrada
Una cadena que comprende solo caracteres ASCII imprimibles, que [?]
aparecen en lugares donde debe elegir insertaran
o a
. [?]
siempre aparecerá antes de una palabra. Puede suponer que la oración será gramaticalmente correcta y tendrá el formato normal.
Salida
La cadena de entrada se [?]
reemplaza con la palabra apropiada (an
o a
). ¡Tienes que preocuparte por la capitalización!
Cuando capitalizar
Escriba con mayúscula una palabra si no está precedida por ningún carácter (es el primero en la entrada) o si está precedida por uno .?!
seguido de un espacio.
Ejemplos
Input: Hello, this is [?] world!
Output: Hello, this is a world!
Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.
Input: [?] giant en le sky.
Output: A giant en le sky.
Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!
Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.
Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?
Este es el código de golf , por lo que gana el código más corto en bytes.
fuente
[?]
la palabra y la palabra?[?] hour ago I met [?] European.
solo para hacer que todos se avergüencen.[?] hour ago I met [?] horse.
Respuestas:
V , 41 bytes
Pruébalo en línea! , que convenientemente también se puede utilizar para verificar todos los casos de prueba sin recuento de bytes adicional.
Esto aprovecha la "Compresión de expresiones regulares" de V. Utiliza muchos caracteres no imprimibles, así que aquí hay un hexdump:
fuente
Perl, 48 bytes
Guardado 1 byte debido a Ton Hospel .
Contando el shebang como uno, la entrada se toma de stdin.
Explicación
Uso de muestra
fuente
/[.?!]/
Falta el apoyo a la capitalización después de que haya espacio\G
para retroceder. PPS, un poco más corto:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Ruby,
7872 bytesSin golf
fuente
"anAn"[...]
Es realmente inteligente. 👍🏻 Puede guardar algunos bytes omitiendo el interiorsub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 bytes
Me gustan las soluciones más completas de vez en cuando ...
pero debo admitir que esto es un poco exagerado, aunque no está del todo terminado.
Guardar en archivo, ejecutar
php <filename>
con entrada de STDIN.Casos de prueba
Descompostura
fuente
[?][?][?]s [?]lert!
Minkolang 0.15 , 75 bytes
Pruébalo aquí!
Explicación
Tenga en cuenta que debido a que Minkolang es toroidal, cuando el contador del programa se mueve del borde derecho, vuelve a aparecer a la izquierda. Ciertamente golfable, pero debido a que tuve que agregar 21 bytes debido a las especificaciones, no puedo intentarlo.
fuente
JavaScript (ES6), 90
86 87 85Edite una vez más, ya que la especificación para la capitalización ha cambiado (ahora más sensato)
Editar de nuevo 1 byte guardar thx @Huntro
Edite 2 bytes más para administrar las cotizaciones y similares, como lo señaló IsmaelMiguel (incluso si no sé si es solicitado por op). Tenga en cuenta que anteriormente había contado 86 bytes pero eran 85
Intentar seguir la regla de mayúsculas establecida en el evento de comentarios si está incompleta (al menos)Prueba
fuente
[?][?]
darAna
? ¿Y no debería[?][?] a.
producirAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
, las comillas son irrelevantes) y para[?] "A".
(funciona bien para[?] A.
).[?] "[?]"
no es una entrada válida.[?] will always appear before a word
y "[?]" no es una palabra.]
no es necesario./(\w )?\[\?](\W*.)/g
Lote, 136 bytes
Toma una línea de entrada en STDIN.
fuente
PHP,
10092 bytesEra posible seguir desarrollando las expresiones regulares.
Da un aviso sobre una constante indefinida pero aún funciona.
Editar: 8 bytes guardados gracias a primo
fuente
[n,A,a]
utilizando afirmaciones de búsqueda (\K
y(?= )
).Python 3.5.1,
153147124BytesEntrada:
[?] apple [?] day keeps the doctor away. [?] lie.
Salida:
An apple a day keeps the doctor away. A lie.
Versión de 123 bytes: esto no maneja la regla de mayúsculas.
Ideone it!
fuente
;
y jugar golf.m.start() for
debería serm.start()for
,s[i+2] in 'aeiouAEIOU'
debería sers[i+2]in'aeiouAEIOU'
. Un afeitado fácil de 3 bytes debido al espacio en blanco.('an','a')[s[i+2]in'aeiouAEIOU']
está invertido, podría usar'a'+'n'*(s[i+2]in'aeiouAEIOU')
para arreglar eso y guardar 2 bytes. Aquí puede encontrar muchos consejos para jugar golf .enumerate()
es genial Gracias @chepner.Java,
180178 bytesEn mi primera publicación aquí, utilicé una parte de la publicación de Kevin Cruijssen, pero con un enfoque diferente, me ayudó a reducir un poco más, ¡gracias a él!
Aquí no tiene golf:
Y el resultado
Una explicación simple, uso un enfoque recursivo para encontrar cada
[?]
.No pude encontrar una manera de usar las coincidencias con mayúsculas y minúsculas (no estoy seguro de que sea posible).
178bytes: ¡Gracias a Martin Ender!
fuente
]
de tu expresión regular.05AB1E ,
383635 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
]
después de la::
}
más tarde porque pensé que ahorraría un byte, pero tienes razón en que falla en los[?] vowel
casos ... ¡Gracias por hacérmelo saber!C #,
204235 bytesPrograma completo sin golf:
Estoy seguro de que esto podría mejorarse, especialmente la parte de Regex, pero no puedo pensar en nada en este momento.
fuente
Java 7,
239214213 bytesSin golf y casos de prueba:
Pruébalo aquí
Salida:
fuente
isEmpty
usar la expresión regular^$
. Creo que termino con 202;)String c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}
definitivamente más corto que mi respuesta de bucle. :)Raqueta 451 bytes (sin expresión regular)
Obviamente es una respuesta larga, pero reemplaza a y an con mayúsculas también:
Pruebas:
Salida:
Versión detallada:
fuente
J , 113 bytes
Pruébalo en línea!
¡Qué vergüenza!
fuente
Retina ,
6660 bytesPruébalo en línea.
Explicación:
Haga una búsqueda que no distinga entre mayúsculas y minúsculas para
[?]
seguida de una vocal o consonante, donde la vocal opcional se guarda en el grupo de captura 2 y la coincidencia completa en el grupo de captura 1:Reemplace esto con un
a
, seguido de la longitud de la cantidad del segundo grupo den
(entonces 0 o 1n
), seguido de la letra (s) del grupo de captura 1:Luego haga coincidir un
a
al inicio de la cadena o después de.?!
más de un espacio:Y en mayúscula que A, sin eliminar los otros caracteres del grupo de captura 1:
fuente
Java (JDK) , 154 bytes
Pruébalo en línea!
Explicación:
fuente
C (gcc) ,
225207202201 bytesGracias a ceilingcat por -24 bytes
Pruébalo en línea!
fuente
Groovy,
73162 byteseditar: maldición, la capitalización complicó totalmente todo aquí
fuente
C # 209 bytes
string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}
Formateado
fuente
Perl 6 , 78 bytes
Explicación:
Prueba:
fuente
} $1
al final (haciéndolo}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Lua, 131 Bytes.
Aunque lua es un lenguaje terrible para el golf, creo que lo he hecho bastante bien.
fuente
Pip ,
62555450 bytesToma la cadena como un argumento de línea de comandos.
Pruébalo en línea!
Explicación:
fuente
Raqueta (con expresiones regulares) 228 bytes
Pruebas:
Salida:
fuente
Pitón 3 ,
104103 bytes-1 bytes, sin escape
]
Pruébalo en línea!
Comienza por reemplazar todas las ocurrencias de
[?]
cona
,Luego reemplaza todo
a
seguido por una vocal, conan
.Luego reemplaza todo
a
al comienzo de la entrada o una oración conA
.Asume que
[?]
nunca tocará otra palabra, y que las minúsculasa
nunca deben comenzar una oración.fuente
Potencia Shell , 124 bytes
inspirado en la respuesta de Avi para Java .
Pruébalo en línea!
fuente