Para el desafío de hoy, debe escribir un programa o función que alterne el caso de una cadena. Sin embargo, debe ignorar los caracteres no alfabéticos. Esto significa que cada carácter alfabético debe tener un caso diferente al del carácter alfabético anterior y siguiente. Esto es un poco más complejo que poner en mayúscula cualquier otra letra, por ejemplo. Si toma una cadena como
hello world
y convierte todos los demás caracteres a mayúsculas, obtendrás:
hElLo wOrLd
Como puede ver, la minúscula o
es seguida por una minúscula w
. Esto no es valido. En cambio, debe ignorar el espacio, dándonos este resultado:
hElLo WoRlD
Todos los caracteres no alfabéticos se deben dejar igual. La salida puede comenzar con mayúsculas o minúsculas, siempre y cuando se alterne constantemente. Esto significa que lo siguiente también sería un resultado aceptable:
HeLlO wOrLd
Su programa debería funcionar independientemente del caso de la entrada.
La cadena de entrada solo contendrá ASCII imprimible , por lo que no tiene que preocuparse por caracteres no imprimibles, líneas nuevas o unicode. Su envío puede ser un programa completo o una función, y puede tomar la entrada y salida en cualquier formato razonable. Por ejemplo, argumentos de función / valor de retorno, STDIN / STDOUT, leer / escribir un archivo, etc.
Ejemplos:
ASCII -> AsCiI
42 -> 42
#include <iostream> -> #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!! -> lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz. -> PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase -> tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase -> ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2 -> A1b2
Como se trata de código de golf , se aplican las lagunas estándar y gana la respuesta más corta en bytes.
cowsay
Respuestas:
JavaScript (ES6),
6663 bytesComienza con mayúsculas.
Casos de prueba
Mostrar fragmento de código
fuente
s=!s
truco?s
es la cadena de entrada,!s
evalúa primero afalse
(a menos que la cadena de entrada está vacía, en cuyo caso se podría evaluar atrue
- pero una cadena vacía no generará ningún partido de todos modos). Después de eso, se convierte en una operación booleana estándar, alternando entrefalse
ytrue
. Además, no nos importa perder el contenidos
en este momento porque ya se usaba para alimentar.replace()
."A[I"
fallaría.05AB1E ,
118 bytesCódigo:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
fuente
lvy¾Fš}Da½J
es exactamente lo que ya tenía ._.Oh-Five-Ay-Bee-One-Eee
, no soy un hombre creativo.GNU Sed, 33
La puntuación incluye +1 para la
-r
bandera a sed.Pruébalo en línea .
fuente
Jalea , 13 bytes
Pruébalo en línea!
Cómo funciona
fuente
Japt ,
1614 bytesPruébalo en línea!
Explicación
fuente
,
. A menos que sea un número (es decir[12]
), Japt sabe que son elementos diferentes. Creo que también puedes eliminar el&1
._m"uv"gT°
Agradable. Estaba a punto de sugerir eso.Python 3 ,
8676686663 bytes-2 bytes gracias a DJMcMayhem
-3 bytes gracias a Cyoce
Pruébalo en línea! o Pruebe todos los casos de prueba
fuente
print(end=(2*i).title()[x])
?Alice , 18 bytes
Pruébalo en línea!
Explicación
Este programa sigue una plantilla menos conocida para programas de longitud impar que se ejecutan completamente en modo ordinal. La versión linealizada de este código es:
Explicación del código:
Sin usar
l
en el duplicado, la pila despuésN
sería["helloworld", "helloworld"]
. Sospecho fuertemente que esto es un error.fuente
C (tcc) ,
605756 bytesGracias a DigitalTrauma por notar que el bit 5 es la única diferencia para las mayúsculas / minúsculas ASCII.
Un agradecimiento especial a zch por jugar tres bytes más.
Ahorre un byte más de la idea de RJHunter
Pruébalo en línea!
fuente
strdup()
obtener punteros para leer y escribir memoria en el código del controlador de prueba.*s&~32|++l%2<<5
para guardar 3 bytes.&~33
con&95
para guardar un byte adicional.Java 8, 99 bytes
Explicación:
Pruébalo aquí
fuente
(c+"").matches("[A-Za-z]")
oCharacter.isLetter(c)
guardar bytes.c>64&c<91|c>96&c<123
sin embargo. Y dado que uso deint
todos modos para las partesCharacter.toUpperCase(...)
yCharacter.toLowerCase(...)
golf (estas:(char)(c&~32)
y(char)(c|32)
), dudo que pueda acortarlo con cualquiera de ellas.a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;}
??Ruby,
57554741 bytesEl recuento de bytes incluye dos bytes para las opciones de línea de comando.
Ejecútelo por ejemplo así:
$ ruby -p0 alternate_case.rb <<< "some input"
Con la
p0
opción, toda la entrada se consume de una vez, y el global mágico$.
se incrementa a 1. Esto luego se alterna entre 0 y 1 y se usa para mantener el estado.Funciona con entrada multilínea; Pruébalo en línea!
Gracias a Ventero por su increíble aporte: revise los comentarios para más detalles.
fuente
$.
los incrementos automáticos con cadagets
llamada, un programa completo con la-p
bandera habría sido más corto ...1&$.+=1
le permite soltar los paréntesis. Y por el amor integridad, hay otro número entero mundial - es por desgracia acaba de sólo lectura:$$
.-p0
hace que el intérprete lea todas las entradas disponibles de una sola vez, por lo que su código solo se invoca una vez, lo que le permite usarlo libremente$.
. La combinación de eso con el hecho de quegsub
implícitamente funciona como$_.gsub!
cuando se especifica-p
hace que un programa completo sea significativamente más corto: 48 caracteres paragsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}
y 2 para lap0
bandera.-p0
, en realidad puede guardar algunos caracteres más en la forma en que cambia de$.
un lado a otro: ya que ahora está garantizado1
cuando se invoca su código, simplemente puede usarlo$.^=1
./\p{L}/
( Letra de categoría Unicode ) es un carácter más corto que/[a-z|/i
.Brachylog , 25 bytes
Pruébalo en línea!
Esto es largo y lento.
Explicación
fuente
MATL ,
1615 bytesPruébalo en línea! O verificar todos los casos de prueba .
Explicación
Considere la entrada 'hola mundo'
'
fuente
Perl 6 ,
3230 bytesIntentalo
Intentalo
Expandido:
fuente
q / kdb +,
514238 bytesSolución:
Ejemplo:
Notas:
fuente
V ,
17, 13 bytesPruébalo en línea!
¡O verifique todos los casos de prueba!
HeXdUmP:
Explicación:
Utiliza un regex ™ ️ comprimido , así que antes de explicarlo, expandamos el regex:
El
VU
convierte todo a mayúsculas. Luego ejecutamos esto:Antigua / más interesante respuesta:
fuente
PHP, 71 bytes
Pruébalo en línea!
fuente
CJam ,
2624 bytesPruébalo en línea!
Explicación
fuente
Pyth, 11 bytes
Pruébalo aquí
Explicación
fuente
PowerShell, 86 bytes
La entrada es una
[char[]]
matriz.Comentarios en el código para explicación
fuente
Haskell,
10583 +24 + 1 byte de separador =1088688 BytesLa función es
(1#)
, comienza en minúsculas. Pruébalo en línea!Lo triste es que esto es más largo que las respuestas de Java y C # ¡Gracias a Ørjan Johansen por guardar 22 bytes fusionando tres líneas en una!fuente
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
1#
que no cuenta como una función anónima. Según tengo entendido, uno debería poder vincular una función anónima a un identificador, pero, por ejemplof=1#
, no funcionará. En su lugar, necesita la sección(1#)
para +2 bytes. Esto también se afirma implícitamente en las pautas de nuestra comunidad para jugar al golf en Haskell , aunque quizás deberían adaptarse para mencionar explícitamente este caso.Hojas de cálculo de Google, 264 bytes
Es un gran desastre, pero es un poco más fácil si lo expande:
La pseudo lógica correría así:
fuente
Perl 5 , 24 bytes
23 bytes + 1 byte para
-p
.Gracias a @Dada por -2 bytes.
Pruébalo en línea!
fuente
\pl
en lugar de[a-z]
2 bytes aunque :)[a-z]
lugar lo uso !). Si te preguntas, proviene de perlrecharclass ;)Retina , 46 bytes
Pruébalo en línea! Incluye casos de prueba.
fuente
C 64 bytes
Aprovecha la codificación ascii donde las letras mayúsculas y minúsculas se compensan con 0x20.
fuente
char
y*s
Retina , 32 bytes
Pruébalo en línea!
Primero convierte la entrada a mayúsculas, y luego agrupa la entrada en coincidencias que contienen hasta dos letras mayúsculas. La única vez que contendrá solo una letra es si la última letra no tiene un par. Luego, pone en minúscula la primera letra de cada una de estas coincidencias.
En
01
la segunda etapa se traduce aproximadamente a: no cambie el comportamiento de esta etapa en función del número de coincidencia, sino que solo aplique los cambios al primer carácter de cada coincidencia.fuente
PHP 5, 54 bytes
fuente
C #, 100 bytes
fuente
Groovy, 79 bytes
fuente
Python 3 , 192 bytes
Pruébalo en línea!
fuente
Convexo , 16 bytes
Pruébalo en línea!
Puerto convexo de la respuesta de @Business Cat .
fuente