Défi :
Étant donné un mot, vérifiez s'il s'agit ou non d'un isogramme.
Quelle :
Un isogramme est un mot composé uniquement de lettres sans doublons (insensible à la casse). La chaîne vide est un isogramme.
Exemples :
"Dermatoglyphics" ---> true
"ab" ---> true
"aba" ---> false
"moOse" ---> false
"abc1" ---> false
"" ---> true
Contribution :
Vous pouvez accepter une entrée dans n'importe quel format raisonnable
L'entrée ne contiendra que des lettres et / ou des chiffres, pas d'espaces ( [a-zA-Z0-9]
)
Production :
true
ou toute valeur vraie si l'entrée est un isogrammefalse
ou toute valeur de fausse autrement
C'est le code-golf donc le code le plus court en octets dans chaque langue gagne.
code-golf
string
decision-problem
Muhammad Salman
la source
la source
sad2
sad2das
échouerait même sans le2
donc il n'affiche rien).Réponses:
Python
deux /3,365248 octetsEssayez-le en ligne!
Je profite du fait qu'il
set
ne contient que des éléments uniques. En invoquant la__len__
méthode de chacun, je peux déterminer sis
contient également uniquement des éléments uniques (en ignorant la casse).EDIT: mis à jour pour satisfaire l'exigence précédemment ignorée de renvoyer False pour les entrées numériques. L'ensemble de tous les chiffres est codé comme
set(str(56**7))
.EDIT 2: Suite à cette suggestion d'utilisateur , je profite maintenant du déballage des arguments pour définir la compréhension. Cela rompt formellement la compatibilité avec Python 2.
la source
false
lorsqu'ils
contient un caractère numérique.`56**7`
(comme dans l'autre réponse python) au lieu destr()
plus court? Je ne connais pas le python mais cela semble être la principale différence entre vos deux réponses.``
, une version python2 uniquement permettrait d'économiser 4 octets (3 sur ce + 1 sur division au lieu de cela équivaut)56**7
été inspiré par votre propre encodage des chiffres 0-9 ci-dessous, mais vous permet d'économiser sur le vôtre d'un octet.lambda s:len(s)==len(set(s.lower())-{`56**7`})
05AB1E , 5 octets
Essayez-le en ligne!
Explication
la source
R , 41 octets
Essayez-le en ligne!
Approche regex.
!grepl(regex,scan(,""),F)
n'a pas fonctionné, donc je suppose que la capture ne correspond pas à la casse dans R? Je suis mauvais en regex en général, cependant, je ne serai donc pas surpris si je fais juste mal ...R , 58 octets
Essayez-le en ligne!
Ajoute les chiffres
0:9
à la liste (en minuscules) de caractères et teste s'il y a des doublons.la source
Rubis ,
25 2321 octets-2 octets sur les deux grâce à Giuseppe
Essayez-le en ligne!
-2 octets grâce à Kirill L.
Rubis
-n
,21 19 1816 octetsEssayez-le en ligne!
la source
$_
- il suffit de lancer une expression régulière sans rien d'autre qui le compare implicitement à$_
: 16 octets!/.../
auparavant , je ne le trouve même pas sur ruby-doc.orgBrachylog , 4 octets
Essayez-le en ligne!
Le prédicat réussira si l'entrée est un isogramme et échouera dans le cas contraire, produisant l'alphabet latin en minuscules s'il réussit. Étant donné que le
⊆
prédicat intégré de Brachylog ne correspond pas exactement à la relation ordinaire entre un sous-ensemble et un sur-ensemble, j'ai dû dépenser un octet pour trier l'entrée en minuscules, mais j'ai économisé un octet pour ne pas avoir à vérifier explicitement les doublons. (Si cela n'avait pas besoin d'échouer avec les chiffres, nous pourrions simplement l'utiliserḷ≠
.)la source
Husk , 6 octets
Essayez-le en ligne!
Explication
la source
Japt , 12 octets
Explication:
Essayez-le ici.
la source
MATL , 9 octets
Essayez-le en ligne!
la source
Python 3 , 46 octets
Essayez-le en ligne!
la source
Japt 2.0,
1211 bytes-1 byte thanks to Nit
Test it online!
la source
e
JavaScript (Node.js),
2925 bytesTry it online!
Thanks for the update on answer to @BMO , @l4m2 , @KevinCruijssen
-4 bytes thanks to @KevinCruijssen
la source
s=>!/(.).*\1|[^a-z]/i.test(s)
?[^a-z]
can be replaced with\d
Retina, 16 bytes
Returns
1
as Truthy and0
as Falsey values.Thanks @Neil for discovering and fixing a bug in my initial code.
Try it online.
Explanation:
la source
PowerShell, 91 bytes
Try it online!
Naive solution, but I can't come up with a better algorithm. Takes input
$b
, converts itToUpper
case, casts it as achar
-array. Pipes that array intoGroup-Object
which constructs a object that has name/count pairs for each input letter. We thensort
that based on thec
ount and take the0
th one thereof. We check that its.Count
is-eq
ual to the.Count
of the last[-1]
pair. If so, then the counts are all equal, otherwise we have a different amount of letters.We then
-and
that with checking whether the input-notmatch
es against\d
to rule out any digits in the input. That Boolean result is left on the pipeline and output is implicit.la source
Jelly, 8 bytes
Try it online!
la source
Python 2,
5756 bytesTry it online!
First it turn then input into a set, removing the duplicates, then remove the digits (encoded in
`763**4`
), then check if the length is the same as the original inputla source
Java 8,
6139 bytesExplanation:
Try it online.
Regex explanation:
String#matches
implicitly adds^...$
.la source
APL (Dyalog Unicode), 12 bytes
Anonymous tacit function.
Try it online!
819⌶
lowercase(
…)
apply the following tacit function on that:~∘⎕D
remove Digits from the argument∪≡
are the unique elements of the argument identical to that?la source
Perl 6, 22 bytes
Try it online!
No matches for some character then later the same character. Implicit function as a code block, match implicitly on $_, invert book with
!
. Added|\d
(ta Adam) but also needed.uc~~
, which needed parentheses...Alternative with Bags, 23 bytes
Try it online!
This one normalises case then makes a bag (set with incidence counts). Subset or equal only true if all members are members of the comparison Bag, and all incidence counts are less than or equal to those in the comparison Bag. So any repeats or digits would make the comparison false.
la source
abc1
.|\d
?Swift, 81 bytes
Try it online!
la source
Visual Basic for Applications (32 bit), 102 bytes
Used the fact that in VBA
0^x
yields 1 if x is zero and 0 otherwise. Run in immediate (debug) window.Edit: as pointed out by Taylor in the comments this only works in 32 bit installs of MS Office.
la source
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
for 95 bytes by taking input from[A1]
. Also, it is worth noting that because Exponentiation in VBA is weird that this solution is restricted to 32 bit installs of office.<!-- language-all: lang-vb -->
flag to your answer to add syntax highlighting05AB1E, 4 bytes
Try it online!
Explanation
la source
The input will only contain letters and/or numbers, no spaces ([a-zA-Z0-9])
C (gcc),
878583 bytestwofour bytes thanks to ceilingcat.Try it online!
la source
K (ngn/k), 18 bytes
Try it online!
la source
CJam, 11 bytes
Try it online!
Explanation
The basic idea is to append each digit then check for duplicates. Since the append ensures that each digit is already present once, any further presence of digits will be a duplicate, causing it to return false.
la source
Red, 76 bytes
Try it online!
la source
Smalltalk, 57 bytes
Method to be defined in class String:
This is most likely self-explanatory.
la source
Pyth, 17 bytes
Test suite
Explanation: Python 3 translation:la source
C#, 82 bytes
edit: added test for char
edit: using GroupBy to shorten it by 5 byte
la source
APL (Dyalog Unicode),
252022 bytesTry it online!
Returns 1 for true, else 0.
Saved 5 bytes thanks to @H.PWiz
Fixed, and saved another byte thanks to @Adám
How?
la source
abc1
.\w
→.
valid?(.).*\1
, no. It also fails forabc1
:/abc1
, when it should return 0.Tcl, 114 bytes
Try it online!
Tcl, 121 bytes
Try it online!
Still too long for my taste!
la source