Nous disons qu'une chaîne est non discriminante si chacun des caractères de la chaîne apparaît le même nombre de fois et au moins deux fois.
Exemples
"aa!1 1 !a !1"
est non-discrimination parce que chacun des personnages!
,a
et1
apparaissent trois fois."abbaabb"
n'est pas non discriminant carb
apparaît plus souvent quea
."abc"
n'est pas non plus discriminant car les caractères n'apparaissent pas au moins deux fois.
Tâche
Ecrivez un programme ou une fonction non discriminante qui retourne une valeur de vérité si une chaîne donnée est non discriminante , et une valeur de faux sinon.
Autrement dit, le programme exécuté sur son propre code source devrait renvoyer une valeur de vérité.
Chaque soumission doit pouvoir gérer des chaînes non vides contenant de l' ASCII imprimable , ainsi que tous les caractères figurant dans le code source de la soumission.
Cas de test
Vérité
<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"
Fausseté:
"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"
Réponses:
Brachylog , 10 octets
Essayez-le en ligne!
Explication
la source
Java 8,
198192186174168165160 160 octets (nombre de caractères65)Essayez-le en ligne.
Code utilisé pour vérifier les occurrences des caractères , ce qui a été ma réponse à ce défi .
-5 octets à nouveau à @ OlivierGrégoire en supprimant le commentaire et en semant le désordre. ;)
Ancien 168 octets (nombre de caractères 6), répondez :
Essayez-le en ligne.
Code utilisé pour vérifier les occurrences des caractères sans les commentaires , ce qui a été ma réponse à ce défi .
-6 octets grâce à la suppression de @ OliverGrégoire
<
en échangeant les chèques en>
.Explication du programme de base joué au golf (98 octets):
Essayez-le en ligne.
Certaines choses que j'ai faites pour réduire le nombre de caractères utilisés:
o
,w
,u
,f
,r
ete
ont été choisis sur le but de réutiliser les caractères que nous avions déjà (mais ne dépassant pas 6).2222
est utilisé à la place de256
.e>0&u!=e|u<2
en!(e<2|u==e)|u<2
pour supprimer 6x&
.f
, et nous reviendrons si elle est toujours 0 à la fin (ce qui voulait dire que je pouvais retirer le 6xby
debyte
maintenant que nous utilisonsn
enint
6 fois au lieu de 8).e<2
etu<2
changé pour2>e
et2>u
pour supprimer 6x<
.Ce que j'ai fait pour réduire le nombre de personnages 6 à 5:
int
pourbyte
que la quantitén
utilisée soit 4 au lieu de 6.x[0]
place d'une nouvelle variablef=0
, la quantité=
utilisée est de 5 au lieu de 6.2222
en3333
donc la quantité2
utilisée est 2 au lieu de 6.f
etr
encore une fois, elles ne sont plus 6 non plus.Ce que @ OlivierGrégoire a fait pour se débarrasser du commentaire, et donc du 5x
/
:,i,fe,fi,w;
.s:w:no0r3sswwyyy:
.|2>2
{}
autour des for-boucles et if, et ajout d'un{}
bloc inutilisé .!
pour!!!
.|
pour||
.333
pour+333-3|2
se débarrasser des opérateurs arithmétiques restants+-|
et du2
.!(x[0]>0)
pour!!(0>--x[0])
.la source
<
en>
.Jelly ,
18161210 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Brachylog ,
1412 octetsEssayez-le en ligne!
Explication
Solution alternative à 12 octets qui réutilise
t
au lieu deᵐ
:la source
T-SQL, 320 octets (32 caractères x 10 chacun)
La saisie s'effectue via une table pré-existante
FILL
avec un champ varcharSTEW
, conformément à nos normes IO .Je n'ai jamais été aussi heureux, encore horrifié, par un morceau de code.
Doit être exécuté sur un serveur ou une base de données défini pour un classement sensible à la casse. Il y a 10 caractères différents sur 32, y compris les majuscules et les minuscules
E
(les commandes SQL ne sont pas sensibles à la casse; vous pouvez donc en inverser quelques-unes), les espaces et les tabulations (les tabulations sont représentées par des sauts de ligne dans le code ci-dessus, par souci de lisibilité).J'ai trouvé des moyens d'inclure 10 chacun des autres symboles
+ = ,
dans le code, mais malheureusement<
, je n'ai pas trouvé le moyen de le faire , j'ai donc dû ajouter le caractère de commentaire-
.Voici le code formaté avant de me fourrer dans tout le filler supplémentaire:
La ligne du haut est un CTE récursif qui génère une table numérique
b
que nous joignons à la chaîne source pour la séparer par caractère. Ces caractères sont regroupés et comptés, et l'IIF
instruction renvoie 0 ou 1 selon que la chaîne d'entrée est non discriminante.la source
C (gcc) ,
333168 octetsMerci à @Kevin Cruijssen pour la sauvegarde de 9 octets et à @Laikoni pour la sauvegarde de 45 octets!
Essayez-le en ligne!
C, 333 octets
Même le décompte est non discriminant!
Essayez-le en ligne!
la source
128
pour de222
sorte que le8
peut être abandonné.i
,v
,S
,s
etL
à des personnages qui apparaissent déjà dans les mots - cléschar
,for
etreturn
: essayer en ligne!05AB1E ,
20181614 octetsEssayez-le en ligne!
Le programme est essentiellement divisé en 2 parties, l’objectif de la première partie étant de s’acquitter de la tâche proprement dite et celui de la seconde partie, d’utiliser les mêmes fonctions que la première partie sans modifier le résultat.
Explication (première partie)
Explication (deuxième partie)
la source
{γ€gDË*P≠qq{γ€gDË*P≠
est un autre pour 20;).¢
... bonne idée, mec, je suis heureux de voir que≠
c'était aussi utile que je pensais que c'était peut-être haha!Husk , 14 octets
Essayez-le en ligne!
Explication
Les deux lignes courtes sont des no-ops, car la fonction principale ne les appelle jamais.
la source
m
apparaît également deux fois: sur la première ligne et sur la deuxième ligne. L'explication n'inclut pas les deux lignes courtes car elles n'affectent pas le comportement du programme.Python 2 ,
7569 octetsLa sortie s'effectue via la présence ou l'absence d'une erreur. L'erreur est soit une ValueError (un ou plusieurs caractères n'apparaissent qu'une seule fois) ou un NameError (le nombre de caractères n'est pas égal ).
Essayez-le en ligne!
la source
{{e.dil:-tu,r.dil:-tu,}}
Bon dieu qu'est-ce que c'est?a
et tout a éclaté. Pourriez-vous expliquer plus s'il vous plaît?or
. Je vais ajouter une explication quand je suis devant un ordinateur.Brachylog v2, 8 octets (dans le jeu de caractères de Brachylog)
Essayez-le en ligne!
On dirait qu'il y a eu une guerre de golf sur cette question dans Brachylog, alors j'ai pensé y participer, en économisant quelques octets au lieu de la meilleure réponse.
C'est un programme complet qui prend en entrée une liste de codes de caractères. (Ceci est dû en partie au fait que Brachylog semble présenter des bogues très bizarres liés aux barres obliques inverses dans les chaînes et en partie au fait que la
\
commande ne fonctionne pas sur les listes de chaînes.)Explication
Le
koḅ
à la fin est sans importance;k
aura toujours un élément d'agir sur eto
etḅ
ne peut manquer si on leur donne une liste en entrée.La raison du départ
oḅ
devrait être claire; il partitionne la liste d'entrées par valeur, par exemple[1,2,1,2,4,1]
deviendrait[[1,1,1],[2,2],[4]]
. Pour que chaque caractère apparaisse le même nombre de fois, chacune de ces listes doit avoir la même longueur, c'est-à-dire que la liste résultante est un rectangle. Nous pouvons affirmer cette circularité en utilisant\
, qui transpose également les lignes et les colonnes comme un effet secondaire.Nous avons maintenant une valeur actuelle composée de plusieurs copies du jeu de caractères, par exemple si l'entrée était
[4,2,1,2,4,1]
la valeur actuelle[[1,2,4],[1,2,4]]
. Si nous supprimons une copie, la matrice résultante est toujours rectangulaire, nous pouvons donc la retourner avec\
. Cependant, si la matrice était rectangulaire parce que tous les caractères saisis étaient distincts, la matrice résultante ne comportera plus aucun élément et\
ne traitera pas une matrice "0 × 0" comme rectangulaire (elle échouera plutôt). Sioḅ\k\
efficacement affirme que chaque caractère qui apparaît dans l'entrée apparaît le même nombre de fois, et ce nombre de fois n'est pas 1.C'est toute la fonctionnalité de notre programme (en tant que programme complet, nous obtenons
true
si aucun échec d'assertion ne s'est produit,false
si certains l'ont fait). Cependant, nous devons obéir à la restriction de mise en page source, alors j’en ai ajouté un supplémentairekoḅ
qui n’a aucun but, mais qui ne peut pas échouer (contrairement à ce\
qui se passeo
et nous nous ferons unḅ
plaisir d’agir sur des listes vides).la source
Python 2 ,
8480 octetsEssayez-le en ligne!
la source
JavaScript (Node.js) ,
144...10096 octetsEssayez-le en ligne!
24 personnages différents * 6 fois chacun28 personnages différents * 5 fois chacun27 personnages différents * 5 fois chacun27 personnages différents * 4 fois chacun26 personnages différents * 4 fois chacun25 personnages différents * 4 fois chacun24 personnages différents * 4 fois chacun
Explication
la source
PowerShell , 104 octets
Essayez-le en ligne!
C'était très amusant de jouer au golf. La limite était
$
, nous avons besoin d'au moins quatre (un pour l'entrée$args
, un pour assigner le résultat du calcul$qe
, un pour vérifier le dernier caractère$qe[-1]
et un pour vérifier le premier caractère$qe[0]
, donc c'était le nombre maximum de caractères de travail.À partir de là, il fallait jouer au golf (et non au golf, comme si on avait un nom de variable à deux lettres) pour que le programme soit bien divisible par quatre. Notez que nous avons un petit commentaire (tout ce qui suit le
#
) pour prendre en compte certains éléments manquants, mais j'ai essayé de garder le commentaire le plus petit possible.la source
Haskell,
907572 octetsChaque personnage apparaît 6 fois. La chaîne d'entrée est considérée comme une liste de singleton .
Essayez-le en ligne!
Pour référence, anciennes versions:
75 octets, chaque caractère 5 fois
Essayez-le en ligne!
90 octets, chaque caractère 3 fois:
Essayez-le en ligne!
la source
Python 2 ,
1081049288 octets-12 octets grâce à Rod
-4 octets grâce à Kevin Cruijssen
Essayez-le en ligne!
la source
s=input();c=s.count;print[all(c(s[[]>[1]])>=c(o)>1. for o in s)];aaafffillpprrtuu=1.>1.;
88 octets en se débarrassant du commentaire.aaabb
semble céderTrue
MATL , 12 octets
L'entrée est une chaîne entre guillemets simples. Les guillemets simples dans la chaîne sont échappés par la duplication.
La sortie est une matrice non vide, ce qui est vrai si elle ne contient pas de zéros et falsifiée si elle contient au moins un zéro.
Essayez-le en ligne! Ou vérifiez tous les cas de test , y compris le test standard vérité / fausseté pour plus de commodité.
Comment ça fonctionne
Les déclarations marquées avec
(*)
ne sont ni nécessaires ni nuisibles et ont été incluses uniquement pour rendre le code source non discriminant.la source
Perl 5 ,
-p
57 octetsChaque personnage apparaît 3 fois. Un seul
1
ne fait rien12 octets ajoutés à une solution de base de 45 caractères à effectuer de manière non discriminante
Essayez-le en ligne!
la source
R , 90 octets
Essayez-le en ligne!
Sorties
TRUE
pour une chaîne non discriminante etFALSE
pour une chaîne discriminante. J'ai écrit beaucoup de codes laids pour les défis sur ce site, mais je pense que c'est le plus laid jusqu'à présent.45 caractères, utilisés deux fois chacun (dont quelques-uns dans un commentaire). La meilleure réponse précédente était de 116 octets , avec 29 caractères utilisés 4 fois chacun; Je poste ceci séparément car il est substantiellement différent.
Le code est équivalent à
qui convertit l’entrée en un vecteur d’entiers, calcule un tableau
y
de contingence des valeurs, puis vérifie que tous les comptes de ce tableau sont égaux au premier compte et que le premier compte est supérieur à 1.La difficulté initiale consistait à n'utiliser que 2 paires de crochets. Ceci est réalisé en redéfinissant les fonctions unaires
!
et?
d'êtreutf8ToInt
etprod
respectivement. (Je ne peux pas utiliserall
parce que j'ai besoin dea
). Il y a quatre missions: deux avec=
et deux avec<-
. Cela signifie que le test d'égalité entrey
etz
ne peut pas utilisery==z
niy-z
;y%in%z
vient à la rescousse.La définition de ces fonctions utilise toutes les citations possibles: deux guillemets doubles, deux guillemets simples, et j'aurai besoin des deux guillemets du paragraphe suivant. J'ai donc dû recourir à la
readLines()
place descan(,"")
. (Les autres options, telles quescan(,letters)
ouscan(,month.abb)
utilisent toutes un précieuxt
que je ne pouvais pas épargner.)À ce stade, j'avais la plupart des blocs de construction:
utf8ToInt
,prod
,table
,readLines
,%in%
. Trois personnages apparaissent trois fois dans ces noms:ent
. Tout d’abord, j’ai découvert que celatable(foo)
revenait àxtabs(~foo)
sauver le fichiere
. Je peux sauver len
ett
avec le code hexadécimal / octal astuce ; la solution la plus risquée est d’utiliseru\164f8ToI\x6Et
(en backticks) pourutf8ToInt
.la source
NA
n’est pas considéré comme une valeur de vérité (dans R, si (NA) x sinon, y cause une erreur, de mêmeNA
ni vérité ni falsey )Brachylog , 18 octets
Essayez-le en ligne!
Malheureusement, je ne peux pas supprimer les sauts de ligne, car
ḅ
un certain nombre de fois déclenche un échec.la source
Ruby ,
8778 octets26 caractères répétés 3 fois chacun
Essayez-le en ligne!
la source
gets
et;
. De toute façon, c'est plus court comme un lambdaR,
132116 octetsIl ne contient pas non plus de commentaires, ni de chaînes superflues, bien que ce soit probablement la seule fois où j'appelle une fonction dans le code golf
crudcardounenforceableuploads
.Il y a probablement une excellente anagramme quelque part pour le nom de la fonction!Merci à John Dvorak pour nous avoir signalé un joli solveur d’anagrammes, que j’avais utilisé pour le nom.Table de caractères:
exemples:
la source
>
s en inversant la comparaison avecf
. Aussi peut utiliser=
au lieu de<<-
.strsplit
est probablement inévitable cependant, qui est la source de la plupart des autres personnages.utf8ToInt
au lieu destrsplit
, mais ne savez pas si cela vous aidera. Peut-être aussi inclure un lien vers TIO?.
semble être superflu.BASH 144 octets
Cette ligne de code prend une chaîne stdin en entrée. "grep -o." met chaque caractère sur une nouvelle ligne. "uniq -c" compte l'utilisation de chaque responsable. Le script awk crée un tableau avec chaque utilisation en tant qu'élément différent et renvoie true lorsqu'il n'y a qu'un index de tableau et que la valeur est au moins égale à 2. Chaque caractère est utilisé 4 fois. Cette source renvoie donc true
la source
Stax ,
262418 octetsEssayez-le en ligne!
La solution la plus courte à ce jour qui utilise uniquement des fichiers ASCII imprimablesBattus par MATL.J'imagine que j'abordais le problème de la mauvaise façon. Répéter un bloc de travail n'est ni amusant ni intéressant. Maintenant au moins ça a l'air mieux ...
Explication
:u{m*
produit des déchets qui n’affectent pas la sortie.la source
#
et deux:
s, avez-vous lu ma réponse à la deuxième ligne? Avez-vous juste ignoré le premier paragraphe de mon "Explication"?Pip , 22 octets
Essayez-le en ligne!
Explication
Chaque personnage apparaît deux fois.
Version alternative à 22 octets avec moins de no-ops:
la source
SmileBASIC,
164152148140 octets35 personnages différents, répétés 4 fois chacun.
Aucun commentaire n'a été utilisé (mais l'expression après
neXT
n'est jamais réellement évaluée)Script pour vérifier les réponses:
Afficher l'extrait de code
la source
Retina 0.8.2 ,
16890 octetsLa sortie sera vide si faux ou non vide si vrai.
Essayez-le en ligne
Programme principal (39 octets)
Explication
L'ensemble du programme de base est dans une boucle silencieuse. La première étape trie les entrées. La deuxième étape imprimera la chaîne en cours si elle se compose de paires successives de caractères différents. La troisième étape supprime la dernière occurrence de chaque caractère (en supprimant un de chaque caractère de la chaîne).
À propos de la malbouffe en haut: l'ordre est important. En plus de devoir être valide du point de vue de la syntaxe, un point-virgule doit figurer après les astérisques et avant les backticks, tant qu'il
*
est dans la chaîne de configuration, pour ne pas être imprimé.la source
CoffeeScript 1 ,
969390 octetsEssayez-le en ligne!
Commencé à partir de ma réponse ES6 mais retourné à utiliser
Array.every
.323130 jetons @ 3 chacunla source
Pyth, 30 octets
Premiers espaces nécessaires.
Essayez-le en ligne!
Le programme actuel est juste
&q1lJ{hMrSz8<1hJ
. Je viens"&8<MQSlqr{"
de préparer la chaîne pour la rendre non discriminante. Mais pour que la chaîne ne s'imprime pas elle-même, j'ai dû ajouter un espace, donc j'ai ajouté 2 espaces.length_encode
here (r <any> 8
) prend une séquence et affiche la longueur de chaque passage du même caractère, ex."aaabbcc"
devient[[3, "a"], [2, "b"], [2, "c"]]
.Donc, cela prend l’entrée, le trie pour le mettre en longueur, et prend le premier élément de chaque liste dans la liste résultante (par exemple, l’exemple précédent deviendrait
[3, 2, 2]
). Cela donne le nombre de fois où il y a des caractères. Ensuite, il est dédupliqué (l’exemple précédent deviendrait[3, 2]
), et J est réglé sur cela.Ensuite, il vérifie si la longueur est 1, c'est-à-dire qu'il n'y a qu'un seul nombre de fois qu'un caractère se produit, et si c'est> 1, c'est-à-dire> = 2.
Il se peut qu’il y ait une fonction intégrée à remplacer
rSz8
ou à laquellehMrSz8
je ne parviens pas.la source
C (gcc) , 153 octets
Essayez-le en ligne!
Retourne l'adresse de la chaîne en tant que valeur de vérité et zéro en tant que falsie.
la source
Perl 6 ,
5857 octetsEssayez-le en ligne!
Il s'avère que la version à trois caractères est légèrement plus courte que celle à deux caractères.
la source