Dadas dos cadenas de letras, transfiera el patrón de mayúsculas de cada cadena a la otra. Pocos bytes ganan.
Input: CodeGolf xxPPCGxx
Output: coDEGOlf XxppCgxx
- Ambas cadenas serán de igual longitud y no vacías, con solo letras
a..z
yA..Z
. - Puede generar las dos cadenas resultantes en cualquier orden en relación con las entradas.
- Puede representar un par de cadenas como una cadena con un separador de un solo carácter sin letras para entrada y / o salida.
- Puede representar una cadena como una lista de caracteres o cadenas de un carácter, pero no como una secuencia de valores de puntos de código a menos que se trate simplemente de cadenas en su idioma.
- Su entrada y salida pueden representar cadenas de manera diferente.
Casos de prueba:
CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx
lower UPPER -> LOWER upper
MiXeD lower -> mixed LoWeR
A A -> A A
ABcd EfGh -> AbCd EFgh
array[i++%n]+=...;
?array[t=i++%n]=array[t]+...;
funciona bien; yarray[i%n]+=...;i++;
funciona bien también, pero usari++
o++i
con un módulo y+=
agregar a una fila en una matriz no funciona. Aquí un Java 10 TIO como ejemplo para ver el problema. ¿Es esto un error (o característica: S) en el Java 10 JDK o en el compilador Java 10 TIO?String
avar
.C (gcc) ,
86585553 bytesPruébalo en línea!
fuente
f(S,Z)char*S,*Z;{for(int d;d=(*Z^*S)&32,*Z++^=d;)*S++^=d;}
c(a,s,e)char*a,*s;{for(;*s++^=e=(*s^*a)&32;)*a++^=e;}
(53 bytes)Jalea , 9 bytes
Pruébalo en línea!
Cómo funciona
fuente
APL (Dyalog Classic) ,
1312 bytesPruébalo en línea!
entrada y salida es una matriz de caracteres 2 × N
⎕a
es el alfabeto en mayúscula'ABC...Z'
∊∘⎕a
devuelve una matriz booleana que indica qué letras en la entrada son mayúsculas819⌶
convierte su argumento derecho a mayúsculas o minúsculas dependiendo de su argumento booleano a la izquierda ("819" es leetspeak para "BIG")819⌶¨⍨
hace eso para cada carácter (¨
), intercambiando (⍨
) los argumentos⊖
significa revertir verticalmente; uno⊖
actúa como argumento izquierdo819⌶
y el otro es la acción finalfuente
"819" is leetspeak for "BIG"
... ¿Seriamente? Esa es la explicación real de por qué es 819? 0_oPyth , 10 bytes
Pruébalo aquí!
Explicación y trucos Pyth limpios utilizados
rVV_mmrIk1
- Programa completo. La entrada se toma de STDIN como una lista de dos cadenas, y la salida se escribe en STDOUT como una lista de dos listas de caracteres.mm
- Para cada personaje en cada una de las cadenas:Ik
- Compruebe si es invariante en ...r...1
- ... Convertir a mayúsculas. Rendimientos True para caracteres en mayúscula y False para caracteres en minúscula._
- Invierte esa lista.VV
- Y doble vectorice la siguiente función sobre las dos listas:r
- Convertir a mayúsculas si el valor esTrue
(aka1
), de lo contrario, convertir a minúsculas.Esta presentación abusa del hecho de que
r0
yr1
son las funciones en minúsculas y mayúsculas en Pyth, y usamos valores de verdad (los valores obtenidos al verificar si cada carácter es mayúscula, invertido) dando lugarTrue
a mayúsculas yFalse
minúsculas. El hecho de que los booleanos son subclases de enteros en Python es muy útil para el enfoque que está utilizando esta respuesta. Los enfoques de Porting Dennis y Jonathan's Jelly resultaron en más de 18 bytes, por lo que estoy bastante contento con los trucos específicos de Pyth utilizados aquí.fuente
MATL , 11 bytes
Pruébalo en línea!O verificar todos los casos de prueba .
Explicación
fuente
Haskell , 78 bytes
Pruébalo en línea!
fuente
isUpper x
puede serx<'a'
.J ,
36 3127 bytes-9 bytes gracias a FrownyFrog!
Pruébalo en línea!
La solución anterior fue:
J ,
3631 bytes-5 bytes gracias a FrownyFrog!
Pruébalo en línea!
Cómo funciona:
fuente
[:
puede ser 0 y el(22 b.)
puede serXOR
.&.(3&u:)
ahorra 1 byte."
y$
? ¡Gracias!,:
, hay 2 filas en el lado izquierdo. Necesitamos"(1)
pero"$
también funciona, porque significa"1 _
.$ b.0
da el rango de $ (monádico, izquierda diádica, derecha diádica).R ,
118 94 7572 bytesPruébalo en línea!
Debe haber una forma mucho más golfista.-43 bytes gracias a Giuseppe que me señaló la solución MATL de Luis Mendo. El enlace TIO contiene una solución de función para el mismo recuento de bytes.Bonificación: ¡La salida es un vector con nombre cuyos nombres son las cadenas de entrada originales!
fuente
a<-
ya que no lo usa ena
ningún otro lugar.Código de máquina x86-64, 14 bytes
Se puede llamar desde C (convención de llamadas SysV x86-64) con este prototipo:
Una versión de longitud explícita con longitud
rcx
es del mismo tamaño.void casexchg(char *rdi, char *rsi, int dummy, size_t len);
Utiliza el mismo algoritmo de intercambio de bits que las respuestas de C y Java: si ambas letras son el mismo caso, ninguna necesita cambiar. Si son el caso opuesto, ambos deben cambiar.
Use XOR para diferenciar el bit de mayúsculas y minúsculas de las dos cadenas.
mask = (a XOR b) AND 0x20
es 0 para igual o 0x20 para diferente.a ^= mask; b ^= mask
caseflip ambas letras si fueran mayúsculas y minúsculas. (Debido a que los códigos de letras ASCII para superior e inferior difieren solo en el bit 5).Listado NASM (desde
nasm -felf64 -l/dev/stdout
). Usecut -b 26- <casexchg.lst >casexchg.lst
para volver a convertir esto en algo que pueda armar.La
loop
instrucción lenta también es de 2 bytes, igual que un cortojcc
.scasb
sigue siendo la mejor manera de aumentarrdi
con una instrucción de un byte. Supongo que podríamosxor al, [rdi]
/stosb
. Sería del mismo tamaño pero probablemente más rápido para elloop
caso (la memoria src + store es más barata que la memoria dst + reload). ¡Y todavía establecería ZF apropiadamente para el caso de longitud implícita!Pruébalo en línea! con un _start que lo llama en argv [1], argv [2] y usa sys_write en el resultado
fuente
k , 14 bytes
Pruébalo en línea! Entrada / salida es una lista de dos cadenas.
fuente
Python 3 , 83 bytes
Pruébalo en línea!
-3 bytes gracias a Mr. Xcoder
-3 bytes gracias a Chas Brown
fuente
Haskell , 78 bytes
Pruébalo en línea!
fuente
QBasic, 133 bytes
Toma las dos cadenas separadas por comas y genera los resultados separados por nueva línea. Utiliza el algoritmo de violín de la respuesta de Dennis's Jelly . Aparte de eso, el truco principal del golf aquí es que la primera cadena de resultados se imprime directamente, un carácter a la vez, que es un poco más corto que guardar ambas cadenas de resultados en variables e imprimirlas fuera del bucle.
fuente
JavaScript,
777473 bytesMostrar fragmento de código
Toma una matriz de matrices de caracteres, emite una matriz de matrices de caracteres.
-1 byte ( @Arnauld ):
c>'Z'
→c>{}
fuente
c>{}
.Retina , 75 bytes
Pruébalo en línea! Explicación: las nuevas líneas se utilizan como marcadores para determinar la cantidad de cadena que se ha procesado. La expresión regular intenta hacer coincidir las letras mayúsculas o en su defecto cualquier carácter. Si una letra mayúscula coincide, entonces el otro carácter está en mayúscula; de lo contrario, está en minúscula y viceversa, mientras que las líneas nuevas avanzan al siguiente carácter.
fuente
Python 3 ,
7675 bytesPruébalo en línea!
Emite el resultado como una cadena con un separador de un solo carácter.
Gracias a Jonathon Allan por 1 byte.
fuente
(y>'Z')*32
->ord(y)&32
Ensamblaje (nasm, x64, Linux) , 25 bytes (fuente de 123 bytes)
Bytes hexadecimales:
El punto de entrada de la función está en
a
, con las cadenas pasadas en el usoRDI
yRSI
.Pruébalo en línea!
fuente
and al,32
es de solo 2 bytes, usando la AL especial, codificación imm8 que tienen la mayoría de las instrucciones ALU. Puede requerir la longitud de la cadena en RCX y usarlaloop
. Iba a decir que deberíastest ah,ah
porque eso es más eficiente queor
si bien tiene la misma longitud, pero es más largo en fuente asm, por lo que el viejo idioma crujiente en realidad tiene mérito para el golf de código fuente asm: PJalea , 13 bytes
Pruébalo en línea!
También 13:
=ŒuṚ×32ạŒlO$Ọ
(o=ŒuṚæ«5ạŒlO$Ọ
)fuente
Carbón , 17 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Toma la entrada como una matriz de dos cadenas. Explicación:
fuente
F #, 120 bytes
Tío.
Pruébalo en línea!
La función
g
toma las dos cadenas como parámetros.Seq.fold2
aplica una función con un acumulador (a
) a cada elemento (x
yy
) en las cadenas. Inicialmentea
es una cadena vacía, y le agrega el carácter convertido en cada iteración.b
Es la función principal. Primero se conviertef
con respecto as
, y luego se conviertes
con respecto af
. Luego devuelve una tupla con ambos valores.fuente
Prólogo (SWI) , 121 bytes
Pruébalo en línea!
fuente
Ruby ,
7469 bytesPruébalo en línea!
La entrada y la salida son matrices de caracteres, por lo que el pie de página realiza transformaciones de cadenas.
Todavía no estoy seguro de si este es un buen enfoque del problema, pero este desafío definitivamente parece un buen escenario de uso para el
swapcase
método.fuente
PHP 4.1.2 , 40 bytes
Reemplace el par de comillas con el byte A0 (en ISO-8859-1 o Windows-1252, esto es NBSP) para obtener el recuento de bytes que se muestra, luego ejecute desde un navegador web (o desde la línea de comando), proporcionando las cadenas como los argumentos de cadena de consulta (o variables de entorno)
a
yb
.En esta versión de PHP, register_globals está activado de forma predeterminada, por lo que las cadenas se asignarán automáticamente a las variables
$a
y$b
. Aumente el valor2e5
(200000) si es necesario.PHP 7.1+, 58 bytes
Ejecutar en la línea de comando, usando
php -r 'code here' string1 string2
:El valor
3e5
(300000) se elige para exceder (MAX_ARG_STRLEN * 2 + 1) en la mayoría de los sistemas Linux (específicamente, x86 y otras arquitecturas para las cuales PAGE_SIZE es 4096, y MAX_ARG_STRLEN es 131072), para evitar problemas con cualquier posible cadena de entrada. Aumentar si es necesario.Pruébalo en línea!
fuente
Stax , 10 bytes
Ejecutar y depurarlo
Aquí hay una representación no reflejada del mismo programa para mostrar cómo funciona.
Ejecute este
fuente
Cristal , 108 bytes
Pruébalo en línea!
¿Cómo funciona?
fuente