Desafío
Dada una lista arbitraria de 2 tuplas, y un solo elemento en una de esas tuplas, genera su "compañero", es decir, dado a
y [(i,j),...,(a,b),...,(l,m)]
, salida b
. Puede suponer que todas las tuplas son únicas y que todos los elementos de las tuplas son cadenas. Además, suponga que no tiene ambos (x,y)
y (y,x)
.
Casos de prueba
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"
¡Pocos bytes ganan!
code-golf
array-manipulation
search
Nate Stemen
fuente
fuente
[a, b, c, d]
lugar de[(a, b), (c, d)]
. Afeitaría una tonelada de bytes de mi respuesta. : P(a,a)
y me dijeron que no sucedería . Nate incluso editó la pregunta para especificar este hecho. Sin embargo, ha agregado un caso de prueba con dicha entrada y también editó la especificación que revierte esta decisión: ¿por qué? Se ha roto un montón de respuestas.Respuestas:
Japt, 6 bytes
Funciona con cadenas o enteros.
Pruébalo
Explicación
Entrada implícita de matriz
U
y cadena / enteroV
.Obtenga el primer elemento (subarreglo) en
U
eso ...Contiene
V
.Elimine
V
y devuelva implícitamente la matriz resultante de un solo elemento.fuente
f
lugar deæ
en ese momento. Duh: Pæ
y trata de salir del pasof
! : DHaskell , 33 bytes
Pruébalo en línea!
Define un operador binario
!
, que toma como argumento izquierdo un valorx
de tipo τ y como argumento derecho una lista de tuplas (τ, τ). El patrón de definición coincide en la cabeza(a,b)
y la colac
de la lista dada; six==a
luegob
se devuelve; six==b
luegoa
se devuelve, y de lo contrario seguimos buscando en el resto de la lista recurriendo.(Si no hay un "socio" en la lista, se bloqueará porque no definimos lo que
x![]
debería ser).fuente
JavaScript (ES6), 39 bytes
Toma la entrada y la matriz de matrices como argumentos curriculares. La mejor versión no recursiva que pude hacer fue de 44 bytes:
fuente
a=>b=>a.map(e=>b=e[1-e.indexOf(b)]||b)&&b
(a,b)=>
=>a=>b=>
, pero la versión no recursiva comenzó a partir de la versión recursiva, que fue curry porque pude ahorrar 2 bytes en la llamada recursiva (el curry en realidad cuesta un byte)MATL ,
41456 bytesPruébalo en línea!
La entrada es una matriz como
[{a;b},{c;d}]
. El recuento de bytes fluctúa fuertemente mientras el OP descubre lo que realmente está permitido.Comencé con una versión de 4 bytes que solo podía manejar cadenas de un solo carácter, que era el único caso de prueba en el desafío original. Cuando esto resultó no ser válido, hice una versión muy larga de 14 bytes, que era agradable y hacky (¡revise el historial de revisiones!), Me hizo descubrir un error y luego resultó ser completamente innecesario
Y=
, ya que con la entrada adecuada , funcionó tan bien como mi original de 4 bytesy=P)
.fuente
Python 2 , 37 bytes
Pruébalo en línea!
Protón , 31 bytes
Pruébalo en línea!
(Estas dos respuestas son tan similares que las publico juntas para evitar repfarming)
fuente
reversed
areverse
Proton por -1 byte. \ s: P Más en serio,reverse
es un nombre mucho mejor, ¿no? : PPerl 5 , 30 + 1 (-p) = 31 bytes
Pruébalo en línea!
fuente
Python 2 ,
594542 bytes-14 bytes gracias a Emigna. -3 bytes gracias a Maltysen.
Pruébalo en línea!
Sin embargo, todavía quiero usar curry. ; -;
fuente
y+[1,-1][y%2]
. Simplemente no pensé que fuera un poco ... ¡Gracias!C ++, 179 bytes
C ++ con tipo de datos de mapa, 162 bytes
Con MSVC, el código se compila incluso si se omite la última
return
instrucción (return"";
). Hace que el código sea 9 bytes más liviano, PERO salir por el final de la función (es decir, no salir por unareturn
declaración en el bucle) sin declaraciones de retorno causará un comportamiento indefinido y no funcionará si la matriz de tuplas no contiene el elemento "clave"fuente
PowerShell, 36 bytes
encuentra el elemento que contiene el intput, luego obtiene el 'otro' elemento al excluir la entrada de él, PowerShell no tiene la administración de matriz más sorprendente, pero puede haber una función incorporada para esto que no conozco.
fuente
("boop", "boop")
caso de prueba.Röda , 30 bytes
Pruébalo en línea!
Explicación:
fuente
Mathematica
2724 BytesCases
selecciona elementos de una lista que coinciden con un patrón. Cuando se usa con una flecha, los elementos que coinciden con los patrones se pueden transformar.Uso:
Explicación: en este ejemplo, después de encontrar el primer argumento, 3, la función se convierte en
Cases[{3,x_}|{x_,3}:>x]
una forma de operadorCases
que luego se aplica al segundo argumento,{{1, 2}, {3, 4}}
seleccionando así el compañero de 3, ya sea en la posición de abscisa u ordenada. Notablemente, esta función enumerará a todos los compañeros si de hecho el primer argumento aparece más de una vez dentro del segundo argumento, en otras palabras, esto va un poco más allá de los supuestos de la pregunta planteada.Los glifos que encierran deben ser llaves onduladas. Guardado 3 bytes con la sugerencia "Curry" de @Notatree
fuente
Cases[{#,x_}|{x_,#}:>x]&
utilizado como%[3][{{1,2},{3,4}}]
R , 47
42bytesPruébalo en línea!
Funciona en una matriz o en un vector lineal. v = el valor de búsqueda, a = matriz de tuplas.
fuente
Jalea , 6 bytes
Un enlace diádico que toma la lista de socios a la izquierda y el compañero perdido a la derecha y devuelve al compañero.
Pruébalo en línea!
¿Cómo?
fuente
(a,a)
y me dijeron que no teníamos que manejarlo). Estoy seguro de que podría solucionarlo, pero no estoy seguro si la especificación es como estaba prevista ahora.Pyth -
1198 bytesPruébelo en línea aquí .
fuente
Haskell ,
6562 bytesPruébalo en línea!
Explicación
Esto utiliza span para encontrar la primera instancia donde
x
está contenida la tupla. Luego toma el primer elemento de la tupla si no es igual y el segundo de lo contrario.Haskell Lambdabot,
5956 bytesPruébalo en línea!
Explicación
Esto utiliza
Data.List
lafirst
función s para reducir los bytes utilizados por(!!0).snd.span
, sin embargo, porquefirst
devuelve unMaybe
necesitamos agregarJust
a nuestra coincidencia de patrón#
.fuente
x!((a,b):c)|x==a=b|x==b=a|1<2=x!c
son 33 bytes.05AB1E , 7 bytes
Pruébalo en línea!
Solución alternativa de 7 bytes
Pruébalo en línea!
fuente
˜D²k>è
para 6, a menos que haya una razón específica para XOR'ing con 1?Lisp común, 74 bytes
Pruébalo en línea!
fuente
Java 8, 78 bytes
Una lambda (al curry) de
Stream<List<String>>
a una lambda deString
aString
(aunque la escritura implícita permite que esto funcione para listas arbitrarias). El lenguaje no tiene clases de tupla dedicadas, y no conozco ninguna en la biblioteca estándar, por lo que los pares de entrada se representan como listas. Se puede asignar aFunction<Stream<List<String>>, Function<String, String>>
.Pruébalo en línea
Acreditaré el ahorro de los últimos 6 bytes a cualquiera que pueda convencerme de que devolver un
Optional
es válido. No he podido convencerme a mí mismo.Una de las partes interesantes de esta solución para mí fue determinar la forma más barata de obtener la salida de la transmisión. Lo consideré
reduce
,findFirst
ymin
/max
, pero ninguno fue más corto que el intuitivofindAny
.fuente
Ruby, 31 bytes
Devuelve una matriz singleton.
fuente
JavaScript (ES6), 45 bytes
Se me ocurrió esto anoche y luego noté que Neil me había golpeado para una mejor solución JS; Supuse que también podría publicarlo de todos modos.
Funciona con cuerdas y enteros.
fuente
Prólogo (SWI) , 43 bytes
Pruébalo en línea!
fuente
C # (.NET Core) ,
101+ 18 bytesGracias a Grzegorz Puławski por ayudarnos a reducir un par de bytes.
Pruébalo en línea!
C # (.NET Core),
122121120 bytesPruébalo en línea!
fuente
x=>y=>
es más corto que(x,y)=>
(seFunc<a, b, c>
convierteFunc<a, Func<b, c>>
y la llamada a la función sef(a, b)
conviertef(a)(b)
)using System.Linq;
versusnamespace System.Linq{}
)Casco , 10 bytes
Pruébalo en línea!
Ungolfed / Explicación
Nota : El ejemplo anterior funciona en enteros solo por razones de legibilidad, el tipo en sí mismo no importa (siempre y cuando pueda compararlo).
fuente
Swift 4 , 43 bytes
La salida es una matriz, que está vacía (no se encontró ningún socio) o tiene un solo elemento (el socio).
Casos de prueba:
fuente
QBIC , 30 bytes
QBIC no es fuerte en listas y tuplas. El código anterior toma
a
como parámetro de línea de comando, luego solicita la entrada del usuario en pares para las tuplas. Cuando se da un elemento vacío, generab
.Ejecución de la muestra
Explicación
Versión alternativa, 22 bytes.
Básicamente, hace lo mismo que la versión más larga, pero se cierra inmediatamente cuando encuentra una coincidencia. He enumerado esto como la alternativa, porque no puede ingresar todas las tuplas en este programa dado que se cierra antes.
fuente
Mathematica, 50 bytes
Pruébalo en línea!
fuente
{'boop','boop'}
prueba.Apilado , 21 bytes
Pruébalo en línea! Esto toma la entrada de la pila y deja la salida en la pila. Ampliado, esto se ve así:
Explicación
Tomemos
(('sad' 'beep') ('boop' 'boop'))
y'boop'
como entrada. Entonces, una matriz como esta es construida por:$revmap,
:Es decir, una copia de la matriz es map, cada miembro se invierte y los dos se concatenan juntos.
KeyArray
a su vez hace un hash de los valores dados, así:Luego,
\
lleva la cadena de búsqueda a la parte superior de la pila y obtiene la clave de KeyArray que coincide con#
. Esto devuelve solo un valor, por lo que no es necesario preocuparse por la clave duplicada en KeyArray.Otros enfoques
32 bytes: (entrada de la pila, salida a STDOUT)
[@x:$revmap,uniq[...x=$out*]map]
36 bytes:
{%x[y index#+]YES 0# :y neq keep 0#}
38 bytes:
[@x:$revmap#,[KeyArray x#]map:keep 0#]
46 bytes:
[@x:KeyArray\$revmap KeyArray,[x#]map:keep 0#]
fuente
Excel, 18 bytes
Fórmula anónima del libro de Excel que toma la entrada como
<Lookup Value>
desde el rangoA1
,<Key Array>
desde el rangoB:B
y<Def Array>
desde el rangoC:C
, y genera el valor de la definición asociada con el valor de búsqueda en la celda de llamadaSe incluirán muestras de E / S cuando sea posible
fuente