Entrada
- Uma lista de 1 a 255 números inteiros positivos (inclusive), cada um no intervalo de 1 a 2 32 - 1 (inclusive).
- Seu formato de entrada não precisa ser idêntico aos casos de teste.
- A entrada sem zeros à esquerda é necessária para ser aceita.
- A entrada com zeros à esquerda não precisa ser aceita.
- Você pode usar o delimitador que desejar entre os números inteiros.
- Um número inteiro pode ser representado por uma sequência, mas os dígitos individuais de um número inteiro específico devem ser contíguos.
- Você pode optar por usar qualquer base para a entrada (incluindo binária e unária), desde que a saída também esteja nessa base.
Saída
- Um único inteiro.
- A saída não deve ter zeros à esquerda.
- A saída deve estar na mesma base que a entrada.
- A saída pode ser calculada da maneira que você desejar, mas deve corresponder ao resultado do seguinte cálculo:
Calculando biplex
- Os bits de uma representação binária são numerados da direita, começando do zero, então o bit i está na coluna que representa 2 i .
- O i th Bitsum é a soma dos i th bits das representações binárias de cada um dos números de entrada.
- O máximo de bits é o valor mais alto obtido pelos bits.
- O mínimo de bits é o menor valor diferente de zero obtido pelos bits.
- O i- ésimo dígito da representação binária da saída é:
- 1 se o i- ésimo bit for igual ao máximo de bits ou mínimo de bits.
- 0 caso contrário.
Exemplo trabalhado
Este exemplo usa binário para entrada e saída.
Input: 100110
1101110
1100101
_______
Bitsums: 2301321
Output: 101101
O máximo de bits é 3 e o mínimo de bits é 1; portanto, a saída tem 1s em todos os lugares em que o bitsum é 3 ou 1 e 0s em qualquer outro lugar.
Casos de teste
Os casos de teste estão no formato:
Input => Output
Os casos de teste em binário:
[1] => 1
[10] => 10
[1, 10, 101] => 111
[11111111111111111111111111111111] => 11111111111111111111111111111111
[10010010010010010010010010010010, 10101010101010101010101010101010, 11011011011011011011011011011011] => 11100011100011100011100011100011
[10001011100010100110100101001001, 10110000111110010000111110111010, 1101110001101101011010010100101, 1010101010001011101001001010101] => 11
Os mesmos casos de teste em decimal:
[1] => 1
[2] => 2
[1, 2, 5] => 7
[4294967295] => 4294967295
[2454267026, 2863311530, 3681400539] => 3817748707
[2341103945, 2969112506, 1849078949, 1430639189] => 3
Entre os melhores
Agradecimentos ao snippet da tabela de classificação de Martin
O operador foi nomeado biplex, abreviação de extremo do plano binário, após discussão no chat .
code-golf
base-conversion
binary
Trichoplax
fonte
fonte
You may choose to use any base for input and output (including binary and unary), provided they are both in the same base
. Então, sim, ir para ele :)Respostas:
Gelatina, não concorrente
14 bytes Esta resposta não é competitiva, pois o desafio antecede a criação do Jelly.
Experimente online!
Como funciona
fonte
Pitão,
2625 bytesExperimente on-line: Demonstration or Test Suite
Explicação
fonte
_B
uso é brilhanteJ,
3130242321 bytesÉ um verbo tácito e monádico que pega uma lista de números inteiros decimais e retorna seu biplex decimal.
Agradecemos a @Zgarb por suas sugestões, que salvaram 4 bytes diretamente e abriram o caminho para mais 2!
Graças a @randomra por jogar fora mais 2 bytes!
Casos de teste
Como funciona
fonte
Minkolang 0.10 ,
10979 bytesEntrada e saída estão em decimal. Experimente aqui.
Explicação
Versão antiga:
Experimente aqui!
Explicação
O ponto crucial disso é que o recurso de matriz é muito usado (
a A
) para armazenar as somas de bits, das quais o mínimo e o máximo são encontrados,1
e se os0
s são emitidos adequadamente, com o despejo dos0
s principais em dois lugares.fonte
Brainfuck , 619 bytes
A primeira resposta é longa demais aqui, então pensei em fazer uma boa!
Eu ganhei?
Este programa espera novas linhas (ASCII
10
) após cada número binário e requer um espaço (ASCII32
) no final.Execuções de teste:
(Novas linhas adicionadas após cada caso e
++++++++++.
adicionadas ao final do programa)Explicação
Ainda um trabalho em andamento, mas lento. Por falta de tempo, acabei de copiar as anotações que fiz enquanto escrevia este programa, o que será suficiente para uma explicação por enquanto:
fonte
CJam, 27 bytes
Recebe a entrada como uma lista no estilo CJam de base 10. Teste aqui. Como alternativa, execute todos os casos de teste (o script descarta a saída esperada e converte o formato de entrada conforme necessário).
Explicação
fonte
1
s nos bits que correspondem aos planos de bits em que os mínimos e máximos ocorreram.JavaScript (ES6),
215185176 bytesUso
Explicação
fonte
f=(a)=>{}
=f=a=>{}
2) Você pode transformar seusfor...in
loops emfor...of
loops, economizando alguns bytes:for(i in a)for(b=a[i]...
=for(i of a)for(b=i...
,for(i in s)r=s[i],d=...
=for(r of s)d=...
3) Bitwise OR|
muda automaticamente true para 1 e false para 0, assimo+=r==q|r==d?1:0;
é o mesmo queo+=r==q|r==d;
.return parseInt(o,2)
para:return+('0b'+o)
s[l-d-1]=(s[l-d-1]|0)
pors[T=l-d-1]=(s[T]|0)
. Para barbear mais 2, substituab=i.toString(2),l=b.length,d=l
pord=l=(b=i.toString(2)).length
.Julia, 141 bytes
Ungolfed:
fonte
Simplex v.0.7 , 38 bytes
Simpl ified comentários. Entrada em binário, nenhum intérprete trabalhando no momento. Espero que os comentários sejam suficientes.
fonte
Oitava, 50 bytes
Exemplo:
fonte
@(a)
define uma função anônima que aceita um vetor de entradaa
.[""
força a saída em uma string (acredito).(b=sum(a-48))
defineb
como o vetor que contém os bitss.b==max(b)
será um vetor tendo um1
em um determinado local se o bitsum houver um máximo e0
outro.b(b>0)
é um vetor de cada elementob
maior que0
, portanto,b==min(b(b>0))
é um vetor que contém a1
quando o bit é o mínimo e,0
caso contrário. Então é OR'd juntos, e+48
para ASCII.function o=b(i)
(nova linha)r=sum(i>48);o=['' (r==max(r)|r==min(r))+48];
JavaScript (ES6), 158
Uma função com um parâmetro de matriz numérica, retornando um número. Com a mesma contagem de bytes, ele pode obter um parâmetro de matriz de string (contendo representações de base 2) e retornar uma string de base 2 - basta mover o
.toString(2)
no final depoisr
.fonte
Haskell,
198182178 178161 caracteresEu ainda sou iniciante no golfe. Apenas 80 reputação vem da resposta.
Como funciona.
Em vez de preenchimento, inverto a matriz e adiciono usando o definido pelo usuário (&). Eu não uso foldl1 (zipWith (+)) que é mais curto porque zipWith excluirá o item supérfluo. Então eu acho o mínimo máximo e o zero diferente, que também exigiam função definida pelo usuário. Em seguida, associo o item ao mínimo e ao mínimo, zero se corresponder, 0 se não corresponder. Então nós invertemos e o transformamos em número binário.
FAÇAM:
Data.List
fonte
k
,c
é usado apenas uma vez, portanto, não é necessário colocá-lo nawhere
cláusula Usá-lo diretamente:...||(x==a#b)...
. Por que os suspensórios? Eml
:concat.map show
éconcatMap show
ou até melhor>>=
:l=(>>=show).v...
. (Nota: há também o=<<
que faz o mesmo, mas com argumentos invertidos:)(show=<<).v...
.>>=
e=<<
trabalhe no contexto de lista aqui e faça coisas diferentes em função ou em outros contextos.[]
nos últimos casos de&
e#
por_
:b&_=b
e_#l=l
.(x==b)||(x==c)
(ou(x==b)||(x==a#b)
quando você removerc
) pode ser substituído porelem x[b,c]
(resp:)elem x[b,a#b]
.u=maximum
ek a=m(\x->fromEnum$elem x[u a,a#u a])a
deve funcionar._&a=a
, ele deve permanecer[]&a=a
; caso contrário, a primeira lista será perdida se a segunda estiver vazia. Use_
apenas no último caso - talvez esse seja o seu erro.Python 3,
181126122 bytes(Tirei a maioria das barras de contagem de bytes porque estava ficando um pouco ridícula.) 21 bytes de desconto graças ao Sp3000 !
Um pouco menos golfe:
A entrada é esperada em binário com apenas espaços separando os números. A saída também é binária.
fonte
Javascript,
154150 bytesObrigado pelo método edc65 para o cálculo mínimo / máximo, ele reduziu meu código em 4 bytes.
Explicação
fonte
f=i=>(m=0,r=[],i.map(n=>{for(k=32;k--;n=n/2|0)r[k]=~~r[k]+n%2}),r.map(n=>m+=m+(n==Math.min(...r.filter(x=>x))|n==Math.max(...r))),m)
ShapeScript , 186 bytes
Uma linguagem importante e inútil para um operador importante e inútil.
AE / S está em binário. O programa espera cada número em uma linha separada, cada um terminando com um avanço de linha.
Experimente online!
Casos de teste
fonte
APL, 27 bytes
Esta é uma função monádica que pega uma lista de números inteiros decimais e retorna seu biplex decimal.
Experimente online na demonstração ngn / apl .
Como funciona
fonte
Wolfram Language, 113 bytes
Esta versão recebe entrada de uma janela pop-up, com os números inseridos no formato "{x, y, z, ...}", (sem aspas).
Entrada:
Saída:
Recebe entrada em um Manipulado dinâmico como uma sequência do formato "{x, y, z}", com x, ye z sendo base 10 inteiros (com ou sem zeros à esquerda). A saída também está na base 10.
Existem outras maneiras de inserir isso de uma maneira que economizasse a contagem de caracteres, mas acho que essa solução é um uso elegante de uma GUI dinâmica que executa a computação
Se você deseja executar isso na nuvem, podemos usar o CloudDeploy:
A implantação na nuvem traz a contagem de caracteres até 256, no entanto ...
A entrada para o FormPage também é uma sequência do formato "{x, y, z}", com x, ye z sendo base 10 inteiros.
Eu mesmo implantei isso na nuvem e você pode experimentá-lo em https://www.wolframcloud.com/objects/97b512df-64f8-4cae-979b-dba6d9622781
fonte
Python 3, 197
Leva em números binários delimitados por espaço.
Versão não destruída:
fonte
C #, 255
Um programa completo, inserido como argumentos de linha de comando - separados por espaço - em decimal.
Mais legível:
fonte
Ruby, 127 bytes
Toma uma matriz como entrada.
fonte
CoffeeScript, 194 bytes
Recebe entrada como números binários separados por coma, sai em binário.
Tente.
fonte
GolfScript, 46 bytes
Experimente online no Web GolfScript .
Casos de teste
fonte
C ++, 192 bytes
Aceita a entrada de uma matriz inteira não assinada de 32 bits e uma contagem de itens nessa matriz.
Ungolfed:
fonte