your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
Descripción
La entrada es de dos cadenas s1
y tiene la s2
misma longitud. Cada uno contendrá solo ASCII imprimible y tendrá al menos un carácter de longitud. Puede ingresarlos como dos cadenas, una matriz de dos cadenas o una sola cadena con s1
ys2
separada por una pestaña o una nueva línea.
El resultado es el siguiente:
Para cada personaje
c
ens1
:Si el carácter no es una letra, déjela sin cambios.
De lo contrario, si
c
es una carta:Encuentra el carácter coincidente (el que está en el mismo índice) en
s2
.Si es una letra mayúscula, la salida se
c
capitaliza.Si es una letra minúscula, salida
c
en minúscula.De lo contrario, salida
c
sin cambios.
Luego haga lo mismo, excepto con
s1
ys2
cambiado.
Esencialmente, todas las letras en las s1
que el carácter coincidente s2
es mayúscula, y todas las letras s1
con una letra minúscula en el mismo índice s2
deben ser minúsculas (y viceversa).
Casos de prueba
Entrada:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Salida:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Entrada:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Salida:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Entrada:
AAAbbb111
Cc2Dd3Ee4
Salida:
AaABbb111
CC2dd3Ee4
Respuestas:
Pyth,
1918 bytesEsto define una función y que acepta y devuelve una lista de cadenas.
Verifique todos los casos de prueba a la vez en Pyth Compiler / Executor .
Gracias a @Jakube por jugar golf en 1 byte.
Cómo funciona
fuente
CJam, 25 bytes
Esta es una función anónima que muestra una serie de cadenas de la pila y deja una a cambio.
En los navegadores compatibles, puede verificar todos los casos de prueba a la vez en el intérprete de CJam .
Casos de prueba
Código
Entrada
Salida
Cómo funciona
fuente
C, 126 bytes
Este es mi primer intento en un código de golf, nunca. Avísame si hice algo mal.
Estoy usando operaciones bit a bit para realizar el cambio
Golfizado:
Sin golf:
editar: reemplazado && con *
fuente
SQL (PostGreSQL), 427 bytes
A pesar de su gran tamaño, esto terminó siendo un poco más pequeño de lo que esperaba. No estaba muy seguro de poder hacerlo honestamente. Sospecho que todavía hay mucho por hacer :)
Formateado y comentado
Prueba de funcionamiento
fuente
Julia, 140 bytes
Esto crea una función que acepta dos cadenas y devuelve una tupla de cadenas. Nada particularmente inteligente está sucediendo aquí; simplemente definimos una función interna que implementa directamente el algoritmo en la especificación y lo llamamos dos veces.
Sin golf:
fuente
JavaScript ES6,
128108 bytesJavaScript
toUpperCase()
ytoLowerCase()
ocupa muchos bytes peroString.fromCharCode()
es aún más largofuente
s2
no es una letra y el carácter correspondiente ens1
mayúscula. En este caso,c
ens1
debe ser devuelto sin cambios.Mathematica,
173169155 bytesEsta es una función que toma una matriz de dos cadenas, por ejemplo,
{"Foo","bAR"}
y genera una matriz de dos cadenas. Sin comprimir espacialmente, reescribiendo el esquemaf@x
comof[x]
donde aparezca, expandiendo las abreviaturas de notación (f=0>1
akaFalse
,t=!f
akaTrue
,c=Characters
yu=ToUpperCaseQ
), y poco reemplazando UpperCaseQ [#] con#==u@#
(este personaje es igual a su versión uppercased), que es:Interfaz: el final
&
hace de esto una función. Su argumento se inserta como el "#" en ambas instancias de/@ #
. Por ejemplo,f=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
produce la salida{AaABbb111,CC2dd3Ee4}
.Procesamiento: contado en el exterior habitual en orden:
MapThread[...]
es una lista de dos listas de caracteres. StringJoin se aplica a cada una de estas dos listas de caracteres para producir una lista de dos cadenas, la salida.MapThread[#[#2]&, ... , 2]
actúa en una matriz de dos listas de elementos de 2 por n. La primera lista es una matriz de funciones de 2 por n. La segunda lista es una matriz de caracteres de 2 por n,Characters /@ #
, las listas de caracteres en las dos cadenas de entrada. Funciona en profundidad 2, es decir, en las funciones y caracteres individuales.Reverse[...]
intercambia las dos sublistas de funciones para que MapThread aplique las funciones de la segunda cadena a la primera cadena y viceversa.{ ... } &
es una función anónima que se aplica a cada una de las dos cadenas de entrada.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
divide una cadena en una lista de caracteres, luego reemplaza cada carácter con dos listas de elementos. En estas listas de dos elementos, el primer elemento esTrue
si el carácter es una letra yFalse
, de lo contrario, el segundo elemento indica si el carácter es mayúscula.UpperCaseQ[]
no puede devolver verdadero si no recibe una carta./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
reemplaza estas dos listas de elementos con funciones. (La expansión de las abreviaturast
yf
se produce antes de intentar cualquier juego.) Si una lista de dos elementos tieneFalse
como su primer elemento, es reemplazado con la función(# &)
, la función identidad. (Los paréntesis son necesarios, de lo contrario la flecha se une más estrechamente que el signo.) De lo contrario, los dos elementos de la lista comienza conTrue
el personaje era una carta, y las funciones de salidaToUpperCase
yToLowerCase
correspondiente a su caso. (Verificar esto últimoFalse
es innecesario, de hecho{_,_}->ToLowerCase
funcionaría, atrapando cualquier cosa que aún no haya sido reemplazada, pero esto no sería más corto y más oscuro).El único desafío fue encontrar una manera sucinta de comprimir una matriz de funciones bidimensional en una matriz de argumentos.
Editar: Gracias a @Martin Büttner por capturar barras diagonales de corte / pegado "útiles", abreviaturas
1>0
y1<0
abreviaturas, y también por la guía para contar la longitud en bytes, no en caracteres (cualesquiera que sean :-))Edit2: Además, gracias a @Martin Büttner por señalar que contaminar el espacio de nombres global es un juego de golf aceptable, recordándome la aplicación de una función de personaje y sugiriendo reemplazar las dos funciones en mayúscula por una abreviatura para una y usar la una para emular la otra (guardar cuatro caracteres) (Creo que ya ha hecho esto antes :-))
fuente
f@g
lugar def[g]
(a lo largo de su código). También estoy bastante seguro de que no necesitas un bloqueo. Solo hazlo(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. Esto contamina el espacio de nombres global, pero estamos totalmente de acuerdo con eso al jugar golf. Además, no he contado, pero es posible que pueda guardar bytes almacenandoToUpperCase
en una variable (u
, por ejemplo) y reemplazandoUpperCaseQ@#
con#==u@#
.Python 3, 131 bytes
La función devuelve cadenas en una tupla
fuente
Erlang, 157 bytes
Comprime las dos cadenas (en realidad, las listas) en una lista de tuplas de dos caracteres y asigna cada carácter al caso apropiado utilizando una comprensión de la lista.
fuente
Python 2, 101 bytes
Una función anónima que toma dos cadenas y devuelve las cadenas de salida en una lista. He marcado esto como Python 2 porque Python 3 no permite
I,I[::-1]
sentarse solo al final así.fuente
Python, 126 bytes
La función
f
devuelve cadenas en una tuplafuente
C, 181 bytes
Tuve problemas para acortar los nombres de las bibliotecas estándar de una manera que valió la pena (# definirlos requiere 11 caracteres de sobrecarga). Utiliza la recursividad principal y las variables globales x e y como argumentos.
main (<non-zero>, argv) = call main (0, {argv [1], argv [2]}) luego imprime nueva línea y luego llama a main (0, {argv [2], argv [1]})
main (0, {x, y}) = si x es el final de la cadena, devuelve 0, de lo contrario, imprime el caso correcto del primer carácter de x y llama a main (0, {x + 1, y + 1}).
Ejecutar con las dos cadenas como argumentos.
fuente
C -
164153Bytes - GCCgcc prog.c
./a.out AfdgF a2dfsd
Se actualizará si puedo obtener wc -c abajo. Funciona muy bien en realidad
fuente
F #, 211 caracteres
podría ser mejor ...
fuente
Matlab, 140
Sin golf:
Ejemplo:
fuente
C, 164 bytes
Prácticamente implementando el algoritmo como se describe en el problema. Toma 2 cadenas como parámetros de entrada.
Sin golf:
fuente
Ruby, 102
Toma las cadenas originales, empareja las letras en matrices. Si son más bajos / cap o cap / más bajos, intercambie ambos. Luego transponga las matrices nuevamente a nuestra matriz ordenada.
Esto requiere una nueva línea final en la entrada.
fuente
Perl 5.10+,
10199 bytes96 bytes + 3 bytes para las banderas de línea de comando
p00
. Toma una sola cadena delimitada por nueva línea como entrada:O puede ingresar la entrada en STDIN:
Desglosado:
fuente
Primer intento en scala, 138 caracteres
f es una función que toma las dos cadenas de entrada y hace el trabajo, con una función local, utilizada dos veces, para cambiar el caso de las cadenas.
El mismo código, con sangría y solo un poco más de nombres legibles:
fuente
Jalea , 13 bytes
Un enlace monádico que acepta y devuelve listas de dos "cadenas" (listas de caracteres en Jelly).
Pruébalo en línea!
fuente
Python 2 , 97 bytes
Pruébalo en línea!
fuente
Tcl , 194 bytes
Pruébalo en línea!
fuente
Haskell ,
10991 bytes¡Gracias a @Laikoni por 16 bytes!
Pruébalo en línea!
fuente