Wyświetl zdanie w porządku alfabetycznym

14

Napisz program, który pobiera ciąg znaków i wypisuje wszystkie znaki w kolejności alfabetycznej. Spacje i symbole można zignorować lub usunąć, ale wielkie i małe litery muszą pozostać takie same.

Przykładowe dane wejściowe:

Johnny walked the dog to the park.

Próbka wyjściowa

aaddeeeghhhJklnnoooprtttwy

Zasady:

• Dowolny język

• Zwycięża najkrótszy kod.

aks.
źródło
5
Jak sortować wielkie / małe litery? Górny przed dolnym, odwrotnie czy stabilny z wejściem?
Howard
Czy musi obsługiwać litery spoza podstawowego alfabetu łacińskiego („alfabetu angielskiego”)?
Sebastian Negraszus
3
Z tytułu miałem nadzieję, że uda mi się uciec z wyświetleniem „Zdania w porządku alfabetycznym”. Lub „ceeennst”. (OK, „Sceeennt”, jeśli nalegasz na prawidłowe
pisanie
Kiedy to Spaces and symbols can be ignored or deletedoznacza, że należy to zignorować; czy jest wyjście takie jak , .aaddeeeffdozwolone?
blutorange
4
Czy kna wyjściu nie powinny występować 2 s?
HyperNeutrino

Odpowiedzi:

1

MathGolf , 2 bajty

áδ

Wypróbuj online!

Przykładowe dane wyjściowe

      .aaddeeeghhhJkklnnoooprtttwy

Usuwanie znaków niealfabetycznych

Aby usunąć wszystkie znaki niealfabetyczne, to rozwiązanie działa:

áδgÆ∞_δ¡

Jest taki sam jak w powyższym kodzie, po czym następuje filtrowanie, w którym każdy znak jest najpierw podwajany, a następnie porównywany z wielką literą. Na przykład ciąg "a"jest konwertowany na, "aa"a następnie pisany wielką literą "Aa", co nie jest równe "aa". W ten sam sposób ciąg "B"jest konwertowany na "BB"i pisany wielką literą "Bb", co nie jest równe "BB". Po "."konwersji jest jednak konwertowany na ".."i nie ulega zmianie, więc zostanie odfiltrowany.

Wyjaśnienie

Naprawdę potrzebuję więcej obsługi ciągów znaków w MathGolf ... W tej chwili nie ma nawet operatora, który mógłby konwertować małe / wielkie litery. Jedyną rzeczą, której mogłem użyć, był operator wielkich liter, który działa jak operator wielkich liter dla ciągów o długości 1. To rozwiązanie sortuje również znaki niealfabetyczne, ale można je zignorować. Znaki alfabetyczne zachowują wielkość liter i są wyprowadzane we właściwej kolejności.

á    sort by comparator
 δ   capitalize string
maxb
źródło
12

GolfScript, 24/6 znaków

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

Przykład:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

Jeśli dane wejściowe są ograniczone do ascii drukowalnych, kod można skrócić o trzy znaki przy użyciu {95&.64>\91<&},jako filtru.

Można przetestować tutaj .

Wersja, którą można zignorować, jest jeszcze krótsza (6 znaków):

{31&}$

i daje wydajność

> Johnny walked the dog to the park.
      aaddeeeghhhJkkl.nnoooprtttwy
Howard
źródło
a jeśli „alfabetycznie” można interpretować jako „porządek ASCII, to można go po prostu sprowadzić do{}$
McKay
@McKay Pytanie wyraźnie mówi inaczej. I {}$byłoby równoważne z $.
Howard
O tak. Dzięki, próbuję nauczyć się gry w golfa
McKay
8

Narzędzia GNU core - 25 znaków (29 upuszczanych symboli)

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

Przykład (z GNU bash 3):

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

Z pytania:

Spacje i symbole można zignorować lub usunąć

Zdecydowałem się je zostawić! Aby zachować tylko znaki alfabetu, wymienić fold -1z grep -o \\wna +4 znaków.

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

Dzięki Firefly polecając grep -onad sedi wumpusa dla fold -1. ;-)

joeytwiddle
źródło
To nie jest kolejność alfabetyczna, wielkie litery J nadal powinny być sortowane alfabetycznie z innymi małymi literami.
aks.
Och, dobra uwaga, aks. Muszę dodać -f(złożyć), sortaby zignorować wielkość liter.
joeytwiddle
6

C, 121

Jest to dość długie w porównaniu z innymi wpisami, ale nie opiera się na żadnych wbudowanych funkcjach sortowania ani 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);}

Bardziej czytelna wersja:

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);
}

Jest to implementacja sortowania wstawiania z porównaniem elementów bez rozróżniania wielkości liter (przy użyciu |32operacji bitowej). Wynika to z faktu, że w kodowaniu ASCII wielkie i małe litery różnią się tylko 2 5 bitami.

użytkownik12205
źródło
5

Rubin - 33 znaki

$><<gets.chars.sort(&:casecmp)*''
Siva
źródło
Gdzie jest kod wyjściowy?
John Dvorak
Możesz oszczędzić 2 znaki, używając *""zamiast .join.
manatwork
Możesz użyć p, ale to jest wątpliwe, więc po prostu użyj puts. Ponadto $<jest skrótem do ARGF
Shelvacu
@manatwork zredagowano ...
Siva
Możesz oszczędzić 1 znak, używając $><<zamiast, putsponieważ można usunąć spację oddzielającą.
manatwork
5

PowerShell: 39

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

Wynik

  .aaddeeeghhhJkklnnoooprtttwy

C #: 100

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

Wynik

aaddeeeghhhJkklnnoooprtttwy
Ralf de Kleine
źródło
To nie jest program wymagany przez pytanie.
Howard
Nie potrzebujesz ToCharArray; StringimplementujeIEnumerable<char>
Rik
@howard, więc skrypty liczą się jako program?
Ralf de Kleine
1
Rozwiązania wykluczające symbole działają tylko dla przykładowego wejścia. To wejście było tylko próbką (rzeczywiste wejście może również zawierać inne symbole).
Sander,
1
@RalfdeKleine Przepraszam, mówiłem źle sal, nie sądzę, że możesz tego użyć. Ale możesz pozbyć się przypisania zmiennej za pomocą "$([string[]][char[]](Read-Host)|sort)".
Kris Harper
4

Perl6: 26 znaków

Najpierw sortuje wyjściowe wielkie litery, a następnie małe litery, usuwa symbole / białe znaki

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

Jeśli białe znaki / symbole na wyjściu mogą być również ignorowane, to jest to tylko 21 znaków.

say [~] get.comb.sort

Sortuje to bez rozróżniania wielkości liter, zachowuje symbole (26 znaków)

say [~] get.comb.sort: &lc
Ayiko
źródło
Musi sortować bez rozróżniania wielkości liter, ale w razie potrzeby może ignorować białe znaki i symbole.
Timtech
4

APL 16

      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.
Mark Plotnick
źródło
To nie spełnia wymagań, ponieważ J nie pojawia się przed a, d, e itp.
Timtech
Świetna robota tam +1
Timtech
3

Perl 34

Teraz pobiera dane wejściowe z STDIN.

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

Perl 18

Jeżeli wyniki, w tym wielkie litery i dołączone symbole, są dopuszczalne:

print sort<>=~/./g
Dom Hastings
źródło
Podejrzewam, że możesz go skrócić dalej, pobierając ciąg z danych wejściowych (zgodnie z opisem) zamiast pobierać go z cmdline.
breadbox
Oooch, masz rację!
Dom Hastings
2

Python 3:45

print(''.join(sorted(input(),key=str.lower)))
evuez
źródło
Nie przepadam za Pythonem, ale czy Twój kod usuwa spacje z okresu?
Ralf de Kleine
Nie, ale „Spacje i symbole można zignorować lub usunąć”, więc po prostu je ignoruję!
evuez
Ach czytanie jest trudne;)
Ralf de Kleine
Użycie lambda pozwala zaoszczędzić kilka bajtów: Wypróbuj online
Vedant Kandoi,
2

Haskell, 88

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

(38 bez importu ze standardowej biblioteki lib)

Vektorweg
źródło
2

k ( 10 9)

Czyta ze standardowego

x@<_x:0:0

Przykład

x@<_x:0:0
Johhny walked the dog to the park.
"      .aaddeeeghhhhJkklnoooprtttwy"
skeevey
źródło
2

C #: 83

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

Aktualizacja: 65

Plik wykonywalny w LinQPad

new string(Console.ReadLine().OrderBy(i=>i+"").ToArray()).Dump();
Abbas
źródło
1
Możesz usunąć zrzut i stwierdzić, że działa w trybie ekspresji LinqPada :)
Jacob
1

J, 12 znaków

(/:32|a.i.])

Ignoruje wszelkie znaki inne niż alfa.

Gareth
źródło
To zadanie wymaga podania programu. Nie widzę tutaj żadnych wejść / wyjść. Jeśli używasz flag interpretera, musisz je podać - i policzyć je do liczby znaków.
John Dvorak
@JanDvorak Dobra, czy funkcja się liczy - f=.czy chcesz, żebym dodał 1!:1[1?
Gareth,
1!:1[1i echoproszę
John Dvorak
@JanDvorak Dlaczego chcesz echo?
Gareth
Czy interpreter J automatycznie wyświetla wynik ostatniego wyrażenia podczas uruchamiania pliku skryptu? Lub jak to uruchomić?
John Dvorak
1

JavaScript - 74

Niestety, ze względu na sposób sortowania znaków przez JS, nie możemy użyć standardowej funkcji sortowania:

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

W rzeczywistości można to skrócić do:

prompt().split("").sort((a,b)=>a.localeCompare(b)).join("")
eithed
źródło
1

F # ( 68 56)

Uczę się F #, więc jestem pewien, że może być krótszy:

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

Wynik:

> f "Johnny walked the dog to the park."
        .aaddeeeghhhJkklnnoooprtttwy 
Rik
źródło
1

PHP, 50 bajtów

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

nie usuwa liter innych niż, pobiera dane wejściowe ze STDIN; biegać z -R.

Tytus
źródło
0

R, 48 znaków

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

Przykładowe użycie:

> cat(sort(unlist(strsplit(scan(,""),""))),sep="")
1: Johnny walked the dog to the park.
8: 
Read 7 items
.aaddeeeghhhJkklnnoooprtttwy
plannapus
źródło
0

q / k4 (3? 5? 8?)

jeśli wystarczy wprowadzić kod i dane wejściowe bezpośrednio do REPL, to po prostu asc:

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

`s#jest nieco notacji q, który wskazuje, że ciąg jest posortowanych (może być binarny poszukiwanej, etc.). jeśli musi odejść, kosztuje to dwie postacie, co daje pięć:

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

jeśli chcesz mieć to na standardowym wejściu, czas przejść na k4 (a pozbywamy się `s#za darmo), i jest to rozwiązanie ośmioznakowe:

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

ten, btw, będzie działał jako plik kodu dokładnie tak, jak jest (nadal osiem znaków, ponieważ q jest w porządku, nie mając końcowej nowej linii w pliku kodu). normalnie wystąpiłyby problemy z powitalnym sztandarem i pozostawieniem otwartego REPL, ale jeśli przekażesz dane jako ciąg znaków, wszystko zniknie:

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

nie jestem pewien, skąd pochodzi ta nowa linia w wynikach ....

Aaron Davies
źródło
0

Galaretka, 3 bajty

ŒlÞ

Moje pierwsze rozwiązanie Jelly na tej stronie! Dzięki @LeakyNun i @ErikTheOutgolfer za nauczenie mnie, jak używać Jelly i @Dennis do robienia tego! :RE

Wyjaśnienie

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

Alternatywnie ŒuÞrobi dokładnie to samo, z wyjątkiem konwersji na wielkie litery.

HyperNeutrino
źródło
0

Java 10, 72 bajty (jako funkcja lambda)

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

Wypróbuj online.

Ale ponieważ jest to stare wyzwanie z pełnym programem:

Java 10, 126 bajtów (jako pełny program)

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);}}

Wypróbuj online.

Wyjaśnienie:

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
Kevin Cruijssen
źródło
0

05AB1E , 3 2 bajty

Σl

Ignoruje znaki nieliterowe, więc niektóre są wiodące, a niektóre ciągnące.

Wypróbuj online .

Wersja usuwająca znaki inne niż litery to 3 bajty :

áΣl

Wypróbuj online .

Wyjaśnienie:

á    # 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)
Kevin Cruijssen
źródło
0

PowerShell, 36 bajtów

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

Skrypt testowy:

$f = {

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

}

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

Wynik:

True: aaddeeeghhhJkklnnoooprtttwy
mazzy
źródło