Ecrivez une fonction / programme qui accepte une chaîne de lettres minuscules / majuscules [A-Za-z], qui vérifie si les lettres en surbrillance sont uniques et dans l’ordre alphabétique (en ignorant les majuscules et les minuscules). La sortie doit être véridique si elles sont uniques et dans l’ordre alphabétique et faussée sinon.
Voici quelques cas de test
a true
abcdefGHIjklmnopqrSTUVWXyz true
aa false
puz true
puzz false
puzZ false
puZ true
PuZ true
pzu false
pzU false
abcdABCD false
dcba false
Si vous le souhaitez, lancez votre programme sur tous les mots d’une liste de mots comme celle-ci et publiez-en d’intéressants =).
But
Le plus petit nombre d'octets gagne.
za
être une valeur de vérité?a
et finit parz
.Réponses:
CJam, 8 octets
Voici un test harnais pour tous les exemples du défi. Ceci retourne
0
ou1
((qui sont la fausseté et la vérité, respectivement, dans CJam).Et voici un script pour filtrer la liste de mots dans la question (cela prend quelques secondes). Vous devrez copier manuellement la liste de mots dans le champ de saisie, car elle est trop longue pour un lien permanent.
Explication
la source
Regex (toute saveur), 55 octets
Certaines personnes ne considèrent pas regex comme un langage de programmation, mais il a déjà été utilisé auparavant et n'est pas près d'être le plus court.
J'ai ajouté un octet pour l'indicateur
i
(insensible à la casse). Ceci est très simple et peut être plus court à générer à la volée.Si les expressions rationnelles seules ne sont pas autorisées, vous pouvez utiliser ce programme Retina de 56 octets suggéré par Martin Büttner:
L'exécution de ceci sur la liste de mots liée ci-dessus a donné 10 mots de 6 lettres dans l'ordre alphabétique.
la source
i`^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$
Python 3, 44 octets
Une approche simple - vérifier l'unicité, vérifier le tri.
la source
*s,=...
fait?s=list(input().lower())
.x,*y = [1, 2, 3, 4]
assigner 1 àx
et[2, 3, 4]
ày
.*s,=
islist(s)
... link{*s}
au lieu deset(s)
sauvegarder 2 octets.> <> ,
524239 octetsCe type de question est l’un des rares types avec lequel <>> est assez à l’aise, car nous n’avons besoin que de traiter un seul caractère à la fois.
Explication
Ne te perds pas! Il y a beaucoup d'emballer ici.
Solution précédente, 42 octets
La chose intéressante est que, même si elle semble avoir la même fonctionnalité, l’alternative
(Le changement est dans les flèches et les miroirs à l'extrême droite)
donne en fait des résultats incorrects , à cause de l'interpréteur de> <> utilisant un defaultdict Python. En réalité, en parcourant l'espace vide à la fin de la deuxième ligne, les 0 sont placés implicitement dans les espaces vides lorsque> <> tente d'accéder à la cellule. Cela perturbe ensuite le
?
trampoline conditionnel au début de la même ligne, car les 0 nouvellement placés sont ignorés plutôt que le dernierv
.la source
Haskell, 52 octets
Utilisation:
(and.(zipWith(>)=<<tail).map toLower) "abcd"
quelles sortiesTrue
.la source
C,
67 65 5754 (52) caractèresun peu plus court:
et même plus court:
Voici un petit test: http://ideone.com/ZHd0xl
Après les dernières suggestions, il reste encore deux versions plus courtes:
De plus, ce code repose sur le fait que, en ASCII, les minuscules et les majuscules ne diffèrent que par le cinquième bit (32) que je filtre. Donc, cela pourrait ne pas fonctionner avec d'autres encodages évidemment.
EDIT: La dernière version définit toujours le 5ème bit comme
|32
étant plus court que&~32
.la source
for(;(*s&=95)>d;d=*s++);
. Et vous pouvez initialiserd
à1
sans changer le résultat, ce qui en économise 1 de plus. Voir.d;f(char*s){d=32;for...}
fonctionne, en déclarantd
implicitement comme un int global (ce qui, dans GCC, est un avertissement: "la définition de données n'a pas de type ni de classe de stockage", mais pas une erreur). Cela économise deux octets.d
dans lafor
boucle plutôt que sa propre déclaration? De cette façon, vous enregistrez un fichier;
.Ruby, 33 ans
Vérifie si les caractères uniques triés sont les mêmes que tous les caractères.
la source
c==c.sort|c
Javascript (ES5), 101
Amélioré à 87 par edc95:
upvote son commentaire :)
Btw, les tests élémentaires actuellement dans OP sont remplis si un programme ne fait que vérifier l'unicité, sans tenir compte de l'ordre.
Je ne peux pas encore écrire de commentaires, je vais donc répondre ici:
@ edc65: Merci! J'ai essayé de le réécrire en utilisant
some()
, mais je ne pouvais pas obtenir une solution plus courte, car même si cela semble me permettre de me débarrasser de la variable superflous b, vous devez taper "return" deux fois (comme avecreduce()
), et vous ne peut pas simplement renvoyer le résultat de la comparaison directement, car le dernier caractère doit être sauvegardé après la comparaison.@ edc65: C'est une bonne utilisation de l'opérateur virgule pour 87! Je l'ai modifié dans ma réponse pour plus de visibilité.
la source
return
et!b
pour enregistrer un caractère.function i(s){b=0;l='';s.toUpperCase().split('').forEach(function(c){if(c<=l)b=1;l=c});return!b}
function i(s){s.toUpperCase(b=0).split(l='').forEach(function(c){if(c<=l)b=1;l=c});return!b}
function i(s){return!s.toUpperCase().split(l='').some(function(c){return(u=l,l=c)<=u})}
Haskell, 90 octets
Fournit la fonction
f :: String -> Bool
Utilisation (en supposant qu'il soit enregistré en tant que golf.hs).
...
est utilisé pour remplacerghci
les messages de chargement détaillés.Si quelqu'un a une
lowercase
méthode plus courte qu'alors,import Distribution.Simple.Utils
veuillez commenter.la source
map toLower
partirData.Char
delowercase
l
àf
, c'est- à -diref=g.lowercase
(ouf=g.map toLower
si vous passez àtoLower
). Au sein d'g
une comparaison suffit:g l=nub(sort l)==l
.Wolfram Mathematica,
4937 octetsPS Solution plus courte de Martin Büttner:
la source
#⋃#==#&@*Characters@*ToLowerCase
J, 17 octets
Vérifie si la
/:~
chaîne triée en minuscules est égale à-:
la~.
chaîne nub en minuscule .Comme dans J, une "chaîne" de 1 caractère représenté par une chaîne normale (avec des guillemets) est juste un atome de caractère et non une chaîne réelle. (Dans l'exemple ci-dessus, j'ai utilisé
1$'a'
.)la source
MATLAB,
29 à27 octetsPassons maintenant à un one-line qui fait sens en dehors du code-golf.
En tant que fonction anonyme (utiliser comme
o('yourstring')
)Je suppose que cette fonction est assez explicite, car elle se lit comme une publicité dans un journal.
Version précédente (29 octets):
Les entrées doivent être présentées entre les'
marques, par exemple'Potato'
.la source
Brachylog , 3 octets
Essayez-le en ligne!
Le prédicat réussit si l'entrée répond aux exigences décrites et échoue s'il ne le fait pas, qu'il soit imprimé
true.
oufalse.
exécuté en tant que programme.La première version que j'ai créée ne fait pas explicitement référence à l'alphabet:
Brachylog , 4 octets
Essayez-le en ligne!
la source
J, 21 caractères
C'est trop long. L'argument doit avoir un rang
1
, c'est-à-dire qu'il doit s'agir d'une chaîne ou d'un vecteur.tolower y
-y
en minuscule./:~ y
-y
dans l'ordre lexical.~. y
- le nœud dey
, c'est-à-direy
sans les doublons.x ; y
-x
ety
mis dans des boîtes puis concaténés.< y
-y
mettre dans une boîte.x = y
-x
comparé élément par s avecy
.(< y) = (~. y) ; (/:~ y)
- un vecteur indiquant siy
est égal à son numéro et trié lui-même.*/ y
- le produit des éléments dey
, ou sa logique et si les éléments sont des booléens.*/ (< y) = (~. y) ; (/:~ y)
- un booléen indiquant la propriété souhaitée pour les minusculesy
.la source
Julia, 44 octets
Cela crée une fonction anonyme qui prend un seul argument
s
, le convertit en minuscule et le compare à la version unique triée de la chaîne. Il retourne un booléen, ietrue
oufalse
. Si vous voulez le tester, attribuez-le commef=s->...
et ensuite appelezf("PuZ")
, etc.la source
Pure Bash 4.x, 37
Entrée prise en paramètre de ligne de commande. Selon la sémantique standard du shell, le code de sortie 0 signifie vrai (alphabétique) et le code de sortie! = 0 signifie faux (pas alphabétique).
Le printf crée le regex comme dans la solution de @ hsl . La chaîne d'entrée est développée en minuscule et comparée à l'expression régulière.
Réponse précédente:
Bash + coreutils, 52
Solution simple:
la source
C # 6, 18 +
8276 = 94 octetsRequiert (18 octets):
Code (76 octets):
C # 6 aide les lambdas à définir une fonction utile pour le golf.
Version non C # 6:
Code non golfé:
la source
JavaScript (ES6) 54
Convertir en majuscule, puis en tableau et trier. Si pendant le tri deux éléments sont dans le mauvais ordre ou égaux, retourne 0 (falsy) sinon 1 (vérité)
Modifier Raccourcissement thx à @Optimizer (mais encore 2 de plus que la solution mise en œuvre dans @Tamas ES6:
F=s=>[...s.toUpperCase()].every(c=>(u=l,l=c)>u,l='')
)Test dans la console Firefox / FireBug
la source
s=
ne semble pas être nécessaire ...C (44 octets)
f(char*s){return(*s&=95)?f(s+1)>*s?*s:0:96;}
Testez-le ici: http://ideone.com/q1LL3E
Afficher ceci parce que je ne peux pas encore commenter, sinon ce serait une suggestion pour améliorer la réponse C existante car je vole complètement l’idée insensible à la casse de la réponse C existante.
Renvoie 0 si la chaîne n'est pas commandée et une valeur différente de zéro si commandé.
la source
Golang (65 bytes)
Go n’est pas une langue favorable au golf, en plus, je suis nul au golf ...
Exécutez-le ici: http://play.golang.org/p/xXJX8GjDvr
modifier 106-> 102
modifier 102-> 96
modifier 96-> 91
modifier 91-> 87
modifier 87-> 65
J'ai battu la version java, je peux m'arrêter pour aujourd'hui
la source
Java 8 -
90898785 caractèresL'idée ici est d'utiliser une fonction "réduire" qui suit le dernier caractère et "abandonne" lorsqu'elle détecte que la séquence n'est pas strictement ascendante.
joué au golf:
ungolfed:
Exemple:
sortie:
la source
Perl 6, 35 octets
Ceci produit un bloc appelable. si je pouvais simplement supposer que
$_
le mot souhaité est déjà défini, je pourrais supprimer les accolades qui l'entourent et perdre deux octets supplémentaires, mais le seul moyen raisonnable de faire cette hypothèse serait de l'exécuter avec-n
le mot et de le nourrir comme entrée standard. , ce qui ajouterait les deux octets immédiatement.la source
.uc.comb
ne réorganise rien. Par conséquent, si le tableau en majuscules et en cascade est égal au tableau trié en cascade et en cascade, cela signifie qu'il a été démarré dans l'ordre.R , 37 octets
Essayez-le en ligne!
En raison de la différence importante et de la longueur de la réponse R de Michal, cette publication est très différente .
Convertit les lettres en points de code ASCII avec
utf8ToInt
, puis prend le modulo 32 afin que les lettres inférieures et supérieures soient converties en mêmes nombres 1 ... 26. Calcule les différences par paires et vérifie qu'elles sont toutes positives.la source
Perl, 27
La regexp de @ hsl est construite dynamiquement.
Nous pouvons également faire une correspondance inverse: convertir l’entrée en une expression rationnelle:
PuZ
=>.*p.*u.*z.*
puis la faire correspondre à une chaîne de lettres dans l’ordre alphabétique. Résultat - également 27 caractères.la source
k (6 octets)
&
renvoie vrai si les deux arguments sont vrais/
modifie&
pour appliquer "sur" une liste, comme un pli dans les langages fonctionnels>
plus grand que':
modifie>
pour appliquer "each-prior", donc retourne un vecteur de booléens indiquant quels éléments sont plus grands que leurs prédécesseurs_
le rend argument minuscule(
0b
signifie booléen faux)q (13 octets)
q est juste un sucre syntaxique sur k.
all
est défini comme&/
, et inférieur est_
la source
Python, 50 octets
Essayez en ligne ici: http://repl.it/c5Y/2
la source
VBA (161 octets)
Compare la valeur ascii avec la lettre précédente en minuscule, renvoie 0 (faux) lorsque sa valeur est inférieure / égale et quitte la fonction
la source
Python 2 , 43 octets
Essayez-le en ligne!
Place les
<
symboles entre toutes les lettres (converties en minuscules), puiseval
c’est le cas. Les opérateurs de comparaison chaînés de Python sont parfaitement heureux d’évaluer le tout dans une seule et même expression booléenne.la source
Erlang, 51 ans
Utilise un ensemble ordonné (analogue à
java.util.TreeSet
) pour trier les caractères et éliminer les doublons. La nouvelle liste est ensuite comparée à la chaîne d'entrée.Fonction de test:
la source
Java, 96
Assez simple ici. Il suffit de convertir tous les éléments pour qu’ils abaissent et comparent chacun d’entre eux au personnage précédent.
la source