Bei einer nicht leeren endlichen Liste von ganzen Zahlen einen Wahrheitswert ausgeben , wenn es genau zwei gleiche Einträge gibt und alle anderen Einträge unterschiedlich sind, und andernfalls einen falschen Wert.
Beispiele
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]
code-golf
array-manipulation
decision-problem
fehlerhaft
quelle
quelle
Antworten:
Python 3,
3028 BytesProbieren Sie es online!
{*m}
wandelt die Liste in einset
Objekt um, eine ungeordnete Liste von Elementen ohne Duplikate. Dadurch wird die Länge der Liste immer um die Anzahl der darin enthaltenen Duplikate verringert. Durch die Berechnung, wie stark sich die Länge geändert hat, können wir leicht feststellen, ob die Liste ein einzelnes Duplikat enthielt, und das Testergebnis zurückgeben.-2 Bytes dank ovs.
quelle
{*m}
Abkürzung anstattset
, gut zu golfen!lambda m:~-len(m[len({*m}):])
Schale , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
MATL ,
7, 6 BytesProbieren Sie es online!
Ein Byte gespart dank @Guiseppe!
Erläuterung:
quelle
s
istsum
undsum
summiert sich entlang der ersten Nicht-Singleton-Dimension (Spalten) und die Matrix ist symmetrisch, könnte dies nicht einfachs
statt seinXs
?Haskell , 34 Bytes
Probieren Sie es online! Basierend auf der Antwort von H.PWiz .
quelle
Gelee ,
85 BytesProbieren Sie es online!
Erläuterung
Wenn es sich bei den Ausgabewerten um konsistente Werte handeln kann,
QL_L
funktioniert dies, wobei-1
für die Wahrheit und für Falsey jede andere nicht positive Zahl ausgegeben wird (danke @JonathanAllan).quelle
QL_L
würde ausgeben-1
für wahr und eine Zahl kleiner als-1
oder0
für falsch (zB[1,6,3,4,4,7,9,9,9]
würde zurückkehren-3
, während[1,6,3,4,7,9]
würde zurückkehren0
).-2
.JavaScript (ES6), 30 Byte
Probieren Sie es online aus
quelle
Aufdringlich , 8 Bytes
Einfache Implementierung der Überprüfung, ob
len(set(list)) == len(list)-1
:Erläuterung:
Dies funktioniert, da sich die Länge nur um 1 verringert, wenn die ursprüngliche Liste nur genau 1 nicht eindeutige Ganzzahl enthält.
Probieren Sie es online!
quelle
Oktave , 25 Bytes
Dabei wird nicht ein
group
oderunique
Ansatz wie bei vielen anderen Antworten verwendet, sondern das "kartesische Produkt" aller möglichen Vergleiche.Erläuterung
Probieren Sie es online!
Und weil kein Programm ohne Faltung komplett wäre (danke @LuisMendo für die Fehlerbehebung):
Oktave , 40 Bytes
Probieren Sie es online!
quelle
J ,
76 Bytes=
prüfe jedes Element auf Gleichheit mit jedem eindeutigen Element, erstelle eine Matrix mit m Zeilen für m eindeutige Elemente.0,
Fügen Sie oben eine leere Zeile hinzu.=&#
Entspricht die Anzahl der Zeilen der Länge der Eingabe?Probieren Sie es online!
quelle
.~
mit=
Netzhaut ,
151211 BytesVielen Dank an Neil für das Speichern von 1 Byte.
Probieren Sie es online!
Der Eingang ist zeilenweise getrennt. (In der Testsuite wird der Einfachheit halber die Kommatrennung verwendet.)
Erläuterung
Deduplizieren Sie die Zeilen in der Eingabe, wodurch alle zuvor aufgetretenen Ganzzahlen entfernt werden (die umgebenden Zeilenumbrüche bleiben jedoch erhalten).
Zählen Sie die Anzahl der leeren Zeilen, die der Anzahl der entfernten Duplikate entspricht, aber berücksichtigen Sie nur die ersten beiden Übereinstimmungen. Die Ausgabe ist also nur
0
(keine Duplikate),1
(ein Duplikat),2
(zwei oder mehr Duplikate).Stellen Sie sicher, dass genau ein Duplikat entfernt wurde.
quelle
A`.
Zeilenumbrüche zählen können, da der letzte gelöscht wird.)A`.
, aber das Problem ist eher, dass man eine einzelne Leerzeile nicht von einer Zeile ohne Zeilen unterscheiden kann. Vielleicht sollte ich darüber nachdenken, mit einem Zeilenvorschub zu terminierenA
undG
auszugeben, wenn es irgendwelche Zeilen gibt. Obwohl das wahrscheinlich eine Option sein sollte, da ich mir vorstellen kann, dass Zeilenvorschub in anderen Szenarien ärgerlich ist.^$¶
.A
ist identisch, unabhängig davon, ob eine einzelne leere Zeile beibehalten oder alle Zeilen verworfen werden.05AB1E , 4 Bytes
Probieren Sie es online!
Ausgänge
1
als truthy, andere nicht-negative ganze Zahl als falsy. In 05AB1E1
ist die einzig wahre Zahl (danke @Emigna für die Einsicht!).Erläuterung
quelle
Ruby, 32 Bytes
quelle
Array#size
?->s{s.uniq.size==s.size-1}
C # (.NET Core) , 35 + 18 Byte
+18 für die Verwendung
System.Linq
.Probieren Sie es online!
67 Byte Alternative ohne Linq:
Probieren Sie es online!
quelle
Excel, 42 Bytes
Dänische Sprachversion
Nimmt jede Ganzzahl aus der Liste in einer separaten Zelle in der Spalte an
A
.Wenn wir inkonsistente Falsey- Werte hätten, könnten wir 3 Bytes sparen:
Englische Sprachversion (44 Bytes)
quelle
R ,
3231 Bytes-1 Byte dank @JarkoDubbeldam
Probieren Sie es online!
Liest von stdin, schreibt nach stdout.
duplicated
Durchläuft die Liste und ersetzt die Werte vonl
durch,TRUE
wenn dieser Wert früher in der Liste vorkommt,FALSE
andernfalls. Wenn es ein einzigartiges Paar von Seelenverwandten gibt, sollte es genau einenTRUE
Wert geben, also sollte die Summe sein1
.quelle
scan()
Ansatz gedacht .PowerShell ,
4037 ByteProbieren Sie es online!
Der
Sort-Object
Befehl (Aliassort
) mit dem-u
Nique-Flag ruft nur die eindeutigen Komponenten der Eingabe ab. Bei der Eingabe@(1,3,3,2)
führt dies beispielsweise zu@(1,2,3)
.Daher müssen wir nur sicherstellen, dass das
.count
von diesem Objekt (dh wie viele Elemente es hat)-eq
dem.count
von unserem Eingabearray-1
(dh wir haben genau einen doppelten Eintrag) entspricht.3 Bytes gespart dank Sinusoid.
Fehler behoben dank TessellatingHeckler.
quelle
1,2,1
-get-unique
nur für vorsortierte Eingaben. Wie wäre es mit dem,($args|sort -u).count-eq$args.count-1
was auch 37 ist, aber für alle Testfälle funktioniert, wenn Sie es wief 1 2 1
anstatt aufrufenf 1,2,1
?Perl 5 , 36 + 1 (
-a
) = 37 BytesProbieren Sie es online!
quelle
@k{@F}++;say@F==1+keys%k
Haskell , 37 Bytes
Probieren Sie es online!
quelle
Octave / MATLAB (mit Statistikpaket / Toolbox), 21 Byte
Anonyme Funktion. Die Eingabe ist ein Spaltenvektor. Die Ausgabe erfolgt
true
(angezeigt als1
) oderfalse
(angezeigt als0
).Probieren Sie es online!
Erläuterung
pdist(x)
berechnet einen Vektor der euklidischen Abstände zwischen allen Zeilenpaaren vonx
. Dabei wird jedes Paar nur einmal berücksichtigt (die Reihenfolge der beiden Zeilen spielt keine Rolle). Paare, die durch dieselbe Zeile zweimal gebildet werden, werden nicht berücksichtigt.In unserem Fall
x
handelt es sich um einen Spaltenvektor. Der euklidische Abstand zwischen zwei Zeilen ist also nur die absolute Differenz zwischen den beiden Zahlen.~
ist eine logische (Boolesche) Negation,nnz
ist die Anzahl der Nichtzeros und ist==1
vergleichbar mit1
. Das Ergebnis ist alsotrue
genau dann, wenn es nur ein Paar gibt, das den Abstand Null ergibt.quelle
Jq 1,5 ,
5325 BytesInspiriert von Rileys Antwort und viel kürzer als meine ursprüngliche Lösung.
Probieren Sie es online!
quelle
Julia,
3926 BytesErläuterung
Der Code generiert eine zweidimensionale Tabelle mit Booleschen Werten, die dann mithilfe der Summenfunktion gesammelt wird. Dabei wird die Anzahl der Paare gleicher Elemente im kartesischen Quadrat von A gezählt. Dann wird dies mit der Länge der Zeichenfolge plus zwei verglichen Mengen sind nur dann gleich, wenn es genau ein Wiederholungszeichen gibt.
Dieser Code definiert den Operator NOT neu.
quelle
!a=sum(a.==a')==endof(a)+2
spart ein paar Bytes. Probieren Sie es online!Pyth , 6 Bytes
Überprüfen Sie alle Testfälle.
l{
- Ermittelt die Anzahl der eindeutigen Elemente.tlQ
- Ermittelt die Länge der Eingabeliste, dekrementiert.q
- Überprüft die Gleichheit.7 Bytes
Überprüfen Sie alle Testfälle
quelle
Oktave ,
2326 BytesProbieren Sie es online!
Der
x==x'
Teil wurde von der Antwort von flawr inspiriert . Dies ist länger als Luis 'Antwort, aber es werden keine Toolboxes verwendet.Erläuterung:
Dies ist eine anonyme Funktion, die einen Vektor
x
als Eingabe verwendet und ihn mit sich selbst transponiert vergleicht. Dies ergibt eine Matrix, in der alle diagonalen Elemente vorhanden sind1
, und alle nicht diagonalen Elemente signalisieren, dass es doppelte Elemente gibt.Die Summe in einer Spalte gibt an, wie viele Duplikate dieser Zahl vorhanden sind. Wir wollen, dass zwei der Zahlen ein Duplikat haben, also sind wir zwei Werte gleich zwei und der Rest ungleich zwei.
Wenn wir das Produkt dieser Matrix nehmen, erhalten wir,
4
wenn es nur zwei gleiche Elemente (2*2*1*1*1*1*...
) und etwas anderes gibt, als4
wenn es keine Duplikate gibt, oder mehr als zwei.quelle
PHP, 46 Bytes
Zählt die Anzahl der Einträge in
$argv
und vergleicht sie mit der Anzahl der eindeutigen Einträge. Wenn das erstere um 1 höher ist als das letztere, dann ist es wahr, sonst ist es falsch.Probiere es auf eval.in aus!
quelle
$argv
ist die Liste der Befehlszeilenparameter. Also: nein, er kann nicht einfach benutzen$a
.05AB1E ,
65 BytesProbieren Sie es online!
1
Als einziger Wahrheitswert in 05AB1E können wir hier aufhören. (Danke @Emigna für den Hinweis.)Um nur zwei unterschiedliche Werte zu erhalten, können wir optional hinzufügen:
quelle
Θ
, da dies1
der einzige Wahrheitswert in 05AB1E ist.¢
nicht funktioniert. Es wäre zählen[19,4,4,9]
als falsch und[19,9]
als wahr , da er findet den0
in10
.{¥_O
sollte auch okay sein.APL (Dyalog Unicode) , 7 Byte SBCS
Probieren Sie es online!
Erläuterung:
quelle
Gelee , 10 Bytes
Probieren Sie es online!
Ein längerer, aber anderer Ansatz
quelle
Japt, 7 Bytes
Versuch es
Erläuterung
Entferne Duplikate (
â
), erhalte Länge (Ê
) und vergleiche Gleichheit (¶
) mit der Länge (Ê
) der Eingabe (U
) minus 1 (É
).quelle
âÊɶ
Multibyte-Zeichen?Haskell , 37 Bytes
Probieren Sie es online!
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
In 05AB1E ist 1 der einzige Wahrheitswert. Für ein wahres Ergebnis muss also genau 1 doppeltes Element durch die Eindeutigkeit entfernt werden.
quelle