Assine essa palavra 2!
Não faz muito tempo, publiquei um desafio chamado Assine essa palavra! . No desafio, você deve encontrar a assinatura da palavra, que são as letras colocadas em ordem (por exemplo, A assinatura de this
é hist
). Agora, esse desafio foi muito bem, mas havia uma questão importante: era MUITO fácil (veja a resposta do GolfScript ). Portanto, publiquei um desafio semelhante, mas com mais regras, a maioria das quais foi sugerida pelos usuários do PPCG nos comentários do quebra-cabeça anterior. Aqui vamos nos!
Regras
- Seu programa deve receber uma entrada e enviar a assinatura para STDOUT ou equivalente em qualquer idioma que você esteja usando.
- Você não tem permissão para usar funções de classificação
$
internas ; portanto, coisas como no GolfScript não são permitidas. - A multicase deve ser suportada - seu programa deve agrupar letras maiúsculas e minúsculas. Assim, a assinatura do
Hello
éeHllo
, nãoHello
como você é dado pela resposta GolfScript na primeira versão. - Deve haver um interpretador / compilador gratuito para o seu programa, ao qual você deve vincular.
Pontuação
Sua pontuação é sua contagem de bytes. O menor número de bytes vence.
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
ThHihs
, podemos produzirhHhist
ou temos que produzirhhHist
ouHhhist
?Respostas:
Pitão, 10 bytes
Experimente online: Demonstração
Explicação:
fonte
Haskell, 51
o
zip
cria uma lista de pares de caracteres[('a','A'), ...('z','Z')]
. Por causa do truncamento, o segundo ponto de extremidade não precisa ser especificado. Para cada par da lista, pegamos as letras na sequência de entradas
que são um dos dois caracteres do par.fonte
Python 3,
7270 bytesAssume que a entrada consiste apenas em
[a-zA-Z]
.(-2 bytes graças a @xnor)
fonte
"".join(c*b ...)
para"".join(c ... if b)
o mesmo caminhosum(n ... if b)
pode sersum(n*b ...)
.c=1 for d in(input()+'~')*26:print(d[ord(d)&32^c:],end='');c+=d>'z'
(67)GOTO ++, 531 bytes
Página do projeto GOTO ++
Aqui está uma versão ligeiramente mais legível e comentada do código (observe que
GOTO
inicia um comentário no GOTO ++):fonte
function(arg)
efunction() arg
ambas são válidas. Além disso, os suportes de prioridade são} {
e não o chato( )
Pitão,
1514 bytesObrigado por isaacg por remover 1 byte.
Ainda não sei muito sobre Pyth, então isso pode não ser muito bom.
Experimente aqui.
fonte
s
é o mesmo quejk
em uma lista de cordas.JavaScript (ES6), 71
74Limitado a A-Za-z (ver comentário por @Matthieu M)
Editar Muito usado para compor uma única expressão com vírgulas, para evitar 'retorno'. Aqui é necessária uma saída, para que eu possa usar um simples
for
e esquecer vírgulas.Usando a compreensão da matriz, a contagem de bytes é 73, mas isso não é mais válido para o EcmaScript 6Nota habitual: teste de execução do snippet em qualquer navegador compatível com EcmaScript 6 (principalmente o Chrome, não o MSIE. Eu testei no Firefox, o Safari 9 pode ir)
fonte
Javascript,
112194 bytesIsso está muito longe de "jogar golfe", mas agora estou um pouco ocupado, apenas editado para remover a classificação.
fonte
console.log(input.split('').sort((a,b)=>a.toLowerCase().localeCompare(b.toLowerCase())).join(''))
Python 3, 64
Uma pequena melhoria na resposta do Sp3000 , que usa a idéia de iterar os índices de caracteres e, para cada um, iterar através da entrada para obter caracteres que correspondam ao caso.
Isso usa um único loop, percorrendo a entrada 26 vezes. O separador
~
é usado para saber quando ir para o próximo índice de caracteresc
. Para se o caractered
corresponde ao valorc
em maiúsculas e minúsculas, os últimos cinco bits do valor de bits ded
são xoredados comc
, com um 0 indicando uma correspondência.Em seguida, o caractere
d
é impresso exatamente quando o resultado é0
, com uma string vazia caso contrário.fonte
Python 2.7,
114106 bytesRegistra a presença de um caractere em uma matriz de 123 comprimentos (para incluir os intervalos AZ e az) e itera através dele para obter as entradas diferentes de zero.
Ineficiente, mas mais eficiente do que forçar o bruto (mas mais :().
Testando
fonte
HelloWorldhi
, eu fico['d', 'e', 'H', 'h', 'i', 'lll', 'oo', 'r', 'W']
if l[j]
.join
editadas). -8 bytes. Obrigado :)PHP,
275270 bytesExplicação:
O código gera uma matriz com todas as letras do alfabeto, que tem seu Valor ASCII como Chave de Matriz. Posteriormente, o código gera uma nova matriz que contém os valores ASCII da entrada. Em seguida, o menor valor é impresso e removido.
Uso:
Chame o script com um argumento:
php -d error_reporting=0 script.php Hello
Versão Ungolfed:
Quaisquer conselhos são muito apreciados.
fonte
Haskell,
8353 bytesUso:
f "HelloWorldhi"
->"deHhillloorW"
.Como funciona: deixe
y
seja a string de entradaEdit: 30 bytes salvos, imagine isso! Obrigado @Mauris.
fonte
import Data.Char;f y=[c|x<-[' '..],c<-y,toLower c==x]
(53 bytes)? (Isso levará algum tempo para terminar, porquelength [' '..] == 1114080
- mas é finito).Python 3, 61 bytes
Uma nova resposta para uma técnica diferente!
Observando isso
ord('a')&31==ord('A')&31
e aquiloord('z')&31==ord('Z')&31
, podemos simplesmente criar uma matriz de cadeias vazias e, para cada caractere, adicioná-la ao índice da matriz de seu valor ASCII&31
. Quando você imprimi-lo, ele será classificado.Limitado à entrada
a-zA-Z
.fonte
Python 3,
9792 bytesA melhor maneira de classificar é claramente gerar todas as permutações e depois escolher o mínimo, que por acaso é classificado :)
As strings são minúsculas antes da comparação para obedecer às regras 'case-sensitive'.
Atenção: may be muito lento com cordas grandes.
Um intérprete está localizado aqui .
fonte
Python 3, 118 bytes
Poderia ser jogado muito mais curto, eu sei
fonte
if q not in i:
porif~-(q in i):
..remove()
função nele.Powershell, 164 bytes
Tenho certeza de que há uma maneira mais limpa de fazer isso, mas não consegui pensar em mais nada. Apenas pega a entrada como uma matriz de caracteres, faz uma ordenação por inserção e cospe a saída. Perde terrivelmente, mesmo para outros idiomas que não são de golfe.
Código:
Uso:
Expandido e explicado:
fonte
Julia, 61 bytes
Julia exibirá isso como uma saída de sequência, se você chamá-lo no REPL. Se isso tem de imprimir para STDOUT, então ele precisa de 78 bytes:
Um intérprete para Julia pode ser encontrado aqui . Outro, no qual eu já coloquei algum código, é aqui . Observe que, com o segundo, você precisará tornar o terminal (na parte inferior) visível, arrastando o limite para cima. Clicar em "executar" fará com que seja executado no terminal na linha de comando normal (e, portanto, não mostrará a saída se for chamado sem println). Como alternativa, basta digitar
julia
o próprio terminal e lidar com tudo dentro do REPL que será exibido.E para um pouco de diversão extra, aqui estão algumas outras implementações
Classificação do Gnome (83 bytes):
Meu próprio algoritmo de classificação (84 bytes):
fonte
Scala, 82 bytes
da linha de comando:
provavelmente pode ser um pouco mais avançado ... apenas implementando o tipo de inserção usando fold.
fonte
código de máquina x86,
5142 bytesClassificação por bolha, com alguns truques de reutilização de registro para barbear bytes aqui e ali; o arquivo .COM é executado no DosBox, recebe a entrada da linha de comando e imprime a saída na saída padrão.
Montagem comentada:
fonte
Java (JDK 10) , 125 bytes
Experimente online!
Usando um tipo ingênuo.
fonte
Perl, 88 bytes
Apenas um simples Bubble Sort. Ligue com a opção -n para passar o texto.
por exemplo:
Resultado:
fonte
PHP, 106 bytes
O código:
Não há nada de especial no código;
count_chars()
produz uma matriz indexada por códigos ASCII que contém o número de ocorrências para cada caractere ASCII. O resto é uma iteração chata sobre essa matriz.Exemplo de execução:
Um byte extra pode ser salvo usando o PHP 7: substitua
$c[$i]
por($c=count_chars($argv[1]))[$i]
e remova a atribuição de$c
desde o início do programa.fonte
Haskell, 74 bytes
Completamente diferente da minha outra resposta . Desta vez, é uma classificação de inserção simples.
fonte
Pip,
1814 bytesRepositório do GitHub para Pip
Parece que não há como competir com Pyth, mas isso é bastante respeitável.
Funciona apenas em cadeias contendo
a-zA-Z
. Para cada letra do alfabeto, usa uma operação de filtro para pegar as letras da sequência de entrada que é igual a essa letra sem distinção entre maiúsculas e minúsculas:Duas notas:
AZO
seria digitalizada como emA ZO
vez deAZ O
;x
no final do código (imprimindo assim uma string vazia após a conclusão do loop).Amostra de execução (usando a
x
variante):fonte
Perl 5
-a
, 31 bytesExperimente online!
fonte