Desafío :
Dada una cadena dividida en posiciones específicas y capitalizar el primer carácter de la palabra dada. Poner en mayúscula el primer carácter de la primera palabra si y solo si ya estaba en mayúscula
Entrada:
Una cadena s
y un personaje c
.
Ouput:
La cadena con cada aparición de c
reemplazado con el primer carácter en mayúscula
Ejemplos:
STRING(s) CHARACTER(c) RESULT
Hello_world _ HelloWorld
me,no,like , meNoLike
you-got-it - youGotIt
Am^I^clear ^ AmIClear
go!full!caps ! goFullCaps
weird&but&tRue & weirdButTRue
ProbleM1fixed1no 1 ProbleMFixedNo
!prob!!lem!s!Olved!! ! ProbLemSOlved
Nota :
- La entrada dada siempre será válida. es decir: el primero siempre será una cadena con al menos una instancia del carácter para reemplazar en. El segundo siempre será un solo personaje.
- La longitud de la cadena de entrada será mayor 4.
Habrá al menos una aparición del personaje para dividir.
La entrada está garantizada para contener solo letras y el separador (Gracias @Arnauld)
- El separador es cualquier cosa que no sea un alfabeto (az / AZ) (sugerido por @Dennis)
Criterios ganadores:
Este es el código de golf, por lo que gana el código más corto en bytes para cada idioma.
- Gracias a @JonathanAllan por señalar dos errores.
1
). Intente pensar en cómo podrían fallar las soluciones y haga un caso de prueba para tales situaciones. Algunos ejemplos: letras como separadores, siendo el separador el último carácter, separadores consecutivos, etc. No es necesario tener muchos casos de prueba que no prueben cosas diferentes..
Me imagino algunas funciones de división de cadenas que luchan con esa.Respuestas:
Python 3 , 63 bytes
Pruébalo en línea!
fuente
C (gcc) ,
615355 bytes-8 bytes gracias a Dennis!
Pruébalo en línea!
fuente
*s==c?*++s&=95:0;
lugar deif(*s==c)*++s&=95;
JavaScript (ES6),
5856 bytesGuardado 2 bytes gracias a @ l4m2 / @Downgoat
Toma entrada en la sintaxis de curry
(s)(c)
.Pruébalo en línea!
Comentado
fuente
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, ya que no funciona para caracteres especiales de expresiones regulares!prob!!lem!s!Olved!!
+
antes de que.
en el RegEx lo evite.Perl 6
-p
, 19 bytesPruébalo en línea!
fuente
sed 4.2.2 (-r), 21
Lo intenté en
\W
lugar de[^a-z]
, pero desafortunadamente eso no coincide_
.Pruébalo en línea!
fuente
sed 4.2.2 (-r), 21 bytes
.Jalea , 8 bytes
Pruébalo en línea!
Cómo funciona
fuente
Octava ,
83,66, 64 bytesGuardado 2 bytes gracias a Luis Mendo.
upper
en lugar detoupper
.Pruébalo en línea!
¡Guau, esa es probablemente la pieza más desordenada de código de octava que he escrito! Utiliza dos de los trucos publicados en esta pregunta de consejos, a saber, la lista de argumentos y las matrices de celdas.
Explicación:
Entrada de lista de argumentos:
k
Aquí está el primer carácters
después de cada separadorc
, convertido a mayúsculas. El índice de cada carácter en mayúscula se almacena eni
.Cuerpo de matriz de células:
Creamos una matriz de celdas con dos elementos, uno donde decimos que todos los i-ésimos caracteres deben ser sustituidos por su contraparte en
k
, y el otro cons
, que ahora ya está actualizado. Indexamos esto usando{2}
para que solo recuperemos toda la cadena modificada. Esto se alimentastrsplit
, lo que lo divide en celdas en el carácter separador. Lo convertimos en una lista separada por comas usando{:}
, y lo concatena nuevamente en una cadena usando corchetes[]
.Disculpas si eso no tiene ningún sentido para ti ... Apenas tiene sentido para mí: P
fuente
Retina 0.8.2 , 20 bytes
Pruébalo en línea! Solo toma la cuerda, separador opcional. Todos los caracteres no alfabéticos se eliminan, pero los siguientes caracteres alfabéticos están en mayúsculas. La versión anterior de 34 bytes aceptaba entradas arbitrarias:
Pruébalo en línea! El enlace incluye un conjunto de pruebas. Asume que la entrada consiste en la cadena y el carácter concatenados juntos. Explicación: La primera etapa translitera todos los caracteres inmediatamente después de las ocurrencias del carácter final de minúsculas a mayúsculas y la segunda etapa luego elimina todas las ocurrencias del carácter final.
Para ambas soluciones, usar una coincidencia de derecha a izquierda en lugar de a
+
también funciona.fuente
[^a-z]
lugar de los lookaheads. ¡ Pruébelo en línea!APL (Dyalog Classic) , 22 bytes
Pruébalo en línea!
fuente
röda ,
5754 bytes-3 bytes gracias al graznido de las vacas
Pruébalo en línea!
Explicación:
fuente
\E
expresión regular, y_[0:1]
→_[:1]
V , 6
7bytes1 byte guardado al no usar argumento
Pruébalo en línea!
El programa toma el texto como entrada y el carácter como argumento.
Hexdump:
Esta es una simple sustitución. Sin comprimir, se parece a lo siguiente
Realice una sustitución global en la cual
\A
, un carácter no alfabético, seguido de un carácter(.)
se reemplaza con el\u
primer grupo de captura en mayúsculas\1
fuente
c
hay un personaje regex especialScala, 83 bytes
Pruébalo en línea!
Explicación:
fuente
Rojo , 87 bytes
Pruébalo en línea!
fuente
05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
PHP,
9183 bytesCorre con
-r
. Era 2 bytes más corto usando dividir en lugar de explotar, pero ^ la prueba falla debido a la expresión regular.-8 gracias a Med
fuente
{
y}
del bucle for, solo tratará la siguiente declaración como el cuerpo de la condición.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 bytes,
45 bytesPruébalo en línea . Paquete de prueba incluido excluyendo el último elemento ya que carece del separador de caracteres
c
.fuente
Ir,
1389287 bytesSe eliminaron 46 bytes gracias a la idea del caso del título de @Dennis .
Pruébalo en línea!
fuente
Casco , 10 bytes
Pruébalo en línea!
Explicación
fuente
F # (Mono) , 122 bytes
Pruébalo en línea!
fuente
Java 10, 141 bytes
Pruébalo en línea.
Explicación:
fuente
R , 87 bytes
Pruébalo en línea!
Utiliza este truco que no se puede ejecutar correctamente en TIO, así que lo simulé.
Necesitamos lo
T
contrario, uno de los casos de prueba falla.fuente
Stax , 11 bytes
Ejecutar y depurarlo
Explicación
Hay algunas partes que realmente me gustaría arreglar de alguna manera. Puedo reducirlo a unos 8 bytes, pero falla en el último caso de prueba>. <
fuente
Ruby
-pl
, 36 bytesPruébalo en línea!
Toma solo la cadena sin segundo argumento. Utiliza la versión de bloque del
gsub!
método porque con lagsub! x,y
sintaxis común$1
no se llena fácilmente con datos de coincidencia.|$
en regex es necesario para el caso de prueba con separador al final.fuente
Python 3 , 77 bytes
Pruébalo en línea!
Esto supone que la cadena está codificada en ASCII y se supone que
s
yc
son variables que contienen la entrada precargado.Esta solución funciona sobre el hecho de que en la codificación ASCII, las letras minúsculas se colocan 32 entradas después de las letras mayúsculas
Editar: me acabo de dar cuenta de que esto también capitaliza el primer carácter de la cadena, que no debería. pero estoy bastante orgulloso de mis tonterías, así que lo dejaré si eso está permitido
fuente
s
supone que es?A string s and a character c.