Відображення вироку в алфавітному порядку


14

Напишіть програму, яка займає рядок і виводить усі символи в алфавітному порядку. Пробіли та символи можна ігнорувати або видаляти, але великі та малі літери повинні залишатися однаковими.

Зразок введення:

Johnny walked the dog to the park.

Вибірка зразка

aaddeeeghhhJklnnoooprtttwy

Правила:

• Будь-яка мова

• Виграє найкоротший код.


5
Як сортувати великі та малі літери? Верхня перед нижньою, навпаки чи стабільною із входом?
Говард

Чи потрібно обробляти будь-які літери поза основним латинським алфавітом ("англійський алфавіт")?
Себастьян Неграш

3
З назви я сподівався, що мені вдасться піти з відображенням "Речення в алфавітному порядку". Або "ceeennst". (Гаразд, "Sceeennt", якщо ви наполягаєте на правильній капіталізації та порядку ASCII.)
keshlam

Коли ви Spaces and symbols can be ignored or deleted, це означає, потрібно ігнорувати; або такий вихід , .aaddeeeffдозволений?
blutorange

4
Чи не повинно бути 2 kс у виході?
HyperNeutrino

Відповіді:


1

MathGolf , 2 байти

áδ

Спробуйте в Інтернеті!

Приклад виведення

      .aaddeeeghhhJkklnnoooprtttwy

Видалення не алфавітних символів

Щоб видалити всі не алфавітні символи, це рішення працює:

áδgÆ∞_δ¡

Це те саме, що і код вище, після якого відбувається фільтрація, коли кожен символ спочатку подвоюється, а потім порівнює власну велику літери. Наприклад, рядок "a"перетворюється в, "aa"а потім пишеться з великої літери "Aa", що не дорівнює "aa". Таким же чином, рядок "B"перетворюється на "BB"велику літери "Bb", а це не дорівнює "BB". Однак при конфіскації з великої літери "."конвертується ".."і не змінюється, тож вона відфільтрована.

Пояснення

Мені дуже потрібна обробка рядків у MathGolf ... Зараз немає навіть оператора, який би перейшов у малі / великі регістри. Єдине, що я міг би використати - це оператор з великої літери, який працює як оператор верхнього регістру для рядків довжиною 1. Це рішення також сортує не алфавітні символи, але їх можна ігнорувати. Алфавітні символи зберігають свій регістр і виводяться у правильному порядку.

á    sort by comparator
 δ   capitalize string

12

GolfScript, 24/6 символів

{26,{65+.32+}%?)},{31&}$

Приклад:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

Якщо вхід обмежений для друку ascii, код можна скоротити на три символи, використовуючи {95&.64>\91<&},як фільтр.

Можна протестувати тут .

Версія, яку можна ігнорувати, ще коротша (6 символів):

{31&}$

і дає вихід

> Johnny walked the dog to the park.
      aaddeeeghhhJkkl.nnoooprtttwy

і якщо "алфавіт" може бути розтлумачений як "ASCII порядку в порядку, це може бути просто зведено до{}$
МакКей

@McKay Питання чітко вказано інакше. І {}$було б рівнозначно $.
Говард

О так. Дякую, я намагаюся вивчити гольфскрипт
Маккей

8

Основні утиліти GNU - 25 символів (29 символів, що падають)

fold -1|sort -f|tr -d \\n

Приклад (з GNU bash 3):

$ echo "Johnny walked the dog to the park."|fold -1|sort -f|tr -d \\n
      .aaddeeeghhhJkklnnoooprtttwy   <<no trailing newline>>

З питання:

Пробіли та символи можна ігнорувати або видаляти

Я вирішив залишити їх! Щоб зберегти тільки літерні символи, замінити fold -1з grep -o \\wна +4 символів.

grep -o \\w|sort -f|tr -d \\n

Завдяки Firefly для рекомендуючи grep -oбільше sedі Wumpus для fold -1. ;-)


Це не в алфавітному порядку, великі регістри J все одно повинні бути алфавітно відсортовані з іншими малими літерами.
акс.

Ой хороший пункт АКС. Я повинен додати -f(скласти), sortщоб ігнорувати регістр.
joeytwiddle

6

С, 121

Це досить довгий порівняно з іншими записами, але він не покладається на будь-які вбудовані функції сортування чи функції ToLower:

j;main(k){char s[99],*p=s;gets(s);while(*p){j=p-s-1;k=*p++;while(j>=0&&(s[j]|32)>(k|32))s[j+1]=s[j--];s[j+1]=k;}puts(s);}

Більш прочитана версія:

j; main(k) {
    char s[99], *p=s;
    gets(s);
    while(*p) {
        j = p-s-1;
        k = *p++;
        while(j >= 0 && (s[j]|32) > (k|32))
            s[j+1] = s[j--];
        s[j+1] = k;
    }
    puts(s);
}

Це реалізація сортування вставки з порівнянням між елементами нечутливого до регістру (за допомогою |32побітової операції). Це тому, що в кодуванні ASCII великі і малі літери відрізняються лише 2 5- бітовими.


5

Рубін - 33 ч

$><<gets.chars.sort(&:casecmp)*''

Де вихідний код?
Джон Дворак

Ви можете запастити 2 символи, використовуючи *""замість них .join.
манантська робота

Ви можете використовувати p, але це сумнівно, тому просто використовуйте puts. Також $<є ярлик для ARGF
Шельваку

@manatwork відредаговано ...
Сіва

Ви можете зберегти 1 символ, використовуючи $><<замість того puts, що роздільний простір можна видалити.
манатство

5

PowerShell: 39

$([string[]][char[]](Read-Host)|sort)" #With spaces and symbols

Результат

  .aaddeeeghhhJkklnnoooprtttwy

C #: 100

Console.Write(new string(input.ToCharArray().OrderBy(a=>char.ToLower(a)).ToArray()).Trim('.',' '));

Результат

aaddeeeghhhJkklnnoooprtttwy

Це не програма, як цього вимагає запитання.
Говард

Вам не потрібно ToCharArray; StringзнаряддяIEnumerable<char>
Рік

@howard, так що сценарії вважаються програмою?
Ральф де Клейн

1
Ваші рішення, що не включають символи, працюють лише для введення зразка. Цей вхід був лише зразком (реальний вхід може включати й інші символи).
Сандер

1
@RalfdeKleine Вибачте, я пропустив помилку, salне думаю, що ви можете цим скористатися. Але ви можете позбутися від призначення змінної за допомогою "$([string[]][char[]](Read-Host)|sort)".
Кріс Харпер

4

Perl6: 26 символів

Сортування виводить великі регістри, а потім малі, видаляє символи / пробіли

say [~] sort comb /\w/,get

Якщо пробіли / символи у виході можуть також ігноруватися, це лише 21 символ.

say [~] get.comb.sort

Цей сорт нечутливий до регістру, зберігає символи (26 символів)

say [~] get.comb.sort: &lc

Він повинен сортувати без регістру, але при бажанні може ігнорувати пробіли та символи.
Тімтех

4

АПЛ 16

      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.

Це не відповідає вимогам, тому що J не приходить перед a, d, e тощо.
Timtech

Чудова робота там +1
Timtech

3

Perl 34

Тепер бере вхід від STDIN.

print sort{lc$a cmp lc$b}<>=~/\w/g

Перл 18

Якщо прийнятний вихід, включаючи перші літери та включені символи, прийнятний:

print sort<>=~/./g

Я підозрюю, що ви можете скоротити його далі, взявши рядок із введення (відповідно до опису), а не отримуючи його з cmdline.
хлібопекар

Ой, прав, ти!
Дом Гастінгс

2

Пітон 3: 45

print(''.join(sorted(input(),key=str.lower)))

Я не в Python, але ваш код видаляє пробіли протягом періоду?
Ральф де Кляйн

Ні, але "Пробіли та символи можна ігнорувати чи видаляти", тому я просто ігнорую їх!
evuez

Ах читати важко;)
Ральф де Клейн

Використання лямбда економить кілька байт: Спробуйте це в Інтернеті
Ведант Кандой

2

Хаскелл, 88

import Data.List
import Data.Char
import Data.Ord
main=interact$sortBy$comparing toLower

(38 без імпорту зі стандартних ліб)


2

k ( 10 9)

Читає від stdin

x@<_x:0:0

Приклад

x@<_x:0:0
Johhny walked the dog to the park.
"      .aaddeeeghhhhJkklnoooprtttwy"

2

C #: 83

Console.Write(new string(Console.ReadLine().OrderBy(i=>i+"".ToLower()).ToArray()));

Оновлення: 65

Виконується в LinQPad

new string(Console.ReadLine().OrderBy(i=>i+"").ToArray()).Dump();

1
Ви можете видалити дамп і констатувати його запуск у режимі вираження LinqPad :)
Якоб

1

J, 12 символів

(/:32|a.i.])

Ігнорує будь-які символи, які не містять альфа.


Це завдання запитує програму. Я не бачу тут жодного вводу / виводу. Якщо ви використовуєте будь-які прапори інтерпретатора, ви повинні викласти їх - і порахувати їх до числа символів.
Джон Дворак

@JanDvorak Добре, чи буде функція рахуватись - f=.чи ви хочете, щоб я додавав 1!:1[1?
Гарет

1!:1[1і echoбудь ласка
Іван Дворак

@JanDvorak Чому ти хочеш echo?
Гарет

Чи автоматично інтерпретатор J видає результат останнього виразу при запуску файлу сценарію? Або як це запустити?
Джон Дворак

1

Javascript - 74

На жаль, через те, як JS сортує символи, ми не можемо використовувати стандартну функцію сортування:

prompt().split("").sort(function(a,b){return a.localeCompare(b)}).join("")

Насправді це можна скоротити до:

prompt().split("").sort((a,b)=>a.localeCompare(b)).join("")

1

F # ( 68 56)

Я вивчаю F #, тому я впевнений, що це може бути коротше:

let f s=s|>Seq.sortBy Char.ToLower|>Seq.iter(printf"%c")

Вихід:

> f "Johnny walked the dog to the park."
        .aaddeeeghhhJkklnnoooprtttwy 

1

PHP, 50 байт

$a=str_split($argn);natcasesort($a);echo join($a);

не видаляє літери, приймає введення даних STDIN; бігати з -R.


0

R, 48 символів

cat(sort(unlist(strsplit(scan(,""),""))),sep="")

Приклад використання:

> cat(sort(unlist(strsplit(scan(,""),""))),sep="")
1: Johnny walked the dog to the park.
8: 
Read 7 items
.aaddeeeghhhJkklnnoooprtttwy

0

q / k4 (3? 5? 8?)

якщо достатньо ввести код і введення безпосередньо в REPL, це просто asc:

q)asc"Johnny walked the dog to the park."
`s#"      .Jaaddeeeghhhkklnnoooprtttwy"

`s#є трохи д позначень , що вказує на те, що рядок знаходиться в відсортованому порядку (може бути двійковим пошук, і т.д.). якщо це потрібно, це коштує двох символів, роблячи п'ять:

q)`#asc"Johnny walked the dog to the park."
"      .Jaaddeeeghhhkklnnoooprtttwy"

якщо ви хочете, щоб це було передбачено на stdin, саме час перейти на k4 (і ми позбудемося `s#безкоштовно), і це рішення у вісім символів:

  x@<x:0:0
Johnny walked the dog to the park.
"      .Jaaddeeeghhhkklnnoooprtttwy"

той, btw, буде працювати як файл коду так само, як є (ще вісім символів, оскільки q добре, якщо у файлі коду немає остаточного нового рядка). як правило, виникають проблеми з банером з привітальним словом і з REPL, який залишається відкритим, але якщо ви передасте введення як герестир, все, що минає:

$ cat asc.k
x@<x:0:0
$ q asc.k<<<'Johnny walked the dog to the park.'
"\n      .Jaaddeeeghhhkklnnoooprtttwy"
$ 

насправді не впевнений, звідки надходить новий додатковий рядок на виході.


0

Желе, 3 байти

ŒlÞ

Моє перше рішення на цьому сайті! Дякуємо @LeakyNun та @ErikTheOutgolfer, які навчали мене, як використовувати Jelly та @Dennis для його виготовлення! : D

Пояснення

ŒlÞ
  Þ Sort using the function to its left
Œl  Converts to lowercase (because it's sort alphabetically, not by codepoint)

Крім того, ŒuÞробить саме те саме, за винятком перетворення на великі регістри.


0

Java 10, 72 байти (як лямбда-функція)

s->{for(int i=64;++i<91;)for(var c:s)if((c&~32)==i)System.out.print(c);}

Спробуйте в Інтернеті.

Але оскільки це старий виклик, в якому йдеться про повну програму:

Java 10, 126 байт (як повна програма)

interface M{static void main(String[]a){for(int i=64;++i<91;)for(var c:a[0].toCharArray())if((c&~32)==i)System.out.print(c);}}

Спробуйте в Інтернеті.

Пояснення:

interface M{                        // Class
  static void main(String[]a){      //  Mandatory main method
    for(int i=64;++i<91;)           //   Loop over the uppercase alphabet
      for(var c:a[0].toCharArray()) //    Inner loop over the characters of the input
        if((c&~32)                  //     If the current character converted to uppercase,
                  ==i)              //     equals the current letter of the alphabet
          System.out.print(c);}}    //      Print the character of the input-loop

0

05AB1E , 3 2 байти

Σl

Ігнорує небуквені символи, тому деякі є провідними, а деякі - задніми.

Спробуйте в Інтернеті .

Версія, яка видаляє небуквені символи, натомість становить 3 байти :

áΣl

Спробуйте в Інтернеті .

Пояснення:

á    # Optional: only leave the letters ([a-zA-Z]) of the (implicit) input-string
 Σ   # Sort the characters in the string by (sorted by their ASCII unicode value):
  l  #  Their lowercase equivalent (in case of the letters)
     # (And output the result implicitly)

0

Powershell, 36 байт

-join($args-split'\W|(.)'-ne''|sort)

Тестовий сценарій:

$f = {

-join($args-split'\W|(.)'-ne''|sort)

}

@(
    ,("Johnny walked the dog to the park.", "aaddeeeghhhJkklnnoooprtttwy")
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$("$result"-eq"$expected"): $result"
}

Вихід:

True: aaddeeeghhhJkklnnoooprtttwy

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