Entrada:
Input é uma matriz aleatória de nozes (no seu idioma), as seguintes nozes possíveis. Seu programa deve ter uma maneira de representar cada tipo de porca, como um código inteiro. O programa deve ser capaz de lidar com qualquer matriz de tamanho de qualquer configuração de porcas.
Porcas possíveis:
Kola nut
Macadamia
Mamoncillo
Maya nut
Mongongo
Oak acorns
Ogbono nut
Paradise nut
Pili nut
Pistachio
Walnut
Resultado:
A saída deve ser a matriz classificada de tal maneira que não haja porcas adjacentes do mesmo tipo. Se isso for impossível, a saída deve ser uma matriz vazia.
Exemplo de entrada (simplificado):
["walnut", "walnut", "pistachio"]
Saída de exemplo:
["walnut", "pistachio", "walnut"]
As soluções não podem simplesmente embaralhar a matriz até que ela se torne única por acaso. O tipo empregado deve ser determinístico
perl6 -e 'my @a="aaaaabbbbccccdddee".comb;my @b = @a.pick(*) while @b.squish !== @a;say [~] @b'
baedcbdacdecbabaca
(3,3,2) também podem causar falhas.Respostas:
GolfScript,
42413738 caracteresO código espera entrada em STDIN e imprime o resultado em STDOUT, por exemplo:
O script ficou mais longo do que o esperado, mas suponho que haja espaço para melhorias.
Edit: O caso de uma lista com um único item me custa 1 caractere (a melhor comparação que eu poderia fazer é a mesma de Peter).
fonte
$.,)2//zip
é exatamente o que eu tinha em mente. Minha interpretação da especificação era que ela podia receber informações da pilha e deixá-las na pilha, então talvez devêssemos pedir esclarecimentos.["walnut"]
na seção compare os dois primeiros.GolfScript, 32 caracteres
O mesmo formato de entrada e saída da solução de Howard.
fonte
Brachylog v2, 10 bytes
Experimente online!
Solução de força bruta. (Essa é uma função, permitida porque o desafio não diz "programa completo".) Também é principalmente uma tradução direta da especificação (a única sutileza real é que eu consegui organizar as coisas para que todas as restrições implícitas chegassem exatamente ao lugares certos, não necessitando de caracteres extras para desambigüá-los).
Observe que este é um algoritmo genérico para reorganizar qualquer tipo de lista para que ele não tenha dois elementos tocantes; ele pode lidar com representações de string dos elementos e também com códigos inteiros. Portanto, não importa realmente como "Seu programa deve ter uma maneira de representar cada tipo de porca, como um código inteiro". requisito da pergunta é interpretado.
Explicação
fonte
J, 80 caracteres
Na verdade, não está na mesma liga que o Golfscript. Suspeito que haja ganhos a serem feitos, mas os 14 caracteres necessários apenas para inserir a lista no programa
[;.1' ',1!:1[1
são um grande obstáculo.Basicamente, o programa inclui a lista, agrupa itens semelhantes, classifica pelo número de itens em cada grupo decrescente e alterna a saída entre a primeira metade e a segunda metade da lista. O restante, se o código se livrar de itens estranhos e decidir se a lista é saída válida (saída infinita,
_
se não for).Exemplo:
grupo
(</.])
:classificar
(\:#&.>)
:viagem
((],.|.)~>.@-:@#)
:fonte
Gelatina , 14 bytes
Experimente online!
Os últimos 6 bytes podem ser removidos se pudermos ter um comportamento indefinido para entradas inválidas.
fonte
Stax , 10 bytes
Execute e depure
Aqui está o mesmo programa descompactado, não destruído e comentado.
Execute este
fonte