이 관계가 소름 끼치나요?


73

이 XKCD comic 에 따르면 관계의 연령 차이가 "소름"인지 여부를 결정하는 공식이 있습니다. 이 공식은 다음과 같이 정의됩니다.

(Age/2) + 7

데이트 할 수있는 사람의 최소 연령이됩니다.

따라서 관계에있는 사람들 중 한 사람이 다른 사람의 최소 연령보다 어리면 관계가 오싹합니다.

두 사람의 나이를 감안할 때 그 관계가 소름 끼치는 지 여부를 출력 할 수 있습니까?

규칙

  1. 프로그램은 두 사람의 정수를 입력해야합니다. 관계의 두 사람의 나이입니다. 이들은 적당한 형식으로 취할 수 있습니다.

  2. 그런 다음 프로그램은 관계가 "소름"인지 (진실 = 소름)를 설명하는 진실 또는 허위 값을 출력해야합니다.

  3. 표준 허점은 허용되지 않습니다.
  4. 이 퍼즐은 코드 골프이므로 바이트 단위로 가장 짧은 소스 코드를 가진 답이 이깁니다.

테스트 사례

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

3
어떻게 age/2반올림 해야 합니까? 정확한 절반이 최소값으로 설정되어 있다면 아마도 업? 17,21좋은 테스트 사례를 만들 것입니다.
Martin Ender

4
@MartinEnder이 값은 최소값이므로 반올림하지 마십시오. 정수일 필요는 없습니다.
Leo

81
을 추가 할 수도 있습니다 13, 13 - Creepy.
Greg Martin

12
47, 10000은 흥미로운 조합입니다. 나는 또한이 공식에 따르면, 닥터 후가 어떤 인간과 데이트하는 것은 소름 끼치는 것이라고 지적하고 싶습니다.
David Conrad

8
@DavidConrad-그래. 그것의 기본적으로 그의 짐승 ....
배트맨

답변:



17

파이썬 3 , 26 바이트

lambda x:max(x)/2+7>min(x)

온라인으로 사용해보십시오!
입력은 두 연령대가 모두 포함 된 목록입니다.


기존 답변을 읽기 전에도 마찬가지였습니다. +1
ElPedro

실제로 (더 젊고, 더 오래된) 튜플을 가정 할 수있는 것처럼 보입니다. 방금 OP에게 질문했습니다-그가 무엇을 말할지 궁금합니다.
rm-vanda

@ rm-vanda 내가 이전에 물었다
Stephen

15

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

3
C 프로그래머로서 저는 2가 진실하다는 것에 동의합니다.
gmatht

@gmatht 이것은 항상 0 또는 1, 2를 반환하지 않아야합니다.
Riley

4
[13,13]은 이중 소름입니다.
gmatht

1
@gmatht 나는 그것이 두 배가 될 것 같아요. 나는 작은 숫자에 대해서는 생각하지 않았습니다. 그래도 여전히 진실입니다.
Riley

@Riley이 2truthy 아니라, 볼 .
Okx

13

낸드 게이트, 551

16 비트 소름 계산기Logisim으로 생성

내 다른 대답 과 같은 원리 이지만 2 바이트 부호있는 입력을 취하므로 처리 할 수 ​​있습니다 47, 10000. 모든 테스트 사례에서 작동합니다!

10000은 16 비트 중 15 개로 만 표현 될 수 있으므로 [-32768, 32768] 범위의 모든 연령대에서 작동하므로 주어진 테스트 사례에 적합하지 않습니다. 모든 음의 나이가 돌아옵니다 1.

왼쪽에 입력 (특정 순서 없음, 1 비트 상단). 오른쪽 아래에 출력됩니다.


10

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 게이트 덕분에 !


명백한 최적화를 발견했습니다. 내가 편집하기 전에 지적해도, 나는 여전히 당신을 신용 할 것입니다!
Khuldraeseth na'Barya

9

C #, 22 바이트

n=>m=>n<m/2+7|m<n/2+7;

1
나는 C # 프로그래머가 아니지만 함수의 일부로 최종 세미콜론이 필요합니까?
Olivier Grégoire

1
@ OlivierGrégoire 생략 된 구문은 유효하지 않습니다. 이것은 익명의 기능입니다
cat

8

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을 반환합니다 (소름 끼치 지 않음).

온라인으로 사용해보십시오!


비교를 뒤집어 야합니다. >b그렇지 않아야합니다<b
Khaled.K

"최소 연령대"라는 말 age >= min은 오싹하지 않기 위해 양쪽 모두 만족해야하기 때문에 OR 대신 AND가 필요한지 확인해야 함을 의미합니다 . 테스트 사례 "47, 10000-Creepy"
Khaled.K

알았어 오류를 수정했지만 논리가 잘못되었습니다. true를 반환합니다. tio.run
Khaled.K

1
@Tas nope.
MD XF

1
건배, 링크 주셔서 감사합니다
Tas

7

자바 스크립트 (ES6), 21 바이트

a=>b=>a<b/2+7|b<a/2+7

오싹하지 않은 경우 0을, 오싹한 경우 1을 반환합니다.

f=a=>b=>a<b/2+7|b<a/2+7

console.log(f(40)(40));
console.log(f(18)(21));
console.log(f(80)(32));
console.log(f(15)(50));
console.log(f(47)(10000));
console.log(f(37)(38));
console.log(f(22)(18));


currying으로 바이트를 저장하십시오. a=>b=>대신을 (를 (a,b)=>) 호출하십시오 f(40)(40).
Stephen

@StephenS, 감사합니다. 새로운 것을 배웠습니다!
Rick Hitchcock

문제 없습니다. 누군가가 나에게 똑같은 것을 말했을 때 그것을 배웠습니다.
Stephen


5

레티 나 , 20 바이트

O`.+
^1{7}(1+)¶1\1\1

온라인으로 사용해보십시오!

두 숫자 사이의 줄 바꿈으로 입력이 단항입니다. 출력이 0소름 끼치거나 소름 끼치 지 않습니다 1.

설명

O`.+

두 숫자를 정렬하면 큰 숫자가 초임을 알 수 있습니다.

^1{7}(1+)¶1\1\1

더 작은 나이 a와 더 큰 나이를 부르십시오 b. 우리는 먼저 a-7그룹에서 캡처 1합니다. 그럼 우리가 일치하도록 시도 2*(a-7)+1b의미 b >= 2*(a-7)+1하거나 b >= 2*(a-7)또는 b/2+7 > a소름 관계에 대한 기준이다.


5

TI 기본, 20 10 9 바이트

max(2Ans<14+max(Ans

Timtech 제안 목록 및 일부를 사용하여 -10 바이트

lirtosiast의 제안을 사용하여 -1 바이트

"{40,42} : prgmNAME"의 두 나이 목록을 가져옵니다.

'소름'에 대해서는 1을, '소름이없는'에 대해서는 0을 반환합니다.


TI-BASIC은 테스트 기호 ( < <= = != >= >) 에서 괄호를 자동으로 닫 습니까?
Zacharý

@ Zacharý 아니오, TI-Basic은 줄 끝이나 콜론 끝에 괄호 만 닫습니다.
pizzapants184 년

오, 나는 입력이 숫자의 목록으로 취해지고 있다는 것을 잊었다!
Zacharý

4

GNU APL 1.2, 23 바이트

두 개의 인수를 사용하고 소름이면 1을, 그렇지 않으면 0을 인쇄하는 함수를 정의합니다.

∇A f B
(A⌊B)<7+.5×A⌈B
∇

설명

함수
A f B가 시작하고 끝나는 함수 는 함수 헤더입니다. 함수라는 f두 인자 얻어 AB(모나드 될 수 APL의 기능을 - 하나 개의 인자를 고려 - 또는 이항 - 두 인자를 고려)을
A⌊Bmin(A,B)A⌈B된다 max(A,B)
괄호 적절한 우선 순위를 확인하는 데 필요한 정도로, APL이 오른쪽에서 왼쪽으로 평가

다른 연산자는 자명하다.

코드는 골프가 가능할 수 있지만, 여전히 코드 골프를 처음 사용합니다.


1
사이트에 오신 것을 환영합니다!
OldBunny2800

와우, GNU APL은 한동안 그것을 보지 못했습니다.
Zacharý

또한 인수를 목록 f X으로 사용할 수도 (⌊/X)<7+.5×⌈/X있습니다. IIRC 두 번째와 세 번째 줄 사이의 줄 바꿈을 제거 할 수 있습니다.
Zacharý

@ Zacharý 예, 익명의 람다가 가능합니다. 이 버전의 GNU APL은 지원하지 않으며 최신 버전은 Mac에서 컴파일되지 않습니다. 다른 답변 중 일부는 Ubuntu에서 테스트하기 때문에 APL 1.7을 사용합니다. 나는 여전히 APL에 익숙하지 않기 때문에 람다를 사용하지 않았습니다 (나중에 수정할 수 있습니다).
Arc676

ngn-apl을 사용해보십시오. GNU APL과 같은 오픈 소스이지만 솔직히 더 좋습니다.
Zacharý

4

파이썬 3, 74 45 바이트

첫 번째 코드 골프, 아마도 끔찍할 것입니다.

@Phoenix에 의한 29 바이트 감소

lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1

안녕하세요, 마크 다운 시스템을 사용하여 코드를 올바르게 포맷하십시오.
Leo

걱정하지 않는 사람은 병이 수정을하지만, 그것에 나를 이길
KuanHulio

당신은 그곳의 일부 공간을 제거 할 수 있습니다 :)
Beta Decay

또한 lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1작동해야하며 많이 짧습니다.
Pavel

1
lambda a,b:a/2+7>b or b/2+7>a. 그 성가신의 부담 포기 1의과 0들과의 힘 포용 True/를 False!
Value Ink

3

자바 스크립트 (ES6), 27 바이트

f=a=>b=>b>a?f(b)(a):b>a/2+7

카레 없음 ( f(a,b)대신에 전화하십시오 f(a)(b))

f=(a,b)=>b>a?f(b,a):b>a/2+7

인 경우 b > a매개 변수를 바꾸고 다시 시도하십시오. 그렇지 않으면 확인하십시오. 카레는 재귀 호출로 인해 바이트를 저장하지 않습니다.

f=a=>b=>b>a?f(b)(a):b>a/2+7

console.log(f(18)(22))
console.log(f(22)(18))
console.log(f(18)(21))


3

자바, 21 바이트

a->b->a/2+7>b|b/2+7>a

절대 원본이 아닙니다.

테스팅

온라인으로 사용해보십시오!

import java.util.function.*;

public class Pcg122520 {
  static IntFunction<IntPredicate> f = a->b->a/2+7>b|b/2+7>a;
  public static void main(String[] args) {
    int[][] tests = {
      {40, 40},
      {18, 21},
      {80, 32},
      {15, 50},
      {47, 10000},
      {37, 38},
      {22, 18}
    };
    for (int[] test: tests) {
      System.out.printf("%d, %d - %s%n", test[0], test[1], f.apply(test[0]).test(test[1]) ? "Creepy" : "Not creepy");
    }
  }
}

1
언급 +1 " 원본을 절대 안돼. ". 그들은 거의 모두 동일하지만 거의 아무도 없습니다. 그리고 테스트 코드에서 TIO 링크를 추가 할 자유를 얻었습니다. 당신은 항상 테스트 코드를 추가,하지만 왜 확실하지 TIO-링크를 ... :)?
케빈 Cruijssen

1
고마워 Kevin! 나는 때때로 하나를 추가하지만 때로는 그렇지 않습니다. IDE가 열려 있는지 아니면 닫혀 있는지에 따라 다릅니다. 그렇게 간단합니다! : P 또한, 사람들이이 람다를 유효하게 만드는 것을 이해하기 위해 테스트 코드를 보여줍니다. :)
Olivier Grégoire

3

파이썬 3, 31 바이트

lambda a,b:abs(a-b)>min(a,b)-14

다른 파이썬 제출물보다 훨씬 짧지는 않지만 소름을 확인하는 약간 다른 방법을 찾았습니다. 나는 연령 사이에 허용되는 차이가 최소-14와 같다는 것을 알았습니다.

min = (max/2) + 7
min - 7 = max/2
2*min - 14 = max

dif = max - min
max = dif + min

2*min - 14 = dif + min
min - 14 = dif

이를 통해 두 개의 상수가 필요하지 않고 abs (ab) 대신 max와 min을 모두 사용할 필요가 없습니다. 골프 관점에서 나는 @nocturama의 솔루션보다 1 바이트 작았지만 약간 다른 수식을 사용했습니다.


확실히 이것은 페어웨이의 (x / 2) +7 정신 내 [37,53] (테스트 스위트가 아니라)에서 실패합니다
Alexx Roche

아니 @AlexxRoche 주어진 경우 [37,53]과 같은 [A가 B]이되어야 계산 abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False 에 따라 (X / 2) + 7, 53의 최소 연령이므로이 정답 인53/2 + 7 = 26.5 + 7 = 33.5
Delya Erricson

3

엑셀, 26 24 바이트

셀 범위에서 숫자로 입력을 받아 셀룰러를 A1:B1나타내는 부울 값을 수식 셀에 출력하는 셀 수식

=OR(A1/2+7>B1,B1/2+7>A1)

이전 버전, 26 바이트

=MAX(A1:B1)/2+7>MIN(A1:B1)

2

TI 기본, 10 9 10 바이트

2min(Ans)-14≤max(Ans

의 입력을 나열 하고 "소름"이 아니면 Ans출력 1합니다 0.


2

수학 , 16 바이트

Max@#/2+7<Min@#&

온라인으로 사용해보십시오!

@GregMartin 덕분에 -2 바이트

오싹하지 않은 경우 참, 오싹한 경우 거짓.

            (* Argument: A list of integers     *)
Max@#       (* The maximum of the input         *)
 /2+7       (* Divided by 2, plus 7             *)
  <         (* Is less than?                    *)
   Min@#    (* The minimum of the input         *)
    &       (* Anonymous function               *)

2연령을 목록으로 Max@#/2+7<Min@#&
가져와

2

SAS, 77 바이트

%macro t(a,b);%put%eval(%sysfunc(max(&a,&b))/2+7>%sysfunc(min(&a,&b)));%mend;

2

Röda , 16 바이트

{sort|[_<_/2+7]}

온라인으로 사용해보십시오!

이것은 입력 스트림에서 두 개의 리터럴 (배열이 아닌)로 입력을받는 익명 함수입니다.

설명

{sort|[_<_/2+7]}                 Anonymous function
 sort                            Sorts the numbers in the input stream
     |[       ]                  And push
       _<                        whether the smaller value  is less than
         _/2+7                   the greater value / 2 + 7



2

파이썬 3 - (32) 27 바이트

댓글을 달 수 없지만 다른 Python 3 솔루션보다 약간 짧은 답변이 있습니다.

lambda *a:min(a)<max(a)/2+7

@Cyoce 덕분에 -5!


공간을 제거 할 수 있습니다lambda *a
Cyoce

1

푸리에, 37 바이트

oI~AI~B>A{1}{A~SA~BS~B}A/2+7>B{1}{@o}

FourIDE에서 사용해보십시오!

두 숫자를 입력으로받습니다. 나중에 골프 윌.


그런 식으로 문자열을 출력 할 필요는 없으며, 진실하거나 거짓 일 수 있습니다.
Leo

좋은 골프. 그것은 빠르다.
MD XF


1

Japt , 11 바이트

true"소름"을 반환 합니다 false.

wV /2+7>UmV

온라인으로 사용해보십시오


설명

      :Implicit input of first integer U
wV    :Get the maximum of U and the second integer V
/2+7  :Divide by 2 & add 7
>     :Check if the result is greater than...
UmV   :the minimum of the two integers.

1

J, 10 바이트

<.<7+2%~>.

출력 1, 소름하지 않는 0소름을위한

설명

<.          NB. the minimum
  >         NB. is greater than
    7+2%~>. NB. half the maximum + 7

1

J-uby , 25 바이트

:>%[:min,:max|~:/&2|:+&7]

처럼 전화하십시오 f^[80,32]. 부여 true, 소름하지 대한 false오싹합니다.

설명

    :min                  # the minimum
:>%[    ,               ] # is greater than
         :max|            # the maximum...
              ~:/&2|        # over two...
                    :+&7    # plus 7 

이것은 아름다운 언어입니다. 나는 Ruby와 비슷한 목적을 달성하기 위해 오랜 시간을 보냈지 만 ( "Blurb"라고 불렀다 method_missing.) 이 접근법은 깨끗하고 우아합니다. 축하합니다!
Jordan

@ 조던 감사합니다! 나는 J (따라서 이름)에서 많은 영감을 얻었으므로 모든 크레딧을 얻을 수는 없습니다 . 동료 Ruby 프로그래머가 제안한 사항이 있으면 공개합니다.
Cyoce

@Jordan 당신은 다른 더 복잡한 J-uby 답변 중 일부를보아야합니다. 그들은 꽤 뭔가입니다.
Cyoce

1

AWK , 26 바이트

{$0=$1/2+7>$2||$2/2+7>$1}1

온라인으로 사용해보십시오!

"Creepy"는 1을, "Creepy는"를 0으로 출력합니다. 다음을 통해 출력이 없으면 잘못된 값으로 간주 될 수있는 경우 3 바이트를 절약 할 수 있습니다.

$0=$1/2+7>$2||$2/2+7>$1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.