Selon ce comic XKCD , il existe une formule pour déterminer si l'écart d'âge dans une relation est "effrayant". Cette formule est définie comme:
(Age/2) + 7
étant l'âge minimum des personnes avec qui vous pouvez sortir.
Par conséquent, une relation est effrayante si l’une des personnes dans ladite relation est plus jeune que l’âge minimum de l’autre.
Étant donné l'âge de deux personnes, pouvez-vous indiquer si cette relation est effrayante ou non?
Règles
Votre programme doit prendre deux nombres entiers en entrée, l’âge des deux personnes dans la relation. Ceux-ci peuvent être pris dans n'importe quel format raisonnable.
Votre programme doit alors sortir une valeur de vérité ou de fausseté décrivant si la relation est "effrayante" (Truthy = Creepy).
- Les failles standard ne sont pas autorisées.
- Ce casse-tête est Code Golf, donc la réponse avec le code source le plus court en octets gagne
Cas de test
40, 40 - Not Creepy
18, 21 - Not Creepy
80, 32 - Creepy
15, 50 - Creepy
47, 10000 - Creepy
37, 38 - Not Creepy
22, 18 - Not Creepy
age/2
être arrondi? Probablement en hausse si la moitié exacte est supposée être le minimum?17,21
ferait un bon cas de test.13, 13 - Creepy
.Réponses:
Gelée , 6 octets
Essayez-le en ligne!
Apparemment algorithme différent de celui de camarade.
la source
Python 3 , 26 octets
Essayez-le en ligne!
L'entrée est une liste avec les deux âges
la source
05AB1E ,
8 à6 octetsEssayez-le en ligne! ou essayez tous les tests
la source
2
n'est pas la vérité, voyez ceci .Portes NAND, 551
Créé avec Logisim
Même principe que mon autre réponse , mais prend des entrées signées sur 2 octets, donc il peut gérer
47, 10000
. Fonctionne pour TOUS les cas de test!Ce n'est pas optimal pour les cas de test donnés, car 10000 peut être exprimé avec seulement 15 bits sur 16, mais cela fonctionne pour tous les âges compris dans l'intervalle [-32768, 32768). Notez que tout âge négatif reviendra
1
.Entrées à gauche (pas d'ordre particulier, 1 bit en haut). Sortie en bas à droite.
la source
Portes NAND,
274262Original:
Mieux: Créé avec Logisim
Cela prend deux entrées à gauche sous forme d'entiers signés sur 1 octet, avec le bit 1 en haut. La sortie est en bas à gauche; la vérité et falsey ici devraient être évidents.
Fonctionne pour tous les cas de test sauf
47, 10000
, alors je suppose que ce n’est techniquement pas une réponse valable. Cependant, la personne la plus âgée sur l'enregistrement (fiable) était de 122, de sorte que 8 bits (maximum 127) fonctionneront pour tous les scénarios possibles jusqu'à présent. Je posterai une nouvelle réponse (ou devrais-je modifier celle-ci?) Lorsque j'aurai terminé la version 16 bits.La version 16 bits est terminée!
Vous remarquerez quelques sections verticales du circuit. Le premier (à gauche) détermine quelle entrée est la plus grande. Les deux suivants sont des multiplexeurs, triant les entrées. J'ajoute ensuite
11111001
(-7) au plus petit dans la quatrième section, et je conclus en comparant deux fois ceci à l'entrée plus grande. Si c'est moins, la relation est effrayante. Puisque je décale les bits à doubler, je dois prendre en compte le bit inutilisé delesser-7
. Si c'est un1
, alorslesser-7
est négatif, et le plus jeune des deux n'a pas plus de six ans. Terrifiant. Je termine avec une porte OU, donc si l’un ou l’autre des tests de fluage revient1
, c’est l’ensemble du circuit.Si vous regardez attentivement, vous verrez que je
septune constantes(hardcoding la11111011
et arrière0
). Je l’ai fait parce que Logisim a besoin d’au moins une valeur pour qu'une porte logique produise une sortie. Cependant, chaque fois qu'une constante est utilisée, deux portes NAND assurent une1
valeur quelle que soit la constante.-12 portes grâce à moi !
la source
C #, 22 octets
la source
C, 29 octets
Comment ça fonctionne:
#define f(a,b)
définit une fonction macrof
qui prend deux arguments non typés.a/2+7>b
vérifie si le premier âge divisé par deux plus sept est supérieur au deuxième âge.b/2+7>a
vérifie si le deuxième âge divisé par deux plus sept est plus grand que le premier âge.Essayez-le en ligne!
la source
>b
non<b
age >= min
, vous avez également besoin de AND, au lieu de OU, puisque les deux parties doivent satisfaire afin que cela ne soit pas effrayant, test case "47, 10000 - Creepy"JavaScript (ES6), 21 octets
Renvoie 0 pour ne pas être effrayant, 1 pour cet effrayant.
la source
a=>b=>
au lieu de(a,b)=>
, appelez avecf(40)(40)
.R ,
2625 octets-1 octet grâce à @djhurio
Essayez-le en ligne!
la source
Rétine , 20 octets
Essayez-le en ligne!
La saisie est unaire avec un saut de ligne entre les deux nombres. La sortie est
0
(pas effrayant) ou1
(effrayant).Explication
Triez les deux nombres, nous savons donc que le plus grand est le deuxième.
Appelez le plus petit
a
et le plus grandb
. Nous capturons d'aborda-7
en groupe1
. Ensuite , nous essayons de correspondre2*(a-7)+1
àb
, ce qui signifieb >= 2*(a-7)+1
oub >= 2*(a-7)
oub/2+7 > a
qui est le critère d'une relation chair de poule.la source
TI-Basic,
20109 octets-10 octets en utilisant une liste et une partie de la suggestion de Timtech
-1 octet en utilisant la suggestion de lirtosiast
Prend une liste de deux âges, "{40,42}: prgmNAME"
Retourne 1 pour 'creepy' et 0 pour 'pas creepy'.
la source
<
<=
=
!=
>=
>
)?GNU APL 1.2, 23 octets
Définit une fonction qui prend deux arguments et imprime 1 si effrayant, 0 sinon.
Explication
∇
commence et finit la fonctionA f B
est l'en-tête de la fonction; fonction est nomméef
et prend deux arguments,A
etB
(les fonctions dans APL peuvent être monadiques - prenant un argument - ou dyadiques - prenant deux arguments)A⌊B
estmin(A,B)
etA⌈B
estmax(A,B)
APL est évalué de droite à gauche, des parenthèses sont donc nécessaires pour garantir la priorité.
Les autres opérateurs s'expliquent d'eux-mêmes.
Le code pourrait être adapté au golf, je suis encore novice en code-golf.
la source
f X
alors(⌊/X)<7+.5×⌈/X
. IIRC, vous pouvez supprimer la nouvelle ligne entre les deuxième et troisième lignes.Python 3,
7445 octetsFirst Code Golf, probablement terrible.
Réduction de 29 octets par @Phoenix
la source
lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1
devrait fonctionner et est beaucoup plus courte.lambda a,b:a/2+7>b or b/2+7>a
. Abandonner le fardeau de ces satanés1
s et0
s et embrasser le pouvoir deTrue
/False
!JavaScript (ES6), 27 octets
Pas de currying (appelez comme
f(a,b)
au lieu def(a)(b)
)Si
b > a
, permutez les paramètres et réessayez. Sinon, vérifiez. Le currying ne sauve aucun octet à cause de l'appel récursif.la source
Java, 21 octets
Absolument pas original.
Essai
Essayez-le en ligne!
la source
Python 3, 31 octets
lambda a,b:abs(a-b)>min(a,b)-14
Pas beaucoup plus court que les autres soumissions Python, mais j’ai trouvé une façon légèrement différente de vérifier la chair de poule. J'ai remarqué que la différence acceptable entre les âges est égale à min - 14 ans. Cela découle de la réorganisation algébrique de la formule.
Cela me permet de résoudre sans avoir besoin de deux constantes, et aussi sans avoir besoin d'utiliser à la fois max et min, au lieu d'utiliser abs (ab). Du point de vue du golf, je n'ai eu qu'un octet de moins que la solution de @ nocturama, mais j'ai utilisé une formule légèrement différente pour le faire.
la source
abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False
Ceci est la réponse correcte, car selon (x / 2) + 7, l'âge minimum pour 53 ans est53/2 + 7 = 26.5 + 7 = 33.5
Excel,
26 à24 octetsFormule de cellule qui prend en entrée des nombres dans la plage de cellules
A1:B1
et génère une valeur booléenne représentant la chair de poule dans la cellule de formuleAncienne version, 26 octets
la source
TI-Basic,
10910 octetsRépertorie les entrées depuis
Ans
, les sorties1
si "effrayant" ou0
autrement.la source
Mathématiques , 16 octets
Essayez-le en ligne!
-2 octets grâce à @GregMartin
Vrai pour pas effrayant, faux pour effrayant.
la source
2
octets en prenant les âges comme une liste:Max@#/2+7<Min@#&
SAS, 77 octets
la source
Röda , 16 octets
Essayez-le en ligne!
Il s'agit d'une fonction anonyme qui prend en entrée deux littéraux (et non un tableau) à partir du flux d'entrée.
Explication
la source
Perl 6 , 15 octets
L'essayer
Étendu
la source
Crystal ,
44 à27 octets-17 de regarder la réponse de daniero dans Ruby.
Essayez-le en ligne!
la source
Python 3 -
3227 octetsImpossible de commenter, mais j'ai eu une réponse un peu plus courte que l'autre solution Python 3:
-5 grâce à @Cyoce!
la source
lambda *a
Fourier, 37 octets
Essayez-le sur FourIDE!
Prend deux nombres en entrée. Will golf plus tard.
la source
PHP, 29 octets
imprime 1 pour creepy, rien pour pas creepy
Essayez-le en ligne!
la source
Japt , 11 octets
Retourne
true
pour "creepy" etfalse
pour pas.Essayez-le en ligne
Explication
la source
J, 10 octets
Sorties
1
pour pas effrayant,0
pour effrayantExplication
la source
J-uby , 25 octets
Appelle comme
f^[80,32]
. Donnetrue
pour pas effrayant,false
pour effrayant.Explication
la source
method_missing
entraînait trop de complexité. Cette approche est propre et élégante. Félicitations!AWK , 26 octets
Essayez-le en ligne!
Sorties 1 pour "Creepy" et 0 pour "Pas Creepy". Pourrait économiser 3 octets si no-output pouvait être considéré comme une valeur de fausseté, via:
la source