O objetivo deste Code Golf é criar um programa que classifique uma lista de seqüências de caracteres (em ordem crescente), sem usar nenhum método de classificação interno (como Array.Sort()
no .NET, sort()
no PHP, ...). Observe que essa restrição exclui o uso de um método interno que classifica uma matriz descendente e, em seguida, reverte a matriz.
Alguns detalhes:
Seu programa deve solicitar entrada e essa entrada é uma lista de cadeias contendo apenas caracteres alfabéticos em minúsculas ASCII
a-z
, separados por vírgula sem espaços. Por exemplo:code,sorting,hello,golf
A saída deve ser a lista de cadeias fornecida, mas classificada em ordem crescente, ainda separada por vírgulas sem espaços. Por exemplo:
code,golf,hello,sorting
Ruby
765451 caracteresfonte
x=gets.scan /\w+/
k (16 caracteres)
Provavelmente não corresponde ao espírito do problema. Em k, não há um operador de classificação incorporado .
<x
retorna uma lista de índices de itens em x na ordem classificada.fonte
SED, 135
Com base na minha entrada de classificação anterior
fonte
Ruby, 99 caracteres ( tipo Gnome )
Isso apenas supera minha implementação de classificação de bolhas:
Ruby,
110104101 caracteres (Classificação por bolha )Isso faz
list.length
iterações, porque o pior cenário levalist.length - 1
iterações e mais uma realmente não importa e salva 2 caracteres.Apenas por diversão, uma versão do Quicksort:
Ruby, 113 caracteres ( Quicksort )
fonte
Haskell, 141
Pelo menos é ... meio eficiente.
fonte
m=minimum
s[]=[]
s l=m l:(s$l\\[m l])
(substitua suas linhas 2 a 4 por essas linhas).init
não parece ser necessário, como não é nem uma fuga,
, nem uma nova linha final.t s=let(a,b)=span(/=',')s in a:t(drop 1 b)
pode ser encurtado usando um guarda teste padrão, usando(>',')
e soltando o espaço entre1 b
:t s|(a,b)<-span(>',')s=a:t(drop 1b)
.x#(y:r)|y<x=y:x#r;x#r=x:r
é mais curto. Ele pode ser usado diretamentet
e, como não usa(\\)
eintercalate","
pode ser substituído portail.((',':)=<<)
, a importação pode ser descartada. Todos juntos 101 bytes: Experimente online!vba, 165
fonte
Split
.c=","
e chamarc
duas vezes na verdade adiciona à contagem de bytes neste caso, contribuindo com 7 bytes para a contagem de bytes, onde apenas o uso de "," duas vezes contribuirá com 6 bytes. Você pode diminuir o código de byte usando a entrada diretamente da sub-chamada (sub q(s)
) e assumindo que s é do tipo variant \ string. Você pode perder mais um byte, alterandoFor i=1 to
parafor i=1To
. você pode perder 5 bytes mudandoDebug.Print Join...
paraDebug.?Join...
Scala, 122 bytes
Como uma linha (88 bytes):
(ele ordenará uma lista apenas fazendo
list.permutations.fil...
)Como um programa (122 bytes):
Uma versão mais longa, se você quiser ler a partir de stdin.
Ele repete todas as permutações da lista fornecida até encontrar uma ordenada. Não é rápido, pois leva cerca de 12 segundos para classificar uma lista de 10 elementos e mais de um minuto para uma lista de 11 elementos.
Os itens [Editar] precisam ser exclusivos ou
<
podem ser substituídos por<=
. Além disso, desculpe pelo necro.fonte
javascript 128
DEMO violino .
Eu estou procurando uma maneira de eliminar
b
.fonte
[]
parte após a peça?
para salvar 2 caracteres.SyntaxError: missing : in conditional expression
porque?:;
(a abreviaçãoif/else
) só deve levar dois pecies de código para executar (ietrue?b++:b--;
) usando[
,]
é um hack, ainda não sei ao certo por que funciona, acho que é entendido como uma matriz vazia declaração, como colocar uma seqüência ou número aleatório como um comando independente. mas você ainda pode se sentir à vontade para votar.?:
precedência do operador é inferior,
{
,}
e não funcionou - eu receboSyntaxError: missing : after property id
. os parênteses de precedência são sempre os primeiros. Eu ainda gostaria de um upvote ....PHP 83 bytes
Uma implementação O (n 3 ) de uma classificação de seleção. O
Ó
caractere é 211; uma vírgula invertida.Uso da amostra:
fonte
Python 3 (80 caracteres)
Aqui está uma variação da instrução while que tem o mesmo comprimento:
fonte
Mathematica
6656Algumas outras soluções sem o símbolo de incorporação
Ordering
:Bogosort:
8474Tipo de bolha:
9383Outra solução tão ineficiente quanto bogosort:
8272fonte
Python 3.5 ou superior, 73 bytes
Isso se inspira na resposta de Steven Rumbalski, mas usa compreensão de lista em vez de um loop while; o número de iterações vem da lista copiada,
l
razão pela qual isso requer generalizações adicionais de descompactação e Python 3.5fonte
R
Classificação da bolha:
122118 caracteresBogosort: 100 caracteres
fonte
Perl, 159
Isso nunca teve chance de ganhar, mas decidiu compartilhá-lo porque eu gostei da lógica, mesmo que seja uma bagunça :) A idéia por trás disso é converter cada palavra em um número inteiro (feito usando a função ord ), salvamos o número como uma chave em um hash e a string como um valor e, em seguida, iteramos cada vez mais todos os números inteiros (1..10 ** 100 nesse caso) e, dessa forma, classificamos nossas strings.
AVISO : Não execute esse código no seu computador, pois ele percorre trilhões + de números inteiros. Se você quiser testá-lo, poderá diminuir o limite superior do intervalo e inserir seqüências não longas. Se, por algum motivo, isso for contrário às regras, informe-me e excluiremos a entrada!
fonte
JS: 107 caracteres - Classificação de bolhas
Eu olhei para a resposta do @TryingGetProgrammingStraight e tentei melhorá-la, mas acabei implementando-a de maneira um pouco diferente.
fonte
Java, 134 bytes
Um método que implementa a classificação do Gnome.
fonte
Rápido, 101 bytes
Ungolfed:
fonte
, 24 caracteres / 30 bytes (não competitivo)
Try it here (Firefox only).
Usando a classificação de seleção!
Explicação
Basicamente, recursivamente remove e empurra o mínimo da entrada para outra matriz.
fonte
Ceilão (Bogosort), 119
Experimente online!
Encontrei o
permutations
método e, portanto, acabei com o Bogosort (uma variante não aleatória).Formatado e comentado:
Sem a formatação e análise, torna-se apenas 90 bytes:
Experimente online!
fonte
Perl 5 , 77 bytes
Experimente online!
Classificação de bolha simples.
fonte
ruby -plaF,
, 70 bytesO (n), se você fingir que redimensionar e compactar uma matriz é gratuito (não é muito grátis).
Criamos uma matriz aninhada profunda e desigualmente
o
colocando uma string com bytes b 1 , b 2 ... b n na matriz na posição o [b 1 ] [b 2 ] ... [b n ]. O resultado parece[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,["a,",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ["abc,"], ["abd,"], ["abe,"]], ["ac,"], ["ad,"]],, ["c,"]]
Então achatamos e produzimos.
fonte
Tcl , 211 bytes
Experimente online!
fonte