El reto
Te dan:
- una lista no ordenada no ordenada h de enteros positivos (el pajar)
- un entero positivo n (la aguja)
Su tarea es devolver la lista de todas las concatenaciones decimales únicas de permutaciones de h cuya representación binaria contiene la representación binaria de n .
Ejemplos
h = [1, 2, 3]
n = 65Solo hay una concatenación coincidente, por lo que el resultado esperado es
[321]
.h = [1, 2, 3]
n = 7Esta vez, hay tres concatenaciones que contienen el patrón binario 111 . La salida esperada es
[123, 231, 312]
.h = [12, 3]
n = 7Solo hay dos permutaciones disponibles y ambas coinciden. La salida esperada es
[123, 312]
.h = [1, 2, 2]
n = 15La única concatenación coincidente es 122 ( 1111010 en binario, que contiene 1111 ), por lo que la salida esperada es
[122]
. Tenga en cuenta que dos permutaciones en realidad conducen a 122 pero no se le permite salir[122, 122]
.
Aclaraciones y reglas.
- Puede tomar la aguja como un entero (
65
), una cadena que representa un valor decimal ("65"
) o una cadena que representa un valor binario ("1000001"
). - Puede tomar el pajar como una matriz / objeto / conjunto nativo de enteros (
[11,12,13]
), una matriz / objeto / conjunto nativo de cadenas que representan valores decimales (["11","12","13"]
) o una cadena delimitada de valores decimales ("11 12 13"
o"11,12,13"
). También puede optar por una variante utilizando matrices de dígitos (como[[1,1],[1,2],[1,3]]
). - La salida debe seguir uno de los formatos descritos anteriormente para el pajar, pero no necesariamente el mismo.
- Se supone que no debe manejar pajar cuya concatenación decimal más alta es mayor que el entero sin signo representable más alto en su idioma.
- Aparte de eso, su código debería admitir teóricamente cualquier entrada, suponiendo que se le dé suficiente tiempo y memoria.
- ¡Esto es
SPARTA!code-golf , por lo que gana la respuesta más corta en bytes.
Casos de prueba
Haystack | Needle | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ] | 65 | [ 321 ]
[ 1, 2, 3 ] | 7 | [ 123, 231, 312 ]
[ 12, 3 ] | 7 | [ 123, 312 ]
[ 1, 2, 2 ] | 15 | [ 122 ]
[ 1, 2 ] | 7 | []
[ 12, 34, 56 ] | 21 | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ] | 511 | [ 53241 ]
[ 1, 3, 5, 7, 9 ] | 593 | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ] | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015 | [ 221112 ]
fuente
set([(1, 2, 2)])
. ¿Es válido o debo deshacerme de élset
?["12","3"]
y["1","23"]
son dos montones de heno distintas.Respuestas:
05AB1E ,
108 bytesToma la aguja en binario para guardar 1 byte.
-2 bytes gracias a Emigna
Pruébalo en línea!
fuente
Python 2, 90 bytes
-3 bytes gracias a @ Gábor Fekete
Pruébalo en línea
Toma como matriz de entrada de cadenas, que representan entradas de heno y cadenas, que representan agujas en binario
fuente
{...}
lugar deset(...)
guardar 3 bytes.H=['1'], N='0'
.Java 10,
320312305297292 bytesEntrada como List & binary-String, salida como Strings en nuevas líneas.
Explicación:
Pruébalo aquí
fuente
l->n->{...
después,void p(...
ya que la lambda es la respuesta a la solicitud y la función es necesaria para que la lambda funcione. El consenso sobre "expresiones de función" es algo así como "la última 'expresión' de su envío puede ser una 'expresión de función' si cuando se almacena en una variable cumple los requisitos de una respuesta de función" IIRC. Pero eso es solo un problema de formato, y uno subjetivo.void
porque era más corto que un segundo lambda y el múltiple.apply
. No lo he verificado para esta respuesta (es decir,void p(List l,int k)
& 2xp(l,0)
versus(l,k)->
& 2xp.apply(l,0)
). Hmm ... el segundo parece ser 1 byte más corto en este caso. ¿Pero dice que las reglas establecen que solo se le permite tener un método lambda? Todavía un poco confundido por qué tiene que ser el último. Personalmente siempre publicar mis respuestas en este orden:imports; class-fields; main-method/lambda; other methods
.imports;helper methods;lambda
void p(List l,int k)
& 2xf(l,0);
versusf=(l,p)->
& 2x en sup.apply(l,0);
lugar (lo que significa que la versión actual es 1 byte más corta). En cuanto al pedido, me quedaré con esto ya que lo hice con todas mis respuestas, y también tiene sentido para mí personalmente comenzar con el método principal en la explicación, y luego el (los) método (s) auxiliar (es) si hay algunos.f=(lambda)
en Java, esjava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
Japt ,
1514131210 bytesToma el pajar como un conjunto de enteros y la aguja como una cadena binaria. Emite una matriz de cadenas enteras.
Intentalo
Explicación
fuente
®¬nÃ
guarda un byte en el mapeo. (También me moveríaâ
a la mitad del programa para deshacerme del segundoÃ
; no guarda ningún byte, pero es un poco más eficiente y se ve un poco mejor)â
era una solución rápida tachuelas en el final, cuando Arnauld señaló que había olvidado a eliminar los duplicados de la matriz final, pero, tienes razón, la eliminación de los duplicados antes de ejecutar el filtro sería más eficiente.Ruby ,
6159 bytesPruébalo en línea!
Característica genial del día: no sabía que podía generar la representación binaria de una cadena que contiene un número.
Ejemplo:
fuente
JavaScript (ES6), 140 bytes
Toma la aguja como una cadena binaria.
Mostrar fragmento de código
fuente
Brachylog , 15 bytes
Pruébalo en línea!
Explicación
fuente
Mathematica,
170156 bytesentrada
salida
fuente
v[#2, 2]
.CJam,
23222119 bytesEste es un bloque que toma entradas
n h
en la pila y deja la salida como una matriz en la pila.Explicación:
fuente
R, 114 bytes
Utiliza un montón de paquetes.
pryr::f()
crea automáticamente una función, tomandop
, una cadena del patrón binario a buscar yx
un vector con la otra entrada como entrada.combinat::permn
crea todas las permutaciones dex
.R.utils::intToBin
es una versión agradable y prolija para convertir un número (o representación de caracteres de un número) en un número binario, ya convenientemente almacenado como un carácter. Aplicando esto sobre todas las permutaciones y emitiéndolas si la cadena binariap
está contenida en la versión binaria de la concatenación. Se imprime una nueva línea explícita, porque de lo contrario la salida sería12 56 3456 34 1234 56 1234 12 56
.plyr
'sl_ply
se usa para eliminar la salida de una lista nula, además de la salida regular. Si se permite una salida como esta:Entonces podemos guardar algunos bytes usando en su
lapply
lugar:108 bytes:
Si se permite una salida como esta:Entonces podemos hacerlo aún más corto:
101 bytes:
No permitido.fuente
Perl 6 , 69 bytes
fuente