Entrada
Uma sequência aleatória não vazia que consiste em caracteres ASCII no intervalo .
Saída
A saída é obtida aplicando rotações sucessivas na sequência de entrada.
Para cada letra ( [a-zA-Z]
) na sequência de entrada, da esquerda para a direita:
- se a letra estiver em maiúscula, gire todos os caracteres à sua frente em uma posição à esquerda
- se a letra estiver em minúscula, gire todos os caracteres à sua frente em uma posição para a direita
Exemplo
Entrada: "Cb-Ad"
- A primeira letra é um " C ". Deveríamos fazer uma rotação para a esquerda, mas não há caracteres antes deste " C ". Portanto, não há nada para girar.
- A próxima letra é um " b ". Nós giramos " C " para a direita. Por ser um único personagem, ele permanece inalterado.
- O caractere " - " não aciona nenhuma rotação, pois não é uma letra.
- A próxima letra é um " A ". Giramos " Cb- " para a esquerda, o que indica " bC Ad"
- A quarta e última letra é um " d ". Giramos " b-CA " para a direita, o que indica " Ab-C d"
Portanto, a saída esperada é " Ab-Cd ".
Regras
- Você pode receber a entrada como uma string ou como uma matriz de caracteres - que podem ou não ser a mesma coisa, dependendo do seu idioma.
- Você também pode gerar uma matriz de caracteres em vez de uma string.
- Este é
ogl-edocfcode-golf
Casos de teste
"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
fonte
fonte
.U
para reduzir a entrada do 2º valor. Isso permite que você saia=k
do início e)k
do final, pois a entrada e a impressão estão implícitas. Programa completo:.U+.>b-}ZG}Zr1GZ
- linkPython 2 ,
1009895 bytesExperimente online!
fonte
Gelatina , 14 bytes
Um link monádico que aceita uma lista de caracteres que gera uma lista de caracteres.
Experimente online! Ou veja a suíte de testes .
Quão?
fonte
I
fazer o mesmo queḅ-
neste caso? Parece funcionar aqui , mas não no seu código. Estou um pouco confuso por quê. Além disso, existe um comando para enviar as listas inteiras como itens separados para a pilha no Jelly (espere, o Jelly não é um idioma baseado na pilha, é ..)? Nesse caso, uma subtração simples pode ser usada e você também não precisará negar se não me engano (semelhante à última edição da minha resposta 05AB1E).I
produz uma lista - adicioneŒṘ
para ver uma representação completa . EntãoØẠŒHċ€IṪN⁸ṙ;ð/
funcionaria.05AB1E ,
18171614 bytesExperimente online ou verifique todos os casos de teste .
Explicação:
fonte
K4 ,
4333 bytesSolução:
Exemplos:
Explicação:
Itere sobre a sequência de entrada, girando a saída anterior em 1, -1 ou 0, dependendo da posição na lista "a-zA-Z".
Notas:
fonte
> <> ,
4543 bytesExperimente online!
O fato de que> <> tem rotação de pilha ajuda, mas ter que verificar o caso da letra não.
Explicação:
fonte
Haskell ,
10191 bytes-10 bytes inspirados na resposta de Curtis Bechtel (use
'@'<c,c<'['
acimaelem c['A'..'Z']
e o intervalo correspondente para letras minúsculas).Experimente online!
Explicação / Ungolfed
O operador
(!)
pega uma string não vaziax
na qual podemos fazer a correspondência de padrões e um caractere:Agora podemos reduzir a cauda da entrada da esquerda para a direita, começando com o primeiro caractere da entrada usando:
fonte
Haskell ,
12292 bytesObrigado a BWO pelas sugestões! Também economizei muito ao adotar uma abordagem ligeiramente diferente da minha resposta original.
Experimente online!
fonte
(#)
, usar,
sobre&&
, usar[l!!0,c]
sobrehead l:[c]
, em1>0
vez deTrue
não precisar contarf=
e pode assumir entradas não vazias que salvam al==[]
guarda - economizando 13 bytes: experimente on-line!isLower
eisUpper
golf na minha submissão , espero que você esteja bem com isso, caso contrário eu reverterá minha edição.JavaScript (Node.js) ,
116102 bytesExperimente online!
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
fonte
eval(`regex`)
do que usando o construtoreval(`regex`)
, então -2 + 2 = 0 e, portanto, não ajuda a reduzir a contagem de bytes.eval()
quando pelo menos um sinalizador é usado:eval('/./g')
é 3 bytes menor queRegExp('.','g')
.Ruby , 51 bytes
Experimente online!
Entrada e saída são matrizes de caracteres
O truque:
O código é bem direto, exceto talvez a parte de rotação:
x é um caractere único, que pode ser uma letra, a primeira expressão
x=~/\W/
retornanil
se for uma letra e 0, caso contrário. Se for 0, terminamos; caso contrário, a lógicaor
verifica a segunda expressão:?_<=>x
retorna -1 para maiúscula e 1 para minúscula. Então a rotação é:fonte
Vermelho , 110 bytes
Experimente online!
Explicação:
fonte
Perl 6 , 47 bytes
Experimente online!
Funciona em uma variedade de caracteres.
fonte
Japonês,
171614 bytesRecebe entrada como uma matriz de caracteres, gera uma string
Tente
Explicação
fonte
Geléia , 19 bytes
Experimente online!
fonte
Java 10,
149119 bytesPorto da resposta JavaScript @ShieruAsakoto , por isso, certifique-se de que o vota.
Experimente online.
Explicação:
fonte
Stax , 32 bytes
Execute e depure
Muita troca de pilhas, o que provavelmente é desnecessário. Eu realmente gostaria que isso acontecesse mais, mas estava lutando com a ordem da pilha. Talvez alguém possa descobrir se está entediado. Continuará trabalhando nisso.
fonte
Anexo , 69 bytes
Experimente online!
Explicação
Forma geral
A função geralmente se parece com isso:
Que se dobra para
{...}
cima de cada membro na gama a partir0
de#input - 1
(Iota
), começando com a entrada como uma semente.A função interna
A função a seguir é chamada como
f[building, index]
e é chamada com cada índice de0
para#input
exclusivo.@SplitAt
chamaSplitAt
esses argumentos, dividindo a sequência de entradaindex
.Essencialmente, essa função gira a parte esquerda da string de acordo com o primeiro caractere da parte direita.
fonte
Carvão , 20 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Faça um loop sobre os caracteres de entrada.
Mapeie a cadeia de caracteres coletados até o momento, indexando ciclicamente os caracteres coletados até o momento com o índice incrementado ou decrementado se o caractere atual estiver em maiúsculas ou minúsculas, respectivamente. Isso completa a rotação. O próximo caractere é concatenado e o resultado atribuído novamente à string.
Imprima o resultado.
fonte
R ,
107102100 bytesMaciço porque o manip de corda de R é volumoso. Alguém pode obtê-lo abaixo de 100?
-5 bytes usando o truque "definir variáveis de loop como F para evitar a inicialização".
-2 bytes, assumindo que todos os caracteres são imprimíveis e usando em
2*!k%%97>25
vez de2*k%in%97:122
testar letras minúsculas, usando a precedência do operador.Experimente online!
fonte
Japonês ,
2523 bytesEu desisto, Não posso torná-lo mais curto
-2 bytes de @ETHproductions
Experimente online!
fonte
éXè\a -Xè\A
qualquer :-( Você poderia salvar dois bytes, alterando o espaço duplo a um)
, e removendo©
(meio vírgula implícitas queU
ainda é emitido)ÃU
e usando a-h
bandeira.Retina ,
676458 bytes-9 bytes graças ao @Neil removendo os três desnecessários que
?
eu adicionara e os desnecessários(.*)
no caso contrário.Experimente online ou verifique todos os casos de teste . (OBSERVAÇÃO: Saídas com uma nova linha final. O cabeçalho no conjunto de testes é testar cada linha de entrada como um caso de teste separado e o rodapé é remover essa nova linha final para obter uma saída mais compacta.)
Explicação:
Anexe uma nova linha antes da entrada:
Continue substituindo enquanto encontrarmos uma correspondência:
Tudo o resto são três verificações diferentes mescladas:
Se o caractere logo após a nova linha for uma letra minúscula: gire tudo antes da nova linha uma vez para a direita e anexe esse caractere e a nova linha:
Se o caractere logo após a nova linha for uma letra maiúscula: gire tudo antes da nova linha uma vez para a esquerda e acrescente esse caractere e a nova linha:
Senão (nem uma letra minúscula nem uma maiúscula): simplesmente mude a nova linha uma vez para a direita para a próxima 'iteração':
Essas três verificações acima são mescladas com as expressões regex OR (
|
) e substituições de grupos maiores para fazer com que funcione comoif(lowercase) ... elseif(uppercase) ... else ...
:fonte
?
s - se não houver nada para rodar ainda, não importa se há uma carta.(.*)¶(.)
por$1$2¶
pode ser simplificado para substituir¶(.)
por,$1¶
pois a outra captura não afeta o resultado.MATL , 20 bytes
Experimente online!
-4 bytes graças a Luis Mendo.
Converte maiúsculas / minúsculas / sem letra em [-1,0,1] (primeira metade do programa). Aplica a mudança de circuitos consecutivamente (segunda metade). Estou destruindo meu cérebro se há uma maneira melhor de mapear maiúsculas / minúsculas para [-1,0,1] (veja a segunda versão), e talvez uma maneira de reverter a string imediatamente, a fim de se livrar das duas
w
é necessário para o&)
.fonte
C (clang) ,
168159153119 bytes-26 graças a @ceilingcat
Experimente online!
fonte
g=a[j=i++];islower(a[i])?bcopy(a,a+1,j)
vez dea[j=i++];islower(a[i])?g=a[j],bcopy(a,a+1,j)
Pitão, 16 bytes
Experimente aqui!
Explicação:
fonte