Dada una cadena, capitalícela. Por capitalización quiero decir conTeNT-lENgth
cambios a Content-Length
. En el ejemplo, mostré la cadena con 2 palabras con -
el límite de la palabra. Sin embargo, espero que escriba el código de la cadena que contiene cualquier número de palabras separadas por un solo carácter como límite. Este límite puede cambiar a través de la cadena.
Condiciones
- el uso no
regular expressions
está permitido . - puede haber cualquier cantidad de palabras en una oración (cadena).
- cada palabra consistirá en
English
letras[a-zA-Z]
de cualquier caso. - diferentes palabras en la oración estarán separadas por un solo carácter. Este personaje será solamente ser cualquiera de
-
,.
,<space-character>
,/
,&
,#
. Puede asumir con seguridad que la oración no contendrá ningún otro carácter, excepto los mencionados. - los límites de palabras deben conservarse en la salida.
- el código más corto gana.
Por ejemplo, su programa debería generar Begin/With.Type&Content
para BeGin/wITH.tyPE&conTeNt
.
Some test cases:
"aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe"
"type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe"
"cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc"
"lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT"
"contENT/ACcEpT"
"BeGin/wITH.tyPE&conTeNt"
"Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with"
"RaNgE&COnTeNT WITh CoNTENT-TypE tyPe"
"BEgin COdE#uSeR#aGeNt.USeR"
"TypE LENGth"
/CC/
en la línea 2 o-AND&
en la línea 7) deberían dejarse solas. ¿Está bien para este desafío?Respuestas:
GolfScript,
362719 caracteresUn enfoque bastante básico de GolfScript que funciona para todas las entradas de acuerdo con la especificación. Los ejemplos se pueden probar en línea .
fuente
Python 3,22
Este código tomará una cadena como entrada de stdin y le dará una salida en mayúscula a stdout.
por ejemplo:
entrada:
salida:
El siguiente código es para entradas de varias líneas (si es necesario)
Pitón 3, 46
fuente
while 1:print(input.title())
es un equivalente más corto para el último fragmento de código.Mathematica 62
Datos
Código
Uso
fuente
%%
%%%
%
%%
JavaScript (94)
fuente
PHP:
78736564 caracteresLa entrada se pasa
$s
. Funciona en la cadena como una matriz de caracteres.Es una máquina simple de 2 estados. Se basa en el ordenamiento léxico de cadenas, y que el analizador asume automáticamente que en algunos casos tenía la intención de escribir una cadena.
El estado se almacena
$b
y se representa como el nombre de la función que debe llamarse en el siguiente carácter.ucfirst
ylcfirst
son más cortos de escribir y tienen un comportamiento idéntico astrtolower
/strtoupper
en cadenas de caracteres individuales. Además, dado que solo difieren en una letra, podemos usarlos de manera eficiente para almacenar el estado. La versión original necesitaba almacenar el estado explícitamente en un booleano.Como echo no imprime nada para boolean false, utilicé una coma y el
!
operador para "ocultar" la asignación (que en este caso es verdadera) en la declaración de echo. Esto me permitió guardar un personaje eliminando el{}
.fuente
$b=ord($c)>64;
intentarlo$b=$c>"@";
. O incluso$b=$c>=A;
: AFAIR que arroja una advertencia, pero las buenas prácticas de codificación no son una virtud aquí.$b=ucfirst;foreach(str_split($s)as$c){echo$b($c);$b[0]=$c>=A?l:u;}
.C, 83
Toma líneas
stdin
, las traduce astdout
. (PrefiereSIGINT
aEOF
.)fuente
Powershell: 37-43
Dependiendo de cómo desea tomar la entrada ...
Solicitar al usuario su aporte: 43
Tomar entrada de la tubería: 38
Proporcione información como argumento al ejecutar el script: 37
NOTA: Las secuencias de comandos anteriores ignorarán las palabras mayúsculas, dejándolas como están. Si esto debe tenerse en cuenta, la entrada debe forzarse a minúsculas antes de la conversión de mayúsculas y minúsculas. Esto agrega 10 caracteres al primer método y 12 a los otros dos.
fuente
foo:bar
.:
(dos puntos) no aparece en la lista como separador de palabras en la regla n. ° 4, por lo tanto, AFAICSfoo:bar
debería dar como resultadoFoo:bar
, noFoo:Bar
. Pero esa es solo mi lectura (bastante estricta) de la especificación.get-culture
conculture
; ver codegolf.stackexchange.com/a/778/1308Java - 209 caracteres
Agregué nuevas líneas solo para facilitar la lectura.
fuente
R,
143116Tal vez una solución un poco larga, pero aquí vamos:
Ligeramente desanimado y explicado:
Editar : 116 caracteres
El principal desafío aquí es vectorizar
substr
. Aquí hay otra forma menos detallada.Sangrado:
Uso:
fuente
a
consta de caracteres en minúscula, no hay necesidad de buscar coincidencias con mayúsculasLETTERS
.TRUE
conT
.tolower
posterior.mapply(substr,tolower(x),n,n)
constrsplit(tolower(x),"")[[1]]
para guardar un personaje.Befunge 98 -
2445Escribir esto hirió mi cerebro.
Esto lleva la entrada
~
y si el carácter anterior era uno de los separadores (o si no había ningún carácter anterior), se ejecutaEste fragmento toma el carácter, y si su valor ascii es mayor o igual que
a
, resta 32 de él, cambiando así a mayúscula. Si es menor quea
,3*j
omite el ajuste. Luego, se salta la siguiente parte. Esta parte maneja el cambio de mayúsculas a minúsculas (estoy seguro de que se puede combinar con la siguiente parte; simplemente no estoy seguro de cómo):El carácter se imprime (
,
), luego esto verifica si el carácter es uno de los límites:Básicamente compara el carácter con el valor ascii de
/
. Si el personaje no es un límite, el código lo empuja12
para que se salteará el ajuste de capitalización la próxima vez.#
salta sobre el programa final:@
y, si se alcanza el final de la entrada,~
envía la ejecución del código nuevamente al@
final del programa.fuente
Ruby:
60515047 caracteresEjecución de muestra:
fuente
l==l.swapcase
mismo quel<?0
(no probado)? Al menos para la entrada permitida para esta tarea.C # - 110
Un procesamiento simple basado en máquina de estado finito:
(donde
x
está elstring
capitalizar)y, por supuesto, si quieres ser aburrido (después de actualizar la especificación), puedes usar
o, con todo el aburrido repetitivo:
fuente
Microsoft (R) Roslyn C# Compiler version 1.2.20906.1 Loading context from 'CSharpInteractive.rsp'. Type "#help" for more information. > "foobar".Aggregate(new{b=1>0,r=""},(s,c)=>new{b="-. /&#".Contains(c),r=s.r+(s.b?Char.ToUpper(c):Char.ToLower(c))}).r "Foobar"
Pero si realmente te importa el aburrido repetitivo, agrega 112 caracteres.public
ystring[]a
desde lapublic
, pero necesito los argumentos, ya que eso es lo que proceso ...Javascript 102
fuente
(
...)
alrededor de la condición ternaria. Aún más, no es necesario que el segundo ternario:function(c){o+=q?c.toLowerCase():c.toUpperCase(),q='@'<c}
.Adelante, 135
La salida traducida se escribe a
stdout
medida que se leestdin
.fuente
Befunge-98 (29), C (65)
Dado que el método / algoritmo es más o menos el mismo, incluyo ambas versiones en la misma publicación. Ambos confían en realizar un seguimiento de si el último carácter fue un símbolo o una letra, para saber si se debe minúscula o no.
Befunge-98 (29) C (65)fuente
05AB1E , 1 byte
Código:
Explicación:
Pruébalo en línea!
fuente
Excel VBA-11 caracteres
En la ventana Inmediato
?[Proper()]
VBscript
fuente
=PROPER(A1)
También funciona directamente en Excel: también 11 bytesAWK
113103 bytesEsto funciona bien para el contenido de una sola línea, pero para la entrada multilínea se necesita agregar un par de inits
Sería bueno si pudiéramos aprovechar la división automática de un registro en campos y modificar dichos campos, pero luego perderíamos nuestros separadores de campo. :(
Sé que esta no es la mejor respuesta y esta es una pregunta bastante antigua, pero creo que AWK está subrepresentada en el espacio de respuesta de CG :)
(Gracias @manatwork por probar el código, debería funcionar ahora :) También cambió el flujo pero mantuvo el recuento de bytes igual, al reemplazar algunos
;
con nuevas líneas.fuente
gawk
,mawk
nioriginal-awk
. (Probado en Ubuntu.)gawk
un cuadro RHEL6, pero luego se transcribió a un cuadro de Windows. Bien podría haber un problema de transcripción. Intentaré probar después del trabajo cuando pueda hacer pruebas y publicar en la misma máquina ... Creo que veo el problema, de todos modos.l=0
debería serL=0
{for(l=split($0,a,$0="");i<=l;s=a[++i]){$0=$0(L?toupper(s):tolower(s));L=index("-. /&#",s)}}1
.$0
y la1
etiqueta para evitar elprint
comando son cosas que no he pensado hacer. Tendré que tenerlo en cuenta para el golf futuro :)PHP (> v5.4.32) - 25 caracteres
<?=ucwords($a,'-. /&#')?>
Explicación:
ucwords () es una función PHP integrada
El primer parámetro
$a
es la entrada.El segundo parámetro son los delimitadores (caracteres no alfabéticos encontrados en casos de prueba)
Se supone retorno / eco / impresión debido al uso de
<?= ?>
Enlaces:
Código de juegos
Función PHP ucwords ()
fuente
-R
: ¡ Pruébelo en línea! o 42 usando argumentos: ¡ Pruébelo en línea!T-SQL, 179
Pruebe la versión SELECT en SQL Server 2012 aquí .
Reemplace "foo" con la cadena de entrada. El recuento de caracteres es para una cadena de longitud cero. Este código atraviesa la cadena usando un índice, en mayúsculas o minúsculas en esa posición en función del carácter anterior.
fuente
JavaScript (Node.js) , 70 bytes
Pruébalo en línea!
Estoy seguro de que esto se puede jugar más golf.
Nota :
Toma entrada vía
f(string)()
, los últimos son obligatorios pero no realizan nada.fuente
Powershell,
7775 bytesEsta solución cumple totalmente con las reglas de la tarea (incluso un ejemplo ambiguo
foo:bar
).Vea también la solución Powershell con función integrada ToTitleCase de @Iszi.
Script de prueba explicado:
Salida:
fuente
QBasic, 74 bytes
Los bytes se cuentan en CP-437 ;
es un solo byte (código de carácter 20).
El método de entrada aquí es un poco extraño: los caracteres se escriben uno a la vez, y su uso de mayúsculas se convierte antes de mostrarse. Entonces, cuando escribe
aGeNT
, aparece en la pantalla comoAgent
. Golpear Entertermina el programa.fuente
Python 3 , 122 bytes
Pruébalo en línea!
No es un gran puntaje, pero quería probarlo sin operaciones de cadena incorporadas para cambiar los casos.
fuente
PHP - 23 caracteres
Necesita php_mbstring para funcionar
fuente
mb_convert_case("BeGin/wITH.tyPE&conTeNt", 2);
devuelve "Begin / with.type & content", no "Begin / With.Type & Content".