整数の空でない有限リストが与えられた場合、正確に2つの等しいエントリがあり、他のすべてのエントリが明確な場合は真実の値を出力し、そうでない場合は偽の値を出力します。
例
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]
整数の空でない有限リストが与えられた場合、正確に2つの等しいエントリがあり、他のすべてのエントリが明確な場合は真実の値を出力し、そうでない場合は偽の値を出力します。
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
truthy未満、いくつかの数のため-1
か0
falseyのための(例えば、[1,6,3,4,4,7,9,9,9]
戻ってくる-3
一方で、[1,6,3,4,7,9]
返します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
アプローチを使用するのではなく、可能なすべての比較の「デカルト積」を使用しています。
@(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`^$
削除した重複の数に等しい空の行の数をカウントしますが、最初の2つの一致のみを考慮します。そのため、出力は0
(重複なし)、1
(1つの重複)、2
(2つ以上の重複)のみになります。
1
重複が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つである必要があるため、合計はである必要があります1
。
scan()
アプローチを考えたことがなかったでしょう。
($args|sort -u).count-eq$args.count-1
Sort-Object
コマンド(別名sort
で)-u
niqueフラグは入力のみユニークな構成要素を引き出します。たとえば、inputの@(1,3,3,2)
場合、これはになり@(1,2,3)
ます。
したがって、.count
このオブジェクトの(つまり、要素の数)が入力配列の値と-eq
一致することを確認する必要があります(つまり、重複するエントリが1つだけあります)。.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
ます。各ペアを1回だけ考慮し(2行の順序は関係ありません)、同じ行で2回形成されたペアを考慮しません。
私たちの場合x
は列ベクトルなので、2つの行の間のユークリッド距離は、2つの数値の絶対差になります。
~
は論理(ブール)否定でnnz
あり、非ゼロの数であり、と==1
比較し1
ます。したがって、結果はtrue
、距離がゼロになるペアが1つしかない場合に限ります。
!a=sum(a.==a')==endof(a)+2
コードはブール値の2次元テーブルを生成します。これはsum関数を使用して収集され、Aのデカルト正方形の同じ要素のペアの数をカウントします。反復文字が1つだけある場合にのみ、数量は等しくなります。
このコードは、NOT演算子を再定義します。
!a=sum(a.==a')==endof(a)+2
数バイト節約します。オンラインでお試しください!
@(x)prod(sum(x==x'))==4
このx==x'
部分は、flawrの答えに触発されました。これはLuisの答えよりも長いですが、ツールボックスを使用しません。
これは、x
入力としてベクトルを取り、転置されたそれ自体と比較する匿名関数です。これにより、すべての対角要素がである行列が得られ、すべての対角要素1
が重複要素があることを示します。
特定の列に沿った合計は、その数の重複の数を示します。2つの数値に重複が必要なので、2つの値は2に等しく、残りは2に等しくありません。
この行列の積をとると、4
等しい要素(2*2*1*1*1*1*...
)が2つしか4
なく、重複がない場合、または2つ以上ある場合以外のものが得られます。
{¥>Θ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に感謝します。)
2つの異なる値のみを取得するために、オプションで以下を追加できます。
Θ # equals 1? -> 1
Θ
よう、1
05AB1Eでのみtruthy値です。
¢
ないため、以前のソリューションに戻す必要があると思います。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が唯一の真理値であるため、真理結果を得るには、uniquifyによって正確に1つの重複する要素を削除する必要があります。