Sua entrada é uma lista / sequência / vetor / matriz de 5-255 números inteiros positivos, não necessariamente exclusivos. Você pode assumir qualquer formato de entrada mais adequado e que cada número inteiro (assim como a quantidade de números inteiros) seja escolhido uniformemente aleatoriamente no intervalo 5-255.
O objetivo é gerar a mesma lista, no mesmo formato (ou equivalente), mas classificada em ordem crescente (não decrescente). Um exercício inicial comum no aprendizado de um idioma. Envios para incluir:
Uma resposta que funciona corretamente e atinge a meta; e
Uma segunda resposta que contém um bug irritante. Entre 1% e 10% do tempo, a saída precisa ser uma lista no formato correto e contendo os elementos corretos, mas na ordem errada (qualquer ordem, exceto a classificação correta). O restante do tempo, o programa deve funcionar corretamente e atingir a meta.
As duas respostas devem ter a distância de Levenshtein uma; isto é, podemos obter um do outro excluindo um byte ou adicionando um byte ou alterando um byte.
Pontuação como de costume no código-golfe (com base na menor das suas duas respostas), com brechas usuais proibidas.
Bônus de 10% (redução na pontuação) se o bug irritante for independente da entrada, ou seja, usar a mesma entrada novamente não reproduz o bug (exceto entre 1% e 10% do tempo).
fonte
[5,5,5]
é impossível produzir a ordem erradaRespostas:
Python 3 , 36 bytes
Versão sem erros, 37 bytes
Experimente online!
Versão irritante, 36 bytes
Experimente online!
Isso depende da entrada e, portanto, não se qualifica para o bônus.
Tem uma probabilidade de cerca de 2% falhar. Falha quando o comprimento da entrada é inferior a 10.
Combinado com a resposta do LyricLy, obtém 34 bytes:
fonte
or1
será interpretado como um nome de variável e gera um erro de sintaxe.05AB1E , 5 * 0,9 = 4,5 bytes
Solução de trabalho
Experimente online!
Explicação
Solução contendo o bug
Fornece a solução errada 10% do tempo (independente da entrada).
Experimente online!
Explicação
O mesmo que a solução de trabalho, exceto que inverte a lista se o número escolhido for verdadeiro.
fonte
100F
e um rodapé},
que nos ajudam a visualizar o resultado da função chamada na entrada várias vezes. Isso nos mostra que a solução de trabalho sempre retorna resultados corretos, enquanto a solução com defeito apresenta falhas.Gelatina , 7 * (100% - 10%) = 6,3 bytes
Experimente online!
Versão com buggy:
Experimente online!
Nos dois links, há um equipamento de teste que executará o código 100 vezes, sempre com a lista que você fornecer como argumento e, em seguida, retornará os resultados.
A probabilidade de cada comprimento de entrada é:
Portanto, para o comprimento 1, há uma probabilidade de 0%, para o comprimento 2 5%, para o comprimento 3 8,83̅%, para o comprimento 4 9,583̅% etc. até o comprimento ∞ que tem 10% de probabilidade.
fonte
0.1 - 0.1/(length!)
.Ṣ⁵X’¤¡
e tambémṢ⁵X¤¡
deve funcionar: a versão com bugs retorna a lista sem classificação <10% do tempo e, como a entrada é escolhida uniformemente aleatoriamente, ela deve funcionar, economize 2 bytes.¹
para salvar 1 byte (o número da contagem de regras de byte = o menor); Também há uma linha superior combinando estranhos após a segunda6
em6.6̅%
.¹
", porque não seria capaz de classificar 10% do tempo.Python 3, pontuação
5857 - 10% = 51,3Guardou um byte graças a ovs.
Versão sem erros, 57 bytes
Experimente online!
Versão com bug, 57 bytes
Experimente online!
Eu decidi tentar uma solução que use o bônus. Não supera a outra resposta do Python, mas eu me diverti pensando nisso.
fonte
C, 71 * 0,9 = 63,9 bytes
Sem erros:
Experimente online!
Buggy:
Experimente online!
fonte
Groovy , 31 bytes
Solução com bug:
Solução de trabalho:
O operador de subscrito Groovy (o
getAt
método) retorna nulo para listas se o índice for maior que o tamanho. Portanto, se houver um nono elemento, ele permanecerá o mesmo da lista classificada, mas se não (1,99203187% de chance), será revertido. No entanto, sempre haverá um primeiro elemento, porque o tamanho da lista é sempre maior ou igual a 5. Portanto, o 0 ina[0]
pode ser trocado por 1, 2, 3 ou 4.fonte
Wolfram Language (Mathematica) , 29 bytes
São 26,1 bytes com o bônus, mas não tenho muita certeza de ganhar o bônus; na entrada já classificada, ambas as versões sempre produzem saída classificada.
Versão sem erros (29 bytes)
Experimente online!
Versão irritante (30 bytes)
Experimente online!
fonte
PHP, 70 bytes
Versão sem erros, 70 bytes
Experimente online!
Versão com bug, 70 bytes
Experimente online!
A versão com bug classifica na ordem inversa 10% do tempo (com base em um gerador de números aleatórios).
fonte
-r
(-2 bytes). junte por sublinhado; isso deve ser equivalente (-2 bytes). use emasort
vez desort
(-1 byte).unset($argv[0]);(rand(1,9)?sort:rsort)($argv);echo join(_,$argv);
(também 65 bytes)Python 2 , 26 bytes
Buggy:
Experimente online!
Saídas modificando a lista de entrada . Classifica a lista apenas se seu comprimento for pelo menos 10. A versão sem bugs substitui a
9
por a0
para sempre classificar.Trabalhando:
Experimente online!
Podemos modificar a função para retornar a lista ao custo de 4 bytes, para um total de 30 bytes:
Experimente online!
25 bytes com alguns trechos das regras:
Experimente online!
Gera uma literal de função que classifica ou é a identidade, usando
id(0)
como uma fonte aleatória. Altere>
para>=
corrigir ou0
para~0
.fonte
Casca , 6 bytes
Versão com buggy:
Experimente online!
Versão correta:
Experimente online!
Explicação
Esses programas são completamente determinísticos. De fato, Husk atualmente não tem suporte para números aleatórios.
Afirmo que a saída do programa de buggy não é classificada com uma probabilidade entre 1% e 2%. Denote por N = 251 o número de valores possíveis dos elementos. A probabilidade de uma lista aleatória de comprimento L não conter múltiplos de 9 é ((NK) / N) ^ L , onde K é o número de valores divisíveis por 9 (no nosso caso, K = 28 ). A probabilidade total é a média disso para 5 ≤ L ≤ 255 , que é de cerca de 1,98%. Algumas dessas listas são falsos positivos, pois já estão classificadas. A probabilidade de uma lista aleatória de comprimento L a ser classificada é no máximo ((N + N * (N-1) / 2) / N ^ 2) ^ ⌊L / 2⌋ : se dividirmos a lista em pedaços de comprimento 2, cada um dosPedaços ⌊L / 2⌋ devem ser classificados. A probabilidade total de uma lista ser classificada é limitada pela média acima para 5 ≤ L ≤ 255 , que é de cerca de 0,30%. Portanto, a probabilidade da função retornar uma lista não classificada está entre 1,67% e 1,98%.
fonte
↓9
vez deV¦9
reduzi-lo9
para a versão correta? Isso sempre falha em entradas curtas e sempre funciona corretamente em entradas mais longas, mas como o comprimento da entrada segue uma distribuição aleatória, ainda deve ser uma resposta válidaBash , 26 bytes
Versão correta
Experimente online! ou verifique as probabilidades .
Versão com bug
Experimente online! ou verifique as probabilidades .
Recebe a entrada como números separados por nova linha. Usa a variável embutida
RANDOM
, que sempre retorna um número aleatório (pseudo) no intervalo de 0 a 32767 . Usando%20
resultados em cerca de 5% de taxa de falha (obrigado @Titus por esclarecer problemas com%10
).Essa aleatoriedade significa que a taxa de falha é independente da entrada, mas isso exige que a matriz de entrada inclua pelo menos um número com mais de um dígito, porque a saída da falha é classificada lexicograficamente.
Versão alternativa, 27 bytes
Versão com bug substitui o
+
por um%
. Experimente online ou tente com erros .fonte
%10
tem uma maior chance de retornar0
ao7
que8
ou9
, então a chance de fracasso é acima de 10%;)%20
como sua resposta.Pitão , pontuação 8 * 0,9 = 7,2
Primeiro trecho (correto):
Experimente aqui!
Segundo trecho (com bug):
Experimente aqui!
Economizou dois bytes (e 1,8 pontos) graças ao isaacg !
fonte
.S
retornar a entrada inalterada significa que, nesses casos (raros), nossas chances de obter a resposta errada caem de 10% para 0% - portanto, em média, ainda está na faixa certa. Claro, 10 cópias também estão bem..S
que também pode retornar a entrada em si (o que não seria um problema), mas quis dizer.S
também pode retornar a lista classificada .O.uSNT.S
JavaScript (ES6), 24 bytes
Versão sem erros (pelo menos para números inteiros no intervalo 0-2147483647, portanto, qualquer coisa no intervalo fornecido):
Versão com buggy:
Depende de a) no algoritmo de classificação do mecanismo eb) na lista de entrada que contém dois valores na ordem errada que diferem em 1. (Se a probabilidade disso for muito baixa, ela
1
poderá ser aumentada, mas quando você conseguir para8
ele simplesmente não vai resolver nada no intervalo5-255
.)fonte
PHP, 62 bytes
inspirado na solução do Jo (e acabei de perceber: é um porto de Justin Mariner ):
trabalhando (classifica em ascensão):
carrinho (aproximadamente 5% de chance de classificação descendente):
Correr com
-nr
fonte
Pushy , 9 bytes - 10% = 8,1
Solução com bug:
Experimente online!
Solução de trabalho:
Experimente online!
O código com bug faz o seguinte:
O código fixo simplesmente muda
0
para1
. Comorandom(1, 10)
nunca será0
, a instrução if nunca será executada.fonte
MATL ,
7 * 0,9 = 6,36 * 0,9 = 5,4 bytesVersão com buggy:
Experimente online!
Explicação:
Versão sem erros:
Experimente online!
Explicação:
fonte
Jq 1.5 , 42 bytes
Buggy
Trabalhando (exclua o =)
Supondo que os comprimentos das linhas sejam uniformes no intervalo [5.255], cerca de 7% acionarão o bug
Experimente online!
fonte
J, 22,5 bytes (25 bytes - 10%)
com bug:
sem bug:
Experimente online!
fonte
R , 30 * .9 = 27 bytes
(carrinho)
Experimente online!
(não de buggy)
A versão com bugs é classificada em
decreasing=T
10% do tempo, amostrando a partir de uma distribuição uniforme (0,1). A versão un-buggy é sempredecreasing=F
fonte
Röda , 42 bytes - 10% = 37,8
Sem erros:
Buggy:
Experimente online!
Isso usa a
currentTime
função para criar números aleatórios. Parece que sua distribuição varia um pouco entre as máquinas. A proporção20//19
pode ser ajustada para obter resultados diferentes, sem penalidade de bytes (a menos que seja menor que99//98
).fonte
Oitava , 36 * 0,9 = 32,4 bytes
Versão com buggy:
Experimente online!
Versão sem erros:
Experimente online!
Isso classifica o vetor e muda todos os números um para a direita se um número aleatório for menor que 0,1.
fonte
Java 8,
4534,2 (5038 - 10%) bytesVersão normal:
Explicação:
Experimente aqui.
Versão com bug (
5139 bytes):LD de 1:
1
adicionado.Explicação:
Experimente aqui.
fonte
JavaScript, 25 * 0,9 = 22,5
entrada x
fonte