Według tego komiksu XKCD istnieje formuła określająca, czy różnica wieku w związku jest „przerażająca”. Ta formuła jest zdefiniowana jako:
(Age/2) + 7
jest to minimalny wiek osób, z którymi możesz się umawiać.
Dlatego związek jest przerażający, jeśli jedna z osób we wspomnianym związku jest młodsza niż minimalny wiek drugiej osoby.
Biorąc pod uwagę wiek dwóch osób, czy potrafisz określić, czy ten związek jest przerażający?
Zasady
Twój program powinien przyjąć dwie liczby całkowite, wiek obu osób w związku. Można je pobrać w dowolnym rozsądnym formacie.
Twój program musi następnie wypisać wartość prawdy lub fałszu opisującą, czy relacja jest „przerażająca” (Truthy = przerażająca).
- Standardowe luki są niedozwolone.
- Ta łamigłówka to Code Golf, więc wygrywa odpowiedź z najkrótszym kodem źródłowym w bajtach
Przypadki testowe
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
zaokrąglić? Prawdopodobnie w górę, jeśli dokładna połowa ma być minimum?17,21
zrobiłby dobry przypadek testowy.13, 13 - Creepy
.Odpowiedzi:
Galaretka , 6 bajtów
Wypróbuj online!
Pozornie inny algorytm niż towarzysz.
źródło
Python 3 , 26 bajtów
Wypróbuj online!
Dane wejściowe to lista dla obu grup wiekowych
źródło
05AB1E ,
86 bajtówWypróbuj online! lub Wypróbuj cały test
źródło
2
nie jest prawdą, zobacz to .Bramy NAND, 551
Utworzono za pomocą Logisim
Ta sama zasada, co w mojej innej odpowiedzi , ale pobiera 2-bajtowe podpisane dane wejściowe, więc może to obsłużyć
47, 10000
. Działa dla WSZYSTKICH przypadków testowych!Nie jest to optymalne dla danych przypadków testowych, ponieważ 10000 może być wyrażone tylko 15 z 16 bitów, ale działa w każdym wieku w zakresie [-32768, 32768). Pamiętaj, że każdy ujemny wiek powróci
1
.Wejścia po lewej stronie (brak określonej kolejności, 1 bit na górze). Wyjście w prawym dolnym rogu.
źródło
Bramy NAND,
274262Oryginał:
Lepiej: Utworzono za pomocą Logisim
Zajmuje to dwa wejścia po lewej jako 1-bajtowe liczby całkowite ze znakiem 1-bitowym u góry. Wyjście znajduje się w lewym dolnym rogu; prawda i falsey tutaj powinny być oczywiste.
Działa dla wszystkich przypadków testowych z wyjątkiem
47, 10000
, więc myślę, że technicznie nie jest to poprawna odpowiedź. Jednak najstarszą osobą na (wiarygodnym) zapisie było 122, więc 8 bitów (maks. 127) będzie działać dla każdego możliwego scenariusza do tego momentu. Po skończeniu wersji 16-bitowej opublikuję nową odpowiedź (czy powinienem ją edytować?)Wersja 16-bitowa jest gotowa!
Zauważysz niektóre pionowe odcinki obwodu. Pierwszy (od lewej) określa, które wejście jest większe. Następne dwa to multipleksery, sortujące wejścia. Następnie dodaję
11111001
(-7) do mniejszej części czwartej i kończę, porównując dwa razy to z większym wkładem. Jeśli jest mniej, związek jest przerażający. Ponieważ zmieniam bity na podwójne, muszę wziąć pod uwagę niewykorzystany bitlesser-7
. Jeśli jest to1
, tolesser-7
jest ujemne, a młodsza z nich nie jest starsza niż sześć. Przerażający. Kończę bramką OR, więc jeśli którykolwiek z testów pełzania powróci1
, cały obwód też.Jeśli przyjrzysz się uważnie, zobaczysz, że użyłem
siedmiujeden stałychs(na stałe11111011
i końcowe0
). Zrobiłem to, ponieważ Logisim wymaga podania co najmniej jednej wartości dla bramki logicznej w celu wygenerowania wyniku. Jednak za każdym razem, gdy używana jest stała, dwie bramki NAND zapewniają1
wartość niezależnie od stałej.-12 bramek dzięki mnie !
źródło
C #, 22 bajty
źródło
C, 29 bajtów
Jak to działa:
#define f(a,b)
definiuje funkcję makra,f
która przyjmuje dwa nietypowe argumenty.a/2+7>b
sprawdza, czy pierwszy wiek podzielony przez dwa plus siedem jest większy niż drugi wiek.b/2+7>a
sprawdza, czy drugi wiek podzielony przez dwa plus siedem jest większy niż pierwszy wiek.Wypróbuj online!
źródło
>b
nie<b
age >= min
, czy potrzebujesz również AND zamiast OR, ponieważ obie strony muszą się upewnić, aby nie było przerażające, test przypadku „47, 10000 - Przerażające”JavaScript (ES6), 21 bajtów
Zwraca 0 za nie przerażające, 1 za przerażające.
źródło
a=>b=>
zamiast(a,b)=>
zadzwoń za pomocąf(40)(40)
.R ,
2625 bajtów-1 bajt dzięki @djhurio
Wypróbuj online!
źródło
Siatkówka , 20 bajtów
Wypróbuj online!
Dane wejściowe są jednokierunkowe, a linia między dwoma liczbami jest podawana. Wyjście to
0
(nie przerażające) lub1
(przerażające).Wyjaśnienie
Posortuj dwie liczby, abyśmy wiedzieli, że większa jest druga.
Zadzwoń do mniejszego wieku
a
i większego wiekub
. Najpierw wychwytujemya-7
w grupie1
. Następnie staramy się dopasować2*(a-7)+1
wb
, co oznaczab >= 2*(a-7)+1
lubb >= 2*(a-7)
lubb/2+7 > a
co jest kryterium creepy relacji.źródło
TI-Basic,
20109 bajtów-10 bajtów przy użyciu listy i części sugestii Timtech
-1 bajt przy użyciu sugestii lirtosiasta
Zawiera listę dwóch grup wiekowych, „{40,42}: prgmNAME”
Zwraca 1 dla „przerażające” i 0 dla „nie przerażające”.
źródło
<
<=
=
!=
>=
>
)?GNU APL 1.2, 23 bajty
Definiuje funkcję, która pobiera dwa argumenty i wypisuje 1, jeśli jest przerażający, 0, jeśli nie.
Wyjaśnienie
∇
zaczyna się i kończy funkcjaA f B
jest nagłówkiem funkcji; Funkcja o nazwief
i przyjmuje dwa argumenty,A
iB
(funkcje w APL może być monadycznego - biorąc jeden argument - albo dwójkowym - biorąc dwa argumenty)A⌊B
jestmin(A,B)
iA⌈B
jestmax(A,B)
APL oceniana jest od prawej do lewej, więc potrzebne są nawiasy, aby zapewnić prawidłowe pierwszeństwo
Pozostałe operatory są oczywiste.
Kod może być golfem, wciąż jestem nowy w golfie.
źródło
f X
wtedy(⌊/X)<7+.5×⌈/X
. IIRC możesz usunąć nową linię między drugą i trzecią linią.Python 3,
7445 bajtówFirst Code Golf, prawdopodobnie okropny.
29-bajtowa redukcja o @Phoenix
źródło
lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1
powinno działać i jest krótszy od partii.lambda a,b:a/2+7>b or b/2+7>a
. Porzucić ciężar te brzydkie1
s i0
s i objąć władzęTrue
/False
!JavaScript (ES6), 27 bajtów
Bez curry (zadzwoń jak
f(a,b)
zamiastf(a)(b)
)Jeśli
b > a
zamień parametry i spróbuj ponownie. W przeciwnym razie sprawdź. Curry nie zapisuje żadnych bajtów z powodu wywołania rekurencyjnego.źródło
Java, 21 bajtów
Absolutnie nie oryginalne.
Testowanie
Wypróbuj online!
źródło
Python 3, 31 bajtów
lambda a,b:abs(a-b)>min(a,b)-14
Niewiele krótszy niż inne zgłoszenia Pythona, ale znalazłem nieco inny sposób na sprawdzenie przerażenia. Zauważyłem, że dopuszczalna różnica między wiekami wynosi min - 14. Wynika to z algebraicznej zmiany układu formuły.
Pozwoliło mi to rozwiązać bez potrzeby stosowania dwóch stałych, a także bez konieczności używania zarówno wartości maksymalnej, jak i minimalnej, zamiast abs (ab). Z perspektywy golfa dostałem tylko jeden bajt mniej niż rozwiązanie @ nocturama, ale użyłem nieco innej formuły, aby to zrobić.
źródło
abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False
Prawidłowa odpowiedź, ponieważ zgodnie z (x / 2) + 7 minimalny wiek dla 53 lat to53/2 + 7 = 26.5 + 7 = 33.5
Excel,
2624 bajtówFormuła komórki, która pobiera dane liczbowe z zakresu komórki
A1:B1
i generuje wartość logiczną reprezentującą pełzanie do komórki formułyStara wersja, 26 bajtów
źródło
TI-Basic,
10910 bajtówWyświetl listę danych wejściowych
Ans
, wyjściowych,1
jeśli są „przerażające” lub w0
inny sposób.źródło
Matematyka , 16 bajtów
Wypróbuj online!
-2 bajty dzięki @GregMartin
Prawda nie przerażająca, nieprawda przerażająca.
źródło
2
bajty, biorąc listę wieków jako:Max@#/2+7<Min@#&
SAS, 77 bajtów
źródło
Röda , 16 bajtów
Wypróbuj online!
Jest to anonimowa funkcja, która pobiera dane wejściowe jako dwa literały (nie tablicę) ze strumienia wejściowego.
Wyjaśnienie
źródło
Perl 6 , 15 bajtów
Spróbuj
Rozszerzony
źródło
Kryształ ,
4427 bajtów-17 od spojrzenia na odpowiedź Daniero w Ruby.
Wypróbuj online!
źródło
Python 3 -
3227 bajtówNie mogę skomentować, ale otrzymałem nieco krótszą odpowiedź niż inne rozwiązanie Python 3:
-5 dzięki @Cyoce!
źródło
lambda *a
Fourier, 37 bajtów
Wypróbuj na FourIDE!
Pobiera dwie liczby jako dane wejściowe. Będzie grać w golfa później.
źródło
PHP, 29 bajtów
drukuje 1 dla przerażającego, nic dla Nie przerażającego
Wypróbuj online!
źródło
Japt , 11 bajtów
Zwraca
true
za „przerażające” ifalse
za nie.Wypróbuj online
Wyjaśnienie
źródło
J, 10 bajtów
Wyjścia
1
nie przerażające,0
przerażająceWyjaśnienie
źródło
J-uby , 25 bajtów
Zadzwoń jak
f^[80,32]
. Dajetrue
za nie przerażające,false
za przerażające.Wyjaśnienie
źródło
method_missing
doprowadziło do zbyt dużej złożoności. To podejście jest czyste i eleganckie. Gratulacje!AWK , 26 bajtów
Wypróbuj online!
Wyjścia 1 dla „Creepy” i 0 dla „Not Creepy”. Można zapisać 3 bajty, jeśli brak danych wyjściowych można uznać za wartość fałszowania, poprzez:
źródło