O desafio
Você é dado:
- uma lista h vazia e não classificada de números inteiros positivos (o palheiro)
- um número inteiro positivo n (a agulha)
Sua tarefa é retornar a lista de todas as concatenações decimais exclusivas de permutações de h cuja representação binária contém a representação binária de n .
Exemplos
h = [1, 2, 3]
n = 65Há apenas uma concatenação correspondente, portanto a saída esperada é
[321]
.h = [1, 2, 3]
n = 7Desta vez, existem três concatenações que contêm o padrão binário 111 . A saída esperada é
[123, 231, 312]
.h = [12, 3]
n = 7Apenas duas permutações estão disponíveis e ambas são correspondentes. A saída esperada é
[123, 312]
.h = [1, 2, 2]
n = 15A única concatenação correspondente é 122 ( 1111010 em binário, que contém 1111 ), portanto a saída esperada é
[122]
. Observe que duas permutações realmente levam a 122, mas você não tem permissão para produzir[122, 122]
.
Esclarecimentos e regras
- Você pode usar a agulha como um número inteiro (
65
), uma string representando um valor decimal ("65"
) ou uma string representando um valor binário ("1000001"
). - Você pode usar o palheiro como uma matriz nativa / objeto / conjunto de números inteiros (
[11,12,13]
), uma matriz nativa / objeto / conjunto de seqüências representando valores decimais (["11","12","13"]
) ou uma sequência delimitada de valores decimais ("11 12 13"
ou"11,12,13"
). Você também pode optar por uma variante usando matrizes de dígitos (como[[1,1],[1,2],[1,3]]
). - A saída deve seguir um dos formatos descritos acima para o palheiro, mas não necessariamente o mesmo.
- Você não deve lidar com palheiros cuja concatenação decimal mais alta é maior que o número inteiro não assinado mais representável no seu idioma.
- Além disso, seu código deve teoricamente oferecer suporte a qualquer entrada - desde que seja concedido tempo e memória suficientes.
- Isso é
SPARTA!code-golf , então a resposta mais curta em bytes ganha!
Casos de teste
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 ]
fonte
set([(1, 2, 2)])
. É válido ou devo me livrarset
?["12","3"]
e["1","23"]
são dois palheiros distintas.Respostas:
05AB1E ,
108 bytesLeva a agulha em binário para economizar 1 byte.
-2 bytes graças a Emigna
Experimente online!
fonte
Python 2, 90 bytes
-3 bytes graças a @ Gábor Fekete
Experimente online
Toma como matriz de entrada de strings, representando entradas de feno e string, representando agulha em binário
fonte
{...}
vez deset(...)
salvar 3 bytes.H=['1'], N='0'
.Java 10,
320312305297292 bytesEntrada como Lista e String binária, saída como Strings em novas linhas.
Explicação:
Experimente aqui.
fonte
l->n->{...
depois,void p(...
pois o lambda é a resposta para o prompt e a função é necessária para que o lambda funcione. O consenso sobre "expressões de função" é algo como "a última 'expressão' de sua submissão pode ser uma 'expressão de função' se, quando armazenada em uma variável, atende aos requisitos de uma resposta de função" IIRC. Mas isso é apenas uma questão de formatação, e uma questão subjetiva.void
porque era menor que um segundo lambda e o múltiplo.apply
. Não marquei esta resposta (por exemplo,void p(List l,int k)
& 2xp(l,0)
versus(l,k)->
& 2xp.apply(l,0)
). Hmm .. o segundo parece ser 1 byte mais curto neste caso. Mas você diz que as regras afirmam que você só pode ter um método lambda? Ainda um pouco confuso por que tem que ser o último. Pessoalmente, eu sempre postar minhas respostas na seguinte ordem:imports; class-fields; main-method/lambda; other methods
.imports;helper methods;lambda
void p(List l,int k)
& 2xf(l,0);
versusf=(l,p)->
& 2xp.apply(l,0);
(o que significa que a versão atual é 1 byte mais curta). Quanto ao pedido, vou continuar com isso, já que o fiz com todas as minhas respostas, e também faz sentido para mim começar pessoalmente com o método principal da explicação e, em seguida, o (s) método (s) auxiliar (es), se existe algum.f=(lambda)
em Java, éjava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
Japt ,
1514131210 bytesToma o palheiro como uma matriz de números inteiros e a agulha como uma sequência binária. Produz uma matriz de cadeias inteiras.
Tente
Explicação
fonte
®¬nÃ
salva um byte no mapeamento. (Eu também moverâ
para o meio do programa para se livrar do segundoÃ
; não salva nenhum bytes, mas é um pouco mais eficiente e parece um pouco melhor)â
foi uma solução rápida pregado no final, quando Arnauld apontou que eu tinha esquecido para remover as duplicatas da matriz final, mas, você está certo, removendo as duplicatas antes de executar o filtro seria mais eficiente.Ruby ,
6159 bytesExperimente online!
Recurso interessante do dia: eu não sabia que poderia gerar a representação binária de uma string contendo um número.
Exemplo:
fonte
JavaScript (ES6), 140 bytes
Leva a agulha como uma corda binária.
Mostrar snippet de código
fonte
Braquilog , 15 bytes
Experimente online!
Explicação
fonte
Mathematica,
170156 bytesentrada
saída
fonte
v[#2, 2]
.CJam,
23222119 bytesEste é um bloco que recebe entradas
n h
na pilha e deixa a saída como uma matriz na pilha.Explicação:
fonte
R, 114 bytes
Usa vários pacotes.
pryr::f()
cria automaticamente uma função, obtendop
, uma sequência do padrão binário a ser procurada ex
um vetor com a outra entrada como entrada.combinat::permn
cria todas as permutações dex
.R.utils::intToBin
é uma versão agradável e cheia de palavras para converter um numérico (ou representação de um numérico) em um número binário, já convenientemente armazenado como um caractere. Portanto, aplique isso em todas as permutações e produza-as se a cadeia bináriap
estiver contida na versão binária da concatenação. Uma nova linha explícita é impressa, porque, caso contrário, a saída seria12 56 3456 34 1234 56 1234 12 56
.plyr
'sl_ply
é usado para suprimir a saída de uma lista nula, além da saída regular. Se uma saída como essa for permitida:Em seguida, podemos salvar alguns bytes usando
lapply
:108 bytes:
Se uma saída como essa for permitida:Então podemos fazê-lo ainda mais curto:
101 bytes:
Não permitido.fonte
Perl 6 , 69 bytes
fonte