Desafio:
Dada uma palavra, verifique se é um isograma.
O que :
Um isograma é uma palavra que consiste apenas em letras sem duplicatas (sem distinção entre maiúsculas e minúsculas). A cadeia vazia é um isograma.
Exemplos :
"Dermatoglyphics" ---> true
"ab" ---> true
"aba" ---> false
"moOse" ---> false
"abc1" ---> false
"" ---> true
Entrada :
Você pode aceitar entrada em qualquer formato razoável
A entrada conterá apenas letras e / ou números, sem espaços ( [a-zA-Z0-9]
)
Resultado :
true
ou qualquer valor verdadeiro se a entrada for um isogramafalse
ou qualquer valor falso, caso contrário
Este é o código-golfe, pelo que o código mais curto em bytes em cada idioma vence.
code-golf
string
decision-problem
Muhammad Salman
fonte
fonte
sad2
sad2das
falharia mesmo sem o,2
para que não mostre nada).Respostas:
Python
2/3,365248 bytesExperimente online!
Aproveito o fato de que
set
contém apenas elementos únicos. Invocando o__len__
método de cada um, posso determinar ses
também contém apenas elementos únicos (ignorando maiúsculas e minúsculas).EDIT: Atualizado para satisfazer o requisito anteriormente esquecido de retornar False para entradas numéricas. O conjunto de todos os dígitos é codificado como
set(str(56**7))
.EDIÇÃO 2: Seguindo esta sugestão do usuário , agora aproveito a descompactação dos argumentos para definir a compreensão. Isso formalmente quebra a compatibilidade com o Python 2.
fonte
false
quandos
contém um caractere de dígito.`56**7`
(como na outra resposta python) em vez destr()
mais curto? Eu não estou familiarizado com python, mas essa parece ser a principal diferença entre suas duas respostas.``
, uma versão somente python2 iria salvar 4 bytes (3 neste + 1 sobre a divisão em vez iguala)56**7
foi inspirado na sua própria codificação dos dígitos 0-9 abaixo, mas economiza no seu por 1 byte.lambda s:len(s)==len(set(s.lower())-{`56**7`})
05AB1E , 5 bytes
Experimente online!
Explicação
fonte
R , 41 bytes
Experimente online!
Abordagem Regex.
!grepl(regex,scan(,""),F)
não funcionou, então acho que capturar não corresponde a maiúsculas e minúsculas no R? Eu sou ruim em regex em geral, no entanto, então não ficarei surpreso se estiver fazendo errado ...R , 58 bytes
Experimente online!
Anexa os dígitos
0:9
à lista (em minúsculas) de caracteres e testa se há duplicatas.fonte
Ruby ,
25 2321 bytes-2 bytes em ambos graças a Giuseppe
Experimente online!
-2 bytes graças a Kirill L.
Ruby
-n
,21 19 1816 bytesExperimente online!
fonte
$_
- apenas jogando em um regex sem qualquer outra coisa corresponde implicitamente contra$_
: 16 bytes!/.../
antes, não consigo nem encontrá-lo em ruby-doc.orgBraquilog , 4 bytes
Experimente online!
O predicado será bem-sucedido se a entrada for um isograma e falhará se não for, exibindo o alfabeto latino em minúsculas se for bem-sucedido. Como o
⊆
predicado interno do Brachylog não corresponde exatamente ao relacionamento comum entre um subconjunto e um superconjunto, tive que gastar um byte na classificação da entrada em minúsculas, mas economizei um byte por não ter que procurar explicitamente por duplicatas. (Se não precisasse falhar com os números, poderíamos usarḷ≠
.)fonte
Casca , 6 bytes
Experimente online!
Explicação
fonte
Japonês , 12 bytes
Explicação:
Experimente aqui.
fonte
MATL , 9 bytes
Experimente online!
fonte
Python 3 , 46 bytes
Experimente online!
fonte
Japonês 2.0,
1211 bytes-1 byte graças a Nit
Teste online!
fonte
e
JavaScript (Node.js) ,
2925 bytesExperimente online!
Obrigado pela atualização da resposta para @BMO , @ l4m2 , @KevinCruijssen
-4 bytes graças a @KevinCruijssen
fonte
s=>!/(.).*\1|[^a-z]/i.test(s)
?[^a-z]
pode ser substituído por\d
Retina , 16 bytes
Retorna
1
como valores Truthy e0
Falsey.obrigado @ Neil por descobrir e corrigir um bug no meu código inicial.
Experimente online.
Explicação:
fonte
PowerShell , 91 bytes
Experimente online!
Solução ingênua, mas não consigo criar um algoritmo melhor. Pega entrada
$b
, converteToUpper
caixa, lança comochar
matriz. Canais na matriz naGroup-Object
qual constrói um objeto que possui pares nome / contagem para cada letra de entrada. Nós, então,sort
que, com base nac
ount e tomar o0
th um dos mesmos. Verificamos se.Count
é-eq
ual ao.Count
último[-1]
par. Nesse caso, as contagens são todas iguais, caso contrário, temos uma quantidade diferente de letras.Em seguida,
-and
verificamos se a entrada-notmatch
é contra\d
para excluir algum dígito na entrada. Esse resultado booleano é deixado no pipeline e a saída é implícita.fonte
Geléia , 8 bytes
Experimente online!
fonte
Python 2 ,
5756 bytesExperimente online!
Primeiro, ele transforma a entrada em um conjunto, removendo as duplicatas, depois remove os dígitos (codificados
`763**4`
), depois verifica se o comprimento é igual ao da entrada originalfonte
Java 8,
6139 bytesExplicação:
Experimente online.
Explicação Regex:
String#matches
adiciona implicitamente^...$
.fonte
APL (Dyalog Unicode) , 12 bytes
Função tácita anônima.
Experimente online!
819⌶
minúsculas(
…)
Aplique a seguinte função tácita nisso:~∘⎕D
remover D igits do argumento∪≡
os elementos únicos do argumento são idênticos a isso?fonte
Perl 6 , 22 bytes
Experimente online!
Não há correspondências para algum caractere e depois o mesmo caractere. Função implícita como um bloco de código, corresponde implicitamente a $ _, inverte livro com
!
. Adicionado|\d
(ta Adam), mas também necessário.uc~~
, que precisava de parênteses ...Alternativa com malas, 23 bytes
Experimente online!
Este caso normaliza, em seguida, faz uma bolsa (definida com contagens de incidência). Subconjunto ou igual a true somente se todos os membros forem membros da Bolsa de comparação e todas as contagens de incidência forem menores ou iguais às da Bolsa de comparação. Portanto, qualquer repetição ou dígito tornaria a comparação falsa.
fonte
abc1
.|\d
?Rápido , 81 bytes
Experimente online!
fonte
Visual Basic for Applications (32 bits), 102 bytes
Usou o fato de que no VBA
0^x
produz 1 se x for zero e 0 caso contrário. Execute na janela imediata (depuração).Edit: como apontado por Taylor nos comentários, isso só funciona em instalações de 32 bits do MS Office.
fonte
s=LCase([A1]):j=1:For i=1To Len(s):k=Mid(s,i,1):j=j*0^InStr(i+1,s,k)*(k Like"[a-z]"):Next:?j<>0
95 bytes, recebendo informações de[A1]
. Além disso, vale a pena notar que, como a exponenciação no VBA é estranha, essa solução é restrita a instalações de escritório de 32 bits.<!-- language-all: lang-vb -->
bandeira para a sua resposta para adicionar realce de sintaxe05AB1E , 4 bytes
Experimente online!
Explicação
fonte
The input will only contain letters and/or numbers, no spaces ([a-zA-Z0-9])
C (gcc) ,
878583 bytesdoisquatro bytes graças ao ceilingcat .Experimente online!
fonte
K (ngn / k) , 18 bytes
Experimente online!
fonte
CJam , 11 bytes
Experimente online!
Explicação
A idéia básica é acrescentar cada dígito e procurar duplicatas. Como o apêndice garante que cada dígito já esteja presente uma vez, qualquer presença adicional de dígitos será duplicada, fazendo com que ele retorne falso.
fonte
Vermelho , 76 bytes
Experimente online!
fonte
Smalltalk, 57 bytes
Método a ser definido na classe String:
Isso é provavelmente auto-explicativo.
fonte
Pitão , 17 bytes
Suíte de teste
Explicação: Tradução Python 3:fonte
C #, 82 bytes
editar: teste adicionado para char
edit: usando GroupBy para encurtá-lo em 5 bytes
fonte
APL (Dyalog Unicode) ,
252022 bytesExperimente online!
Retorna 1 para true, caso contrário 0.
Guardado 5 bytes graças a @ H.PWiz
Corrigido e salvo outro byte graças a @ Adám
Quão?
fonte
abc1
.\w
→ não é.
válido?(.).*\1
, não. Também falha paraabc1
: /abc1
, quando ele deve retornar 0.Tcl , 114 bytes
Experimente online!
Tcl , 121 bytes
Experimente online!
Ainda é muito longo para o meu gosto!
fonte