Aleatoriamente inspirados por números aumentam enquanto letras diminuem
Dada uma lista de letras mistas e números inteiros (por exemplo, ['a', 2, 3, 'b']
) aumente as letras em uma posição no alfabeto (envolvendo em z
a a
) e diminua os números em 1. No exemplo acima, a saída deve ser ['b', 1, 2, 'c']
.
- A entrada pode ser uma lista de tipos mistos, uma string delimitada, uma lista de strings, etc.
z
envolvea
, mas1
vai para0
e0
vai para-1
etc.- A entrada será sempre
[a-z]
e inteiros. Você pode escolher letras maiúsculas[A-Z]
como entrada, se for mais fácil para você. - A entrada é garantida não vazia.
- A entrada pode conter apenas números ou apenas letras.
Exemplos:
Input
Output
['a', 2, 3, 'b']
['b', 1, 2, 'c']
['a', 'b', 'z']
['b', 'c', 'a']
[-1, 0, 257, 'x']
[-2, -1, 256, 'y']
[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]
Regras e esclarecimentos
- A entrada e a saída podem ser fornecidas por qualquer método conveniente .
- Você pode imprimir o resultado em STDOUT ou retorná-lo como resultado da função.
- A saída não precisa ter o mesmo formato que a entrada (por exemplo, você pode usar a entrada como uma string e a saída como uma lista).
- Um programa completo ou uma função são aceitáveis.
- Se aplicável, você pode assumir que os números inteiros de entrada / saída se encaixam no
int
intervalo nativo do seu idioma . - As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
int
intervalo nativo do seu idioma , para que você nunca recebaInteger.MinValue
como entrada.Respostas:
05AB1E , 5 bytes
Experimente online!
fonte
Python 3 , 59 bytes
Experimente online!
-1 byte graças a Erik the Outgolfer
fonte
-96
with+8
salva um byte.''!=i*0
é três bytes menor que o meustr(i)>'9'
, bom trabalhoPerl 5 (-p), 17 bytes
Experimente online!
Bônus de 19 byter:
TIO . Este apresenta alguns truques interessantes, mas não consegue superar a solução direta acima.
fonte
Rubi , 34 bytes
Para cada elemento, tente retornar o elemento -1. As strings não podem fazer isso, então elas cometem erros e são captadas pela
rescue
cláusula, que solicita quesucc
ela retorne a próxima letra do alfabeto.succ
"rola sobre"z
e retornaaa
, portanto, simplesmente pegamos o primeiro caractere na string retornada.Experimente online!
fonte
JavaScript (Node.js) , 55 bytes
Experimente online!
fonte
Python 3 ,
182130118 bytes-51 bytes graças a @AdmBorkBork e @Black Owl Kai, -1 byte graças a @Black Owl Kai, -12 bytes substituindo
.append()
por+=[]
e substituindon+1
por-~n
Experimente online!
Fiz isso enquanto a pergunta estava na Sandbox, mas não a vi publicada até agora. : P
Ungolfed
Explicação
Para cada elemento na lista inserida
x
, ele tenta subtrair 1 e adicioná-lo à eventual lista retornada. Se ocorrer um erro (porque o elemento é uma string), o índice da letra no alfabeto é adicionado por 1 e esse mod 26 é utilizado. O mod 26 envolve um índice de 26 de volta a 0.fonte
(x+27)%26
tem o mesmo resultado que(x+1)%26
str(d)==d
para verificar se é uma sequência ou não, em vez de confiar em try / except. Então, como você não precisa mais tentar / exceto, pode fazer tudo em uma lista de compreensão! Vou deixar você pensar um pouco mais, mas você pode facilmente obter menos de 100 bytes dessa maneira;)J , 30 bytes
Experimente online!
fonte
Gema , 55 caracteres
Solução suja. Contornar o incremento de letra é dolorosamente longo, por isso temos uma regra separada.
A entrada pode ser qualquer coisa, basta usar alguns separadores. (Você pode até omitir separadores entre números e letras. Com o preço de 1 caractere para mudar para
<L1>
você, também é possível omitir separadores entre letras.)Exemplo de execução:
Experimente online!
Gema, 66 caracteres
Solução limpa. Metade relativamente eficiente, depois metade dor pura.
Exemplo de execução:
Experimente online!
fonte
R , 77
85bytesObrigado @ Giuseppe por um grito de 8 bytes
Experimente online!
Toma a entrada como uma lista. Após uma grande alteração de @ Giuseppe, isso
Map
aplica-se à aplicação de uma função à lista. Faz usomatch
para testar um personagem. Durante o teste, a lista estendida de letras e o índice são salvos para o retorno.fonte
character
s não são finitos, porque eles são lançados anumeric
pelois.finite
e são assimNA
?is.finite
, eu pensei em tomar uma rachadura nele mesmoMap
ematch
. É bom aprender algo todos os dias :)MathGolf , 14 bytes
Experimente online!
Leva a letra como minúscula.
Explicação
fonte
Retina ,
525048584137 bytes-4 bytes graças a @FryAmTheEggman (e por mencionar eu tive um bug: em
1 → -1
vez de1 → 0
).+10 bytes para corrigir um bug com
1
e0
.. Tal um caso extremo irritante que me ferrou por um bom tempo .. Mas golfed-lo para 41 bytes agora. (Agora, estou curioso sobre as versões < Neil e @CowsQuack <40 bytes mencionadas nos comentários. Obrigado @Neil pela dica de converter o0
para-
e lidar com os valores negativos primeiro. ajudou bastante.)Aparentemente, não preciso dos limites neste momento, então -4 bytes ..>.>
A E / S é separada por vírgula.
Experimente online.
Explicação:
Transliterar tudo
"zabcdefghijklmnopqrstuvwxy(z)"
para"abcdefghijklmnopqrstuvwxyz"
:Substitua todos os
0
s autônomos por-
:Converta todos os números em unários, substituindo-os por essa quantidade de sublinhados:
Para todos os valores negativos, com zero ou mais linhas unárias atrás dele: mantenha o sinal de menos e obtenha a duração total dessa correspondência (incluindo a
-
), convertida novamente em um número inteiro:Quanto aos números inteiros positivos: combine um número inteiro positivo combinando uma única linha unária, seguida por zero ou mais linhas unárias. E substitua-os pelo comprimento desse grupo de captura para remover essa única linha unária e convertê-los novamente em números inteiros simultaneamente:
fonte
SNOBOL4 (CSNOBOL4) , 103 bytes
Experimente online!
fonte
PHP , 50 bytes
Experimente online!
Testes
Gera letras / números inteiros separados por
_
um separador à direita.No PHP, você pode incrementar as letras diretamente, então eu tirei vantagem disso. Mas o
z
é incrementado paraaa
, para convertê-loa
, o(++$a)[0]
é usado, o que apenas gera o primeiro caractere do valor incrementado.fonte
Japonês
-m
,1312 bytes-1 byte graças a Shaggy
Tente
Explicação:
Nota :
;
transformaC
- se no alfabeto minúsculofonte
z
paraa
.o
->¤
você economizará um byte aqui.+2
e então,-1
graças a Shaggy, seria mais preciso! : D+2
foi graças a Oliver: PHaskell,
5251 bytesComo Haskell não permite listas de tipos mistos, letras e números são tomados e retornados como seqüências de caracteres.
Experimente online!
Verifique todos os elementos da lista: se a sequência for
"z"
, retorne"a"
; se o primeiro caractere da string for>'`'
(ou seja, uma letra, não um dígito), retorne o sucessor do caractere na string; caso contrário, ele deve ser número; portanto, converta para um número inteiro, subtraia 1 e transforme-o em uma sequência novamente.Edit: -1 byte graças a @cole.
fonte
Gelatina , 13 bytes
Experimente online!
Correção inteligente por Jonathan Allan .
Nota: Este não é um programa completo, o rodapé sobre o TIO possibilita a entrada usando um argumento de linha de comando para testar a função.
fonte
®i‘ị®µ’e?€Øa©
é uma correção para zero, eu acredito.Ọ
não funciona exatamente nesse caso. Irônico, desde que eu evitei usar~
como condição para contabilizar-1
s na entrada ... Além disso, como vou encurtar®i‘ị®
...C ++ 17 (gcc) , 120 bytes
Aqui
f
está a função necessária;l
é o parâmetro de entrada e saída e espera-se que seja um contêiner de objetos que sejam compatíveisstd::variant<char, int>
ou vice-versa.Experimente online!
fonte
dzaima / APL,
2120 bytesExperimente online!
-1 graças a ngn.
fonte
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (oK) , 27 bytes
Experimente online!
-8 graças a ngn e dzaima :)
fonte
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
incluem o caso especial e o uso de maiúsculas (e'
isso deve ser contado como a entrada deve ser uma lista)'
deve ser contado. aqui está uma expressão um pouco mais longa que não precisa'
e também cuida de "z" -> "a":{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. aqui-96
(que é +1 menos o código ascii de "a") pode ser substituído com8
o mod 26.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Encantos Rúnicos , 36 bytes
Experimente online!
O processo geral é ler a entrada, acrescentar um 0 (coerção à string), converter novamente em um número (o único caracter sempre retornará -1), comparar com a entrada. Se for o mesmo, deve ser um valor numérico, subtrair 1 e imprimir. Se não for o mesmo, deve ser um caractere, subtrair 1, comparar com
{
. Se for menor que, imprima, caso contrário, substitua-o pora
e imprima.Repita até que o programa execute um estouro de pilha.
A saída é separada por
;
para salvar 1 byte (e possui um à direita). A entrada é separada por espaço.fonte
Stax , 17 bytes
Execute e depure
Parece que deve ser possível reduzir o tempo, mas não resisto à oportunidade de usar um novo recurso stax do último lançamento.
Tratando toda a entrada como uma sequência:
eval(match) - 1
. Esse é o novo recurso, pois a substituição do bloco regex não é uma sequência, mas um número inteiro.fonte
Python 3, 66 bytes
Editar:
Eu não vi a solução do Jitse até agora. O truque de if ''! = I * 0 é incrível!
fonte
C #, 148 bytes
Repl.it link
Ungolfed:
fonte
Carvão , 16 bytes
Experimente online! Link é a versão detalhada do código. Recebe entrada em STDIN, cada linha sendo uma única letra minúscula ou um número inteiro e sai em linhas separadas em STDOUT. Explicação:
Insira repetidamente de STDIN até que uma linha vazia seja alcançada.
Faça essa expressão sair em sua própria linha.
Isso é uma substring do alfabeto em minúsculas predefinido?
Nesse caso, imprima a próxima letra indexada ciclicamente.
Caso contrário, diminua o valor e retorne à string para impressão implícita.
fonte
Zsh , 47 bytes
Experimente online!
fonte
C (gcc) ,
9386 bytesExperimente online!
A entrada é uma
NULL
matriz'\0'
terminada de seqüências terminadas, por exemplo{"a", "b", "c", "17", NULL}
.-7 bytes graças a @ceilingcat
fonte
Perl 6 , 31 bytes
Experimente online!
Anonymous O que quer lambda que mapeia cada elemento à lista e tentativas de subtrair um, caso contrário incrementá-lo e tomar o primeiro caractere no caso em que
z
envoltórios atéaa
.fonte
T-SQL 2012, 61 bytes
Letras maiúsculas necessárias na entrada.
Usando variável de tabela como entrada.
Experimente online
fonte
SimpleTemplate, 80 bytes
Isso foi escrito em um idioma que eu fiz.
Devido a limitações no compilador, não posso mais reduzi-lo.
E agora, não destruído:
E a explicação:
{@each argv as value}
- percorre todos os valores emargv
. (argv
contém todos os argumentos passados).Se
as <var>
não estiver presente, o padrão_
variável será assumida.{@if value is matches "@\d+@"}
- verifica avalue
correspondência com a expressão regular"@\d+@"
.{@inc by -1 value}
- incrementa o valor em -1 (basicamente, um decremento).{@echo value, "\n"}
e{@echol_}
-echol
gera os valores passados e acrescenta uma linha no final.{@else}
- auto-explicativo{@inc by 1 value}
- incrementa o valor em 1. Seby <value>
estiver faltando, presume-se que seja 1.{@echo value.0, "\n"}
e{@echol_.0}
-echol
gera os valores passados e acrescenta uma linha no final.Isso é necessário por causa das regras de desafio:
z wraps to a
.Quando um
@inc
é usado em uma seqüência de caracteres, ele incrementa os caracteres e, uma vez atingidoz
, é finalizadoaa
.A saída do primeiro caractere satisfaz o desafio, ao custo de 7 bytes.
{@/}
- fecha o{@else}
acima (opcional).{@/}
- fecha o{@each}
acima (opcional).Você pode tentar isso em: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Cada argumento passado para
render()
será um novo valor que é considerado.fonte
Perl, 64 bytes
fonte