Según este cómic de XKCD , hay una fórmula para determinar si la brecha de edad en una relación es "espeluznante". Esta fórmula se define como:
(Age/2) + 7
siendo la edad mínima de las personas con las que puedes salir.
Por lo tanto, una relación es espeluznante si alguna de las personas en dicha relación es más joven que la edad mínima de la otra.
Dada la edad de dos personas, ¿puede indicar si esa relación es espeluznante o no?
Reglas
Su programa debe tomar dos enteros como entrada, la edad de ambas personas en la relación. Estos se pueden tomar en cualquier formato razonable.
Su programa debe generar un valor verdadero o falso que describa si la relación es "espeluznante" (Verdad = Espeluznante).
- Las lagunas estándar no están permitidas.
- Este rompecabezas es Code Golf, por lo que gana la respuesta con el código fuente más corto en bytes
Casos de prueba
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
redondear? ¿Probablemente si la mitad exacta es la mínima?17,21
Sería un buen caso de prueba.13, 13 - Creepy
.Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Algoritmo aparentemente diferente al del camarada.
fuente
Python 3 , 26 bytes
Pruébalo en línea!
La entrada es una lista con ambas edades.
fuente
05AB1E ,
86 bytesPruébalo en línea! o Prueba todas las pruebas
fuente
2
no es sincero, mira esto .Puertas NAND, 551
Creado con Logisim
El mismo principio que mi otra respuesta , pero toma entradas firmadas de 2 bytes, por lo que puede manejar
47, 10000
. ¡Funciona para TODOS los casos de prueba!Esto no es óptimo para los casos de prueba dados, ya que 10000 se puede expresar con solo 15 de los 16 bits, pero funciona para cualquier edad en el rango [-32768, 32768). Tenga en cuenta que cualquier edad negativa volverá
1
.Entradas a la izquierda (sin orden particular, 1 bit en la parte superior). Salida en la parte inferior derecha.
fuente
Puertas NAND,
274262Original:
Mejor: creado con Logisim
Esto toma dos entradas a la izquierda como enteros con signo de 1 byte, con 1 bit en la parte superior. La salida está en la esquina inferior izquierda; Lo verdadero y lo falso aquí debería ser obvio.
Funciona para todos los casos de prueba, excepto
47, 10000
, así que supongo que técnicamente no es una respuesta válida. Sin embargo, la persona más vieja en el registro (confiable) era 122, por lo que 8 bits (máximo 127) funcionarán para cualquier escenario posible hasta este punto. Publicaré una nueva respuesta (¿o debería editar esta?) Cuando termine la versión de 16 bits.¡La versión de 16 bits está lista!
Notarás algunas secciones verticales del circuito. El primero (desde la izquierda) determina qué entrada es mayor. Los siguientes dos son multiplexores, clasificando las entradas. Luego agrego
11111001
(-7) al menor en la cuarta sección, y concluyo comparando dos veces esto con el mayor aporte. Si es menos, la relación es espeluznante. Como cambio los bits al doble, debo tener en cuenta el bit no utilizadolesser-7
. Si esto es a1
, entonceslesser-7
es negativo, y el menor de los dos no tiene más de seis años. Siniestro. Termino con una compuerta OR, por lo que si cualquiera de las pruebas de espesura regresa1
, todo el circuito lo hace.Si se mira de cerca, verá que he utilizado
sieteUna constantes(codificando el11111011
importantes y el descenso0
). Hice esto porque Logisim requiere al menos un valor para una puerta lógica para producir una salida. Sin embargo, cada vez que se usa una constante, dos compuertas NAND aseguran un1
valor independientemente de la constante.-12 puertas gracias a mí !
fuente
C #, 22 bytes
fuente
C, 29 bytes
Cómo funciona:
#define f(a,b)
define una función macrof
que toma dos argumentos sin tipo.a/2+7>b
comprueba si la primera edad dividida entre dos más siete es mayor que la segunda edad.b/2+7>a
comprueba si la segunda edad dividida entre dos más siete es mayor que la primera edad.Pruébalo en línea!
fuente
>b
no<b
age >= min
, también necesita Y en lugar de OR, ya que ambas partes deben cumplir para que no sea espeluznante, el caso de prueba "47, 10000 - Creepy"JavaScript (ES6), 21 bytes
Devuelve 0 para no espeluznante, 1 para espeluznante.
fuente
a=>b=>
lugar de(a,b)=>
, llame conf(40)(40)
.R ,
2625 bytes-1 byte gracias a @djhurio
Pruébalo en línea!
fuente
Retina , 20 bytes
Pruébalo en línea!
La entrada está en unario con un salto de línea entre los dos números. La salida es
0
(no espeluznante) o1
(espeluznante).Explicación
Ordene los dos números, para que sepamos que el más grande es el segundo.
Llame la edad más pequeña
a
y la edad más grandeb
. Primero capturamosa-7
en grupo1
. Entonces tratamos de coincidir2*(a-7)+1
enb
, lo que significab >= 2*(a-7)+1
ob >= 2*(a-7)
, ob/2+7 > a
que es el criterio para una relación espeluznante.fuente
TI-Basic,
20109 bytes-10 bytes usando una lista y parte de la sugerencia de Timtech
-1 byte usando la sugerencia de lirtosiast
Toma una lista de dos edades, "{40,42}: prgmNAME"
Devuelve 1 para 'espeluznante' y 0 para 'no espeluznante'.
fuente
<
<=
=
!=
>=
>
)?GNU APL 1.2, 23 bytes
Define una función que toma dos argumentos e imprime 1 si es espeluznante, 0 si no.
Explicación
∇
comienza y termina la funciónA f B
es el encabezado de la función; La función se nombraf
y toma dos argumentos,A
yB
(las funciones en APL pueden ser monádicas - tomar un argumento - o diádicas - tomar dos argumentos)A⌊B
esmin(A,B)
yA⌈B
esmax(A,B)
APL se evalúa de derecha a izquierda, por lo que se necesitan paréntesis para garantizar una precedencia adecuada
Los otros operadores se explican por sí mismos.
El código podría ser apto para el golf, todavía soy nuevo en el código del golf.
fuente
f X
entonces(⌊/X)<7+.5×⌈/X
. IIRC puede eliminar la nueva línea entre la segunda y la tercera línea.Python 3,
7445 bytesPrimer código de golf, probablemente terrible.
Reducción de 29 bytes por @ Phoenix
fuente
lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1
debería funcionar y es mucho más corto.lambda a,b:a/2+7>b or b/2+7>a
. Abandonar la carga de esos molestos1
s y0
s y abrazar el poder deTrue
/False
!JavaScript (ES6), 27 bytes
Sin curry (llame como en
f(a,b)
lugar def(a)(b)
)Si
b > a
, intercambie parámetros y vuelva a intentarlo. De lo contrario, verifique. El curry no guarda ningún byte debido a la llamada recursiva.fuente
Java, 21 bytes
Absolutamente no original.
Pruebas
Pruébalo en línea!
fuente
Python 3, 31 bytes
lambda a,b:abs(a-b)>min(a,b)-14
No mucho más corto que las otras presentaciones de Python, pero encontré una forma ligeramente diferente de verificar si hay escalofríos. Noté que la diferencia aceptable entre edades es igual a min - 14. Esto se deduce de reorganizar algebraicamente la fórmula.
Esto me permitió resolver sin necesidad de dos constantes, y también sin necesidad de usar tanto max como min, en lugar de usar abs (ab). Desde la perspectiva del golf, solo obtuve un byte menos que la solución de @nocturama, pero usé una fórmula ligeramente diferente para hacerlo.
fuente
abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False
Esta es la respuesta correcta, porque de acuerdo con (x / 2) + 7, la edad mínima para 53 es53/2 + 7 = 26.5 + 7 = 33.5
Excel,
2624 bytesFórmula de celda que toma la entrada como números del rango de celda
A1:B1
y genera un valor booleano que representa la espesura a la celda de fórmulaVersión antigua, 26 bytes
fuente
TI-Basic,
10910 bytesLista de entrada de
Ans
, salidas1
si es "espeluznante" o de0
otra manera.fuente
Matemáticas , 16 bytes
Pruébalo en línea!
-2 bytes gracias a @GregMartin
Verdadero para no espeluznante, falso para espeluznante.
fuente
2
bytes mediante la adopción de las edades como una lista:Max@#/2+7<Min@#&
SAS, 77 bytes
fuente
Röda , 16 bytes
Pruébalo en línea!
Esta es una función anónima que toma la entrada como dos literales (no una matriz) de la secuencia de entrada.
Explicación
fuente
Perl 6 , 15 bytes
Intentalo
Expandido
fuente
Cristal ,
4427 bytes-17 de mirar la respuesta de daniero en Ruby.
Pruébalo en línea!
fuente
Python 3 -
3227 bytesNo puedo comentar, pero obtuve una respuesta un poco más corta que la otra solución de Python 3:
-5 gracias a @Cyoce!
fuente
lambda *a
Fourier, 37 bytes
Pruébalo en FourIDE!
Toma dos números como entrada. Jugará golf más tarde.
fuente
PHP, 29 bytes
imprime 1 para espeluznante, nada para no espeluznante
Pruébalo en línea!
fuente
Japt , 11 bytes
Devuelve
true
para "espeluznante" yfalse
para no.Pruébalo en línea
Explicación
fuente
J, 10 bytes
Salidas
1
para no espeluznante,0
para espeluznanteExplicación
fuente
J-uby , 25 bytes
Llama como
f^[80,32]
. Datrue
por no espeluznante,false
por espeluznante.Explicación
fuente
method_missing
llevó a demasiada complejidad. Este enfoque es limpio y elegante. Felicidades!AWK , 26 bytes
Pruébalo en línea!
Salidas 1 para "Creepy" y 0 para "Not Creepy". Podría ahorrar 3 bytes si no se puede considerar una salida como un valor falso, a través de:
fuente