출력, 정수의 비어 있지 않은 유한 목록을 감안할 때 truthy의 가 정확히 두 개의 동일한 항목이며 다른 모든 항목이 서로 다른 경우 값 및 falsey의 다른 값.
예
truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]
falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]
출력, 정수의 비어 있지 않은 유한 목록을 감안할 때 truthy의 가 정확히 두 개의 동일한 항목이며 다른 모든 항목이 서로 다른 경우 값 및 falsey의 다른 값.
truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]
falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]
답변:
lambda m:len({*m})+1==len(m)
{*m}
set
중복되지 않은 정렬되지 않은 항목의 목록 인 객체로 목록을 캐스트합니다 . 이 작업을 수행하면 목록의 길이가 항상 중복 횟수만큼 줄어 듭니다. 길이가 얼마나 변했는지 계산하여 목록에 단일 복제본이 있는지 쉽게 확인하고 테스트 결과를 반환 할 수 있습니다.
ovs 덕분에 -2 바이트
{*m}
대신 바로 가기를 잊어 버렸습니다 set
!
lambda m:~-len(m[len({*m}):])
εṠ-u
εṠ-u Implicit input.
u Unique elements.
Ṡ- Delete them from input, counting multiplicities.
ε Is the result a singleton list?
&=sp4=
@Guiseppe 덕분에 1 바이트가 절약되었습니다!
설명:
&= % Table of pair-wise equality comparisons
%
% [1 0 0 0 0 0 0
% 0 1 0 0 0 0 0
% 0 0 1 0 0 0 0
% 0 0 0 1 1 0 0
% 0 0 0 1 1 0 0
% 0 0 0 0 0 1 0
% 0 0 0 0 0 0 1]
%
s % Sum each Column. Stack:
%
% [1 1 1 2 2 1 1]
%
p % Product of the array. Stack:
%
% [4]
%
4= % Compare the stack to '4'
s
입니다 sum
및 sum
이 단지 수 없습니다, 첫 번째 싱글 톤이 아닌 차원에 따라 합계 (열), 그리고 매트릭스는 대칭 s
대신 Xs
?
QL‘=L
QL‘=L - Main link, argument L (a list) e.g [1,6,3,4,4,7,9]
Q - Deduplicated elements [1,6,3,4,7,9]
L - Length 6
‘ - Increment 7
L - Length of the input 7 ([1,6,3,4,4,7,9])
= - Are they equal? 1
출력 값이 일관된 값일 수 있으면 QL_L
작동합니다.이 값 -1
은 진실을 나타내고 다른 양수가 아닌 숫자를 거짓으로 출력합니다 (@JonathanAllan 덕분에)
QL_L
-1
진실과 일부보다 작 -1
거나 적은 숫자로 출력 할 것입니다 0
(예 : [1,6,3,4,4,7,9,9,9]
return -3
, 반면 [1,6,3,4,7,9]
return 0
).
-2
.
여부를 확인하는 간단한 구현 len(set(list)) == len(list)-1
:
LtvuL^=#
설명:
\ Implicit: Put all input on stack
Ltv \ Get the stack length - 1, save in auxiliary stack
u \ Remove non-unique elements
L \ Get the new length
^= \ Compare with the previously saved length
# \ Print result
초기 목록에 명확하지 않은 정수가 정확히 1 개만 있으면 길이가 1 씩 줄어들 기 때문에 작동합니다.
이것은 사용하지 않는 group
또는 unique
다른 답변의 많은으로 접근이 아니라 가능한 모든 comparisions의 "카티 제품".
@(x)nnz(triu(x==x',1))==1
x==x' %create a matrix where the entry at (i,j) compares whether x(i) == x(ju)
triu(x==x',1) %only consider the strict upper triangular matrix
nnz(triu(x==x',1)) %count the number of nonzero entries
@(x)nnz(triu(x==x',1))==1 %check whether this number is actually 1
그리고 컨볼 루션 없이는 어떤 프로그램도 완성되지 않기 때문에 (실수를 고쳐 준 @LuisMendo에게 감사드립니다) :
@(x)nnz(~conv(sort(x),-1:2:1,'same'))==1
=�,=
=
모든 고유 한 요소와 동일한 지 모든 요소를 확인하고 m 개의 고유 한 요소에 대해 m 개의 행이 있는 행렬을 만듭니다 .
0,
위에 빈 행을 추가하십시오.
=&#
행 수가 입력 길이와 동일합니까?
.~
과=
1 바이트를 절약 해 준 Neil에게 감사드립니다.
D`
Mm2`^$
1
입력이 줄 바꿈으로 구분됩니다. 테스트 스위트는 편의를 위해 쉼표로 구분합니다.
D`
입력에서 행을 중복 제거하면 이전에 나타난 모든 정수가 제거되지만 주변 줄 바꿈은 남습니다.
Mm2`^$
빈 줄의 수를 세십시오. 이것은 우리가 제거한 중복 수와 같지만 처음 두 개의 일치 만 고려하십시오. 따라서 출력은 0
(중복 없음), 1
(하나의 중복), 2
(두 개 이상의 중복)입니다.
1
정확히 하나의 사본이 제거되었는지 확인하십시오.
A`.
마지막으로 줄 바꿈을하기 때문에 줄 바꿈 계산에 사용할 수 없습니다 .)
A`.
했지만 문제는 오히려 하나의 빈 줄을 전혀 줄이없는 것과 구별 할 수 없다는 것입니다. 어쩌면 줄이 있으면 줄 바꿈으로 종료 A
하고 G
출력하는 것을 고려해야 합니다. 다른 시나리오에서는 줄 바꿈이 성가신 것으로 상상할 수 있기 때문에 아마도 옵션 일 것입니다.
^$¶
.
A
하나의 빈 줄을 유지하거나 모든 줄을 버리는 지 여부에 관계없이 출력 이 동일하다는 것을 의미합니다 .
{¥_O
1
진실로 출력 하고 다른 음이 아닌 정수를 거짓으로 출력합니다. 05AB1E에서는 1
유일하게 진실한 숫자입니다 (@Emigna에게 감사를 표합니다!).
{ Implicit input. Sort
¥ Consecutive differences
_ Boolean negate
O Sum. Implicit display
->(s){s.uniq.length==s.length-1}
Array#size
?
->s{s.uniq.size==s.size-1}
사용 +18 System.Linq
.
n=>n.Distinct().Count()==n.Length-1
Linq가없는 67 바이트 대안 :
n=>new System.Collections.Generic.HashSet<int>(n).Count==n.Length-1
@JarkoDubbeldam 덕분에 -1 바이트
cat(sum(duplicated(scan()))==1)
stdin에서 읽고 stdout에 씁니다.
duplicated
의 값을 교체리스트를 반복하여 l
함께 TRUE
그 값리스트의 이전 및 발생하는 경우 FALSE
그렇지. 고유 한 소울 메이트 쌍이있는 경우 정확히 하나의 TRUE
값 이 있어야 하므로 합계는이어야합니다 1
.
scan()
접근법을 결코 생각하지 않았을 것 입니다.
($args|sort -u).count-eq$args.count-1
nique 플래그가 있는 Sort-Object
명령 (alias sort
) -u
은 입력의 고유 한 구성 요소 만 가져옵니다. 예를 들어 input의 @(1,3,3,2)
경우 결과는 @(1,2,3)
입니다.
따라서, 우리는 확인해야 그 .count
객체의 (즉, 얼마나 많은 요소가있다)는 -eq
연간는에 .count
우리의 입력 배열의 -1
(즉, 우리가 정확히 하나의 중복 된 항목이 있습니다).
Sinusoid 덕분에 3 바이트를 절약했습니다.
TessellatingHeckler의 버그 수정.
1,2,1
- get-unique
단지 미리 정렬 된 입력에서 작동합니다. 방법에 대해 ($args|sort -u).count-eq$args.count-1
당신처럼 호출하면 이는, 테스트 케이스도 37이지만 모든 작업을 수행 f 1 2 1
하는 대신 f 1,2,1
?
@k{@F}++;say@F==1+keys%k
@(x)nnz(~pdist(x))==1
익명의 기능. 입력은 열 벡터입니다. 출력이 true
(로 표시됨 1
) 또는 false
(로 표시됨 0
).
pdist(x)
의 모든 행 쌍 사이의 유클리드 거리 벡터를 계산합니다 x
. 각 쌍을 한 번만 고려하고 (두 행의 순서는 중요하지 않음) 동일한 행으로 두 번 형성된 쌍을 고려하지 않습니다.
우리의 경우 x
열 벡터이므로 두 행 사이의 유클리드 거리는 두 숫자의 절대 차이입니다.
~
논리 (부울) 부정, 0 nnz
이 아닌 수,와 ==1
비교합니다 1
. 따라서 결과는 true
거리가 0 인 쌍이 하나만있는 경우에만 발생합니다.
!a=sum(a.==a')==endof(a)+2
이 코드는 2 차원 부울 테이블을 생성 한 다음 sum 함수를 사용하여 수집하여 A의 데카르트 제곱에있는 동일한 요소 쌍의 수를 계산합니다. 그런 다음 문자열 길이에 2를 더한 값과 비교합니다. 정확히 하나의 반복 문자가있는 경우에만 수량이 동일합니다.
이 코드는 NOT 연산자를 재정의합니다.
!a=sum(a.==a')==endof(a)+2
몇 바이트를 절약합니다. 온라인으로 사용해보십시오!
@(x)prod(sum(x==x'))==4
이 x==x'
부분은 flawr의 답변 에서 영감을 얻었습니다 . 이것은 Luis의 답변보다 길지만 도구 상자를 사용하지 않습니다.
이것은 벡터 x
를 입력으로 사용하여 전치 된 것과 비교 하는 익명 함수입니다 . 이것은 모든 대각선 요소가있는 행렬을 제공하며 1
, 대각선 이외의 요소는 중복 요소가 있음을 나타냅니다.
주어진 열의 합계는 해당 숫자의 중복 수를 나타냅니다. 우리는 두 개의 숫자가 중복되기를 원하므로 두 개의 값은 2와 같고 나머지는 2와 다릅니다.
이 행렬의 곱을 취하면 4
두 개의 동일한 요소 ( 2*2*1*1*1*1*...
) 만 4
있고 중복 요소 가 없거나 두 개 이상이 아닌 다른 요소가 있으면 얻을 수 있습니다 .
{¥>ΘO
{¥>ΘO # example input: [1, 6, 3, 4, 4, 7, 9]
{ # sort -> [1, 3, 4, 4, 6, 7, 9]
¥ # get deltas -> [ 2, 1, 0, 2, 1, 2 ]
> # increment -> [ 3, 2, 1, 3, 2, 3 ]
Θ # truthify (only 1 gives 1) -> [ 0, 0, 1, 0, 0, 0 ]
O # sum -> 1
1
05AB1E에서 유일하게 진실 된 가치이므로 여기서 멈출 수 있습니다. (@Emigna에게 지적 해 주셔서 감사합니다.)
두 개의 고유 한 값만 얻으려면 선택적으로 다음을 추가 할 수 있습니다.
Θ # equals 1? -> 1
Θ
처럼을 건너 뛸 수 있습니다 1
.
¢
작동하지 않을 수 있으므로 이전 솔루션으로 되돌려 야 할 것 같습니다. in을 찾은 후 [19,4,4,9]
false 및 [19,9]
true 로 계산 됩니다 . 0
10
{¥_O
괜찮을 것입니다.
1=≢-≢∘∪
설명:
1=≢-≢∘∪ ⍝ Monadic function train
≢∘∪ ⍝ Generate a list of unique items in the input,
⍝ and return the length of that list
≢- ⍝ Take the length of the input and subtract the above
1= ⍝ If the difference is 1, true, otherwise false
gIÙg-
g # Get number of elements in input
IÙg # Get number of unique elements in input
- # Subtract
05AB1E에서 1은 유일무이 한 값이므로, 유일무이 한 결과에 대해 정확히 1 개의 중복 요소가 제거되어야합니다.