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.