Boa noite golfistas!
Seu desafio é desorganizar completamente uma série de números.
Entrada
Exatamente 100 números inteiros serão alimentados no seu programa. Seu programa pode aceitar a entrada como um arquivo ou via stdin. Cada número inteiro será separado por um caractere de nova linha.
Esses 100 números inteiros variam do mínimo ao máximo de um número inteiro assinado no idioma escolhido.
Não haverá valores duplicados. Os valores podem ser ordenados, não ordenados ou parcialmente solicitados - seu programa deve poder lidar com cada caso.
Resultado
A saída deve ser cada um dos 100 números inteiros, completamente sem classificação, cada um separado por um caractere de nova linha. A saída pode ser via stdout ou para um arquivo.
Completamente não classificado significa que nenhum valor é adjacente a qualquer valor ao qual seria adjacente se a lista fosse completamente classificada em uma sequência ordenada.
Ponto
1 ponto por personagem e a pontuação mais baixa vence. Há um bônus de -100 para qualquer solução que não utilize funções de classificação de biblioteca ou internas. Há um bônus de -20 para quaisquer soluções que não utilizem funções numéricas aleatórias incorporadas.
Eu tentei definir esta questão o mais completamente possível. Se você tem alguma dúvida, por favor, pergunte. Se você tiver algum comentário sobre como eu poderia melhorar na próxima vez, entre em contato.
Fore!
fonte
Respostas:
GolfScript (pontuação 27 - 120 = -93)
Nota: isso
$
está referenciando um elemento na pilha. Há classificação, mas é feita com uma classificação de bolha codificada manualmente.Graças a Howard, por -90 => -92; e Ilmari, que inspirou -92 => -93.
fonte
$
- é por isso que mencionei que$
o programa não é do tipo (depende do contexto). A maioria do programa (28 dos 42 caracteres) define a função^
; a primeira versão, usando a classificação interna, tinha apenas 14 caracteres.2/{~p}%n*
.2/zip~+n*
e.);\+2%n*
também faça o truque para o mesmo número de caracteres da versão do @ Howard. Infelizmente, ainda não consegui encontrar nada mais curto.Python -26
(94-120): Nova abordagem bruta. Continue inserindo os elementos mais baixos na nova lista para classificar os elementos e itere:
Python -13
(107-120): Primeira abordagem: remove os quatro elementos mais baixos de cada vez e imprime esses quatro em outra ordem:
fonte
t=l=[]
eexec't+=[input()];'*100
pouparia alguns caracteresexec
instrução para mais de um loop.t=l=[]
eu apontamos para o mesmo objeto e ele não funciona. Ignorar parêntesesexec
é bom.t=t+[input()];
, isso cria um novo objeto a cada vez. E você ainda pode fazer o loop de impressão na declaração exec:';i+=1;print l[i*3%100]'*100
.%3
e evitar a repetição de100
.C: 11 (131-120)
O programa lê a partir de stdin e faz uma ordenação de inserção simples, depois imprime o enésimo com o número n + 50, como muitas das outras soluções.
fonte
Mathematica
-56 44 4(95-120) = -25Editar :
Esta versão não depende de funções internas para classificação de listas, nem de funções aleatórias.
fonte
Sort
é uma função de classificação interna?J, -63 (57-120) caracteres
Como todo mundo está seguindo a rota de classificação auto-escrita ...
Não usa nenhuma função de número aleatório, nem qualquer classificação interna.
Usa uma classificação de seleção recursiva simples para classificar a entrada.
fonte
Ruby 1.9, -59
(61-120)
Recursão! De fato, este, diferentemente das minhas tentativas anteriores de Ruby, desorganiza a lista, independentemente da ordem original.
Tentativas anteriores
One-liner bonito, agora usando a classificação incorporada para funcionar corretamente:
Primeiro - não ordenou necessariamente os últimos 4 valores:
fonte
Caractere Python 2: 90
tentativa preguiçosa, mas apenas para iniciantes
fonte
Python 48 = (148 - 100)
Não testei isso porque não é garantido (ou provável) que seja executado em um período de tempo razoável, mas deve funcionar em teoria, dado um tempo infinito.
fonte
x=map(input,['']*100)
[]
s extras , apenas qualquer sequência de caracteres.Python 27 (147 - 100 - 20)
Nota: os espaços anteriores
if L[i]>...
devem ser uma guia, mas aparentemente aparecem como espaços em um bloco de código.fonte
R=range
você pode salvar 5 caracteres.a=map(input,['']*100)
Perl 5: 95 - 120 = -25 caracteres
Contando a seguinte linha de comando:
fonte
Ruby: -50 (70 caracteres - 120)
Fiz o mesmo que muitas outras respostas: remova iterativamente o max e min da lista de entrada e anexe-os à saída. No entanto, percebi que se os 2 números em ambos os lados da mediana forem consecutivos, a saída estará incorreta (porque esses 2 números consecutivos aparecerão juntos no final da saída). Para corrigir isso, eu giro a lista "não classificada" diretamente por 1 elemento:
Ou, para trabalhar com muitas entradas arbitrariamente (usando apenas mais 4 caracteres):
Nota: Algumas respostas Ruby com menos caracteres já foram publicadas, mas essas soluções não abordaram o problema médio (e / ou assumiram uma lista de entrada classificada).
fonte
J 37 - 100 = -63
Não usa classificação (embora use classificação acima) Usa números aleatórios.
Explicação:
fonte
Brachylog , 22 bytes - 120 = -98
Experimente online!
O link TIO possui apenas uma entrada de oito números inteiros, em vez de cem, porque é tão terrivelmente lento que não aguenta mais em 60 segundos. A razão para isso é que, entre outras coisas, em vez de implementar algum algoritmo de classificação simples, mas normal, para o bônus obrigatório, eu, por questões de brevidade, usei o que equivale a um bogoort determinístico:
p≤₁
retrocede a cada permutação da entrada até encontrar uma. o que não diminui. Embora um motivo maior provavelmente seja o fato de que ele emprega um grau semelhante de força bruta para encontrar a saída e que recalcula a versão classificada toda vez ... Tentei testá-la em uma entrada real do tamanho 100, mas estou não tenho certeza de quantos dias serão necessários.Uma versão geral melhor:
Brachylog , 14 bytes - 20 = -6
Experimente online!
Isso ignora os requisitos de E / S antiquados para concisão e deixa de receber o bônus de -100 para que possa ser testado sem um supercomputador (embora, ao escrever isso, eu o tenha executado em apenas 20 itens por vários minutos e ainda não me deu nada).
fonte
Quarto (gforth) , 79 - 120 = -21 bytes
Experimente online!
Ignore os requisitos de entrada antiquados e recebe a entrada como um endereço na memória onde os números estão armazenados.
Explicação
Passa por todos os números de 0 a 99. Para cada número (n):
Senão (n é par):
Saída de uma nova linha
Código Explicação
fonte