De acordo com esta história em quadrinhos do XKCD , existe uma fórmula para determinar se a diferença de idade em um relacionamento é "assustadora". Esta fórmula é definida como:
(Age/2) + 7
sendo a idade mínima das pessoas com quem você pode namorar.
Portanto, um relacionamento é assustador se uma das pessoas desse relacionamento for menor do que a idade mínima da outra.
Dada a idade de duas pessoas, você pode mostrar se esse relacionamento é assustador ou não?
Regras
Seu programa deve receber dois números inteiros como entrada, a idade de ambas as pessoas no relacionamento. Estes podem ser obtidos em qualquer formato razoável.
Seu programa deve gerar um valor verdadeiro ou falso, descrevendo se o relacionamento é ou não "assustador" (Verdade = assustador).
- As brechas padrão não são permitidas.
- Esse quebra-cabeça é o Code Golf, então a resposta com o menor código-fonte em bytes ganha
Casos de teste
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
ser arredondado? Provavelmente, se a metade exata deve ser o mínimo?17,21
seria um bom caso de teste.13, 13 - Creepy
.Respostas:
Gelatina , 6 bytes
Experimente online!
Algoritmo aparentemente diferente do do camarada.
fonte
Python 3 , 26 bytes
Experimente online!
A entrada é uma lista com ambas as idades
fonte
05AB1E ,
86 bytesExperimente online! ou Experimente todos os testes
fonte
2
não é verdade, veja isso .Portões NAND, 551
Criado com o Logisim
Mesmo princípio que minha outra resposta , mas aceita entradas assinadas de 2 bytes, para que possa lidar
47, 10000
. Funciona para TODOS os casos de teste!Isso não é ideal para os casos de teste fornecidos, pois 10000 pode ser expresso com apenas 15 dos 16 bits, mas funciona para todas as idades no intervalo [-32768, 32768). Observe que qualquer idade negativa retornará
1
.Entradas à esquerda (sem ordem específica, 1 bit na parte superior). Saída no canto inferior direito.
fonte
Portas NAND,
274262Original:
Melhor: Criado com o Logisim
Isso leva duas entradas à esquerda como números inteiros assinados de 1 byte, com o 1 bit na parte superior. A saída está no canto inferior esquerdo; a verdade e a falsidade aqui devem ser óbvias.
Funciona para todos os casos de teste, exceto
47, 10000
, então acho que tecnicamente não é uma resposta válida. No entanto, a pessoa mais velha no registro (confiável) era 122, portanto, 8 bits (máximo 127) funcionarão para qualquer cenário possível até este ponto. Vou postar uma nova resposta (ou devo editar esta?) Quando terminar a versão de 16 bits.Versão de 16 bits está pronta!
Você notará algumas seções verticais do circuito. O primeiro (da esquerda) determina qual entrada é maior. Os próximos dois são multiplexadores, classificando as entradas. Em seguida, adicionar
11111001
(-7) para o menor na quarta secção, e concluo comparando duas vezes aqui a entrada maior. Se for menor, o relacionamento é assustador. Como mudo os bits para o dobro, devo levar em consideração o pouco não utilizado delesser-7
. Se este é um1
, entãolesser-7
é negativo, e o mais novo dos dois não tem mais que seis. Arrepiante. Termino com um portão OR, portanto, se um dos testes de fluidez retornar1
, todo o circuito retornará .Se você olhar de perto, verá que usei
seteuma constantes(codificando permanentemente o11111011
e o final0
). Eu fiz isso porque o Logisim requer pelo menos um valor para um portão lógico produzir uma saída. No entanto, cada vez que uma constante é usada, duas portas NAND garantem um1
valor independentemente da constante.-12 portões graças a mim !
fonte
C #, 22 bytes
fonte
C, 29 bytes
Como funciona:
#define f(a,b)
define uma função macrof
que recebe dois argumentos não digitados.a/2+7>b
verifica se a primeira idade dividida por dois mais sete é maior que a segunda idade.b/2+7>a
verifica se a segunda idade dividida por dois mais sete é maior que a primeira idade.Experimente online!
fonte
>b
não<b
age >= min
, também, você precisa de AND em vez de OR, uma vez que ambos os lados precisam satisfazer para que não seja assustador, caso de teste "47, 10000 - Assustador"JavaScript (ES6), 21 bytes
Retorna 0 para não assustador, 1 para assustador.
fonte
a=>b=>
vez de(a,b)=>
, ligue comf(40)(40)
.R ,
26bytes 25-1 byte graças a @djhurio
Experimente online!
fonte
Retina , 20 bytes
Experimente online!
A entrada é unária com um avanço de linha entre os dois números. A saída é
0
(não assustadora) ou1
(assustadora).Explicação
Classifique os dois números, para que saibamos que o maior é o segundo.
Chame a idade menor
a
e a maiorb
. Primeiro capturamosa-7
em grupo1
. Em seguida, tentar igualar2*(a-7)+1
emb
, o que significab >= 2*(a-7)+1
oub >= 2*(a-7)
oub/2+7 > a
o que é o critério para uma relação assustador.fonte
TI-Basic,
20109 bytes-10 bytes usando uma lista e parte da sugestão da Timtech
-1 byte usando a sugestão de lirtosiast
Apresenta uma lista de duas idades, "{40,42}: prgmNAME"
Retorna 1 para 'assustador' e 0 para 'não assustador'.
fonte
<
<=
=
!=
>=
>
)?GNU APL 1.2, 23 bytes
Define uma função que recebe dois argumentos e imprime 1 se assustador, 0 se não.
Explicação
∇
inicia e termina a funçãoA f B
é o cabeçalho da função; A função é nomeadaf
e recebe dois argumentosA
eB
(as funções na APL podem ser monádicas - com um argumento - ou diádicas - com dois argumentos) -A⌊B
sãomin(A,B)
eA⌈B
sãomax(A,B)
APL avaliadas da direita para a esquerda; portanto, são necessários parênteses para garantir a precedência adequada
Os outros operadores são auto-explicativos.
Código pode ser capaz de golfe, eu ainda sou novo em código de golfe.
fonte
f X
então(⌊/X)<7+.5×⌈/X
. IIRC, você pode remover a nova linha entre a segunda e a terceira linhas.Python 3,
7445 bytesPrimeiro código Golf, provavelmente terrível.
Redução de 29 bytes por @ Phoenix
fonte
lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1
deve funcionar e é muito mais curto.lambda a,b:a/2+7>b or b/2+7>a
. Abandonar o fardo daqueles traquinas1
s e0
s e abraçar o poder deTrue
/False
!JavaScript (ES6), 27 bytes
Sem currying (chame como em
f(a,b)
vez def(a)(b)
)Se
b > a
, troque os parâmetros e tente novamente. Caso contrário, verifique. A currying não salva bytes por causa da chamada recursiva.fonte
Java, 21 bytes
Absolutamente não original.
Testando
Experimente online!
fonte
Python 3, 31 bytes
lambda a,b:abs(a-b)>min(a,b)-14
Não é muito mais curto do que os outros envios de python, mas eu encontrei uma maneira um pouco diferente de verificar se há algo estranho. Notei que a diferença aceitável entre as idades é igual a min - 14. Isso decorre da reorganização algébrica da fórmula.
Isso permite que eu resolva sem precisar de duas constantes e também sem precisar usar max e min, em vez de usar abs (ab). Do ponto de vista do golfe, obtive apenas um byte a menos que a solução do @ nocturama, mas usei uma fórmula ligeiramente diferente para isso.
fonte
abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False
Esta é a resposta correta, porque de acordo com (x / 2) + 7, a idade mínima para 53 é53/2 + 7 = 26.5 + 7 = 33.5
Excel,
2624 BytesFórmula de célula que recebe a entrada como números do intervalo de células
A1:B1
e gera um valor booleano que representa a aspereza para a célula da fórmulaVersão antiga, 26 bytes
fonte
TI-Basic,
10910 bytesListar as entradas de
Ans
, saídas,1
se "assustador" ou0
não.fonte
Matemática , 16 bytes
Experimente online!
-2 bytes graças a @GregMartin
Verdadeiro para não assustador, falso para assustador.
fonte
2
bytes tomando as idades como uma lista:Max@#/2+7<Min@#&
SAS, 77 bytes
fonte
Röda , 16 bytes
Experimente online!
Essa é uma função anônima que recebe a entrada como dois literais (não uma matriz) do fluxo de entrada.
Explicação
fonte
Perl 6 , 15 bytes
Tente
Expandido
fonte
Cristal ,
4427 bytes-17 de olhar a resposta de daniero em Ruby.
Experimente online!
fonte
Python
3-3227 bytesNão foi possível comentar, mas recebi uma resposta um pouco mais curta do que a outra solução Python 3:
-5 graças a @Cyoce!
fonte
lambda *a
Fourier, 37 bytes
Experimente no FourIDE!
Toma dois números como entrada. Golf mais tarde.
fonte
PHP, 29 bytes
imprime 1 para assustador, nada para Não assustador
Experimente online!
fonte
Japonês , 11 bytes
Retorna
true
para "assustador" efalse
para não.Experimente online
Explicação
fonte
J, 10 bytes
Saídas
1
para não assustador,0
para assustadorExplicação
fonte
J-uby , 25 bytes
Ligue como
f^[80,32]
. Dátrue
para não assustador,false
para assustador.Explicação
fonte
method_missing
levou a muita complexidade. Essa abordagem é limpa e elegante. Parabéns!AWK , 26 bytes
Experimente online!
Saídas 1 para "Assustador" e 0 para "Não Assustador". Pode salvar 3 bytes se nenhuma saída puder ser considerada um valor falso, via:
fonte