이 XKCD comic 에 따르면 관계의 연령 차이가 “소름”인지 여부를 결정하는 공식이 있습니다. 이 공식은 다음과 같이 정의됩니다.
(Age/2) + 7
데이트 할 수있는 사람의 최소 연령이됩니다.
따라서 관계에있는 사람들 중 한 사람이 다른 사람의 최소 연령보다 어리면 관계가 오싹합니다.
두 사람의 나이를 감안할 때 그 관계가 소름 끼치는 지 여부를 출력 할 수 있습니까?
규칙
-
프로그램은 두 사람의 정수를 입력해야합니다. 관계의 두 사람의 나이입니다. 이들은 적당한 형식으로 취할 수 있습니다.
-
그런 다음 프로그램은 관계가 “소름”인지 (진실 = 소름)를 설명하는 진실 또는 허위 값을 출력해야합니다.
- 표준 허점은 허용되지 않습니다.
- 이 퍼즐은 코드 골프이므로 바이트 단위로 가장 짧은 소스 코드를 가진 답이 이깁니다.
테스트 사례
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
답변
답변
답변
05AB1E , 8 6 바이트
;7+R‹Z
# Implicit Input: an array of the ages
; # Divide both ages by 2
7+ # Add 7 to both ages
R # Reverse the order of the ages
# this makes the "minimum age" line up with the partner's actual age
‹ # Check for less than the input (vectorized)
Z # Push largest value in the list
답변
낸드 게이트, 551
Logisim으로
생성
내 다른 대답 과 같은 원리 이지만 2 바이트 부호있는 입력을 취하므로 처리 할 수 있습니다 47, 10000
. 모든 테스트 사례에서 작동합니다!
10000은 16 비트 중 15 개로 만 표현 될 수 있으므로 [-32768, 32768] 범위의 모든 연령대에서 작동하므로 주어진 테스트 사례에 적합하지 않습니다. 모든 음의 나이가 돌아옵니다 1
.
왼쪽에 입력 (특정 순서 없음, 1 비트 상단). 오른쪽 아래에 출력됩니다.
답변
NAND 게이트, 274 262
더 나은 :
Logisim으로
생성
왼쪽에 1 바이트 부호있는 정수로 2 개의 입력이 취해지고 1 비트가 맨 위에 오게됩니다. 출력은 왼쪽 아래에 있습니다. 여기서 진실과 거짓은 분명해야합니다.
을 제외한 모든 테스트 사례에서 작동 47, 10000
하므로 기술적으로 유효한 대답은 아닙니다. 그러나 (신뢰할 수있는) 레코드 의 가장 오래된 사람 은 122이므로 8 비트 (최대 127)는이 시점까지 가능한 모든 시나리오에서 작동합니다. 16 비트 버전을 완료하면 새로운 답변을 게시하거나이 답변을 수정해야합니까?
16 비트 버전 이 완성되었습니다!
회로의 수직 부분을 볼 수 있습니다. 첫 번째 (왼쪽부터)는 어느 입력이 더 큰지를 결정합니다. 다음 두 개는 멀티플렉서로 입력을 정렬합니다. 그런 다음 11111001
네 번째 섹션에서 (-7)을 더 적은 값에 더하고이 값을 두 번 큰 입력과 비교하여 결론을 내립니다. 적 으면 관계가 오싹합니다. 비트를 두 배로 이동하므로 사용되지 않는 비트를 고려해야합니다 lesser-7
. 이것은 경우 1
, 다음 lesser-7
부정적이고, 두 젊은 여섯보다 나이가 없다. 소름 나는 OR 게이트로 마무리합니다. 따라서 크리프 테스트 중 하나가 반환 1
되면 전체 회로가 작동합니다.
만약 당신이 자세히 보면, 내가 사용하는 것을 볼 수 있습니다 일곱 하나 개의 상수 들 합니다 (하드 코딩 11111011
및 후행 0
). Logisim은 논리 게이트가 출력을 생성하기 위해 적어도 하나의 값을 입력해야하기 때문에이 작업을 수행했습니다. 그러나 상수가 사용될 때마다 두 개의 NAND 게이트 1
는 상수에 관계없이 값을 보장합니다 .
-12 게이트 덕분에 나 !
답변
C #, 22 바이트
n=>m=>n<m/2+7|m<n/2+7;
답변
C, 29 바이트
#define f(a,b)a/2+7>b|b/2+7>a
작동 방식 :
#define f(a,b)
f
형식화되지 않은 두 개의 인수를 취하는 매크로 함수 를 정의합니다 .a/2+7>b
첫 번째 나이를 2 + 7로 나눈 값이 두 번째 나이보다 큰지 확인합니다.b/2+7>a
두 번째 나이를 2 + 7로 나눈 값이 첫 번째 나이보다 큰지 확인합니다.- 위의 값 중 하나가 참이면 1 (소름)을 반환합니다. 그렇지 않으면 0을 반환합니다 (소름 끼치 지 않음).