Entrada
Una cadena no vacía que consta de caracteres ASCII en el rango .
Salida
La salida se obtiene aplicando rotaciones sucesivas a la cadena de entrada.
Para cada letra ( [a-zA-Z]
) en la cadena de entrada, yendo de izquierda a derecha:
- Si la letra está en mayúscula, gire todos los caracteres anteriores una posición hacia la izquierda
- Si la letra está en minúscula, gire todos los caracteres delante de ella en una posición a la derecha
Ejemplo
Entrada: "Cb-Ad"
- La primera letra es una " C ". Deberíamos hacer una rotación hacia la izquierda, pero no hay caracteres antes de esta " C ". Entonces, no hay nada para rotar.
- La siguiente letra es una " b ". Giramos " C " a la derecha. Debido a que es un solo personaje, no se modifica.
- El carácter " - " no activa ninguna rotación, ya que no es una letra.
- La siguiente letra es una " A ". Giramos " Cb- " hacia la izquierda, lo que da " bC Ad"
- La cuarta y última letra es una " d ". Giramos " b-CA " hacia la derecha, lo que da " Ab-C d"
Por lo tanto, la salida esperada es " Ab-Cd ".
Reglas
- Puede tomar la entrada como una cadena o como una matriz de caracteres, lo que puede o no ser lo mismo, dependiendo de su idioma.
- También puede generar una matriz de caracteres en lugar de una cadena.
- Esto es
ogl-edocfcode-golf
Casos de prueba
"cbad" -> "abcd"
"ACBD" -> "ABCD"
"Cb-Ad" -> "Ab-Cd"
"caeBDF" -> "aBcDeF"
"aEcbDF" -> "abcDEF"
"ogl-edocf" -> "code-golf"
"W o,ollelrHd!" -> "Hello, World!"
"ti HIs SSta ET!" -> "tHis IS a tEST!"
code-golf
string
code-golf
string
code-golf
string
parsing
brainfuck
code-challenge
python
hello-world
error-message
code-golf
string
code-golf
number
integer
counting
subsequence
code-golf
string
cipher
code-golf
array-manipulation
arithmetic
integer
matrix
code-golf
math
sequence
code-golf
restricted-source
pi
popularity-contest
cops-and-robbers
polyglot
popularity-contest
cops-and-robbers
polyglot
code-golf
file-system
king-of-the-hill
code-golf
number
sequence
integer
rational-numbers
string
code-challenge
source-layout
code-golf
ascii-art
king-of-the-hill
code-golf
array-manipulation
sorting
code-golf
string
code-golf
restricted-source
source-layout
tips
math
code-challenge
permutations
logic-gates
code-golf
number
random
integer
code-golf
math
code-golf
math
number
decision-problem
king-of-the-hill
python
board-game
code-challenge
brainfuck
busy-beaver
code-golf
number
cops-and-robbers
polyglot
obfuscation
answer-chaining
code-golf
number
integer
conversion
code-golf
string
parsing
code-golf
ascii-art
number
king-of-the-hill
javascript
code-golf
source-layout
radiation-hardening
code-golf
array-manipulation
matrix
code-golf
string
graph-theory
code-golf
array-manipulation
decision-problem
code-golf
string
ascii-art
code-golf
string
code-golf
array-manipulation
Arnauld
fuente
fuente
.U
para reducir la entrada del segundo valor. Esto le permite caer=k
desde el principio y)k
desde el final, ya que tanto la entrada como la impresión están implícitas. Programa completo:.U+.>b-}ZG}Zr1GZ
- enlacePython 2 ,
1009895 bytesPruébalo en línea!
fuente
Jalea , 14 bytes
Un enlace monádico que acepta una lista de caracteres que produce una lista de caracteres.
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
I
hacer lo mismo queḅ-
en este caso? Parece funcionar aquí , pero no en su código. Estoy un poco confundido por qué. Además, ¿hay un comando para enviar las listas enteras como elementos separados a la pila en Jelly (espera, Jelly no es un lenguaje basado en la pila, ¿verdad?)? En ese caso, se puede usar una simple resta y tampoco necesitará la negación si no me equivoco (similar a la última edición en mi respuesta 05AB1E).I
produce una lista: agregueŒṘ
para ver una representación completa . AsíØẠŒHċ€IṪN⁸ṙ;ð/
funcionaría.05AB1E ,
18171614 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
K4 ,
4333 bytesSolución:
Ejemplos:
Explicación:
Iterar sobre la cadena de entrada, girando la salida anterior en 1, -1 o 0 dependiendo de su posición en la lista "a-zA-Z".
Notas:
fuente
> <> ,
4543 bytesPruébalo en línea!
El hecho de que> <> tenga rotación de pila ayuda, pero tener que verificar el caso de la letra no lo hace.
Explicación:
fuente
Haskell ,
10191 bytes-10 bytes inspirados en la respuesta de Curtis Bechtel (uso
'@'<c,c<'['
sobreelem c['A'..'Z']
y el rango correspondiente para letras minúsculas).Pruébalo en línea!
Explicación / Ungolfed
El operador
(!)
toma una cadena no vacíax
en la que podemos combinar patrones y un carácter:Ahora podemos reducir la cola de la entrada de izquierda a derecha, comenzando con el primer carácter de la entrada usando:
fuente
Haskell ,
12292 bytesGracias a BWO por las sugerencias! También ahorré mucho al adoptar un enfoque ligeramente diferente al de mi respuesta original.
Pruébalo en línea!
fuente
(#)
, el uso,
más&&
, utiliza[l!!0,c]
máshead l:[c]
,1>0
en lugar deTrue
, no es necesario contarf=
y se puede asumir de entrada no está vacía lo que ahorra lal==[]
guardia - que le ahorra 13 bytes: Pruébelo en línea!isLower
yisUpper
golf en mi envío , espero que estés de acuerdo con eso, de lo contrario revertiré mi edición.JavaScript (Node.js) ,
116102 bytesPruébalo en línea!
Original (
116111106B)s=>Buffer(s).map((x,i)=>s=(t=s[S="slice"](i),i<2)?s:x>64&x<91?s[S](1,i)+s[0]+t:x>96&x<123?s[i-1]+s[S](0,i-1)+t:s)&&s
s=>Buffer(s).map((x,i)=>i<2|--x%32>25|x<64?s:s=[s[S="slice"](1,i)+s[0],s[i-1]+s[S](0,i-1)][+(x>95)]+s[S](i))&&s
s=>Buffer(s).map((x,i)=>!i|--x%32>25|x<64?s:s=(w=x>95,t=s.slice(1-w,i-w),w?s[i-1]+t:t+s[0])+s.slice(i))&&s
fuente
eval(`regex`)
que usar el constructoreval(`regex`)
, por lo que -2 + 2 = 0 y, por lo tanto, no ayuda a reducir el recuento de bytes.eval()
cuando se usa al menos un indicador:eval('/./g')
es 3 bytes más corto queRegExp('.','g')
.Ruby , 51 bytes
Pruébalo en línea!
La entrada y la salida son matrices de caracteres.
El truco:
El código es bastante sencillo, excepto quizás la parte de rotación:
x es un solo carácter, que podría ser una letra, la primera expresión
x=~/\W/
devuelvenil
si es una letra y 0 en caso contrario. Si es 0, hemos terminado, si no, el lógicoor
verifica la segunda expresión:?_<=>x
devuelve -1 para mayúsculas y 1 para minúsculas. Entonces la rotación es:fuente
Rojo , 110 bytes
Pruébalo en línea!
Explicación:
fuente
Perl 6 , 47 bytes
Pruébalo en línea!
Funciona en una variedad de caracteres.
fuente
Japt,
171614 bytesToma la entrada como una matriz de caracteres, genera una cadena
Intentalo
Explicación
fuente
Jalea , 19 bytes
Pruébalo en línea!
fuente
Java 10,
149119 bytesPuerto de respuesta de JavaScript @ShieruAsakoto , así que asegúrese de votarlo.
Pruébalo en línea.
Explicación:
fuente
Stax , 32 bytes
Ejecutar y depurarlo
Mucho intercambio de pila que probablemente sea innecesario. Realmente me gustaría entender esto más, pero estaba luchando con el orden de la pila. Tal vez alguien pueda resolverlo si está aburrido. Seguiremos trabajando en ello.
fuente
Adjunto , 69 bytes
Pruébalo en línea!
Explicación
Forma general
La función generalmente se ve así:
Que se pliega
{...}
sobre cada miembro en el rango de0
a#input - 1
(Iota
), comenzando con la entrada como semilla.La función interna
La siguiente función se llama como
f[building, index]
y se llama con cada índice de0
a#input
exclusivo.@SplitAt
invocaSplitAt
estos argumentos, dividiendo la cadena de entradaindex
.Esencialmente, esta función gira la porción izquierda de la cadena de acuerdo con el primer carácter de la porción derecha.
fuente
Carbón de leña , 20 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Pase sobre los caracteres de entrada.
Asigne sobre la cadena de caracteres recopilados hasta el momento, indexando cíclicamente en los caracteres recopilados hasta el momento con el índice aumentado o disminuido si el carácter actual es mayúscula o minúscula, respectivamente. Esto completa la rotación. El siguiente carácter se concatena y el resultado se asigna nuevamente a la cadena.
Imprime el resultado.
fuente
R ,
107102100 bytesMasivo porque el manipulador de cuerdas de R es voluminoso. ¿Alguien puede obtenerlo por debajo de 100?
-5 bytes usando el truco "establecer variables de bucle en F para evitar inicializar"
-2 bytes asumiendo que todos los caracteres son imprimibles y que se usan en
2*!k%%97>25
lugar de2*k%in%97:122
probar en minúsculas, usando la precedencia del operador.Pruébalo en línea!
fuente
Japt ,
2523 bytesMe rindo, no puedo hacerlo más corto
-2 bytes de @ETHproductions
Pruébalo en línea!
fuente
éXè\a -Xè\A
:-( Podría ahorrar dos bytes cambiando el doble espacio a a)
y eliminando©
(la coma implícita significa queU
todavía seÃU
y usando la-h
bandera.Retina ,
676458 bytes-9 bytes gracias a que @Neil eliminó los tres innecesarios
?
que había agregado, así como los innecesarios(.*)
en el caso contrario.Pruébelo en línea o verifique todos los casos de prueba . (NOTA: Salidas con una nueva línea final. El encabezado en el conjunto de pruebas es probar cada línea de entrada como un caso de prueba separado, y el pie de página es eliminar esa nueva línea posterior para una salida más compacta).
Explicación:
Anteponer una nueva línea antes de la entrada:
Continúe reemplazando mientras podamos encontrar una coincidencia:
Todo lo demás son tres controles diferentes combinados:
Si el carácter justo después de la nueva línea es letra minúscula: gire todo antes de la nueva línea una vez hacia la derecha, y luego agregue ese carácter y la nueva línea:
Si el carácter justo después de la nueva línea es una letra mayúscula: gire todo antes de la nueva línea una vez hacia la izquierda, y luego agregue ese carácter y la nueva línea:
De lo contrario (ni una letra minúscula ni mayúscula): simplemente desplace la nueva línea una vez hacia la derecha para la próxima 'iteración':
Estas tres comprobaciones anteriores se fusionan con declaraciones OR de expresión regular (
|
) y reemplazos de grupos más grandes para que actúe como unif(lowercase) ... elseif(uppercase) ... else ...
:fuente
?
s: si todavía no hay nada que rotar, no importa si hay una letra.(.*)¶(.)
con$1$2¶
se puede simplificar a reemplazar¶(.)
con,$1¶
ya que la otra captura no afecta el resultado.MATL , 20 bytes
Pruébalo en línea!
-4 bytes gracias a Luis Mendo.
Convierte mayúsculas / minúsculas / no letras a [-1,0,1] (primera mitad del programa). Aplica circshift consecutivamente (segunda mitad). Estoy arruinando mi cerebro si hay una mejor manera de asignar mayúsculas / minúsculas a [-1,0,1] (ver la segunda versión), y tal vez una forma de invertir la cadena de inmediato para deshacerse de los dos
w
Es necesario para el&)
.fuente
C (sonido metálico) ,
168159153119 bytes-26 gracias a @ceilingcat
Pruébalo en línea!
fuente
g=a[j=i++];islower(a[i])?bcopy(a,a+1,j)
lugar dea[j=i++];islower(a[i])?g=a[j],bcopy(a,a+1,j)
Pyth, 16 bytes
Pruébalo aquí!
Explicación:
fuente