Biorąc pod uwagę niepustą skończoną listę liczb całkowitych, wypisz prawdziwą wartość, jeśli istnieją dokładnie dwa równe wpisy, a wszystkie inne wpisy są różne, aw przeciwnym razie wartość falsey .
Przykłady
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]
Odpowiedzi:
Python 3,
3028 bajtówWypróbuj online!
{*m}
rzutuje listę naset
obiekt, nieuporządkowaną listę elementów bez duplikatów. Spowoduje to zawsze zmniejszenie długości listy o liczbę duplikatów. Obliczając, jak bardzo zmieniła się długość, możemy łatwo stwierdzić, czy lista miała jeden duplikat, i zwrócić wynik testu.-2 bajty dzięki ovs.
źródło
{*m}
skrócie zamiastset
, dobrze grałem!lambda m:~-len(m[len({*m}):])
Łuska , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
MATL ,
7, 6 bajtówWypróbuj online!
Jeden bajt zapisany dzięki @Guiseppe!
Wyjaśnienie:
źródło
s
jestsum
isum
sumuje się wzdłuż pierwszego wymiaru nie singletonowego (kolumny), a macierz jest symetryczna, czy to nie może byćs
zamiast tegoXs
?Haskell , 34 bajty
Wypróbuj online! Na podstawie odpowiedzi H.PWiz .
źródło
Galaretka ,
85 bajtówWypróbuj online!
Wyjaśnienie
Jeśli wartości wyjściowe mogą być dowolnymi spójnymi wartościami, to
QL_L
działa, co-1
daje wyniki dla prawdy i dla każdej innej nie dodatniej liczby dla falsey (dzięki @JonathanAllan)źródło
QL_L
wyprowadziłoby-1
dla prawdy i pewnej liczby mniejszej niż-1
lub0
dla falsey (np.[1,6,3,4,4,7,9,9,9]
powróciłoby-3
, podczas gdy[1,6,3,4,7,9]
powróciłoby0
).-2
.JavaScript (ES6), 30 bajtów
Wypróbuj online
źródło
Pushy , 8 bajtów
Prosta implementacja sprawdzania, czy
len(set(list)) == len(list)-1
:Wyjaśnienie:
Działa to, ponieważ długość zmniejszy się tylko o 1, jeśli na liście początkowej była tylko dokładnie 1 nieróżna liczba całkowita.
Wypróbuj online!
źródło
Oktawa , 25 bajtów
To nie stosuje
group
lubunique
podejście jak wiele innych odpowiedzi, ale raczej „iloczyn” wszystkich możliwych Porównania.Wyjaśnienie
Wypróbuj online!
A ponieważ żaden program nie byłby kompletny bez splotu (dzięki @LuisMendo za naprawienie błędu):
Oktawa , 40 bajtów
Wypróbuj online!
źródło
J ,
76 bajtów=
sprawdzaj równość każdego elementu z każdym unikalnym elementem, tworzy macierz z m rzędami dla m unikalnych elementów.0,
dodaj pusty wiersz na górze.=&#
czy liczba wierszy jest równa długości danych wejściowych?Wypróbuj online!
źródło
.~
z=
Siatkówka ,
151211 bajtówPodziękowania dla Neila za zaoszczędzenie 1 bajtu.
Wypróbuj online!
Wejście jest oddzielone od linii. (Dla wygody zestaw testów używa rozdzielania przecinków).
Wyjaśnienie
Deduplikuj linie na wejściu, co usuwa wszelkie liczby całkowite, które pojawiły się wcześniej (ale pozostawiają otaczające kanały).
Policz liczbę pustych linii, która jest równa liczbie duplikatów, które usunęliśmy, ale rozważ tylko dwa pierwsze dopasowania. Tak więc wynik będzie tylko
0
(bez duplikatów),1
(jeden duplikat),2
(dwa lub więcej duplikatów).Upewnij się, że dokładnie jeden duplikat został usunięty.
źródło
A`.
do liczenia nowych linii, ponieważ spada ostatnia.)A`.
, ale problem polega raczej na tym, że nie można odróżnić pojedynczej pustej linii od jej braku. Może powinienem rozważyć zakończenieA
iG
wyjście z linefeedem, jeśli są jakieś linie. Chociaż prawdopodobnie powinna to być opcja, ponieważ mogę sobie wyobrazić, że to podawanie linii jest denerwujące w innych scenariuszach.^$¶
.A
jest identyczne niezależnie od tego, czy zachowuje pojedynczą pustą linię, czy odrzuca wszystkie linie.05AB1E , 4 bajty
Wypróbuj online!
Wyprowadza
1
jako prawda, każda inna nieujemna liczba całkowita jako fałsz. W 05AB1E1
jest jedyną prawdziwą liczbą (dzięki @Emigna za wgląd!).Wyjaśnienie
źródło
Rubinowy, 32 bajty
źródło
Array#size
?->s{s.uniq.size==s.size-1}
C # (.NET Core) , 35 + 18 bajtów
+18 za użycie
System.Linq
.Wypróbuj online!
67 bajtowa alternatywa bez Linq:
Wypróbuj online!
źródło
Excel, 42 bajty
Duńska wersja językowa
Zakłada każdą liczbę całkowitą z listy w osobnej komórce w kolumnie
A
.Gdybyśmy mieli niespójne wartości falsey , moglibyśmy zaoszczędzić 3 bajty:
Wersja angielska (44 bajty)
źródło
R ,
3231 bajtów-1 bajt dzięki @JarkoDubbeldam
Wypróbuj online!
Odczytuje ze standardowego, zapisuje na standardowe.
duplicated
iteracji listy, zastępując wartościl
zeTRUE
jeśli wartość nastąpi wcześniej na liście, aFALSE
inaczej. Jeśli istnieje unikalna para bratnich dusz, powinna istnieć dokładnie jednaTRUE
wartość, więc suma powinna wynosić1
.źródło
scan()
podejściu.PowerShell ,
4037 bajtówWypróbuj online!
Sort-Object
Poleceń (pseudonimsort
) z-u
nique flagą wyciąga tylko unikalne składniki wejścia. Na przykład dla danych wejściowych@(1,3,3,2)
spowoduje to@(1,2,3)
.Dlatego musimy tylko upewnić się, że
.count
ten obiekt (tj. Ile ma elementów) jest-eq
zgodny.count
z naszą tablicą wejściową-1
(tj. Mamy dokładnie jeden zduplikowany wpis).Zaoszczędzono 3 bajty dzięki Sinusoid.
Naprawiono błąd dzięki TessellatingHeckler.
źródło
1,2,1
-get-unique
działa tylko na wstępnie posortowanych danych wejściowych. Co powiesz na($args|sort -u).count-eq$args.count-1
który jest również 37, ale działa dla wszystkich przypadków testowych, jeśli nazwiesz go tak jakf 1 2 1
zamiastf 1,2,1
?Perl 5 , 36 + 1 (
-a
) = 37 bajtówWypróbuj online!
źródło
@k{@F}++;say@F==1+keys%k
Haskell , 37 bajtów
Wypróbuj online!
źródło
Octave / MATLAB (z pakietem statystyk / zestawem narzędzi), 21 bajtów
Funkcja anonimowa. Dane wejściowe to wektor kolumny. Wyjście to
true
(wyświetlane jako1
) lubfalse
(wyświetlane jako0
).Wypróbuj online!
Wyjaśnienie
pdist(x)
oblicza wektor odległości euklidesowych między wszystkimi parami rzędów odx
. Bierze każdą parę tylko raz (kolejność dwóch rzędów nie ma znaczenia) i nie bierze pod uwagę par utworzonych przez ten sam rząd dwa razy.W naszym przypadku
x
jest to wektor kolumnowy, więc odległość euklidesowa między dwoma rzędami jest absolutną różnicą między dwiema liczbami.~
jest logiczną (logiczną) negacją,nnz
jest liczbą nonzerów i==1
porównuje się z1
. Wynik jesttrue
wtedy i tylko wtedy, gdy jest tylko jedna para, która daje zerową odległość.źródło
Jq 1,5 ,
5325 bajtówZainspirowany odpowiedzią Riley i znacznie krótszą niż moje oryginalne rozwiązanie.
Wypróbuj online!
źródło
Julia,
3926 bajtówWyjaśnienie
Kod generuje dwuwymiarową tabelę wartości logicznych, która jest następnie gromadzona za pomocą funkcji sumowania, zliczając liczbę par tego samego elementu w kartezjańskim kwadracie A. Następnie porównuje się to z długością ciągu plus dwa, a Ilości są równe tylko wtedy, gdy jest dokładnie jeden znak powtarzalny.
Ten kod przedefiniowuje operator NOT.
źródło
!a=sum(a.==a')==endof(a)+2
oszczędza kilka bajtów. Wypróbuj online!Pyth , 6 bajtów
Sprawdź wszystkie przypadki testowe.
l{
- Pobiera liczbę unikalnych elementów.tlQ
- Pobiera długość listy danych wejściowych, zmniejszoną.q
- Sprawdza równość.7 bajtów
Sprawdź wszystkie przypadki testowe
źródło
Oktawa ,
2326 bajtówWypróbuj online!
Ta
x==x'
część została zainspirowana odpowiedzią flawr . To jest dłuższe niż odpowiedź Luisa, ale nie używa żadnych skrzynek z narzędziami.Wyjaśnienie:
Jest to anonimowa funkcja, która przyjmuje wektor
x
jako dane wejściowe i porównuje go z samą transpozycją. To da macierz, w której znajdują się wszystkie elementy ukośne1
, a wszelkie elementy nie przekątne sygnalizują, że istnieją elementy zduplikowane.Suma wzdłuż dowolnej kolumny pokazuje, ile jest duplikatów tej liczby. Chcemy, aby dwie liczby miały duplikaty, więc mamy dwie wartości równe dwóm, a reszta nierówna dwóm.
Jeśli weźmiemy iloczyn tej macierzy, otrzymamy,
4
jeśli będą tylko dwa równe elementy (2*2*1*1*1*1*...
) i coś innego niż,4
jeśli nie będzie duplikatów lub więcej niż dwa.źródło
PHP, 46 bajtów
Liczy liczbę wpisów
$argv
i porównuje ją z liczbą unikalnych wpisów. Jeśli ten pierwszy jest wyższy od drugiego o 1, to prawda, w przeciwnym razie falsey.Wypróbuj na eval.in!
źródło
$argv
to lista parametrów wiersza poleceń. Więc: nie, nie może po prostu użyć$a
.05AB1E ,
65 bajtówWypróbuj online!
1
będąc jedyną prawdziwą wartością w 05AB1E, możemy się tutaj zatrzymać. (Dzięki @Emigna za zwrócenie na to uwagi.)Aby uzyskać tylko dwie różne wartości, możemy opcjonalnie dodać:
źródło
Θ
, ponieważ1
jest to jedyna prawdziwa wartość w 05AB1E.¢
nie będzie działać. Byłoby to liczone[19,4,4,9]
jako fałszywe i[19,9]
prawdziwe, ponieważ znajduje się0
w10
.{¥_O
powinno być również w porządku.APL (Dyalog Unicode) , 7 bajtów SBCS
Wypróbuj online!
Wyjaśnienie:
źródło
Galaretka , 10 bajtów
Wypróbuj online!
dłuższe, ale inne podejście
źródło
Japt, 7 bajtów
Spróbuj
Wyjaśnienie
Usuń duplikaty (
â
), uzyskaj length (Ê
) i porównaj równość (¶
) z długością (Ê
) wejścia (U
) minus 1 (É
).źródło
âÊɶ
znaki wielobajtowe nie są ?Haskell , 37 bajtów
Wypróbuj online!
źródło
05AB1E , 5 bajtów
Wypróbuj online!
W 05AB1E 1 jest jedyną prawdziwą wartością, więc dla prawdziwego wyniku musi być dokładnie 1 zduplikowany element usunięty przez uniquify.
źródło