Dado um número inteiro positivo n
, produza as 2^n
seqüências binárias de comprimento n
classificadas na seguinte ordem precisa.
Casos de teste:
0:
0 or 1 (defining this is a matter of debate)
1:
0
1
2:
00
01
10
11
3:
000
001
010
100
011
101
110
111
4:
0000
0001
0010
0100
1000
0011
0101
1001
0110
1010
1100
0111
1011
1101
1110
1111
etc.
Além disso, o padrão combinatório está relacionado ao triângulo de Pascal.
0:
1 (this is given regardless of the definition given to 2^0)
1:
1
1
2:
1
2
1
3:
1
3
3
1
4:
1
4
6
4
1
etc.
code-golf
combinatorics
binary
desarmar
fonte
fonte
Respostas:
Haskell, 78 bytes
Exemplo de uso:
f 2
->[[0,0],[0,1],[1,0],[1,1]]
.Como funciona:
fonte
Prelude
para<$
eData.List
parasortOn
). Além disso: meu código não é um programa completo, portanto não será compilado.sortOn
. Vou sentir faltasortBy (compare `on` f)
.Python 2, 146 bytes
Ainda estou trabalhando nisso, embora todas as sugestões sejam muito apreciadas!
Ungolfed
fonte
from itertools import*
e depois apenas usepermutations
no lambda. salva 1 bytePython 2,
12212010298 bytes18 bytes economizados graças ao Flp.Tkc
4 bytes salvos graças ao xnor
Explicação
Isso cria todas as cadeias binárias de comprimento x com:
Eu os classifico de acordo com:
sorted(x)
prioriza o número de1
s enquantoint(x[::-1],2)
prioriza a segunda condiçãoPor fim, estas são associadas a novas linhas e impressas.
fonte
Perl, 63 bytes
-4 graças a @Ton Hospel.
-2 graças a @Gabriel Benamy.
Execute com
-E
(que habilita o recursosay
):Breves explicações :
"{1,0}"x$_
cria uma sequência composta de$_
tempos{1,0}
($_
é a entrada). Por exemplo, com3
:{1,1}{1,0}{1,0}
.glob
faz alguma mágica e gera todas as combinações de um elemento de cada grupo de chaves (ou seja, todas as combinações que queremos imprimir).$b=~y/1//c-$a=~y/1//c
compara o número de1
em cada sequência e, se eles tiverem o mesmo número,$b-$a
serão classificados de acordo com a segunda regra.fonte
y/1//c
paray/0//
ambas as vezesy///c
!<=>
por-
Perl,
116106105102 bytesLegível:
A subrotina
e
converte seu argumento em um valor binário, preenchido com zeros, para ser o comprimento da entrada (por exemplo, entrada de 5 blocos com zeros até os 5 caracteres). A subf
- rotina assume um valor binário e atribui um peso de classificação de acordo com a forma como deve ser processado.O intervalo 0 .. [entrada] 2 -1 é então submetido a uma classificação estável, ordenando pelo peso (aqui, "stable" significa que quando dois valores têm o mesmo peso, eles são retornados na mesma ordem em que aparecem no entrada) e, em seguida, são retornados à sub-rotina
e
e à saída.Alguns de vocês podem ter visto minha postagem original, mas ontem li errado o problema e o excluí imediatamente depois que percebi.
fonte
n>=5
. Por exemplo, comn>=5
,01101
vem antes,10011
mas deve ser depois.Raquete 109 bytes
Ungolfed:
Teste:
Resultado:
fonte
Ruby 2.x, 129 bytes
fonte
PHP, 49 bytes
Corra com
-r
.fonte
MATLAB, 68 bytes
fonte
Bash, 65 bytes
Golfe
Teste
fonte
Gelatina , 14 bytes
Experimente online!
Surpreendeu que isso ainda não tivesse sido publicado.
fonte