Imprima o alfabeto, o ALFABETO ou apenas um caractere


49

O desafio é simples:

Escreva uma função ou programa que receba uma entrada xe emita o alfabeto em minúsculas se fizer xparte do alfabeto em minúsculas, emita o alfabeto em maiúsculas se xfaz parte do alfabeto em maiúsculas e emite apenas xse não faz parte de nenhum deles.

Regras:

  • A entrada pode ser argumento de função ou de STDIN
  • A entrada será qualquer um dos caracteres ASCII imprimíveis de 32 a 126 (espaço para til).
  • A entrada pode estar entre aspas 'x'ou "x", mas lembre-se disso 'e "é uma entrada válida e deve ser suportada.
  • A entrada pode ser qualquer uma das letras do alfabeto, ou seja, você não pode assumir que será aou A.
  • A saída deve ser apenas um dos alfabetos ou o símbolo único, mas as novas linhas finais estão OK.
  • As letras do alfabeto não devem ser separadas por espaços, vírgulas ou qualquer outra coisa.

Alguns exemplos:

F
ABCDEFGHIJKLMNOPQRSTUVWXYZ

z
abcdefghijklmnopqrstuvwxyz

"
"

    <- Input:  Space
    <- Output: Space

O código mais curto em bytes vence.


Opcional, mas apreciado: se o seu idioma tiver um intérprete on-line, poste também um link para que possa ser facilmente testado por outras pessoas.


Entre os melhores

O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

## Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Se você quiser incluir vários números em seu cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades de sinalizador de intérprete separadamente), verifique se a pontuação real é o último número no cabeçalho:

## Perl, 43 + 2 (-p flag) = 45 bytes

Você também pode transformar o nome do idioma em um link que será exibido no snippet:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


Temos permissão para importar pacotes como, em Python, por exemplo: import Randome depois usá-lo Random.randint(obviamente não para esse desafio, mas ainda assim)?
— Daniel

Sim, você pode importar pacotes. mas os bytes para gravação, por exemplo, import stringsão contados, portanto, geralmente é melhor executar soluções alternativas. Observe que o pacote deve existir antes do lançamento do desafio. Muitos desafios têm algo como: "Usar pacotes que fazem isso não é permitido", mas esse não é o caso neste desafio.
— Stewie Griffin

Estou assumindo que por "aspas são entradas válidas e devem ser suportadas", você quer dizer que, se o seu método de entrada exigir aspas, as aspas serão
— eliminadas

Podemos assumir um ambiente REPL?
— gato

Respostas:


22

TeaScript , 5 bytes

xN(0)

O TeaScript possui (quase) interno para isso: D

Experimente on-line (observação: o intérprete on-line foi atualizado para o TeaScript v3, portanto, onde está N0)

Experimente todos os casos de teste


TeaScript 3 , 2 bytes [não concorrente]

Usando o TeaScript 3, isso pode se transformar em 2 bytes. Isso não é concorrente porque o TeaScript 3 foi criado após esse desafio

N0

Alternativa de 1 byte

Se pudéssemos produzir 0123456789dígitos, então poderia ser:

°

TeaScript 3 é válido. Então, você pode usá-lo!
— precisa saber é o seguinte

27

Pitão, 10 bytes

h/#z[GrG1z

Suíte de teste

Começamos construindo uma lista com 3 elementos: o alfabeto em minúsculas, o alfabeto em maiúsculas e a entrada. ( [GrG1z) Em seguida, filtramos essa lista no número de aparências da entrada nos elementos que não são zero. ( /#z) Finalmente, pegamos o primeiro elemento da lista filtrada.


6
Sério, existe algo que você não conseguiu resolver com alguns bytes de Pyth? Eu realmente preciso aprender esta língua ..
— Hexaholic

25
Aprenda qual idioma? ... você mencionou dois pelo nome. : P
— quintopia 22/12/2015

2
@ Quintopia Bem, por que não os dois? :)
— Hexaholic

15

LabVIEW, 23 primitivas do LabVIEW

O seletor (o? Na estrutura cse) está conectado a um vi chamado Classe Lexical. Ele gera números de 1 a 6, dependendo da entrada, 5 é minúsculo e 4 é maiúsculo.

O loop for vai 26 vezes para criar um alfabeto ou uma vez para passar o símbolo.


4
Como alguém que teve o (privilégio? Infortúnio? Você decide) de trabalhar no LabVIEW há muitos anos, suas respostas trazem um sorriso para o meu dia. =)
— corsiKa

12

Haskell, 48 bytes

f c=filter(elem c)[['a'..'z'],['A'..'Z'],[c]]!!0

Exemplo de uso:

*Main> f 'g'
"abcdefghijklmnopqrstuvwxyz"
*Main> f 'H'
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
*Main> f '\''
"'"

Pegue todas as listas de ['a' .. 'z'], ['A' .. 'Z'] e a lista de singleton com a entrada char conde cé o elemento de. Para letras, sempre temos duas correspondências, então escolhemos a primeira.


11

JavaScript (ES6), 79 bytes

x=>(a="abcdefghijklmnopqrstuvwxyz",x>"`"&x<"{"?a:x>"@"&x<"["?a.toUpperCase():x)

Explicação

O JavaScript compara o código de cada caractere em ordem alfabética ao comparar seqüências de caracteres; portanto, os códigos dos caracteres usados ​​nas comparações são 1 abaixo e acima do intervalo de caracteres necessário.

x=>(
  a="abcdefghijklmnopqrstuvwxyz", // a = lower-case alphabet
  x>"`"&x<"{"?a:                  // if x is a lower-case letter, output alphabet
  x>"@"&x<"["?a.toUpperCase():    // if x is an upper-case letter, output upper-case
  x                               // else just output x
)

Teste


Essa é realmente a maneira mais curta de produzir uma string com o alfabeto inteiro em Javascript? Se você quisesse toda a gama ASCII imprimível, teria que digitar todos os caracteres?
— Stewie Griffin

11
@StewieGriffin Infelizmente é. A única outra maneira seria algo como: for(a="",i=64;++i<91;)a+=String.fromCharCode(i). String.fromCharCodeé muito inadequado para jogar golfe, mas às vezes é a única maneira!
— user81655

4
Neste caso, o equilíbrio é entre String.fromCharCodee .toUpperCase(Dumb and Dumber), mas toUpperCaseé o vencedor
— edc65

Agradável! Eu tentei algumas maneiras diferentes de jogar isso ainda mais, mas não encontrei uma que funcione. x=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")faz, mas é um byte mais longo. Mudar [A-Z]para \wfunciona para tudo, exceto _. Sua solução parece ser a mais curta possível.
— ETHproductions

Aqui está um dos shortests maneira de gerar ABC...abc...?, sem um verdadeiro forloop: (padding)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
— ETHproductions

8

R, 90 75 bytes

a=scan(,'');l=letters;L=LETTERS;cat("if"(a%in%l,l,"if"(a%in%L,L,a)),sep="")

Graças a Giuseppe .

Versão antiga (90 bytes):

a=scan(,'');l=letters;L=LETTERS;if(a%in%l)cat(l,sep="")else if(a%in%L)cat(L,sep="")else a

Parece feio, mas esses cats não podem ser terceirizados para funções, IMHO.



73 bytes : o segundo parâmetro de scanpode ser qualquer objeto do tipo caractere, portanto você pode, em lettersvez de ''.
— Robin Ryder em

7

Python 3, 92 84 82 74 bytes

Versão atual: 74, graças a isaacg e wnnmaw!

lambda c:(c,''.join(chr(x+(67,97)[c>'Z'])for x in range(25)))[c.isalpha()]

Ungolfed: (para algumas definições de ungolfed

lambda c:
    (
        c,
        ''.join([chr(x + (67,97)[c > 'Z']) for x in range(25)])
    )
    [c.isalpha()]

Primeira versão: 92

def f(c):print(''.join([chr(x+(97if c>'Z'else 65)) for x in range(25)])if c.isalpha()else c)

Segunda versão: 82, graças a isaacg! :)

lambda c:''.join(chr(x+(97if c>'Z'else 65))for x in range(25))if c.isalpha()else c

Olá, e bem-vindo ao PPCG! Boa resposta. Aqui está uma sugestão de golfe: Você pode usar uma expressão lambda ( lambda c:) em vez de uma definição explícita ( def f(c):print() e salvar alguns bytes. Além disso, você não precisa do espaço antes da for.
— Isaacg

Ah, eu assumi que "saída" significa impressão, e não apenas retornar :) Legal, se for esse o caso, é baixo para 84 lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c,. Obrigado!
— Koneke

Sim, a definição padrão de saída no site permite retornar das funções, para que você possa editar a nova versão em sua resposta. Outro ponto importante é que os colchetes não são necessários - a função funciona exatamente da mesma forma sem eles, como uma compreensão de gerador em vez de uma compreensão de lista.
— Isaacg

Ah, na verdade não usei compreensão de gerador antes, aprendendo coisas novas! Obrigado novamente :)
— Koneke

Observe que, ao inserir "a função, você precisa \".
— 22415 Daniel

6

Python 3, 118 105 98 97 83 bytes

Solução simples. Edição: Golfed com agradecimentos à sugestão de Erik o jogador de golfe.

lambda s,a='ABCDEFGHIJKLMNOPQRSTUVWXYZ':(s,(a,a.lower())[s.islower()])[s.isalpha()]

Ungolfed:

def f(s):
 a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 if s.isalpha():
  if s.islower():return a.lower()
  else:return a
 return s

11
Você poderia usar um operador ternário para salvar alguns bytes? Algo como return a.lower() if s.islower() else a.
— David Robertson

@DavidRobertson Não tenho certeza se você está lendo minha solução, que é a linha superior do código, corretamente, mas é exatamente isso que estou fazendo.
— Sherlock9

Ah! Eu estava lendo a versão não destruída. Me desculpe por isso!
— David Robertson

@DavidRobertson Não é um problema
— Sherlock9

Golfed:lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
— Erik the Outgolfer

5

PHP, 62 76 82 bytes

O PHP está bem agora:

<?=ctype_alpha($x=$argv[1])?join(range(Z<$x?a:A,Z<$x?z:Z)):$x;

Recebe uma entrada da linha de comando, como:

$ php alphabet.php A
$ php alphabet.php "a"
$ php alphabet.php " "
$ php alphabet.php _

Editar% s

  • Economizou 6 bytes substituindo 91>ord($x)por Z<$x. Pensei muito complicado. Graças à manatwork .
  • Salvou 14 bytes removendo strtouppere construindo o intervalo exigido diretamente.

Isso ord()parece ruim lá. Tente Z<$x?$a:strtoupper($a).
— manatwork

@manatwork Haha, eu pensei muito complicado nessa segunda parte. Obrigado por apontar.
— insertusernamehere

Tente ' '&$x^Acriar maiúsculas e minúsculas a e z. Ou seja, seu código se torna<?=ctype_alpha($x=$argv[1])?join(range(' '&$x^A,' '&$x^Z)):$x;
— Ismael Miguel

@IsmaelMiguel Isso terá exatamente a mesma contagem de bytes.
— insertusernamehere

11
Não se preocupe - e ainda é uma boa maneira de ofuscar. ;)
— insertusernamehere

5

Perl, 46 34 33 bytes

inclui +2 para -nE

say/[a-z]/?a..z:/[A-Z]/?A..Z:$_

Correr como

perl -nE 'say/[a-z]/?a..z:/[A-Z]/?A..Z:$_'

  • atualização 34 economize 12 bytes, omitindo fore usando palavras de barras, graças a @Dom Hastings .
  • atualização 33 economize 1 byte usando -Ee em sayvez de print.

@DomHastings Thanks! Deveria ter sabido que palavras de baralho eram permitidas lá - e eu deveria ter visto isso for: - /. Tentei um monte de abordagens, ( -pcom $"='';$_="@_", mesmo $a='/[a-z]/?a..z:';print eval$a.uc$a.'$_', mas tudo é mais ...
— Kenney

Pensei nisso, se você definir em $_=vez de printing e usar a -pbandeira em vez de -nsalvar mais duas ... Ainda não consigo pensar em outras maneiras de economizar mais até agora ...
— Dom Hastings

@DomHastings Tentei isso, mas não consigo definir $_uma lista (que eu saiba). Teria que ser interpolado ( $_="@_"), mas isso usa o espaço como separador, então eu teria que fazer isso $"=''também (ou usar a join'',), o que o torna mais longo. Não há muito espaço de manobra neste!
— 22615 Kenney

Hah, claro! Você até disse que (quando eu reler o comentário depois de não estar no bar ...) eu continuarei pensando, mas você pode ser o mais curto que conseguirá sem usar, em sayvez de print!
— Dom Hastings

5

Ruby, 41 + 1 = 42

Com o interruptor -p, execute

([*?A..?z]*'').scan(/\w+/){$&[$_]&&$_=$&}

Isso gera a string

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

e verifica cada bloco contíguo de "caracteres da palavra", que são apenas os alfabetos em minúsculas e maiúsculas e o caractere sublinhado. Se houvesse vários caracteres consecutivos entre Z e a, esse truque não funcionaria.

Editado para adicionar explicação, mediante solicitação:

A -pbandeira faz essencialmente

while( $_ = STDIN.gets )
  #execute code
  print $_
end

[*?A..?z]é a matriz de caracteres entre A maiúsculo e Z minúsculo, na ordem ASCII. Esse é o alfabeto maiúsculo, alguns caracteres que não são da letra e o alfabeto minúsculo. *''junta o array em uma string, para que possamos chamá .scan-lo. scanencontrará cada correspondência da expressão regular /\w+/, preencherá a variável mágica$& e chamará o bloco. Cada vez que o bloco é iterado, ele verifica se a sequência correspondente contém $_e define a saída para essa sequência. Portanto, se $ _ estiver contido no alfabeto maiúsculo ou minúsculo, ele será modificado de acordo, caso contrário, não será alterado.

A versão não-gasta seria algo como

while ($_ = STDIN.gets )
 %w[ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz].each do |alphabet|
  $_ = alphabet if alphabet.include?($_)
 end
 print $_
end

Você pode postar uma versão sem golfe? Ainda não estou entendendo completamente como isso funciona.
— 24415 Shelvacu

Claro, postou um.
— histocrat

4

CJam, 18 bytes

'[,65>_elr:R]{R&}=

'[,65>empurra o alfabeto em maiúsculas, _elo alfabeto em minúsculas e r:Ruma sequência de caracteres simples que é lida em STDIN e atribuída à variável R. Elas são agrupadas em uma matriz ( ]) e a primeira que possui caracteres em comum Ré selecionada usando {R&}=.


Estou tentando entender como CJam, mas estou perdido entre o documento oficial e o que estou lendo aqui. Alguém pode me fornecer, por exemplo, uma página onde eu possa entender por que _elo alfabeto está em minúsculas?
— Erdal G.

Ah, elsignifica "converter para minúsculas". Acabei de empurrar o alfabeto em maiúsculas, agora o duplico _e depois chamo ela cópia resultante.
— Lynn

11
Fiz um bom pdf contendo (quase) todos os comandos CJam.
— Lynn

4

Retina, 62 bytes

[a-z]
abcdefghijklmnopqrstuvwxyz
[A-Z]
ABCDEFGHIJKLMNOPQRSTUVWXYZ

As duas linhas curtas são o regex a combinar. Se a entrada estiver em minúscula (no intervalo[a-z] ), ela substituirá esse caractere (nesse caso, que é a entrada inteira) pelo alfabeto em minúscula. O processo é semelhante para maiúsculas. Se não for uma carta, nenhuma substituição será feita e a saída será intocada.

Experimente online.


4

Python 2.7.10, 95 93 79 bytes

Esta é a minha primeira vez, mesmo tentando jogar golfe, então por favor, qualquer ajuda ou conselho é extremamente apreciada!

from string import* 
lambda i:(i,(uppercase,lowercase)[i.islower()])[i.isalpha()]

Obrigado a Morgan Thrapp pela ajuda!


11
@MorganThrapp, isso não parece funcionar. Você tem certeza de que funciona no Python 2.7.10?
— Daniel

Funciona em 2.7.8. O que não funciona?
— Morgan Thrapp

@MorganThrapp, na verdade, você poderia explicar primeiro exatamente como isso funciona? Talvez seja só porque eu não entendo, então estou fazendo algo errado.
— Daniel

Claro, ele usa o fato de que False == 0e True == 1para indexar em tuplas. Portanto, ele primeiro verifica se é uma letra com isalpha, se estiver, retorna 1e depois verifica se está em minúscula e faz o mesmo.
— Morgan Thrapp

11
Sem problemas! Eu amo jogar golfe, por isso estou sempre feliz em ajudar alguém novo!
— Morgan Thrapp

4

Ruby, 46 43 caracteres

(Código de 42 caracteres + opção de linha de comando de 1 caractere)

[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}

Graças a:

  • Jordan for the ===magic (-3 caracteres)

Exemplo de execução:

bash-4.3$ echo -n 'm' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
abcdefghijklmnopqrstuvwxyz

bash-4.3$ echo -n 'W' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ

bash-4.3$ echo -n '@' | ruby -pe '[?a..?z,?A..?Z].map{|r|r===$_&&$_=[*r]*""}'
@

4

MATL , 22 bytes

jtt1Y2XIm~Iw?km?Ik]]1$

Isso usa a versão atual (3.1.0) do idioma.

EDIT (15 de setembro de 2017): Experimente no MATL Online! (com uma versão mais recente do idioma).

Exemplos

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> e
abcdefghijklmnopqrstuvwxyz

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> T
ABCDEFGHIJKLMNOPQRSTUVWXYZ

>> matl jtt1Y2XIm~Iw?km?Ik]]1$
> "
"

Explicação

j              % input string (assumed to be a single character)        
tt             % duplicate twice
1Y2            % predefined literal: uppercase letters
XI             % copy to clipboard I         
m~             % check if not member    
I              % paste from clipboard I      
w              % swap elements in stack      
?              % if
    k          % convert string to lowercase 
    m          % check if member         
    ?          % if                          
        I      % paste from clipboard I      
        k      % convert string to lowercase 
    ]          % end                         
]              % end                         
1$             % input specification for implicit printing

3

Java, 165 caracteres

class A {public static void main(String[]p){int c=p[0].charAt(0),d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);for(;e<f;e++){System.out.print((char)e);}}}

Gera a saída necessária para o stdout (em vez de retorná-lo). A entrada é via argumentos de tempo de execução.

Como funciona.

1) Configure algumas variáveis ​​inteiras
c = o valor ASCII do primeiro caractere do primeiro parâmetro dos argumentos de tempo de execução.
d = c convertido em valor ASCII em minúscula (ORing com 32)
b = cálculo para ver se d é uma letra. Será <0 se uma carta.
e = O caractere inicial para a saída. Se o valor ASCII em d for uma letra (consulte b), será definido como 'A' (ou 'a' adicionando c AND 32 ao valor ASCII 'A'), caso contrário, será definido como o valor original de c.
f = o número de caracteres para saída. Se não for uma letra (consulte b), então isso é definido como 1; ele é definido como 26
2) Loop de e para e + f, gerando cada caractere para stdout.


2
Você sabe que, para a maioria dos desafios, a solução pode ser fornecida como programa completo ou função? Dada a enorme quantidade de código padrão em Java, uma função pode ser mais curta.
— manatwork

11
Aplicando um par de pequenos truques, sem alterar a lógica, eu tenho esse: void f(char c){for(int d=c|32,b=(d-96)*(d-123),e=b<0?65|(c&32):c,f=e+(b<0?26:1);e<f;)System.out.print((char)e++);}.
— manatwork

3

Perl, 23 bytes

Inclui +2 para -nE(em vez do +1 normal) ser justo com a outra solução perl

Execute com a entrada STDIN sem seguir a nova linha:

echo -n g | perl -lnE 'say/\pL/?a&$_|A..Z:$_'

Apenas o código:

say/\pL/?a&$_|A..Z:$_

Bom uso do fato de que a entrada é limitada a caracteres de 7 bits.
— Msh210 # 28/16

3

Lua, 98 97 bytes

Infelizmente, não encontrei uma solução com menos de 26 bytes para definir acom o alfabeto. Na verdade, não achei menor que 32.

Edit: save 1 Byte, graças a @ATaco, estava cometendo muito este erro quando iniciado com Lua: p

c=io.read()a="abcdefghijklmnopqrstuvwyz"print(not c:find"%a"and c or c:find"%u"and a:upper()or a)

Você pode testá-lo online no site oficial ou em ideone . Se você usar o primeiro, a entrada não funcionará (desativada), portanto, use a seguinte fonte, onde está agrupada em uma função.

function f(c)
  a="abcdefghijklmnopqrstuvwyz"
  print(not c:find"%a"and c or c:find"%u"and a:upper()or a)
end

print(f("\""))
print(f("a"))
print(f("Q"))

Você não é o único que não encontrou uma maneira mais curta de gerar o alfabeto em Lua. :(
— manatwork

@manatwork haha, exatamente a mesma coisa, exceto que eu não precisei imprimir, mas concatenar ^^. Pelo menos, isso significa que não há um truque escondido que eu não sabia fazer ^^ '.
— precisa

Você pode salvar um byte com, em c=io.read()a="abcdefghijklmnopqrstuvwyz"vez de a, c = ...
— ATaco

2

Mathematica, 75 bytes

#/.Thread[Join[a=Alphabet[],b=ToUpperCase@a]->Array[""<>If[#>26,b,a]&,52]]&

Pontuação muito boa para um idioma que não seja golfe ... Quaisquer soluções que usem processamento de código de caracteres levariam mais bytes, devido aos custos de ToCharacterCodee FromCharacterCode.


2

C (função), 71 bytes

f(s,n,c){n=1;if(isalpha(s))s-=s%32-1,n=26;for(c=s;c<s+n;)putchar(c++);}

f(s,n,c){for(c=s-=(n=isalpha(s)?26:1)>1?s%32-1:0;c<s+n;)putchar(c++);}salva um byte.
— 22615 Kenney

11
f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}para 62 bytes
— gastropner 11/11

2

Python, 81 bytes

f=lambda z,a="abcdefghijklmnopqrstuvwxyz":[k for k in[a,a.upper(),z]if z in k][0]

Esta é basicamente uma tradução da resposta Pyth. Ele define uma função fque toma como argumento o caractere e retorna o resultado.


11
Você quer dizer if z in kné? Além disso, f=é opcional por padrão.
— xnor

@xnor Sim. Aparentemente, eu perdi um Ctrl-C.
— PurkkaKoodari

2
Remova f=, torne a função anônima. -2
— Erik the Outgolfer

2

Jolf , 17 bytes

Experimente aqui.

? hpLipl? hpUipui
?                  if
  hpL               the lowercase alphabet (array) contains
     i               the input
      pl            return the lowercase alphabet (string)
        ?          else if
          hpU       the uppercase alphabet (array) contains
             i       the input
              pu    return the uppercase alphabet (string)
                i  otherwise, return the input
                   implicit: print the result

2

MATLAB: 71 68 bytes

i=input('');b=i<65|i>122|(i>90&i<97);[i*b,~b*((65:90)+32*(i>96)),'']

(graças ao OP por salvar 3 bytes)

Teste:

i='a'
ans=
abcdefghijklmnopqrstuvwxyz

i='A'
ans=
ABCDEFGHIJKLMNOPQRSTUVWXYZ

i='~'
ans=
~

Explicação: O alfabeto maiúsculo ocupa 65:90caracteres ASCII. Alfabeto em minúsculas está em 97:122ASCII. Portanto, b=i<65|i>122|(i>90&i<97)verifica se o caractere de entrada iNÃO é alfabético. Nesse caso, a entrada é retornada. O alfabeto maiúsculo é retornado se b==1e i<97(caractere maiúsculo). Se b==1e i>96, 32 é adicionado a 65:90isso corresponde a 97:122- o alfabeto em minúsculas.


Boa apresentação. Dois comentários: É comum usar i=input('')se o envio é um script ou como argumento de função, se for uma função @(i)i^2. i='a'geralmente não é aceito. Além disso, você pode salvar 3 bytes fazendo isso em [1,2,3,'']vez de char([1,2,3]).
— Stewie Griffin

Ok, editado. Obrigado pela sugestão!
— brainkz

2

SpecBAS, 111 bytes

Eu já passei por várias versões disso, 111 parece ser o melhor que posso gerenciar.

1 INPUT l$: a$="abcdefghijklmnopqrstuvwxyz"
2  ?IIF$(l$ IN ["a" TO "z","A" TO "Z"],IIF$(l$=UP$ l$,UP$ a$,a$),l$)

A linha 2 usa o ?atalho para instruções PRINTembutidas aninhadasIF

Explicação do pseudo-código

IF character IN "a".."z","A".."Z"
THEN
 IF character = UPPERCASE character
 THEN
  print UPPERCASE alphabet
 ELSE
  print alphabet
 ENDIF
ELSE
 print the character
ENDIF

É difícil ["a" TO "z","A" TO "Z"]parecer mais um pseudo-código do que já é. "a".."z","A".."Z"parece mais um "código real", pelo menos aos meus olhos ... Porém, ambos são muito fáceis de entender =)
— Stewie Griffin

2
Spec what ????
— Bassdrop Cumberwubwubwub

2

Swift 2, 142 bytes

func d(s:String)->String{let a="abcdefghijklmnopqrstuvwxyz";for v in s.utf8{return v>64&&v<91 ?a.uppercaseString:(v>96&&v<123 ?a:s)};return s}

Ungolfed

func d(s: String) -> String{
    let a="abcdefghijklmnopqrstuvwxyz"
    for v in s.utf8{
        return (
            v > 64 && v < 91 ?
            a.uppercaseString :
            (
                v > 96 && v < 123 ?
                a :
                s
            )
        )
     }
    return s
}

2

05AB1E , 19 16 bytes

-3 bytes graças a else

DAsåiAëDAusåiAuë

Como funciona

                   # implicit input
D                  # duplicate
 A                 # push lowercase alphabet
  s                # swap last two elements
   å               # push a in b
    i              # if
     A             # lowercase alphabet
      ë            # else
         D         # duplicate
          Au       # uppercase alphabet
            s      # swap last two elements
             å     # push a in b
              I    # if
               Au  # uppercase alphabet
                 ë # else leave input
                   # implicit print

Experimente online!


Não tenho certeza se ¹(a primeira entrada) já existia quando você postou sua resposta, mas você pode colocar 2 bytes com ela: A¹åiAëAu¹åiAuë( Experimente online ou suíte de testes ).
— Kevin Cruijssen

2

Java SE 8, 71 69 bytes

Golfe:

(a,s)->{char b=97;if(a<91)b-=32;a=b;b+=26;while(a<b)s+=a++;return s;}

Ungolfed:

(a,s)->{          // String as a parameter. If declaration is necessary it adds 8 bytes
char b = 97;      // Uppercase A char, this is important
if (a < 91)       // If it is not past 'z', where a is a char param
    b -= 32;      // Then go back to the lowercase alphabet
a = b;            // Done to prevent a cast
b += 26;          // End of alphabet
while (a < b)     // Go to end of alphabet
    s += a++;     // Append character
return s;}        // Then return

Eu havia implementado originalmente o seguinte

String s="";char b=96;if(a-91<0)b-=32;for(char c=b;++c<b+27;)s+=c;return s;

É mais elegante, mas infelizmente é um byte maior. Isso pressupõe que o comportamento para caracteres não alfa seja indefinido e a sequência "" s seja inicializada como "" antes da execução. Seja gentil, é o meu primeiro post.

editar: 2 bytes salvos por Stewie Griffin alterando

a - 91 < 0 to a < 91

2
Bem vindo ao site! :)
— DJMcMayhem

11
Obrigado! Sido escondido por alguns anos agora e realmente interessado em ver se eu posso fazer competindo Java / C ++ respostas :)
— JFH

11
a<91deve funcionar, ou ...?
— Stewie Griffin

2

Scala, 91 caracteres

(c:Char)=>{var a='a'.to('z').mkString;if(c.isUpper)a=a.toUpperCase;if(!c.isLetter)a=""+c;a}

Sem golfe

def f(c: Char): String = {
    var a='a'.to('z').mkString //set up lower case default response
    if (c.isUpper) {
        a = a.toUpperCase     //mutate the result if upper case
    }        
    if (!c.isLetter) { 
      a = ""+c                 //mutate the result if not a letter
    }
    a                         //return result
}

Ter um resultado mutável inicial em vez de retornar um valor imutável de 3 distintos se mais blocos me salvou 2 caracteres, mesmo que eu odeie.

Método escala-tônico

Um método melhor para o scala seria algo como isto:

def convertToAlphabet(c: Char): String = {
    c match {
      case x if !x.isLetter => x.toString
      case x if x.isUpper => ('A' to 'Z').mkString
      case _ => ('a' to 'z').mkString
    }
}

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.