Avec une liste d’entiers positifs, indiquez si chaque paire d’entiers adjacents partage un facteur premier. En d'autres termes, la sortie de vérité si et seulement si aucun deux entiers voisins de la liste ne sont co-premiers.
En d’autres termes encore: à partir d’une liste d’entiers positifs [a 1 a 2 … a n ] , indiquer si
gcd (a 1 , a 2 )> 1 && gcd (a 2 , a 3 )> 1 &&… && gcd (a n − 1 , a n )> 1.
La liste contiendra toujours au moins deux éléments (n ≥ 2).
Toutefois…
Ce défi est également à source restreinte : les points de code dans votre réponse (quelle que soit la page de code dans laquelle il se trouve) doivent satisfaire à la condition recherchée par votre programme.
Par exemple, print 2
est un programme valide. En tant que liste de points de code Unicode, il s'agit de [112 114 105 110 116 32 50] , qui remplit cette condition: 112 et 114 partagent un facteur 2 ; et 114 et 105 partagent un facteur de 3 , etc.
Cependant, nemain
peut pas se produire dans un programme valide (désolé!), Car les points de code Unicode de m
et a
, à savoir 109 et 97 , sont coprimes. (Heureusement, votre soumission ne doit pas être un programme complet!)
Votre programme n'est pas autorisé à contenir le code 0.
Cas de test
Vérité
[6 21] -> 1
[502 230 524 618 996] -> 1
[314 112 938 792 309] -> 1
[666 642 658 642 849 675 910 328 320] -> 1
[922 614 530 660 438 854 861 357 477] -> 1
Fausseté:
[6 7] -> 0
[629 474 502 133 138] -> 0
[420 679 719 475 624] -> 0
[515 850 726 324 764 555 752 888 467] -> 0
[946 423 427 507 899 812 786 576 844] -> 0
C'est code-golf : le code le plus court en octets gagne.
%)+/5;=CGIOSYaegkmq\DEL
.print 2
était valide, mais);=ae
être premier est vraiment difficile, je ne pensais pas que ... Je me demande si quelque chose comme Haskell peut rivaliser?Réponses:
MATL , 14 octets
Ceci produit un vecteur colonne non vide de nombres non nuls comme vérité, ou un vecteur contenant au moins une entrée zéro comme faux.
Essayez-le en ligne!
Vérifier tous les cas de test . Le code de pied de page contient une
if
branche permettant de tester vérité / fausseté.Puisque MATL utilise ASCII, le code source est codé comme suit:
qui répond à l'exigence .
Explication
la source
Haskell ,
103 à100 octetsMODIFIER:
d<-fz
garde pour fusionner et raccourcir les deux dernières lignes.f
est la fonction principale, qui prend une liste d’entiers et retourne unBool
.Notez que les deux premiers caractères
ԁ
(uniquement) sont des caractères cyrilliques (Komi) Unicode et qu’il y a un caractère de tabulation avant le premier.Essayez-le en ligne! ou le tester sur lui-même.
Comment ça marche
f
est la fonction principale. Tout ce qu’il fait est d’envelopper son argumentԁ
dans une liste de singleton (parce que la valeur ASCII primordiale de)
rend les parenthèses beaucoup plus difficiles à utiliser que les crochets) et d’appelerzb
avec cela et un argument factice (la fonction Haskellid
a justement les bons caractères ici).=]
est impossible d' obtenir le même caractère en plus des deux avec l'ASCII ordinaire. Par conséquent, l'argument est nommé avec le caractère Unicode à 2 octetsCYRILLIC SMALL LETTER KOMI DE (ԁ)
, valeur du point de code3*7*61=U+0501
, qui convient à tous ceux et à[
.f fz|bf<-fz=zb[bf]fz
.zb
prend deux arguments, une liste singleton dont l’élément est la liste réelle des nombres sur lesquels on fait la récurrence, et un argument facticefz
n’est nécessaire que pour obtenir unz
avant la fonction de=
s.z
est appelée avec les deux premiers (nommésh
etp
), et si cela retourneTrue
,zb
récurrente à la finp:l
de la liste.zb
retourneTrue
. Comme il=
doit être suivi par le caractèrez
, le moyen le plus simple consiste à utiliser un appel de laz
fonction connue pour son retourTrue
.z
prend deux arguments et calcule récursivement son plus grand diviseur commun en utilisant la soustraction (toute autre division pertinente ou fonction gcd n’est pas disponible), ce qui retourneTrue
si elle est supérieure à un.0
, le second argument étant le gcd. Sur cette ligne, le deuxième argument est également nomméz
. Le caractère1
est maladroit ici, doncz^0
est utilisé pour obtenir le numéro un.f
est plus petit que le secondfz
, ils sont échangés etz
récursifs.z
répète (en échangeant également les arguments, bien que ce soit juste pour éviter les parenthèses.)la source
05AB1E , 8 octets
Code
Utilise le codage 05AB1E , ce qui nous donne la liste suivante de points de code:
Essayez-le en ligne! ou Vérifiez le code source!
Explication
Étant donné que l'opérateur gcd (
¿
) a un point de code principal, je devais rechercher d'autres moyens de vérifier la coprimalité:la source
Ò
finirf
?Coque , 8 octets
Pour les entrées Truthy, il renvoie un entier positif, pour Falsy, il renvoie 0
Essayez-le en ligne! et testé sur ses propres points de code
Utilise la page de code de Husk
Explication
la source
Ṡ
? Je le vois aussi dans la documentation dans la colonne "type" de la page des commandes et je ne comprends pas ce que je veux dire. Je veux donc le rechercher pour que je puisse l'apprendre.Ṡ
dans la syntaxe de Haskell. Il traduit approximativementṠ(f,g,x) = f(g(x),x)
dans des langues plus courantes.`Ṡ g f x = Ṡ f g x = f (g x) x
Japt ,
87 octetsTestez-le en ligne!
Points de code:
Explication
la source
Gelée ,
11 à9 octetsEnregistré 2 octets grâce à @ Jonathan Allan .
Essayez-le en ligne!
La gelée a sa propre page de code et les points de code de chaque caractère sont
Ceci teste les numéros non coprimes en vérifiant si
lcm(a, b) != a*b
. Il pourrait y avoir une solution plus courte car je viens de filtrer les caractères ayant même des points de code.Explication
la source
,
est même si vous pouvez faireæln,P¥ð2\
pour deux de moins. Edit: J'ai laissé tomber la fuiteP
, réduisez-le de moins: p)TI-BASIC, 38 octets
TI-BASIC est segmenté en jetons d'un ou deux octets, comme indiqué ici .
Les parties les plus délicates de cette solution étaient:
Le jeton de virgule est un nombre premier (43), ce qui m'oblige à l'entourer de multiples de 43 (dans ce cas, le jeton V, qui est 86).
Le gcd (le jeton est un grand nombre premier (47881), ce qui signifie qu'il ne peut pas être utilisé du tout.
Les jetons pour ce programme sortent à:
Explication
la source
Pyth , 15 octets
Essayez-le ici ou consultez Test Suite.
C’est un effort de collaboration entre Erik the Outgolfer et M. Xcoder . Retourne une valeur incohérente (liste non vide) pour la vérité et la liste vide pour la fausseté.
Valeurs ASCII
Quelle part des facteurs suivants:
Explication
Sans l' exigence de source restreinte , il s'agirait d'une version à
7octets 5 accomplissant la même tâche (-2 grâce à FryAmTheEggman ):Explication
la source
Q
s à la fin?.b
a des arités variables, l'utilisation d'une entrée implicite signifie qu'il choisira le plus bas (1) au lieu de ce qu'il était alors prévu (2).