O desafio é simples:
Escreva uma função ou programa que receba uma entrada x
e emita o alfabeto em minúsculas se fizer x
parte do alfabeto em minúsculas, emita o alfabeto em maiúsculas se x
faz parte do alfabeto em maiúsculas e emite apenas x
se 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á
a
ouA
. - 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 N
está 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
import Random
e depois usá-loRandom.randint
(obviamente não para esse desafio, mas ainda assim)?import string
sã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.Respostas:
TeaScript , 5 bytes
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
Alternativa de 1 byte
Se pudéssemos produzir
0123456789
dígitos, então poderia ser:fonte
Pitão, 10 bytes
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.fonte
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.
fonte
Haskell, 48 bytes
Exemplo de uso:
Pegue todas as listas de ['a' .. 'z'], ['A' .. 'Z'] e a lista de singleton com a entrada char
c
ondec
é o elemento de. Para letras, sempre temos duas correspondências, então escolhemos a primeira.fonte
JavaScript (ES6), 79 bytes
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.
Teste
Mostrar snippet de código
fonte
for(a="",i=64;++i<91;)a+=String.fromCharCode(i)
.String.fromCharCode
é muito inadequado para jogar golfe, mas às vezes é a única maneira!String.fromCharCode
e.toUpperCase
(Dumb and Dumber), mastoUpperCase
é o vencedorx=>x.replace(/[A-Z]/i,c=>c>"`"?a:a.toUpperCase(),a="abcdefghijklmnopqrstuvwxyz")
faz, mas é um byte mais longo. Mudar[A-Z]
para\w
funciona para tudo, exceto_
. Sua solução parece ser a mais curta possível.ABC...abc...?
, sem um verdadeirofor
loop: (padding)[for(_ of[...Array(i=64)])if(i++%32<26)String.fromCharCode(i)].join``+x
R,
9075 bytesGraças a Giuseppe .
Versão antiga (90 bytes):
Parece feio, mas esses
cat
s não podem ser terceirizados para funções, IMHO.fonte
scan
pode ser qualquer objeto do tipo caractere, portanto você pode, emletters
vez de''
.Python 3,
92848274 bytesVersão atual: 74, graças a isaacg e wnnmaw!
Ungolfed: (para algumas definições de ungolfed
Primeira versão: 92
Segunda versão: 82, graças a isaacg! :)
fonte
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 dafor
.lambda c:''.join([chr(x+(97if c>'Z'else 65))for x in range(25)])if c.isalpha()else c
,. Obrigado!"
a função, você precisa\"
.Python 3,
118105989783 bytesSolução simples. Edição: Golfed com agradecimentos à sugestão de Erik o jogador de golfe.
Ungolfed:
fonte
return a.lower() if s.islower() else a
.lambda s,a='abcdefghijklmnopqrstuvwxyz':(s,(a,a.upper())[s.isupper()])[s.isalpha()]
PHP, 62
7682bytesO PHP está bem agora:
Recebe uma entrada da linha de comando, como:
Editar% s
91>ord($x)
porZ<$x
. Pensei muito complicado. Graças à manatwork .strtoupper
e construindo o intervalo exigido diretamente.fonte
ord()
parece ruim lá. TenteZ<$x?$a:strtoupper($a)
.' '&$x^A
criar 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;
Perl,
463433 bytesinclui +2 para
-nE
Correr como
for
e usando palavras de barras, graças a @Dom Hastings .-E
e emsay
vez deprint
.fonte
for
: - /. Tentei um monte de abordagens, (-p
com$"='';$_="@_"
, mesmo$a='/[a-z]/?a..z:';print eval$a.uc$a.'$_'
, mas tudo é mais ...$_=
vez deprint
ing e usar a-p
bandeira em vez de-n
salvar mais duas ... Ainda não consigo pensar em outras maneiras de economizar mais até agora ...$_
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 ajoin'',
), o que o torna mais longo. Não há muito espaço de manobra neste!say
vez deprint
!Ruby, 41 + 1 = 42
Com o interruptor
-p
, executeIsso gera a string
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
-p
bandeira faz essencialmente[*?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.scan
encontrará 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
fonte
CJam, 18 bytes
'[,65>
empurra o alfabeto em maiúsculas,_el
o alfabeto em minúsculas er:R
uma sequência de caracteres simples que é lida em STDIN e atribuída à variávelR
. Elas são agrupadas em uma matriz (]
) e a primeira que possui caracteres em comumR
é selecionada usando{R&}=
.fonte
_el
o alfabeto está em minúsculas?el
significa "converter para minúsculas". Acabei de empurrar o alfabeto em maiúsculas, agora o duplico_
e depois chamoel
a cópia resultante.Retina, 62 bytes
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.
fonte
Python 2.7.10,
959379 bytesEsta é a minha primeira vez, mesmo tentando jogar golfe, então por favor, qualquer ajuda ou conselho é extremamente apreciada!
Obrigado a Morgan Thrapp pela ajuda!
fonte
False == 0
eTrue == 1
para indexar em tuplas. Portanto, ele primeiro verifica se é uma letra comisalpha
, se estiver, retorna1
e depois verifica se está em minúscula e faz o mesmo.Ruby,
4643 caracteres(Código de 42 caracteres + opção de linha de comando de 1 caractere)
Graças a:
===
magic (-3 caracteres)Exemplo de execução:
fonte
MATL , 22 bytes
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
Explicação
fonte
Java, 165 caracteres
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.
fonte
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++);}
.Perl, 23 bytes
Inclui +2 para
-nE
(em vez do +1 normal) ser justo com a outra solução perlExecute com a entrada STDIN sem seguir a nova linha:
Apenas o código:
fonte
Lua,
9897 bytesInfelizmente, não encontrei uma solução com menos de 26 bytes para definir
a
com 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
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.
fonte
c=io.read()a="abcdefghijklmnopqrstuvwyz"
vez de a, c = ...Mathematica, 75 bytes
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
ToCharacterCode
eFromCharacterCode
.fonte
C (função), 71 bytes
fonte
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.f(s,n){for(n=isalpha(s)?s-=s%32-1,s+26:s+1;s<n;)putchar(s++);}
para 62 bytesPython, 81 bytes
Esta é basicamente uma tradução da resposta Pyth. Ele define uma função
f
que toma como argumento o caractere e retorna o resultado.fonte
if z in k
né? Além disso,f=
é opcional por padrão.f=
, torne a função anônima. -2Jolf , 17 bytes
Experimente aqui.
fonte
MATLAB:
7168 bytes(graças ao OP por salvar 3 bytes)
Teste:
Explicação: O alfabeto maiúsculo ocupa
65:90
caracteres ASCII. Alfabeto em minúsculas está em97:122
ASCII. Portanto,b=i<65|i>122|(i>90&i<97)
verifica se o caractere de entradai
NÃO é alfabético. Nesse caso, a entrada é retornada. O alfabeto maiúsculo é retornado seb==1
ei<97
(caractere maiúsculo). Seb==1
ei>96
, 32 é adicionado a65:90
isso corresponde a97:122
- o alfabeto em minúsculas.fonte
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 dechar([1,2,3])
.SpecBAS, 111 bytes
Eu já passei por várias versões disso, 111 parece ser o melhor que posso gerenciar.
A linha 2 usa o
?
atalho para instruçõesPRINT
embutidas aninhadasIF
Explicação do pseudo-código
fonte
["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 =)Swift 2, 142 bytes
Ungolfed
fonte
05AB1E ,
1916 bytes-3 bytes graças a
else
Como funciona
Experimente online!
fonte
¹
(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 ).Java SE 8,
7169 bytesGolfe:
Ungolfed:
Eu havia implementado originalmente o seguinte
É 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
fonte
a<91
deve funcionar, ou ...?Scala, 91 caracteres
Sem golfe
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:
fonte
Japonês, 9 bytes
Execute-o online
fonte