Sie werden zwei Arrays / Listen / Vektoren von nicht negativen ganzen Zahlen angegeben werden A und B . Ihre Aufgabe ist es, die höchste Ganzzahl N auszugeben, die sowohl in A als auch in B vorkommt und auch in A und B eindeutig ist .
Sie können davon ausgehen, dass es mindestens eine solche Nummer gibt.
Jede sinnvolle Eingabe- und Ausgabemethode / -format ist zulässig.
Diese Lücken sind verboten.
Das ist Code-Golf , also gewinnt der kürzeste Code in jeder Programmiersprache!
Testfälle:
A, B -> Ausgabe [6], [1, 6] -> 6 [1, 2, 3, 4], [4, 5, 6, 7] -> 4 [0, 73, 38, 29], [38, 29, 73, 0] -> 73 [1, 3, 4, 6, 6, 9], [8, 7, 6, 3, 4, 3] -> 4 [2, 2, 2, 6, 3, 5, 8, 2], [8, 7, 5, 8] -> 5 [12, 19, 18, 289, 19, 17], [12, 19, 18, 17, 17, 289] -> 289 [17, 29, 39, 29, 29, 39, 18], [19, 19, 18, 20, 17, 18] -> 17 [17, 29, 39, 29, 29, 39, 18, 18], [19, 19, 18, 20, 17, 18] -> 17
quelle
[email protected]/d
) und Eingabe als Liste von zwei Listen.Python 3 ,
615654 Bytes7 Bytes gespart dank @ Mr.Xcoder , @ pizzapants184 und @ovs
Probieren Sie es online!
quelle
05AB1E ,
98 Bytes-1 Byte danke an Erik den Outgolfer
Probieren Sie es online!
quelle
Schale , 7 Bytes
Nimmt die Eingabe als Liste mit zwei Listen an und funktioniert auch für eine beliebige Anzahl von Listen (wobei nach Möglichkeit die höchste Anzahl zurückgegeben wird, die jeweils genau einmal vorkommt). Probieren Sie es online!
Erläuterung
Dies ist die erste Antwort von Husk, um (ab) die neue Funktion "Maximum by" zu verwenden
►
.quelle
Bash + Coreutils, 60 Bytes
Probieren Sie es online
Bash, 89 Bytes
TIO
quelle
sort -rn
mitsed q
am Ende , statt sietail -1
zu rasieren 1 Byte. Toller Fund mitgrep -wf
übrigens. +1Jelly , 11 Bytes
Probieren Sie es online!
quelle
`
!J, 23 Bytes
(-.-.@~:#])
Entfernt alle wiederholten Elemente aus einer Liste&
Tun Sie dies für beide Argumente([-.-.)
Wir wollen A schneiden B. Dies ist die äquivalente Phrase: "A minus (A minus B)">./
Nehmen Sie die maxProbieren Sie es online!
quelle
e.~#]
. Das Golfen hat sich als schwierig erwiesen ... Ich habe versucht,/.
-key ohne Erfolg zu verwenden (((1=#)/.~#~.)
für den ersten Teil, der nach meiner Zählung 2 Bytes länger ist)PowerShell , 94 Byte
Probieren Sie es online!
Übernimmt Eingaben
$a
und$b
als Arrays. Konstruiert einfilter
,group
das die Eingabe-Array-Elemente zusammenfasst, und zieht nur die mit demcount
-eq
Buchstaben ual bis heraus1
(dh nur diejenigen, die im Eingabearray eindeutig sind).Die nächste Zeile konstruiert dann den Algorithmus. Zuerst ziehen wir
sort
$a
dann die heraus, die-in
die einzigartigen Einzelteile von sind$b
. Diese sind dann selbst einmalig, die größte[-1]
wird ausgewählt und wir nehmen die.Name
davon. Das bleibt in der Pipeline und die Ausgabe ist implizit.quelle
Javascript (ES6),
102867571 BytesVielen Dank an @justinMariner, dass Sie von 102 auf 86 gekommen sind
Danke @tsh, dass du von 86 auf 75 gekommen bist
Danke @Arnauld, dass du von 75 auf 71 gekommen bist
Probieren Sie es online!
quelle
e
das nur einmal ina
und erscheintb
.lastIndexOf
, das ist ziemlich schlau. Sie können dies auf 86 Bytes reduzieren: Probieren Sie es online aus! . Weitere Informationen finden Sie in den JS-Tipps .(g=x=>x.filter(y=>y==e).length==1)
kürzer ist.Haskell ,
5753 BytesProbieren Sie es online!
UPD: Danke @Laikoni
quelle
f
als Infix-Operator deklarieren und schreiben,[1|...]==[1]
anstattsum[1|...]==1
einige Bytes zu speichern.!
withand
saves two more bytes: Try it online!Wolfram Language (Mathematica), 40 bytes
Try it online!
How it works
Tally@#
gives a list of the unique elements of the first input, together with their counts: e.g.,Tally[{2,2,2,6,3,5,8,2}]
yields{{2,4},{6,1},{3,1},{5,1},{8,1}}
.Tally@#2
does the same for the second list, and⋂
finds pairs present in both. Then we pick out (withCases
) pairs ending in1
, taking the first element of each result, which gives us a list of all the unique twins. Finally,Max
returns the largest unique twin.quelle
Röda, 48 bytes
Try it online!
Inspired by jq170727's jq answer.
Explanation:
quelle
F# (.NET Core),
117115114111108 bytes115114 bytesAnother solution with
countBy
this time:Try it online!
117111 bytesTry it online!
100% F#! Any help is welcome!
6 byte won thanks to prefix notation!
108 bytes
@
is the concat function! Thank you @Ayb4btu for this algorithm.Try it online!
quelle
C# (.NET Core),
8584 bytesTry it online!
Naive solution with LINQ (
using System;using System.Linq;
+31chars so 116 bytes with header)84! I forgot currying!
quelle
Pip,
1716 bytesThis is a function that takes two lists as arguments. Try it online!
Explanation
quelle
APL (Dyalog), 18 chars = 23 bytes*
A full program body. Prompts for list of lists from STDIN. Works with any number of lists. Outputs to STDOUT.
Try it online!
⎕
prompt for evaluated input from STDIN{
…}⌸¨
for each list, call the following function for each unique element in that list, using the unique element as left argument (⍺
) and the list of indices of its occurrence as right argument (⍵
):≢⍵
the tally of indices (i.e. the number of occurrences)1=
equal to 1⍺⍴⍨
use that to reshape the specific element (i.e. gives empty list if non-unique)Now we have two lists of unique elements for each input list (although each element is a list, and there are empty lists as residue from the non-unique elements).
∩/
intersection (reduction)∊
ϵnlist (flatten)⌈/
max (reduction)* in Classic, counting
⌸
as⎕U2338
.quelle
MATL, 13 bytes
Try it online! Or Verify all test cases.
Explanation
quelle
PHP, 98 bytes
Provide arrays as GET parameters
a
andb
.quelle
Java 8, 133 bytes
Explanation:
Try it here.
quelle
R, 73 bytes
Try it online!
Computes
A
intersectB
, then the maximum of the difference between that and the duplicated elements ofA
andB
.quelle
JavaScript ES5,
122121114 bytesI'm new here, so I don't really know if I can remove the function definition and just put its contents (which would save me 17 bytes)
Here's the working example:
122121114122 to 121 bytes: Wrapping initialization in a for
121 to 114 bytes:
b
has to be a stringquelle
b
and saveb=''+b,
?f=(a,b)=>{for(b=''+b,i=a.sort().length;--i+1;)if(a[i]!=a[i+1]&&a[i]!=a[i-1]&&!(b.split(a[i]).length-2))return a[i]}
.SQLite, 118 bytes
Try it online!
First time in SQL, any help is welcome!
quelle
Jq 1.5, 76 bytes
Expanded
Try it online!
Here is another solution which is the same length:
Expanded
Try it online!
quelle
APL, 47 bytes
Declares an anonymous function that takes two vectors, eliminates duplicate elements, then finds the biggest element in the intersection of the results.
A←⍺
andB←⍵
store the arguments passed to the function inA
andB
.a=b
returns a vector with 1 in each index in whicha
is equal tob
. Ifa
is a scalar (i.e. single quantity and not a vector) this returns a vector with 1 wherever the element inb
isa
and 0 when it is not. For example:{+/⍵=A}
: nested anonymous function; find the occurrences of the argument in vectorA
and add them up i.e. find the number of occurrences of the argument inA
1={+/⍵=A}¨A
: apply the nested anonymous function to each element in A and find the ones that equal 1 i.e. unique elements((1={+/⍵=A}¨A)/A←⍺)
: having found the location of the unique elements, select just these elements in the original vector (/
selects from the right argument elements whose locations correspond to 1 in the left argument)R←((1={+/⍵=A}¨A)/A←⍺)∩(1={+/⍵=B}¨B)/B←⍵
: repeat the process for the second argument; now that we have just the unique elements, find the intersection i.e. common elements and store this in vectorR
R[⍒R]
: access the elements ofR
in decreasing order1↑R[⍒R]
: take the first element ofR
when it's sorted in decreasing orderTest case:
quelle
J, 30 bytes
How it works:
I start with testing where the two list overlap by
=/
(inserts equality test between all the members of the lists:More than one 1 in the same column means that the number is not unique for the left argument (6 in this case); in the row - for the right argument (3)
Then I sum up all rows and all columns to find where are the duplicates:
I find the cartesian product of the above lists and set the members greater than 1 to 0.
I mask the equality matrix c with m to find the unique elements that are common to both lists and multiply the left argument by this.
Then I flatten the list and find the max element:
Try it online!
quelle
C# (.NET Core),
66+31=9765+31=96 bytesTry it online!
+31 bytes for
using System;using System.Linq;
I took inspiration from @aloisdg's answer. However, instead of searching for unique values in both arrays, I inverted the order of operations so that
intersect
is first, and then find the max value of the items that occur twice when the arrays are concatenated and are in their intersect. I can use<3
asCount
will be at least 2 for any value, as it will be in both arrays.Acknowledgements
-1 byte thanks to @aloisdg and his suggestion to use
Func
currying.quelle
Octave,
5756 bytesAnonymous function that takes as input a cell array of two numerical arrays.
Try it online!
Explanation
For each (
cellfun(@(x)...)
) of the two input arrays, this creates a matrix of pairwise equality comparisons between its entries (x.'==x
); keeps (x(...)
) only the entries for which the column sum is1
(sum(...)==1
); and packs the result in a cell ({...}
). The intersection (intersect
) of the two results ({:}
) is computed, and the maximum (max(...)
) is taken.quelle
Wolfram Language (Mathematica), 49 bytes
Try it online!
quelle