Assine essa palavra!


12

O que é uma assinatura do Word?

A assinatura de uma palavra são todas as letras colocadas em ordem - as assinaturas de this, histe hitssão todas hist.

O desafio

Escreva um programa que solicite uma entrada e depois imprima a assinatura dessa palavra. Portanto, um exemplo de execução de programa pode ser assim:

Give me a string: this
The signature signature of 'this' is hist.

Não há interação necessária, desde que receba uma entrada e imprima a assinatura, tudo bem.

Pontuação

O programa com a menor contagem 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 Nestá 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

Desafiado terminado!

VENCEDOR: jimmy23013


3
Não temos para imprimir as frases Give me a string:e The signature signature of 'this' iscerto? Podemos apenas pegar a entrada diretamente e imprimir o resultado?
Fatalize 19/08/15

4
E as cartas duplicadas? por exemplo, é a assinatura de broom bmoorou bmor?
samgak

3
@isaacg, por que você está?
Tim

3
@ Tim Não acho que devamos ter desafios que sejam tão diretos. Vou perguntar sobre isso na meta - não é realmente sobre essa questão em particular.
Isaacg

2
Eu acho que esse teria sido um desafio mais interessante se você não pudesse usar as funções de classificação internas.
Glen O

Respostas:


49

GolfScript, 1 byte

$

Sim, apenas 1 byte.

Experimente aqui.


4
Marcado como correto, porque ninguém pode bater 1 byte.

9
@Kslkgh Em teoria, talvez alguém possa encontrar uma linguagem que possa fazê-lo em 0 bytes?
precisa saber é o seguinte

2
Eu diria que este falhar por "Olá"
James Webster

3
Parece quebrar para qualquer coisa com um capital, mas acho que ele nunca foi especificado
Lain

1
Capitais não quebram o código. Classifica primeiro as maiúsculas e depois as minúsculas. Ou seja, cbaCBAfed -> ABCabcdef
Mully

25

C (com x86), 61 bytes

s[];main(){qsort(s,read(0,s,99),1,"YXZQQQ\x8a\x00*\x02\x0f\xbe\xc0\xc3");puts(s);}

Essa sequência contém bytes brutos, não \x..códigos reais , e é um retorno de chamada de código de máquina bruto passado para qsort. Funciona apenas em x86:

59         pop   ecx
58         pop   eax
5a         pop   edx
51         push  ecx
51         push  ecx
51         push  ecx
8a 00      mov   al,  BYTE PTR [eax]
2a 02      sub   al,  BYTE PTR [edx]
0f be c0   movsx eax, al
c3         ret

O que é essencialmente:

int func(char *a, char *b) { return *a - *b; }

Veja as páginas 6 a 7 deste panfleto em japonês, por shinh .


Esta não é uma linguagem C genérica, pois tem como alvo uma arquitetura específica. Isso deve ser especificado no cabeçalho
edc65


19

Preso, 5 bytes

Finalmente uso meu idioma, preso ! : D

s$""j

Isso recebe uma entrada via stdin, classifica, une e imprime implicitamente. Isso me deu algumas idéias para mudanças.

Edit: Oh uau, alguém já postou e me venceu no meu próprio idioma!


16

GOTO ++, 432 430 bytes

Site do projeto GOTO ++ .

niveaugourou 0
s=ENTRETONTEXTE()
§2 a=LeCaracNumero()&s *(1)
n=*(1)
costaud i=*(2)/&i infeg NombreDeLettres(&s)/i=+*(1)
b=LeCaracNumero()&s &i
GOTONULPOURLESNULS %1 }&b inf &a{
a=&b
n=&i
§1 faiblard
GOTOPRINTDUTEXTE()&a
t=PrendsUnMorceau()&s *(0) &n
u=PrendsUnMorceau()&s }&n+*(1){ *(0)
e=BOITEAPINGOUINS()&t &u
s=Marijuana()&e «»
GOTONONNULPOURLESNULS %3 }NombreDeLettres(&s) eg *(1){
GOTOPASMALIN %2
§3 GOTOPRINTDUTEXTE()&s

Não sei por que infligi isso a mim mesmo, mas fiz


13

gs2, 1 byte

/

O mesmo que a resposta do GolfScript, mas o gs2 usa um operador diferente para classificar.


10

Perl, 18 bytes

print sort<>=~/./g

Agradeço a Dom Hastings por me ajudar a economizar 3 bytes.


você pode economizar alguns bytes usando um /./gem vez de split'',: print sort<>=~/./g!
Dom Hastings

Com -nE, você pode fazer say sort/./g.
Dennis

7

Haskell, 35 bytes

import Data.List;main=interact sort



6

C #, 114 110 caracteres

Recebe entrada de um argumento de linha de comando. Não é um programa muito curto, mas bem ... é C #. : P

namespace System.Linq{class P{static void Main(string[]a){Console.Write(string.Concat(a[0].OrderBy(x=>x)));}}}

Obrigado a Abbas por salvar 4 bytes!


1
Você pode salvar 4 caracteres usando em Writevez de WriteLine. ;)
Abbas

@Abbas Thanks! Totalmente perdi esse; p
ProgramFOX

6

Brainfuck, 40 bytes

,[>>+>>,]<<[[<<]>>[-[<]>>[.<<->]>+>>]<<]

Isso usa o algoritmo de classificação de contagem , o que o torna uma solução O (n) .

O código requer uma fita infinita esquerda ou empacotada de células de 8 bits. Experimente online!

Como funciona

,          Read a char from STDIN.
[          While the byte under the pointer (last read char) is non-zero:
  >>+        Move the pointer two steps to the right and increment.
  >>,        Move the pointer two steps to the right and read a char.
]
<<         Move the pointer two steps to the left.

           If the input was "sort", the tape now contains the following:
           0 0 115 0 1 0 111 0 1 0 114 0 1 0 116 0 1 0 0
                                                   ^

[          While the byte under the pointer is non-zero:
  [<<]       Advance two steps to the left until a null byte is encountered.
  >>         Advance two steps to the right.

             This will place the pointer on the first input character.

  [          While the byte under the pointer is non-zero:
    -          Decrement.
    [<]        Move the pointer to the left until a null byte is encountered.
    >>         Move the pointer two steps to the right.

               If the decremented character is non-zero, [<] will move to the
               null byte before it, so >> brings the pointer to the null byte
               after it. If the decremented character is zero, [<] is a no-op, so
               >> advances two steps to the right, to a non-zero byte.

    [          While the byte under the pointer is non-zero:
      .          Print the char under the pointer.
      <<-        Move the pointer two steps to the left and decrement.
      >          Move the pointer to the right.
    ]

               If the decremented character gave zero, this will print the value
               of the accumulator after it, and decrement the character once more
               to make it non-zero, then place the pointer to the right of the
               character, thus exiting the loop.

    >+         Move the pointer to the right and increment.

               This increments the accumulator each time an input character is
               decremented.

    >>         Move the pointer two steps to the right.

               This moves the pointer to the next character.
  ]
  <<         Move the pointer two steps to the left.

             This moves the pointer to the accumulator of the last character.
]

             After 255, th accumulator wraps around to 0, and the loop ends.

5

CJam, 2 bytes

l$

Lê uma linha de input ( l) e a classifica ( $).


4

Python 3, 31 bytes

print("".join(sorted(input())))

Isso parece com 29 bytes para mim #
1919

@muddyfish é 31 caracteres, quando eu contei :)
Kamehameha

4

Coreutils, 24 23

fold -w1|sort|tr -d \\n


4

Java 8, 119 bytes

Isso é basicamente competitivo apenas com a resposta C #, porque, bem, Java.

(Pelo menos, isso supera GOTO ++. Não é realmente uma conquista ...)

class C{public static void main(String[]s){s=s[0].split("");java.util.Arrays.sort(s);System.out.print("".join("",s));}}

Graças ao ProgramFOX por salvar 1 byte, rink.attendant por salvar 2 bytes.


Você pode salvar um caractere removendo o espaço entre String[]e s.
ProgramFOX

Ah, eu esqueci disso. Agora minha contagem de bytes é um bom número quadrado. Obrigado!
TheMadHaberdasher

Eu acho que você pode usar em System.out.printvez deprintln
rink.attendant

Obrigado! Esta é a minha primeira tentativa de código de golfe, então ainda tenho que aprender coisas assim.
TheMadHaberdasher

Você pode salvar 12 caracteres compublic static void main(String[]s){s[0].chars().sorted().forEach(i->System.out.print((char)i));}
assylias


3

JavaScript (ES6), 32 bytes

A demonstração funciona apenas no Firefox e Edge no momento da escrita, pois o Chrome / Opera não suporta o ES6 por padrão:

Edit: Eu não olhei para as respostas antes de postar, mas agora percebo que é praticamente o mesmo que o de NinjaBearMonkey .

f=x=>alert([...x].sort().join``)
<form action=# onsubmit='f(document.getElementById("I").value);return false;'>
  <input type=text pattern=\w+ id=I>
  <button type=submit>Sort letters</button>
</form>


2

SWI-Prolog, 34 bytes

a(X):-msort(X,Y),writef("%s",[Y]).

Chamado como tal:a(`this`).


2

Scala, 21 bytes

print(args(0).sorted)

exemplo de linha de comando:

$ scala -e "print(args(0).sorted)" this
hist


2

Julia, 21 bytes

s->join(sort([s...]))

E, por diversão, veja como você pode fazer isso sem usar uma função de classificação integrada, por 53 bytes:

f=s->s>""?(k=indmax(s);f(s[k+1:end]s[1:k-1])s[k:k]):s

2

JavaScript, 34 bytes

alert([...prompt()].sort().join``)

A razão disso é que o JavaScript só pode classificar matrizes; portanto, a cadeia de caracteres deve ser dividida em uma matriz, classificada e depois conectada novamente a uma cadeia. Este é o ECMAScript 6; o equivalente no ES5 é:

alert(prompt().split('').sort().join(''))

Deve especificar EcmaScript 6 como é usando ...e cordas modelo
edc65

@ edc65 Você está certo, eu esqueci. Feito.
NinjaBearMonkey

1

Python 2, 33 32 bytes

print`sorted(raw_input())`[2::5]

Fortemente inspirado pela resposta de @ Kamehameha. Convertido em python 2. Não é possível jogar golfe muito mais.


1
Você pode usar reprpara derrubá-lo outra byte (Agora você sabe por que eu escolhi versão Python 3 da solução: P) - print`sorted(raw_input())`[2::5](Essas são backticks, citações não individuais)
Kamehameha

1

APL, 7 caracteres

Não funciona em ngn-apl para mim, mas deve funcionar em teoria:

X[⍋X←⍞]

lê uma linha da entrada padrão, a qual é atribuída X. ⍋Xsão os índices Xque produzem uma ordem crescente e, X[...]na verdade, são classificados Xpor esses índices.


1
Funciona no Dyalog (versão para desktop, não no TryAPL).
Alex A.

1

JavaScript, 54 bytes

chame o arquivo js com nó

console.log(process.argv[2].split('').sort().join(''))


1

Nim, 102 101 79 73 bytes

let s=stdin.readAll
for i in 1..'~':
 for j in s:(if i==j:stdout.write j)

Ainda aprendendo Nim e elaborando truques de golfe. Aparentemente, é melhor não usar o built-in sort, o que exigiria muitas importações (obrigado @Mauris)


let s=stdin.readAll;for i in 1..'~':(for j in s:(if i==j:echo j))é de 65 bytes.
Lynn

@ Mauris Uau, eu não acho que não usar o tipo embutido seria mais curto! O único problema é que existe - há uma maneira de echosem a nova linha à direita?
Sp3000 20/08/2015

Oh, opa, é claro. stdout.write jparece funcionar e é um pouco mais curto que o seu &=loop.
21415 Lynn

@Mauris Na verdade, parece ao trabalho - graças :)
SP3000

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.