Nach diesem XKCD-Comic gibt es eine Formel, um festzustellen, ob der Altersunterschied in einer Beziehung "gruselig" ist oder nicht. Diese Formel ist definiert als:
(Age/2) + 7
als das Mindestalter von Menschen, die Sie datieren können.
Daher ist eine Beziehung gruselig, wenn eine der Personen in dieser Beziehung jünger als das Mindestalter der anderen ist.
Können Sie angesichts des Alters von zwei Personen ausgeben, ob diese Beziehung gruselig ist oder nicht?
Regeln
Ihr Programm sollte zwei Ganzzahlen als Eingabe verwenden, das Alter beider Personen in der Beziehung. Diese können in jedem vernünftigen Format genommen werden.
Ihr Programm muss dann einen wahrheitsgemäßen oder falschen Wert ausgeben, der beschreibt, ob die Beziehung "gruselig" ist oder nicht (Truthy = Creepy).
- Standardlücken sind nicht erlaubt.
- Dieses Puzzle ist Code Golf, also gewinnt die Antwort mit dem kürzesten Quellcode in Bytes
Testfälle
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
gerundet werden? Wahrscheinlich auf, wenn die genaue Hälfte das Minimum sein soll?17,21
würde einen guten Testfall machen.13, 13 - Creepy
.Antworten:
Gelee , 6 Bytes
Probieren Sie es online!
Ein scheinbar anderer Algorithmus als der des Genossen.
quelle
Python 3 , 26 Bytes
Probieren Sie es online!
Die Eingabe ist eine Liste mit beiden Altersgruppen
quelle
05AB1E ,
86 BytesProbieren Sie es online! oder Alle testen
quelle
2
ist nicht wahr, siehe das .NAND-Tore, 551
Erstellt mit Logisim
Das gleiche Prinzip wie bei meiner anderen Antwort , es werden jedoch 2-Byte-signierte Eingaben verwendet, damit es funktioniert
47, 10000
. Funktioniert für ALLE Testfälle!Dies ist für die gegebenen Testfälle nicht optimal, da 10000 nur mit 15 der 16 Bits ausgedrückt werden kann, aber es funktioniert für jedes Alter im Bereich [-32768, 32768]. Beachten Sie, dass jedes negative Alter zurückkehrt
1
.Eingänge links (keine bestimmte Reihenfolge, 1 Bit oben). Ausgabe unten rechts.
quelle
NAND-Gatter,
274262Original:
Besser: Erstellt mit Logisim
Hierfür werden links zwei Eingänge als 1-Byte-Ganzzahlen mit Vorzeichen verwendet, wobei sich das 1-Bit oben befindet. Die Ausgabe erfolgt unten links. Die Wahrheit und Falschheit hier sollte offensichtlich sein.
Funktioniert mit Ausnahme von allen Testfällen.
47, 10000
Ich denke, dies ist technisch keine gültige Antwort. Die älteste Person in der (zuverlässigen) Aufzeichnung war jedoch 122, sodass 8 Bits (maximal 127) für jedes Szenario funktionieren, das bis zu diesem Zeitpunkt jemals möglich war. Ich werde eine neue Antwort veröffentlichen (oder sollte ich diese bearbeiten?), Wenn ich die 16-Bit-Version fertiggestellt habe.16-Bit-Version ist fertig!
Sie werden einige vertikale Abschnitte der Rennstrecke bemerken. Der erste (von links) bestimmt, welcher Eingang größer ist. Die nächsten beiden sind Multiplexer, die die Eingänge sortieren. Ich füge dann
11111001
im vierten Abschnitt (-7) zu dem kleineren hinzu und vergleiche abschließend das Doppelte mit dem größeren Input. Wenn es weniger ist, ist die Beziehung gruselig. Da ich die Bits auf das Doppelte verschiebe, muss ich das nicht verwendete Bit von berücksichtigenlesser-7
. Wenn dies a ist1
,lesser-7
ist es negativ und der jüngere der beiden ist nicht älter als sechs. Gruselig. Ich beende mit einem ODER-Gatter, also, wenn irgendein Gruseltest zurückkommt1
, tut der gesamte Stromkreis.Wenn Sie genau hinschauen, werden Sie feststellen, dass ich
siebenEin-Konstanten-s verwendet habe(Hardcodierung von11111011
und nach0
). Ich habe dies getan, weil Logisim mindestens einen Wert benötigt, damit ein Logikgatter eine Ausgabe erzeugt. Bei jeder Verwendung einer Konstante stellen jedoch zwei NAND-Gatter1
unabhängig von der Konstanten einen Wert sicher .-12 Tore danke an mich !
quelle
C #, 22 Bytes
quelle
C 29 Bytes
Wie es funktioniert:
#define f(a,b)
Definiert eine Makrofunktionf
, die zwei untypisierte Argumente akzeptiert.a/2+7>b
prüft, ob das erste Alter geteilt durch zwei plus sieben größer ist als das zweite Alter.b/2+7>a
prüft, ob das zweite Alter geteilt durch zwei plus sieben größer ist als das erste Alter.Probieren Sie es online!
quelle
>b
nicht sein<b
age >= min
Sie AND anstelle von OR benötigen, da beide Seiten erfüllen müssen, damit es nicht gruselig wird, Testfall "47, 10000 - Creepy"JavaScript (ES6), 21 Byte
Liefert 0 für nicht gruselig, 1 für gruselig.
quelle
a=>b=>
statt mit(a,b)=>
aufrufenf(40)(40)
.R ,
2625 Bytes-1 Byte danke an @djhurio
Probieren Sie es online!
quelle
Netzhaut , 20 Bytes
Probieren Sie es online!
Die Eingabe erfolgt unärmig mit einem Zeilenvorschub zwischen den beiden Zahlen. Die Ausgabe ist
0
(nicht gruselig) oder1
(gruselig).Erläuterung
Sortieren Sie die beiden Zahlen, damit wir wissen, dass die größere die zweite ist.
Nenne das kleinere
a
und das größere Alterb
. Wir erfassen zuersta-7
in der Gruppe1
. Dann versuchen wir , passen2*(a-7)+1
inb
, was bedeutet ,b >= 2*(a-7)+1
oderb >= 2*(a-7)
oderb/2+7 > a
was das Kriterium für eine gruselige Beziehung.quelle
TI-Basic,
20109 Bytes-10 Bytes anhand einer Liste und eines Teils von Timtechs Vorschlag
-1 Byte mit dem Vorschlag von Lirtosiast
Nimmt eine Liste mit zwei Altersgruppen auf: "{40,42}: prgmNAME"
Gibt 1 für 'gruselig' und 0 für 'nicht gruselig' zurück.
quelle
<
<=
=
!=
>=
>
) automatisch Klammern ?GNU APL 1.2, 23 Bytes
Definiert eine Funktion, die zwei Argumente akzeptiert und 1 ausgibt, wenn sie gruselig ist, und 0, wenn nicht.
Erläuterung
∇
beginnt und endet die FunktionA f B
ist der Funktionsheader; Funktion wird benanntf
und nimmt zwei Argumente,A
undB
(Funktionen in APL kann monadischen sein - ein Argument nehmen - oder Dyade - unter zwei Argumenten)A⌊B
istmin(A,B)
undA⌈B
wirdmax(A,B)
wird APL von rechts nach links ausgewertet, so Klammern benötigt werden richtigen Vorrang , um sicherzustellen ,
Die anderen Operatoren sind selbsterklärend.
Code könnte golffähig sein, ich bin noch neu im Code-Golf.
quelle
f X
then(⌊/X)<7+.5×⌈/X
. IIRC können Sie die neue Zeile zwischen der zweiten und dritten Zeile entfernen.Python 3,
7445 BytesErster Code Golf, wahrscheinlich schrecklich.
29-Byte-Reduzierung durch @Phoenix
quelle
lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1
funktionieren und ist um einiges kürzer.lambda a,b:a/2+7>b or b/2+7>a
. Geben Sie die Last dieser lästigen1
S und0
S auf und nehmen Sie die Macht vonTrue
/ anFalse
!JavaScript (ES6), 27 Byte
Kein Curry (anrufen wie
f(a,b)
stattf(a)(b)
)Wenn
b > a
ja, tauschen Sie die Parameter aus und versuchen Sie es erneut. Andernfalls überprüfen. Durch das Ausführen werden aufgrund des rekursiven Aufrufs keine Bytes gespeichert.quelle
Java, 21 Bytes
Absolut nicht original.
Testen
Probieren Sie es online!
quelle
Python 3, 31 Bytes
lambda a,b:abs(a-b)>min(a,b)-14
Nicht viel kürzer als die anderen Python-Einreichungen, aber ich habe einen etwas anderen Weg gefunden, um auf Gruseligkeit zu prüfen. Ich habe festgestellt, dass der akzeptable Unterschied zwischen den Altersstufen min - 14 beträgt. Dies ergibt sich aus der algebraischen Neuordnung der Formel.
Dadurch kann ich lösen, ohne zwei Konstanten zu benötigen und ohne sowohl max als auch min zu verwenden, anstatt abs (ab) zu verwenden. Aus Golfsicht habe ich nur ein Byte weniger als die Lösung von @ nocturama, aber ich habe eine etwas andere Formel verwendet, um dies zu tun.
quelle
abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False
Dies ist die richtige Antwort, da gemäß (x / 2) + 7 das Mindestalter für 5353/2 + 7 = 26.5 + 7 = 33.5
Excel,
2624 BytesZellformel, die Eingaben als Zahlen aus dem Zellbereich
A1:B1
annimmt und einen booleschen Wert ausgibt, der die Gruseligkeit in der Formelzelle darstelltAlte Version, 26 Bytes
quelle
TI-Basic,
10910 BytesListeneingabe von
Ans
, gibt aus ,1
ob "gruselig" oder0
anders.quelle
Mathematik , 16 Bytes
Probieren Sie es online!
-2 Bytes dank @GregMartin
Richtig für nicht gruselig, falsch für gruselig.
quelle
2
Bytes, indem Sie das Alter als Liste verwenden:Max@#/2+7<Min@#&
SAS, 77 Bytes
quelle
Röda , 16 Bytes
Probieren Sie es online!
Dies ist eine anonyme Funktion, bei der die Eingabe als zwei Literale (kein Array) aus dem Eingabestream übernommen wird.
Erläuterung
quelle
Perl 6 , 15 Bytes
Versuch es
Erweitert
quelle
Kristall ,
4427 Bytes-17 von danieros antwort in ruby.
Probieren Sie es online!
quelle
Python 3 -
3227 BytesKann nicht kommentieren, aber ich habe eine etwas kürzere Antwort als die andere Python 3-Lösung:
-5 danke an @Cyoce!
quelle
lambda *a
Fourier, 37 Bytes
Probieren Sie es auf FourIDE!
Nimmt zwei Zahlen als Eingabe. Wird später Golf spielen.
quelle
PHP, 29 Bytes
druckt 1 für gruselig, nichts für nicht gruselig
Probieren Sie es online!
quelle
Japt , 11 Bytes
Gibt
true
für "gruselig" undfalse
für nicht zurück.Probieren Sie es online aus
Erläuterung
quelle
J 10 Bytes
Ausgänge
1
für nicht gruselig,0
für gruseligErläuterung
quelle
J-uby , 25 Bytes
Rufen Sie gerne an
f^[80,32]
. Gibttrue
für nicht gruselig,false
für gruselig.Erläuterung
quelle
method_missing
führte zu zu viel Komplexität. Dieser Ansatz ist sauber und elegant. Glückwunsch!AWK , 26 Bytes
Probieren Sie es online!
Ausgänge 1 für "Creepy" und 0 für "Not Creepy". Könnte 3 Bytes einsparen, wenn keine Ausgabe als falscher Wert angesehen werden könnte, über:
quelle