Підпишіть це слово!


12

Що таке підпис слова?

Сигнатура слова є все це листи привести в порядок - підписи this, histі hitsвсе hist.

Змагання

Написати програму, слід запитати введення, а потім роздрукувати підпис цього слова. Отже, приклад запуску програми може виглядати приблизно так:

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

Немає необхідної взаємодії, якщо вона займає введення та друкує підпис, це нормально.

Оцінка балів

Програма з найменшим числом байтів виграє!

Таблиця лідерів

Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

# Language Name, N bytes

де Nрозмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:

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

Оскаржено закінчено!

ПЕРЕМОЖНИК : jimmy23013


3
Ми не повинні друкувати пропозиції Give me a string:і The signature signature of 'this' isправо? Ми можемо просто взяти вклад безпосередньо та надрукувати результат?
Фаталізувати

4
А як щодо дублікатів букв? наприклад, це підпис broom bmoorабо bmor?
samgak

3
@isaacg чому ти?
Тім

3
@Tim Я не думаю, що у нас не повинно виникати проблем, які є простими. Я запитаю про це на мета - це насправді не особливо це питання.
isaacg

2
Я думаю, що це було б більш цікавим завданням, якби ви не могли використовувати вбудовані функції сортування.
Глен О

Відповіді:


49

GolfScript, 1 байт

$

Так, лише 1 байт.

Спробуйте тут.


4
Позначено як правильне, оскільки ніхто не може побити 1 байт.

9
@Kslkgh Теоретично, можливо, хтось може знайти мову, яка може це зробити в 0 байт?
jimmy23013

2
Я б сказав, що це не вдається для "Привіт"
Джеймс Вебстер

3
Здається, розбивається ні на що з капіталом, але здогадуйтесь, що його ніколи не було зазначено
Lain

1
Столиці не порушують код. Він спочатку сортує великі літери, а потім малі літери. тобто cbaCBAfed -> ABCabcdef
Mully

25

C (з x86), 61 байт

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

Цей рядок містить необроблені байти, а не фактичні \x..коди, і це переданий зворотний виклик машинного кодуqsort . Працює лише на 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

Що по суті:

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

Див. P6-7 цієї брошури японською мовою shinh .


Це не є загальною мовою C, оскільки вона орієнтована на конкретну архітектуру. Це слід вказати у заголовку
edc65

20

Застряг, 4 байти

sc$d

Ця мова була задокументована у вікі лише вчора! Ммм, свіжі езоланги.


1
Чудово зроблено! :)
Каде

19

Застряг, 5 байт

Нарешті я можу використовувати свою мову, Стюк ! : D

s$""j

Це вимагає введення через stdin, сортування, приєднання та неявне друкування. Це все ж дало мені кілька ідей щодо змін.

Редагувати: О, вау, хтось уже опублікував і побив мене своєю мовою!


16

GOTO ++, 432 430 байт

Сайт проекту 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

Не впевнений, чому я це завдав собі, але я це зробив


13

gs2, 1 байт

/

Те саме, що відповідь GolfScript, але gs2 використовує інший оператор для сортування.


10

Perl, 18 байт

print sort<>=~/./g

Дякую Дому Гастінгсу за те, що він допомагає мені зберегти 3 байти.


Ви можете зберегти кілька байт з використанням /./gзамість split'',: print sort<>=~/./g!
Дом Гастінгс

З -nE, ви можете зробити say sort/./g.
Денніс




6

C #, 114 110 символів

Бере вхід з аргументу командного рядка. Не дуже коротка програма, але добре ... це C #. : P

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

Дякуємо Аббасу за збереження 4 байтів!


1
Ви можете зберегти 4 символи, використовуючи Writeзамість WriteLine. ;)
Аббас

@Abbas Дякую! Повністю пропустив цю; p
ProgramFOX

6

Brainfuck, 40 байт

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

Для цього використовується алгоритм сортування підрахунку , який робить це O (n) рішенням.

Код вимагає залишкової або обертової стрічки з 8 бітових комірок. Спробуйте в Інтернеті!

Як це працює

,          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 байти

l$

Читає рядок введення ( l) і сортує його ( $).





4

Java 8, 119 байт

Це в основному лише конкурентоспроможний відповідь на C #, бо, ну, Java.

(Принаймні, це перемагає GOTO ++. Насправді це не є досягненням ...)

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

Завдяки ProgramFOX зберегти 1 байт, rink.attendant зберегти 2 байти.


Ви можете зберегти один char, видаливши пробіл між String[]і s.
ProgramFOX

О, я забув про це. Тепер мій байт - це приємне квадратне число. Дякую!
TheMadHaberdasher

Я думаю, ви можете використовувати System.out.printзамістьprintln
rink.attendant.6

Дякую! Це моя перша спроба кодового гольфу, тому мені ще належить вивчити подібні речі.
TheMadHaberdasher

Ви можете зберегти 12 символів за допомогоюpublic static void main(String[]s){s[0].chars().sorted().forEach(i->System.out.print((char)i));}
assylias


3

JavaScript (ES6), 32 байти

Демо працює лише у Firefox та Edge під час написання, оскільки Chrome / Opera за замовчуванням не підтримує ES6:

Редагувати: Я не дивився на відповіді до публікації, але тепер я розумію, що це майже те саме, що і 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

Скала, 21 байт

print(args(0).sorted)

запустити з прикладу командного рядка:

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


2

Джулія, 21 байт

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

А для задоволення, ось як це можна зробити, не використовуючи вбудовану функцію сортування, на 53 байти:

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

2

JavaScript, 34 байти

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

Причина цього настільки довга в тому, що JavaScript може сортувати лише масиви, тому рядок потрібно розділити на масив, відсортувати, а потім об'єднати назад у рядок. Це ECMAScript 6; еквівалент у ES5:

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

Слід вказати EcmaScript 6, як він використовує, ...і рядки шаблону
edc65

@ edc65 Ти маєш рацію, я забув. Зроблено.
NinjaBearMonkey

1

Python 2, 33 32 байт

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

Сильно натхненний відповіддю @ Камехамехи. Перетворено на python 2. Не можна набагато більше гольфу.


1
Ви можете скористатись reprіншим байтом (тепер ви знаєте, чому я вибрав версію рішення Python 3: P) - print`sorted(raw_input())`[2::5](Це зворотні посилання, а не одиничні лапки)
Kamehameha

1

APL, 7 символів

Не працює для ngn-apl для мене, але повинен працювати теоретично:

X[⍋X←⍞]

читає рядок зі стандартного вводу, якому призначено X. ⍋X- це показники, Xякі дають порядок зростання, і X[...]фактично сортуються Xза цими показниками.


1
Працює на Dyalog (настільна версія, а не TryAPL).
Олексій А.

1

JavaScript, 54 байти

виклик js-файла з вузлом

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


1

Нім, 102 101 79 73 байт

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

Ще вивчаю Нім і розробляю трюки з гольфу. Мабуть, краще не використовувати вбудований sort, який зажадає багато імпорту (спасибі @Mauris)


let s=stdin.readAll;for i in 1..'~':(for j in s:(if i==j:echo j))становить 65 байт.
Лінн

@Mauris Вау, я не думав, що не використовувати вбудований сорт буде коротше! Єдина проблема, проте - чи можна echoобійтися без затримки нового рядка?
Sp3000

Ой, ой, звичайно. stdout.write jздається, працює, і трохи коротший, ніж ваш &=цикл.
Лінн

@Mauris Дійсно, здається, працює - дякую :)
Sp3000

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.