Esta es relativamente rápida, pero estoy seguro de que te gustará.
Codegolf es un programa que tomará la entrada en forma de una oración y luego proporcionará la salida con la primera letra en mayúscula en cada palabra.
Reglas:
Las presentaciones pueden no tener la forma de una función. Entonces no:
function x(y){z=some_kind_of_magic(y);return z;}como su respuesta final ... Su código debe mostrar que toma entrada y proporciona salida.El código debe conservar cualquier otra letra mayúscula que tenga la entrada. Asi que
eCommerce and eBusiness are cool, don't you agree, Richard III?se representará como
ECommerce And EBusiness Are Cool, Don't You Agree, Richard III?Algunos de ustedes pueden estar pensando, "¡Fácil, solo usaré regex!" y, por lo tanto, utilizar la expresión regular nativa en el idioma de golf elegido incurrirá en una penalización de 30 caracteres que se aplicará a su recuento de código final. Risa malvada
Una "palabra" en este caso es cualquier cosa separada por un espacio. Por
palate cleanserlo tanto, son dos palabras, mientras quepigeon-toedse considera una palabra.if_you_love_her_then_you_should_put_a_ring_on_itse considera una palabra Si una palabra comienza con un carácter no alfabético, la palabra se conserva, por lo que_thisdespués de la representación permanece como_this. (Felicitaciones a Martin Buttner por señalar este caso de prueba).- 4b. No hay garantía de que las palabras en la frase de entrada estén separadas por un solo espacio.
Caso de prueba, (use para probar su código):
Entrada:
eCommerce rocks. crazyCamelCase stuff. _those pigeon-toed shennanigans. Fiery trailblazing 345 thirty-two Roger. The quick brown fox jumped over the lazy dogs. Clancy Brown would have been cool as Lex Luthor. good_byeSalida:
ECommerce Rocks. CrazyCamelCase Stuff. _those Pigeon-toed Shennanigans. Fiery Trailblazing 345 Thirty-two Roger. The Quick Brown Fox Jumped Over The Lazy Dogs. Clancy Brown Would Have Been Cool As Lex Luthor. Good_byeEste es el código de golf, el código más corto gana ...
Buena suerte...
fuente

Respuestas:
CJam,
1513 bytesPruébelo en línea en el intérprete de CJam .
Pseudocódigo
Todos los caracteres modificados C se dejan en la pila y, por lo tanto, se imprimen al salir.
fuente
CSS 2.1, 49
Explicacion :
attrfunción toma la entrada de untatributo HTML (texto).text-transformencapitalize.contentpropiedad en un pseudo-elemento .::afterFragmento ejecutable :
Nota : CSS 2.1 especificó el comportamiento deseado: en
capitalizemayúscula el primer carácter de cada palabra. Sin embargo, CSS3 pone en mayúscula la primera unidad de letra tipográfica de cada palabra. Por lo tanto, el fragmento anterior no funcionará correctamente ni en IE antiguo, que no seguía CSS 2.1; ni en los nuevos navegadores compatibles que siguen CSS3.fuente
_thoseLástima el problema en los navegadores CSS3, pero todavía estoy votando por la forma única de resolver el problema.)Javascript ( ES6 ), 77 bytes
Comentado
fuente
x&&. Una cadena vacía es falsey, por lo que los&&cortocircuitos y devuelve el operando izquierdo, la cadena vacía. Se conservan los espacios.Perl, 13 bytes
9 bytes más 4 bytes para
040p(suponiendo que haya interpretado las reglas sobre invocaciones especiales correctamente).-040establece el separador de registro de entrada$/en un solo espacio, de modo que los espacios se conservan; la\usecuencia de escape convierte el siguiente personaje en mayúscula.fuente
CJam,
1715 bytesPruébalo aquí.
Implementación bastante sencilla de la especificación. Utilice el nuevo
{}¶ evitar errores en espacios consecutivos.Dos bytes guardados por Dennis.
fuente
+, entonces eso se rompe si la entrada contiene espacios finales.C,
6463 bytesSolución: a algunos compiladores (como Clang) no les gustan los parámetros int en lugar de argv, así que lo moví a una variable global. El recuento de bytes permanece igual. Gracias a aprensivo ossifrage por notarlo. Hasta 63 bytes, gracias Dennis.
Sin golf:
Bastante sencillo: si a es falso, el personaje se convierte a mayúsculas. Se establece después de leer un espacio: c - '' es falso solo si c == ''. toupper () ignora todo lo que no sea una letra minúscula, por lo que los símbolos y los espacios múltiples están bien. -1 tiene todos los bits establecidos, así que cuando getchar () devuelve -1, el operador NOT lo pone a cero y el ciclo se detiene. a se declara como una variable global, por lo que se inicializa a cero (falso). Esto asegura que la primera palabra esté en mayúscula.
fuente
while(~(c=getchar())- Me gusta eso. En realidad, Clang no compilará esto, pero puede obtener el mismo recuento de caracteres conc;main(a){...}aycy la orden del operador ternario, se puede reemplazar==con-ahorrar un byte.while(!(c = getchar())), ¿verdad?~y lo lógico!no son lo mismo. En C, todo lo que no sea cero se considera verdadero, por lo que su condición sería lawhile((c = getchar()) == 0)que, por supuesto, no funcionará. El operador NOT a nivel de bit~niega el valor bit a bit. Para romper el bucle,~cdebe ser cero: esto significa que todos los bits tienen que ser uno, de modo que cuando se niegan se convierten en ceros. Ese valor (para un int 32bit) es0xFFFFFFFF, que, si está firmado, es-1(EOF).Python 3,
5956 bytesGracias a @Reticality por 3 bytes.
fuente
print(end=f*c.upper()or c)? Eso ahorraría 4 bytesVersión Perl <5.18,
3027262524personajes+1para-n.\uhace que el siguiente carácter en una cadena sea mayúscula . @ThisSuitIsBlackNot señaló esto para ahorrar 1 byte. Antes estábamos usando la funciónucfirst.De los perldocs ,
Como se
$"evalúa como un espacio, esto preservará los espacios. Como queremos establecer ambos$,un carácter de espacio e ingresar un carácter de espacio en la división, @nutki señaló que podemos hacer ambas cosas como la entrada a la división. Eso ahorra 3 bytes de lo que teníamos antes, que primero estaba configurando$,y luego ingresando$"a la división.Usar un
,mapa for en lugar de{}guardar un byte adicional, como señaló @ alexander-brett.Corre con:
fuente
...map"\u$_",split...> <> (Pescado) , 39 bytes
Método:
a-zluego imprímalo. (el código de izquierda a derecha para esta parte esi::'backquote')$'{'(*' '*+)fuente
JAVA, 273 bytes
EDITAR
fuente
publicen frente delclass.. Y si usted quiere decir que se puede quitar elpublicfrente de lastatic void main(..., entonces están equivocados, a menos que también cambia laclassainterfacey utiliza Java 8+.JavaScript (solución regex) - 104 bytes
¡Alguien tiene que morder la bala y publicar la solución RegEx! 74 caracteres, más la penalización de +30 caracteres:
O si desea leer y comprender el código de manera no compactada:
fuente
Python 2, 73 bytes
Este programa escribe en mayúscula una letra si está precedida por un espacio (con un kludge para el primer carácter de la cadena). Se basa en el
.upper()método de cadena para capitalizar correctamente.fuente
raw_input=>input, +2print=>print())PHP 64
7677838489bytesHace
$_GETCuenta como entrada en PHP?Si es así, aquí está mi primer intento de CG
Gracias manatwork :)
Uno podría usar el
ucwordsfunción, lo que daría como resultado 21 bytes:gracias Harry Mustoe-Playfair :)
fuente
fgets(STDIN)leer la entrada. Pero no tenemos consenso$_GEThasta donde yo sé.$k=>. Poner de nuevo:foreach(split(' ',$_GET[@s])as$k=>$v)echo$k?' ':'',ucfirst($v);Haskell, 69
Explicación:
scanltoma una función(a -> b -> a)y un valor iniciala, luego itera sobre una lista de[b]s para hacer una lista de[a]s:Repetidamente toma el resultado anterior como el argumento izquierdo de la función que se le pasó, y un valor de la lista de entrada como argumento correcto , para hacer el siguiente.
Escribí una función
(!) :: Char -> Char -> Charque devuelve el carácter correcto al pasarlo, pero lo capitaliza si el carácter izquierdo es' '(espacio). Parascanl, esto significa: devolver el valor de la lista de entrada , pero ponerlo en mayúscula si el resultado anterior fue un espacio. Entonces sescanl (!) ' ' "ab cd"convierte en:Necesitamos el valor inicial
' 'para poner en mayúscula la primera letra, pero luego la cortamostailpara obtener nuestro resultado final.fuente
scanlejemplos más : uno , dos .Pyth, 20 bytes
Estos múltiples espacios realmente apestan. De lo contrario, habría habido una solución realmente fácil de 12 bytes.
Pruébelo en línea: Pyth Compiler / Executor
Explicación
editar: 16 caracteres son posibles con el algoritmo @Dennis.
fuente
CJam, 14 bytes
No es el más corto, pero ...
Otra respuesta usando ideas similares:
.xsolo cambia el primer elemento si uno de los parámetros tiene solo un elemento.fuente
fy.es bastante ingenioso. Otra variante de 14 bytes:qS/Sf.{\eu}S.-Lua,
646261 bytesLua es un lenguaje horrible para el golf, así que estoy muy orgulloso de mí mismo por este.
[Pruébalo aquí]1 Desactualizado, actualizará mañanafuente
abc_defdaráAbc_Def. Sin embargo, solo las letras después de los espacios deben convertirse en mayúsculas. La buena noticia es que arreglarlo ahorra un byte. ;)JAVA, 204
211226bytesMi primera entrada en CG, espero que esté bien:
Guardado 7 bytes gracias a @TNT
fuente
public class U{public static void main(String[]s){int i=-1,j;char[]r=s[0].toCharArray();for(char c:r)if(++i==0||c==' '&&i>0)r[j=i+(i==0?0:1)]=Character.toUpperCase(r[j]);System.out.print(r);}}publicmodificador no es necesario, por lo que puede guardar 7 más.PHP:
7674 caracteresEjecución de muestra:
fuente
ucfirst($c)usar$c^' '. (Consejo: si tienebitwise-xoruna letra con un espacio, se convertirá de mayúsculas a minúsculas, y lo opuesto también se aplica)$l=str_split(fgets(STDIN))reducir el código en 2 bytes!C, 74 bytes
No hace suposiciones sobre el conjunto de caracteres en tiempo de ejecución (ASCII, EBCDIC, Baudot, ... lo que sea). Asume que EOF es negativo (creo que C lo garantiza).
a es el carácter de entrada; b es verdadero si el último carácter fue el espacio. El único bit no obvio es que usamos el hecho de que
putchardevuelve el carácter impreso si no hay ningún error.fuente
C # Linq - 187
Esto no está cerca de ganar, pero me encanta demasiado Linq.
fuente
Vim,
11, 10 bytesExplicación:
¿Recibo una insignia de oro por superar a Dennis?
fuente
Bash, 61
Tenga en cuenta que los dos puntos son simplemente para hacer que el programa muestre OK aquí. En realidad, estos pueden ser algunos caracteres no imprimibles, como BEL.
Salida
Bash, 12
Lamentablemente, este no conserva espacios iniciales / múltiples / finales, pero de lo contrario funciona:
Salida
fuente
Pip , 15 + 1 para
-s= 16Explicación:
Una característica interesante de Pip en la que se basa este programa es el
:metaoperador de asignación. La mayoría de los lenguajes tipo C tienen algún conjunto de operadores de cálculo y asignación: por ejemplo,x*=5hace lo mismo quex=x*5. En la pipa, sin embargo, puede virar:a cualquier operador y convertirlo en un operador de cómputo-and-asignación. Esto incluso se aplica a operadores unarios. Entonces lo-:xcalcula-xy lo asigna de nuevox, igual que lox:-xharía. En este caso,UC:se usa (junto con las cadenas mutables de Pip) para poner en mayúscula el primer carácter de una palabra.El programa toma información de la línea de comandos, lo que requiere una invocación como esta:
fuente
C, 125
No es la solución más corta, pero realmente me gusta jugar golf en C.
sin golf:
No sé si usar una sintaxis de tipo regex
scanfes estirar las reglas, pero funciona bastante bien. (Bueno, técnicamente no es una expresión regular completa )Otra cosa a tener en cuenta es que este código solo funciona para palabras de menos de 99 bytes. Pero creo que esta solución funcionará en la mayoría de los casos.
fuente
Haskell: 127 caracteres
fuente
PHP, 82
Uso:
fuente
C #,
133131fuente
&&c!=32? No soy muy fluido en C #, pero supongo que convertir un espacio en mayúsculas resulta en un espacio.Mathematica, 66 bytes
Lo usaría
ToCamelCase, pero no conserva el espacio.fuente
R,
139105bytesUngolfed + explicación:
R con expresión regular,
4941 + 30 = 71 bytesEstoy realmente desanimado; esto en realidad tiene una mejor puntuación usando expresiones regulares con la penalización.
Esto coincide con cualquier carácter individual al comienzo de la cadena o después de cualquier número de espacios y lo reemplaza con una versión en mayúscula de la captura. Tenga en cuenta que la aplicación
\\Ues legítima y no tiene ningún efecto para las no letras.pe=Tse interpretaperl = TRUEya que aprovecha la coincidencia parcial de R de los parámetros de función y el sinónimo deTRUE. Por alguna razón, R no usa la expresión regular estilo Perl por defecto.¡Gracias a MickyT por ayudar a ahorrar 8 bytes en el enfoque regex!
fuente
(^.| +.). Todo en mayúscula está bien.