Les questions supprimées sur le débordement de pile constituent parfois un excellent matériau pour le golf.
Ecrivez une fonction qui prend un entier non négatif en entrée et renvoie true si tous les chiffres de la représentation en base 10 de ce nombre sont uniques. Exemple:
48778584 -> false
17308459 -> true
Le nombre de caractères inclut uniquement la fonction.
Si vous choisissez de répondre en C ou C ++: pas de macros, pas de comportement indéfini; le comportement défini par l'implémentation et les avertissements du compilateur sont corrects.
Réponses:
Golfscript,
87 caractères:`
- stringifier l'argument..
- cloner deux fois&
- se croiser avec lui-même (supprimer les doublons)=
- vérifier l’égalité.si la fonction doit être nommée (
dix9 caractères ):si un programme suffit (
54 caractères ):la source
Python 2 (28)
(32)Les backticks prennent la représentation sous forme de chaîne. La conversion en un ensemble supprime les doublons et nous vérifions si cela diminue la longueur en comparant à 10 ^ d, ce qui est supérieur à tous les nombres à d chiffres, mais à aucun nombre (d + 1) à chiffres.
Ancien code:
la source
n
pari
f=lambda _:len(`_`)==len(set(`_`))
lambda n:max(map('n'.count,'n'))<2
(les guillemets simples sont des backticks), mais c'est deux caractères plus longs.APL (6)
Une des rares fois où le style tacite est également plus court dans APL.
C'est 8 caractères pour lui donner un nom,
mais ce n'est pas nécessaire de l'utiliser:
la source
Perl, 19 caractères
la source
<>!~/(\d).*\1/
.\d
pour.
.Rebmμ (10 caractères)
Le truc "mushing" de Rebmu est qu'il est insensible à la casse, donc les personnages sont exécutés ensemble. Chaque fois qu'une transition de casse est touchée, cela se scinde au prochain jeton. En utilisant des transitions au lieu de choses du genre CamelCase, le choix unique de commencer par une course majuscule signifie qu'un "mot fixe" est créé. (Bien que les mots définis puissent être utilisés à d'autres fins dans la programmation symbolique, ils sont évalués comme assignations par défaut).
Donc, cela "dissipe" de:
L'espace est nécessaire, car une fois que vous avez commencé une série de séries de cas, vous ne pouvez pas utiliser cette astuce pour obtenir un mot défini après le premier, à moins que vous ne commenciez une nouvelle série. Alors,
e?AtsAuqA
je vous aurais eue? a ts a uq a
... aucune affectation.(Remarque: pour une raison qui peut ne pas être particulièrement bonne, j'ai tendance à préférer repenser les solutions pour qu'il n'y ait pas d'espaces, si le nombre de caractères est égal. Puisque les crochets, les parenthèses et les chaînes se terminent implicitement à un symbole ... nombre de possibilités pour cela.)
Dans tous les cas, lorsque mappé sur le Rebol qu’il abrévie:
Jeter quelques parenthèses pour vous aider à comprendre l'essentiel de l'ordre d'évaluation:
Ainsi, l'opérateur d'égalité de préfixe est appliqué à deux arguments: le premier est le résultat de l'affectation
a
de la version de chaîne de lui-même et le second, du résultat deunique
son exécution sur cette chaîne. Il se trouve que unique vous rendra les éléments dans le même ordre que vous les avez passés ... si unique de "31214" est "3124" par exemple.Exécutez-le avec:
Il y a aussi quelques statistiques et informations de débogage:
Si l'exigence est que vous devez définir une fonction nommée / réutilisable, vous pouvez créer une "fonction A" qui prend implicitement un paramètre nommé a avec
a|
. (Une fonction B serait créée avecb|
et prendrait un paramètre nommé A puis un nommé B). Donc, cela ajouterait cinq autres caractères ... disons que vous appelez la fonction "f""Tu ris! Ils se moquaient d'Einstein! Ou attends ... est-ce qu'ils ont? Je ... ne sais pas."
la source
Reb moo
, mais maintenant je ne sais pas s'il est censé êtreRebum mew
ouReb mew
ou autre chose.Fa|[e? AtsAugA]
commeFalse? SomeGibberish
s
se décompose- t-il vraiment[
dans Nethack?REBmu
c'est probablement mieux. Quoi qu'il en soit, la barbe est serrée ... elle pince. Devinez que vous obtenez ce que vous payez.FRACTRAN -
5338 fractionsUtilise la division pour compter le nombre d’occurrences de chaque chiffre. Appelez en mettant n dans le registre 2 et en mettant le registre 5 à 1, donne la sortie dans le registre 3 (0 si faux, 1 si vrai). Assurez-vous également que le reste de votre programme utilise uniquement des registres> 71.
Edit 25/12/14: Cela fait 7 mois et nous avons depuis reçu Stack Snippets, alors en voici un pour tester le code (en utilisant mon interprète qui pourrait être meilleur ici ).
Remplacez
142857
par un autre numéro. La sortie devrait être3^1
si vrai,1 = 3^0
si faux. Cela prend du temps pour les grands nombres (enfin, c'est FRACTRAN ...).la source
JavaScript - 23 caractères
En tant que fonction (ECMAScript 6):
Ou en prenant une entrée à partir d'une invite (25 caractères)
la source
C #
736059Premier golf pour moi ...
Pourrait enlever un autre personnage en convertissantEt c'est parti ...uint
enint
, mais je préfère prendre la tâche trop littéralement que l'inverse.la source
i => (i + "").Distinct().SequenceEqual(i + "");
+""
appelerToString()
sous le capot.Ruby (24 octets)
Utilisez une expression régulière pour faire correspondre "un caractère, suivi de zéro ou plusieurs caractères, puis du même caractère".
Si les valeurs de vérité ou de fausseté sont acceptées, plutôt que littérales
true
oufalse
alors, nous obtenons 20 caractères:la source
C (87)
Puisque je ne peux pas gagner, je vais chercher l'efficacité.
Code de fonction:
la source
Mathematica,
35 à25 caractères(27 si la fonction nécessite un nom.)
EDIT: 8 personnages sauvés grâce à belisarius!
la source
Unequal @@ IntegerDigits@# &
pourrait faire, je pense≠
comparerait des éléments non adjacents). Merci, cela raccourcit beaucoup!Unequal@@IntegerDigits@#&
est de 25 caractères.R,
53514834 octetsEssayez-le en ligne!
Convertir en chaîne et scinder. Convertir en une table des comptes moins 1, additionner et annulerInspiré par la réponse numérique la plus courante d'Alex et la suggestion de Hugh.Un couple sauvé, grâce à @plannapus Un de plus de @Gregor Et un couple qui en fait une fonction anonyme
Maintenant, avec la bonté regex merveilleuse grâce à @ J.Doe. Ceci recherche n'importe quel caractère dans le nombre qui correspond à lui-même sinon où dans la chaîne. La
grepl
commande retourne une logique qui est ensuite renvoyée. Les expressions rationnelles de style Perl sont définies sur True.la source
paste0
lieu detoString
et enregistrer 2 caractères.paste
place depaste0
pour sauvegarder un caractère supplémentaire.J (9)
Suppose que la valeur à tester est variable
b
(je sais que cela peut être transformé en une fonction, mais je ne sais pas comment . J est déroutant. Toute aide est appréciée)Merci Marinus!Vérifie si la longueur de la représentation de chaîne du nombre avec tous les doublons supprimés est identique à la longueur de la représentation de chaîne normale.
la source
(-:~.)@":
.R (
70,60,53, 52)Merci à tous pour les commentaires utiles! Vos commentaires sont incorporés dans la réponse.
la source
strsplit
pourquoi ne pas forcer x à un personnage utilisantc(x,"")
?f=function(x)all(table(strsplit(c(x,""),"")[[1]])<2)
est 1 caractère plus court :)Mathematica (
2019)(
2221 si la fonction a besoin d'un nom)ou
où | ist entré en tant que [Esc] divise [Esc]
la source
Brachylog , 1 octet
Essayez-le en ligne!
la source
C99, 59 caractères
la source
Groovy (36 caractères)
Testé en utilisant:
la source
0>1
est plus court.!1
plutôt.Haskell:
la source
Data.List
anyway I'd suggestnub
, which removes duplicates from a List.(\x->nub x==x).show
main = interact $ show . ap (==) nub . show
J (8)
Competely sepertae from my previous answer.
la source
R,
6665 charactersSeparate the digits using integer division and modulo, then check if they are duplicates.
Usage:
Or, as @MickyT suggested, for 63 characters:
la source
anyDuplicated
rather thansum
andduplicated
for 2 moreC, 58 bytes
Can keep a tally of up to 7 identical digits before rolling over.
in test program (it's easier to see how it works with the constant in octal)
If you happen to have a large power of 2 handy the constant can be calculated like
f&(1<<30)/7*6
la source
int main(int)
in your answer...Haskell, 34 bytes
Try it online!
la source
Javascript 73 chars
la source
Befunge 98, 17 bytes
This is a non-competing answer because Befunge does not have functions.
Prints a
1
if the number's digits are all unique; otherwise, it just ends.This works by accessing a cell in the Funge space whose
x
coordinate is the ASCII value of the character inputted (takes input character by character) and whosey
coordinate is1
. If the digit has not been seen before, the value of the cell is32
(space character). If that is so, I set the value to 1.As a bonus, this works for non-numbers as well.
la source
PowerShell - 26
la source
Perl 6 (19 bytes)
.comb
splits a string into characters (for example,42.comb
gives"4", "2"
)..uniq
removes all non-unique characters..comb
characters in string (originally I used.chars
, but.comb
is shorter).==
converts lists into number of elements in it, and compares the numbers. When.
is used without object before,$_
which is default function parameter is assumed.{}
are function literals.la source
C, 76
This is no where near winning, but I'll post it anyway just to show an alternative approach.
Prints a new line if false, prints nothing if true.
la source
int main(int, char **)
orint main(void)
.int main(int)
is not valid.main()
is ok then?main(void)
(when used in definition, in declaration it declares a function with unknown parameter list).POSIX sh and egrep (
47,43, 40)!
instead of-z
withtest
- Thanks DigitalTrauma`CODE`
instead of$(CODE)
- Thanks DigitalTraumafold -1
instead ofgrep -o .
1 - Thanks DigitalTrauma.If POSIX compliance is not important
echo PARAM |
can be replaced by<<<PARAM
, reducing the functions length to 37:Usage:
1 The
fold -N
notation is deprecated in some versions offold
.la source
f()(! [ `fold -1<<<$1|sort|uniq -d` ])
down to 38 by my counttest
croaks on it whenuniq -d
returns more than one line. So the shortest non-POSIX version is 40 characters. I know about the[ !
notation, but I am suprised that! [
also works, do you know why that is?Java (
1315957)57 characters:
removed ^ and $ as @n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ suggested
59 characters (works also with negative numbers!):
7978 characters (thanks @n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ ):Use for loop to save a few charachers and use int as a boolean array.
Use & instead of && to save 1 character (It turns out that java allows it).
131 characters (returns true for negative numbers):
with comments:
And answer that is technically correct (character count includes only the function, not global variables), but I think it's cheating, 29 characters:
m[] is boolean array that contains correct answers for all 32-bit integers.
la source
"^.*(.).*\\1.*$"
You can drop^
and$
. They are implied bymatches()
return!
in the shortest answer, you can get to 56 bytes.