Défi
Étant donné une liste arbitraire de 2-tuples, et un seul élément dans l'un de ces tuples, sortez son "partenaire", c'est-à-dire given a
et [(i,j),...,(a,b),...,(l,m)]
, output b
. Vous pouvez supposer que tous les tuples sont uniques et que tous les éléments des tuples sont des chaînes. Supposons en outre que vous n'avez pas les deux (x,y)
et (y,x)
.
Cas de test
Input Output
[("(", ")"), ("{", "}"), ("[", "]")], "}" "{"
[("I'm", "So"), ("Meta", "Even"), ("This", "Acronym")], "Even" "Meta"
[("I", "S"), ("M", "E"), ("T", "A")], "A" "T"
[("test", "cases"), ("are", "fun")], "test" "cases"
[("sad", "beep"), ("boop", "boop")], "boop" "boop"
Le moins d'octets gagne!
code-golf
array-manipulation
search
Nate Stemen
la source
la source
[a, b, c, d]
au lieu de[(a, b), (c, d)]
. Cela réduirait une tonne d'octets de ma réponse. : P(a,a)
spécifique et on m'a dit que cela n'arriverait pas . Nate a même édité la question pour préciser ce fait. Cependant, vous avez ajouté un cas de test avec une telle entrée et également modifié la spécification en inversant cette décision - pourquoi? C'est cassé un tas de réponses.Réponses:
Japt, 6 octets
Fonctionne avec des chaînes ou des entiers.
Essaye-le
Explication
Entrée implicite de tableau
U
et chaîne / entierV
.Obtenez le premier élément (sous-tableau) dans
U
ce ...Contient
V
.Supprimez
V
et renvoyez implicitement le tableau à un élément résultant.la source
f
plutôtæ
qu'à l'époque. Duh: Pæ
et essaie de se débrouiller avecf
! : DHaskell , 33 octets
Essayez-le en ligne!
Définit un opérateur binaire
!
, qui prend comme argument de gauche une valeurx
de type τ et comme argument de droite une liste de tuples (τ, τ). Le modèle de définition correspond à la tête(a,b)
et à la queuec
de la liste donnée; six==a
alorsb
est retourné; six==b
alorsa
est retourné, et sinon on continue à chercher dans le reste de la liste en récursif.(S'il n'y a pas de «partenaire» dans la liste, cela plantera, car nous n'avons pas défini ce qui
x![]
devrait être.)la source
JavaScript (ES6), 39 octets
Prend l'entrée et le tableau de tableaux comme arguments au curry. La meilleure version non récursive que je pouvais faire était de 44 octets:
la source
a=>b=>a.map(e=>b=e[1-e.indexOf(b)]||b)&&b
(a,b)=>
=>a=>b=>
, mais la version non récursive a commencé à partir de la version récursive, qui a été curry parce que j'ai pu économiser 2 octets sur l'appel récursif (le curry lui-même coûte réellement un octet).MATL ,
41456 octetsEssayez-le en ligne!
L'entrée est un tableau en tant que
[{a;b},{c;d}]
. Bytecount fluctue fortement pendant que le PO détermine ce qui est réellement autorisé.J'ai commencé avec une version à 4 octets qui ne pouvait gérer que des chaînes de caractères uniques, ce qui était le seul cas test du défi d'origine. Lorsque cela s'est avéré invalide, j'ai fait une très longue version de 14 octets, qui était agréable et hacky (vérifiez l'historique des révisions!), M'a fait découvrir un bug, puis s'est avéré complètement inutile car
Y=
, avec une entrée appropriée , fonctionnait aussi bien que mon 4 octets d'originey=P)
.la source
Python 2 , 37 octets
Essayez-le en ligne!
Proton , 31 octets
Essayez-le en ligne!
(Ces deux réponses sont si similaires que je les poste ensemble pour éviter de repfarming)
la source
reversed
lereverse
en Proton pour -1 octet. \ s: P Plus sérieusement,reverse
est-ce un bien meilleur nom, non? : PPerl 5 , 30 + 1 (-p) = 31 octets
Essayez-le en ligne!
la source
Python 2 ,
594542 octets-14 octets grâce à Emigna. -3 octets grâce à Maltysen.
Essayez-le en ligne!
Je veux toujours utiliser le curry. ; -;
la source
y+[1,-1][y%2]
. Je ne pensais pas que c'était au niveau du bit ... Merci!C ++, 179 octets
C ++ avec type de données de carte, 162 octets
Avec MSVC, le code se compile même si la dernière
return
instruction (return"";
) est omise. Cela rend le code 9 octets plus léger, MAIS la sortie par la fin de la fonction (c'est-à-dire la non-sortie par unereturn
instruction dans la boucle) sans instruction de retour entraînera un comportement indéfini et ne fonctionnera pas si le tableau de tuple ne contient pas l'élément "key"la source
PowerShell, 36 octets
trouve l'élément contenant l'entrée, puis obtient l'élément `` autre '' en excluant l'entrée de celui-ci, PowerShell n'a pas la gestion de tableau la plus étonnante mais il pourrait y avoir une fonction intégrée pour cela dont je ne suis pas au courant.
la source
("boop", "boop")
cas de test.Röda , 30 octets
Essayez-le en ligne!
Explication:
la source
Mathematica
2724 octetsCases
sélectionne les éléments d'une liste qui correspondent à un modèle. Lorsqu'il est utilisé avec une flèche, les éléments correspondant aux motifs peuvent être transformés.Usage:
Explication: Dans cet exemple, après avoir rencontré le premier argument, 3, la fonction devient
Cases[{3,x_}|{x_,3}:>x]
qui est une forme opérateurCases
qui est ensuite appliquée au 2ème argument,{{1, 2}, {3, 4}}
sélectionnant ainsi le compagnon de 3, que ce soit en abscisse ou en position ordonnée. Notamment, cette fonction listera tous les compagnons si en fait le 1er argument apparaît plus d'une fois dans le 2ème argument, en d'autres termes, cela va un peu au-delà des hypothèses de la question posée.Les glyphes fermants doivent être des accolades ondulées. 3 octets enregistrés avec la suggestion "Currying" de @Notatree
la source
Cases[{#,x_}|{x_,#}:>x]&
utilisé comme%[3][{{1,2},{3,4}}]
R , 47
42octetsEssayez-le en ligne!
Fonctionne sur une matrice ou un vecteur droit. v = la valeur de recherche, a = tableau de tuple.
la source
Gelée , 6 octets
Un lien dyadique prenant la liste des partenaires à gauche et le partenaire perdu à droite et renvoyant le partenaire.
Essayez-le en ligne!
Comment?
la source
(a,a)
et on m'a dit que nous n'avions pas besoin de le gérer). Je suis sûr que je pourrais le réparer, mais je ne sais pas si la spécification est telle qu'elle était prévue maintenant.Pyth -
1198 octetsEssayez-le en ligne ici .
la source
Haskell ,
6562 octetsEssayez-le en ligne!
Explication
Cela utilise span pour trouver la première instance où
x
est contenu par le tuple. Il saisit ensuite le premier élément du tuple s'il n'est pas égal et le second sinon.Haskell Lambdabot,
5956 octetsEssayez-le en ligne!
Explication
Cela utilise la fonction
Data.List
sfirst
pour réduire les octets utilisés par(!!0).snd.span
, cependant, carfirst
renvoie un queMaybe
nous devons ajouterJust
à notre correspondance de modèle dans#
.la source
x!((a,b):c)|x==a=b|x==b=a|1<2=x!c
c'est 33 octets.05AB1E , 7 octets
Essayez-le en ligne!
Solution alternative à 7 octets
Essayez-le en ligne!
la source
˜D²k>è
pour 6, à moins qu'il n'y ait une raison spécifique pour XOR'ing avec 1?Lisp commun, 74 octets
Essayez-le en ligne!
la source
Java 8, 78 octets
Un lambda (au curry) de
Stream<List<String>>
à un lambda deString
àString
(bien qu'un typage implicite arrive pour permettre à cela de fonctionner pour des listes arbitraires). Le langage n'a pas de classes de tuple dédiées, et je n'en connais pas dans la bibliothèque standard, donc les paires d'entrée sont représentées sous forme de listes. Peut être affecté àFunction<Stream<List<String>>, Function<String, String>>
.Essayez-le en ligne
Je créditerai la sauvegarde des 6 derniers octets à toute personne pouvant me convaincre que le retour d'un
Optional
est valide. Je n'ai pas réussi à me convaincre.Pour moi, l'une des parties intéressantes de cette solution consistait à déterminer le moyen le moins cher d'obtenir la sortie du flux. J'ai considéré
reduce
,,findFirst
etmin
/max
, mais aucun n'était plus court que l'intuitiffindAny
.la source
Rubis, 31 octets
Renvoie un tableau singleton.
la source
JavaScript (ES6), 45 octets
Je suis venu avec cette dernière nuit, puis j'ai remarqué que Neil m'avait battu pour une meilleure solution JS; pensé que je pourrais aussi bien le poster de toute façon.
Fonctionne avec des chaînes et des entiers.
la source
Prolog (SWI) , 43 octets
Essayez-le en ligne!
la source
C # (.NET Core) ,
101+ 18 octetsmerci à Grzegorz Puławski d'avoir aidé à réduire quelques octets.
Essayez-le en ligne!
C # (.NET Core),
122121120 octetsEssayez-le en ligne!
la source
x=>y=>
est plus court que(x,y)=>
(Func<a, b, c>
devientFunc<a, Func<b, c>>
et l'appel de fonctionf(a, b)
devientf(a)(b)
) - Excellente réponse btw!using System.Linq;
contrenamespace System.Linq{}
)Husk , 10 octets
Essayez-le en ligne!
Non golfé / Explication
Remarque : l'exemple ci-dessus fonctionne sur des entiers juste pour des raisons de lisibilité, le type lui-même n'a pas d'importance (tant que vous pouvez le comparer).
la source
Swift 4 , 43 octets
La sortie est un tableau, qui est soit vide (aucun partenaire trouvé), soit a un seul élément (le partenaire).
Cas de test:
la source
QBIC , 30 octets
QBIC n'est pas fort sur les listes et les tuples. Le code ci-dessus prend
a
comme paramètre de ligne de commande, puis demande l'entrée utilisateur par paires pour les tuples. Lorsqu'un élément vide est donné, il sortb
.Exemple d'exécution
Explication
Version alternative, 22 octets
Cela fait essentiellement la même chose que la version plus longue, mais se ferme immédiatement lorsqu'il trouve une correspondance. Je l'ai répertorié comme alternative, car vous ne pouvez pas saisir tous les tuples dans ce programme étant donné qu'il se ferme tôt.
la source
Mathematica, 50 octets
Essayez-le en ligne!
la source
{'boop','boop'}
testcase.Empilé , 21 octets
Essayez-le en ligne! Cela prend l'entrée de la pile et laisse la sortie sur la pile. Développé, cela ressemble à:
Explication
Prenons
(('sad' 'beep') ('boop' 'boop'))
et'boop'
comme entrée. Ensuite, un tableau comme celui-ci est construit par:$revmap,
:C'est-à-dire qu'une copie du tableau est mappée, chaque membre est inversé et les deux sont concaténés ensemble.
KeyArray
à son tour crée un hachage des valeurs données, comme ceci:Ensuite, place
\
la chaîne de recherche en haut de la pile et obtient la clé du KeyArray qui correspond à#
. Cela ne renvoie qu'une seule valeur, il n'est donc pas nécessaire de s'inquiéter de la clé en double dans le KeyArray.D'autres approches
32 octets: (entrée de la pile, sortie vers STDOUT)
[@x:$revmap,uniq[...x=$out*]map]
36 octets:
{%x[y index#+]YES 0# :y neq keep 0#}
38 octets:
[@x:$revmap#,[KeyArray x#]map:keep 0#]
46 octets:
[@x:KeyArray\$revmap KeyArray,[x#]map:keep 0#]
la source
Excel, 18 octets
Formule de classeur Excel anonyme qui prend les entrées
<Lookup Value>
de la plageA1
,<Key Array>
de la plageB:B
et<Def Array>
de la plageC:C
et renvoie la valeur de la définition associée à la valeur de recherche à la cellule appelanteDes échantillons d'E / S doivent être inclus lorsque cela est possible
la source