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 cleanser
lo tanto, son dos palabras, mientras quepigeon-toed
se considera una palabra.if_you_love_her_then_you_should_put_a_ring_on_it
se considera una palabra Si una palabra comienza con un carácter no alfabético, la palabra se conserva, por lo que_this
despué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_bye
Salida:
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_bye
Este 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 :
attr
función toma la entrada de unt
atributo HTML (texto).text-transform
encapitalize
.content
propiedad en un pseudo-elemento .::after
Fragmento ejecutable :
Nota : CSS 2.1 especificó el comportamiento deseado: en
capitalize
mayú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
_those
Lá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).-040
establece el separador de registro de entrada$/
en un solo espacio, de modo que los espacios se conservan; la\u
secuencia 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
{}&
para 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){...}
a
yc
y 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,~c
debe 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,
3027262524
personajes+1
para-n
.\u
hace 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-z
luego imprímalo. (el código de izquierda a derecha para esta parte esi::'backquote')$'{'(*' '*+
)fuente
JAVA, 273 bytes
EDITAR
fuente
public
en frente delclass
.. Y si usted quiere decir que se puede quitar elpublic
frente de lastatic void main(...
, entonces están equivocados, a menos que también cambia laclass
ainterface
y 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
$_GET
Cuenta como entrada en PHP?Si es así, aquí está mi primer intento de CG
Gracias manatwork :)
Uno podría usar el
ucwords
función, lo que daría como resultado 21 bytes:gracias Harry Mustoe-Playfair :)
fuente
fgets(STDIN)
leer la entrada. Pero no tenemos consenso$_GET
hasta donde yo sé.$k=>
. Poner de nuevo:foreach(split(' ',$_GET[@s])as$k=>$v)echo$k?' ':'',ucfirst($v);
Haskell, 69
Explicación:
scanl
toma 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 -> Char
que 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 cortamostail
para obtener nuestro resultado final.fuente
scanl
ejemplos 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:
.x
solo cambia el primer elemento si uno de los parámetros tiene solo un elemento.fuente
f
y.
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_def
dará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);}}
public
modificador 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-xor
una 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
putchar
devuelve 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*=5
hace 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-:x
calcula-x
y lo asigna de nuevox
, igual que lox:-x
harí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
scanf
es 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
\\U
es legítima y no tiene ningún efecto para las no letras.pe=T
se interpretaperl = TRUE
ya 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.