노아의 정수 목록


25

소개:

나는 우리 모두 그것에 대해 들었다고 생각하지만 여기에 아주 간단한 요약이 있습니다. 노아는 큰 홍수 동안 그의 방주를 구하기 위해 지구상의 모든 동물 종 두 마리를 암수로 모았습니다. 성서의 실제 인용문은 다음과 같습니다.

창세기 7 : 2-3
모든 종류의 깨끗한 동물, 남자와 그 배우자, 두 종류의 부정한 동물, 남자와 그 배우자, 그리고 하늘에있는 모든 종류의 새 중 일곱 가지를 가지고 가야합니다 , 남자와 여자, 지구의 얼굴에 그들의 자손을 보존합니다.
출처

그러나이 도전을 위해 우리는 깨끗하고 불건전 한 부분과 그가 각각의 동물 중 7 마리를 취하는 부분을 무시할 것입니다. 이 도전은이 부분에 관한 것입니다.

모든 종류의 부정한 동물, 수컷과 그 짝

도전:

입력:

양의 정수 목록 (임의 순서로)이 제공됩니다.

산출:

'노아의 목록'인지 아닌지를 나타내는 두 개의 고유 값. 이것은해야 필요하지 않습니다 truthy / falsey의 이렇게도 될 수있다, 값을 0/ 1자바 / C #에서, 또는 'A'/ 'B'몇 가지 예제를주고, 어떤 언어로.

목록은 언제 '노아의 목록'입니까? 목록에 모든 정수 중 정확히 두 개가있는 경우

도전 규칙 :

  • I / O는 유연합니다. 입력은 정수 / 부동 / 문자열의 목록 / 배열 / 스트림이거나 STDIN에서 하나씩 읽습니다. 출력은 함수에서 출력되거나 STDOUT / 파일로 리턴되는 두 가지 고유 값일 수 있습니다 .
  • 입력 목록의 정수는 무작위 순서이며 범위 내에서 양의 값을 . 1n100000
  • 입력 목록이 비어 있지 않은 것이 보장됩니다.
  • 2보다 2 배 많은 정수 (즉, 4, 6, 8 등)를 갖는 것은 잘못된 것입니다. 즉 [6,4,4,6,4,7,4,7], 다음과 같이 동일한 쌍을 만들 수는 있지만 거짓 [[4,4],[4,4],[6,6],[7,7]]입니다.

일반적인 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙기본 I / O 규칙으로 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 반환 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트와 링크를 추가하십시오 (예 : TIO ).
  • 또한 답변에 대한 설명을 추가하는 것이 좋습니다.

테스트 사례 :

Truthy:
[7,13,9,2,10,2,4,10,7,13,4,9]
[1,2,3,1,2,3]
[10,100,1000,1,100,10,1000,1]
[123,123]
[8,22,57189,492,22,57188,8,492,57188,57189,1,1]

Falsey:
[6,4,4,6,4,7,4,7]
[2,2,2,2,2,2]
[5,1,4,5,1,1,4]
[77,31,5,31,80,77,5,8,8]
[1,2,3,2,1]
[44,4,4]
[500,30,1]
[1,2,1,1]
[2,4,6,4,4,4]
[2,23,34,4]
[2,23,3,3,34,4]

12
그리고 꾸란에서도; Surah Al-Mumenoon, 27 절 : 그래서 우리는 그에게 영감을주었습니다. (이 메시지로) : "우리의 시야와지도 아래에 방주를 건설하십시오. 말씀이 이미 나아간 종을 제외한 모든 종과 남자와 여자와 네 가족의 말에 이르시되 나를 행하는 자들에게 호의를 베풀지 말아라. 알리)
Ishaq Khan

답변:





8

R , 20 바이트

입력 방법을 변경하여 digEmAll 덕분에 -6 바이트

any(table(scan())-2)

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

FALSE노아의 목록 인 경우 출력 합니다 TRUE. 정수뿐만 아니라 모든 입력 유형에서 작동합니다.

목록에있는 각 값의 개수를 계산하고 개수가 2와 다른지 확인합니다.


stdin에서 입력하여 6 바이트를 절약 할 수 있습니다 : 온라인으로보십시오!
digEmAll

@digEmAll 감사합니다; 나는 도전 규칙을 잘못 읽고 이것이 허용되지 않는다고 생각했다.
로빈 라이더




6

펄 6 , 18 바이트

{so.Bag{*}.all==2}

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

  • .Bag입력 목록을 Bag다중성 을 갖는 --a 세트 로 변환합니다 .
  • {*} 모든 다중성을 추출합니다.
  • .all 다중도의 정션을 작성합니다.
  • == 2 부울의 또 다른 정션을 생성하며, 다중도가 2 인 경우 각각 true입니다.
  • so 접점을 단일 부울로 축소합니다.

5

J , 10 바이트

[:*/2=#/.~

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


3
또한 10 바이트 : [:*/2=1#.=나는 그 모자를 정말로 제거하고 싶지만 어떻게 알아낼 수는 없습니다.

1
@cole 이것을 시도했을 때 솔루션을 얻었습니다. 당신은 정말 당신이 캡 제거하고 싶었 2*/@:=1#.=, 또한 10 바이트
코너 오브라이언

@cole 좋은 대안!
Galen Ivanov

@ ConorO'Brien 네, 여기도 @:편리합니다.
Galen Ivanov

1
@GalenIvanov =는 틈새 골프 시나리오에서 이상하게 유용한 monadic을 좋아해야합니다
cole

4

MS SQL 서버 2017 , 152 (150) 146 바이트

CREATE FUNCTION f(@ NVARCHAR(MAX))RETURNS
TABLE RETURN SELECT IIF(2=ALL(SELECT
COUNT(*)FROM STRING_SPLIT(@,',')GROUP BY
PARSE(value AS INT)),1,0)r

읽을 수있는 버전 :

CREATE FUNCTION f(@ NVARCHAR(MAX)) RETURNS TABLE RETURN
  SELECT IIF(2 = ALL(SELECT COUNT(*)
                     FROM STRING_SPLIT(@, ',')
                     GROUP BY PARSE(value AS INT)), 1, 0) AS r

SQL Fiddle 에서 사용해보십시오 !

Kevin Cruijssen 덕분에 -2 바이트


1
별칭을 사용하지 않으므로 ? c다음에 COUNT(*)?를 제거 할 수 없습니다 .
케빈 크루이 ssen

@ KevinCruijssen, 당신이 맞아요, 감사합니다.
Andrei Odegov

4

하스켈 , 61 45 바이트

import Data.List
all((2==).length).group.sort

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

12 바이트의 @KevinCruijssen과 다른 4 개의 @nimi 덕분에.

첫 번째 Haskell이 대답했지만 놀랍게도 쉬운 일이었습니다. 아마 많이 골프를 칠 수 있습니다. 지목 사항...


3
나는 Haskell을 모른다. 그러나 나는 꽤 all(True==).map(2==)될 수 있다고 확신 한다 all(2==). :)
Kevin Cruijssen

4
... 그리고 이동 lengthall: all((2==).length).group.sort. 함수에 이름을 지정할 필요가 없습니다 f=. 즉을 삭제하십시오 .
nimi

실제로, 나는 all(2==)GHCi에서 테스트 할 때의 시간을 간과했습니다 . Kevin과 Nimi에게 감사드립니다. 답변을 업데이트하겠습니다.
J. Sallé

4
... 아 그리고 나중에 사용하기 위해 : all(True==)입니다 and.
니미

4

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

Noah의 경우 false 를, Noahah 가 아닌 경우 true 를 리턴 합니다.

a=>a.some(v=>a.map(x=>t-=v==x,t=2)|t)

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

댓글

a =>               // a[] = input
  a.some(v =>      // for each value v in a[]:
    a.map(x =>     //   for each value x in a[]:
      t -= v == x, //     decrement t if v is equal to x
                   //     (i.e. if v appears exactly twice, t is decremented twice)
      t = 2        //     start with t = 2
    )              //   end of map()
    | t            //   yield t, which is supposed to be equal to 0
  )                // end of some()

3

APL (Dyalog Unicode) , 8 바이트 SBCS

익명의 암묵적 접두사 기능. 0/를 반환 1합니다.

∧/2=⊢∘≢⌸

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

 각 값을 왼쪽 인수로 사용하고 해당 값의 발생 지수를 오른쪽 인수로 사용하려면 다음을 호출하십시오.

 오른쪽 인수 (발생)
 를 집계 한 다음
 왼쪽 인수를 무시하고이를 반환합니다.

2= 어떤 키가 2인지 나타내는 부울 목록

∧/ AND- 감소 (즉, 모두 사실입니까?)


3

PowerShell , 66 37 26 바이트

mazzy 덕분에 -11 바이트

!(($args|group|% c*t)-ne2)

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

$l일치하는 값의 모든 수를 그룹화하고 가져옵니다 . 그런 다음이 목록에서 2의 모든 계수를 필터링합니다. 목록이 비어 있으면 노아 번호입니다. 그렇지 않으면 여전히 2가 아닌 수로 채워집니다. 목록을 True비워두면 비어 있고 False채워진 경우


1
값이 서로 균형을 이루지 않으면 실패합니다. 즉 [1,2,1,1]이므로 개수가 4이므로 고유 한 개수는 2이므로 노아가 아니더라도 노아로 해석됩니다.
만료 된 데이터

@ExpiredData Heck
Veskah

나는 ... 그것은 단지하지 않습니다 작업을 실현하기 전에 다른 언어에있는이 방법을 시도
데이터 만료

1
¯ \ _ (ツ) _ / ¯ 26
mazzy

1
@mazzy 감사합니다. group존재하는 것에 대해 잊어 버렸습니다
Veskah

3

PHP , 60 바이트

function($a){return!array_diff(array_count_values($a),[2]);}

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

PHP는 20 array_count_values()자로 구성되어 있지만 골프는 아닙니다.


PHP는 항상 긴 이름을 가진 훌륭한 내장 기능을 가지고 있습니다.
Night2


3

첨부 , 16 바이트

${All&x!{_~x=2}}

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

설명

${All&x!{_~x=2}}
${             }    lambda with input x
  All&x!{     }     over each element _ of x:
         _~x            check that the number of occurrences of _ in x
            =2          is 2

대안

17 바이트 : {All&_!`=&2@`~&_}

18 바이트 : {All[`=&2@`~&_,_]}

23 바이트 : Same@2&`'@Sum@Table[`=]

25 바이트 : Same«2'Sum@Table[`=,_]»

25 바이트 : Same<~2'Sum@Table[`=,_]~>

25 바이트 : {Same[2'Sum@Table[`=,_]]}

35 바이트 : {Commonest@_==Unique@_and _[0]~_=2}


3

TI 기본, 47 바이트

Input(L1
SortA(L1
not(remainder(dim(L1,2)) and prod(not(△List(L1))=seq(remainder(I,2),I,1,-1+dim(L1

저는 TI-Basic의 팬입니다. 그것은 실제로 어떤 목적으로도 훌륭한 언어는 아니지만 프로그래밍과 골프를 좋아합니다.

이 코드는 어떻게 작동합니까?

먼저 목록을 정렬합니다.

둘째, △ List 함수를 사용하여 정렬 된 목록의 요소 간 차이 인 다른 목록을 생성합니다. 예를 들어 △ List ({1,3,7,8})는 {2,4,1}을 생성합니다. 목록의 0이 아닌 모든 요소를 ​​0으로, 0을 1로 변환하는이 목록에 적용되지 않습니다.

그런 다음 프로그램은 결과 목록이 패턴에 맞는지 {1, 0, 1, 0, ...}확인합니다. 원래 목록이 Noah 목록 인 경우에만 해당됩니다.

또한 일부 경우를 포착하기 위해 목록의 길이가 고른 지에 대한 추가 점검이 있습니다.

다음은 테스트 사례의 스크린 샷입니다.

일부 테스트 사례 더 많은 테스트 사례


3

줄리아 1.0 , 32 바이트

l->sum(isone,l./l')/length(l)==2

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

입력 배열의 각 요소를 행렬을 제공하는 l조옮김으로 나눕니다 l'. isone각 요소에 적용 하는 동안이 행렬을 합하면 l각 요소가 정확히 두 번 나타나는 길이의 두 배가됩니다.



3

Julia , 30 자 26 바이트

!a=all(x->2==sum(a.==x),a)

이 트릭에 대해 H.PWiz에게 감사합니다!

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


1
!a=all(x->2==sum(a.==x),a)26 바이트를 가질 수 있습니다 . NB. 이 사이트에 바이트 단위로 계산하는 것이 좋습니다 있음
H.PWiz

대단히 감사합니다! 나는 당신이 (ab) !익명 기능을 사용할 수 있다는 것을 몰랐습니다
user3263164


2

VDM-SL , 64 바이트

f(a)==forall y in set inds a&card{x|x in set inds a&a(x)=a(y)}=2

설명

VDM은 주로 2 차 논리 문처럼 작동합니다.

forall y in set inds a                //Bind y to each of the indices of a

{x|x in set inds a&a(x)=a(y)}         //build a set of the indices of a who have the same
                                      //value as the value at y

card {...} = 2                        //and check the cardinality of that set is 2

TIO VDM을 사용할 수 없으므로 디버그 세션에서 출력됩니다.


온라인 컴파일러가 없을 수도 있지만 테스트 사례의 일부 스크린 샷을 확인으로 추가 할 수 있습니까? :)
Kevin Cruijssen (

@KevinCruijssen은 버그를 수정하여 약간의 바이트를 절약하여 코드 자체를 이해하기 쉽게 만들었습니다. 나도 설명을 추가하겠습니다 :)
만료 된 데이터





2

엑셀, 45 바이트

=SUM(IF(FREQUENCY(A:A,A:A)=2,1))=COUNT(A:A)/2

열 A에있는 셀이 아닌 다른 셀에 입력 된 열 A에있는 데이터를 가정합니다. 쌍이 있으면 TRUE를, 쌍이 일치하지 않으면 FALSE를 리턴합니다.

        FREQUENCY(A:A,A:A)                     Counts how many of each value there is
     IF(                  =2,1)                If this is 2, add value of 1 to array otherwise 0
=SUM(                          )               Sum the count in that array that have a exactly 2
                                 COUNT(A:A)/2  Count how many total values in column
                                =              If this is equal, return TRUE else FALSE

/ 2를 제거하고 합산에 .5를 추가하려고 시도했지만 작동하지 않았습니다.
<> 2 인 주파수를 세려고 시도했지만 올바른 양을 반환하지 않았습니다.


2

옥타브 / MATLAB, 22 21 바이트

@(x)any(sum(x==x')-2)

숫자 형 벡터를 입력 0하고 벡터가 조건을 만족하는지 여부를 출력하는 익명 함수 1.

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

@(x)                   % define anonymous function with input x
            x          % x
               x'      % x transposed and conjugated
             ==        % equality comparison, element-wise with broadcast. Gives a
                       % square matrix
        sum(     )     % sum of each column
                  -2   % subtract 2, element-wise
    any(            )  % true if and only if any value is not zero

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