¡Firma esa palabra!


12

¿Qué es una firma de Word?

La firma de una palabra son todas sus letras ordenadas: las firmas de this, histy hitsson todas hist.

El reto

Escribir un programa programa debe pedir una entrada, luego imprimir la firma de esa palabra. Entonces, un ejemplo de ejecución del programa podría verse así:

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

No se requiere interacción, siempre y cuando tome una entrada e imprima la firma, está bien.

Puntuación

¡El programa con el recuento de bytes más pequeño gana!

Tabla de clasificación

Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Desafiado terminado!

GANADOR: jimmy23013


3
No tenemos que imprimir las oraciones Give me a string:y The signature signature of 'this' is¿verdad? ¿Podemos tomar la entrada directamente e imprimir el resultado?
Fatalize

44
¿Qué pasa con las letras duplicadas? por ejemplo, ¿es la firma de broom bmooro bmor?
samgak

3
@isaacg ¿por qué estás?
Tim

3
@Tim No creo que debamos tener desafíos que sean tan directos. Lo preguntaré sobre meta, no se trata realmente de esta pregunta en particular.
isaacg

2
Creo que este habría sido un desafío más interesante si no pudieras usar las funciones de clasificación incorporadas.
Glen O

Respuestas:


49

GolfScript, 1 byte

$

Sí, solo 1 byte.

Pruébalo aquí.


44
Marcado como correcto porque nadie puede vencer 1 byte.

99
@Kslkgh En teoría, ¿tal vez alguien pueda encontrar un idioma que pueda hacerlo en 0 bytes?
jimmy23013

2
Yo diría que esto falla para "Hola"
James Webster

3
Parece romper para cualquier cosa con una capital, pero supongo que nunca se especificó
Lain

1
Las capitales no rompen el código. Primero ordena las mayúsculas y luego las minúsculas. es decir, cbaCBAfed -> ABCabcdef
Mully

25

C (con x86), 61 bytes

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

Esa cadena contiene bytes sin procesar, no \x..códigos reales , y es una devolución de llamada de código de máquina sin procesar que se pasa qsort. Funciona solo en 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

Que es esencialmente:

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

Ver p6-7 de este folleto en japonés por shinh .


Este no es un lenguaje C genérico, ya que apunta a una arquitectura específica. Eso debería especificarse en el encabezado
edc65


19

Atascado, 5 Bytes

¡Finalmente puedo usar mi idioma, Stuck ! :RE

s$""j

Esto toma una entrada a través de stdin, ordena, une e imprime implícitamente. Sin embargo, esto me dio algunas ideas para los cambios.

Editar: ¡Oh wow, alguien ya ha publicado y me ganó en mi propio idioma!


16

GOTO ++, 432 430 bytes

Sitio del proyecto 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

No estoy seguro de por qué me hice esto, pero lo hice


13

gs2, 1 byte

/

Igual que la respuesta de GolfScript, pero gs2 utiliza un operador diferente para ordenar.


10

Perl, 18 bytes

print sort<>=~/./g

Gracias a Dom Hastings por ayudarme a ahorrar 3 bytes.


usted puede ahorrar unos pocos bytes utilizando un /./glugar de split'',: print sort<>=~/./g!
Dom Hastings

Con -nE, puedes hacerlo say sort/./g.
Dennis

7

Haskell, 35 bytes

import Data.List;main=interact sort



6

C #, 114 110 caracteres

Toma información de un argumento de línea de comando. No es un programa muy corto, pero bueno ... es C #. :PAG

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

¡Gracias a Abbas por guardar 4 bytes!


1
Puede guardar 4 caracteres utilizando en Writelugar de WriteLine. ;)
Abbas

@Abbas ¡Gracias! La perdí por completo; p
ProgramFOX

6

Brainfuck, 40 bytes

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

Esto utiliza el algoritmo de ordenación de conteo , que lo convierte en una solución O (n) .

El código requiere una cinta de envoltura infinita izquierda o de celdas de 8 bits. Pruébalo en línea!

Cómo 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$

Lee una línea de entrada ( l) y la ordena ( $).


4

Python 3, 31 bytes

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

Que se parece a 29 bytes para mí
Azul

@muddyfish son 31 caracteres, cuando conté :)
Kamehameha

4

Coreutils, 24 23

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


4

Java 8, 119 bytes

Básicamente, esto solo es competitivo con la respuesta de C #, porque, bueno, Java.

(Al menos esto supera a GOTO ++. No es realmente un logro ...)

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

Gracias a ProgramFOX por guardar 1 byte, rink.attendant por guardar 2 bytes.


Puede guardar un carácter eliminando el espacio entre String[]y s.
ProgramFOX

Oh, me olvidé de eso. Ahora mi conteo de bytes es un buen número cuadrado. ¡Gracias!
TheMadHaberdasher

Creo que puedes usar en System.out.printlugar deprintln
rink.attendant.6

¡Gracias! Este es mi primer intento de golf de código, así que todavía tengo que aprender cosas así.
TheMadHaberdasher

Podrías guardar 12 caracteres conpublic static void main(String[]s){s[0].chars().sorted().forEach(i->System.out.print((char)i));}
assylias


3

JavaScript (ES6), 32 bytes

La demostración solo funciona en Firefox y Edge en el momento de la escritura, ya que Chrome / Opera no admite ES6 de forma predeterminada:

Editar: no miré las respuestas antes de publicarlas, pero ahora me doy cuenta de que es casi exactamente igual a la 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]).

Llamado como tal:a(`this`).


2

Scala, 21 bytes

print(args(0).sorted)

Ejecutar desde la línea de comando ejemplo:

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


2

Julia, 21 bytes

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

Y por diversión, así es como podría hacerlo sin usar una función de clasificación incorporada, para 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``)

La razón por la que esto es tan largo es que JavaScript solo puede ordenar matrices, por lo que la cadena se debe dividir en una matriz, ordenar y luego volver a unir en una cadena. Este es el ECMAScript 6; El equivalente en ES5 es:

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

Debería especificar EcmaScript 6 como está usando ...y cadenas de plantilla
edc65

@ edc65 Tienes razón, lo olvidé. Hecho.
NinjaBearMonkey

1

Python 2, 33 32 bytes

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

Muy inspirado por la respuesta de @ Kamehameha. Convertido a python 2. No se puede jugar mucho más al golf.


1
Puede usarlo reprpara reducirlo a otro byte (ahora ya sabe por qué elegí la versión Python 3 de la solución: P) - print`sorted(raw_input())`[2::5](Esos son backticks, no comillas simples)
Kamehameha

1

APL, 7 caracteres

No funciona en ngn-apl para mí, pero debería funcionar en teoría:

X[⍋X←⍞]

lee una línea de entrada estándar, que se asigna a X. ⍋Xson los índices los Xque producen un orden ascendente, y en X[...]realidad se clasifican Xpor estos índices.


1
Funciona en Dyalog (versión de escritorio, no TryAPL).
Alex A.

1

JavaScript, 54 bytes

llamar al archivo js con nodo

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)

Todavía estoy aprendiendo a Nim y haciendo trucos de golf. Aparentemente, es mejor no usar el builtin sort, que requeriría muchas importaciones (gracias @Mauris)


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

@Mauris Wow, ¡no pensé que no usar el tipo integrado sería más corto! Sin embargo, el único problema: ¿hay alguna forma de hacerlo echosin la nueva línea final?
Sp3000

Oh, vaya, por supuesto. stdout.write jparece funcionar, y es un poco más corto que tu &=ciclo.
Lynn

@Mauris De hecho, parece funcionar - gracias :)
Sp3000

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.