Satz in alphabetischer Reihenfolge anzeigen

13

Schreiben Sie ein Programm, das eine Zeichenfolge verwendet und alle Zeichen in alphabetischer Reihenfolge ausgibt. Leerzeichen und Symbole können ignoriert oder gelöscht werden, Groß- und Kleinbuchstaben müssen jedoch gleich sein.

Beispieleingabe:

Johnny walked the dog to the park.

Beispielausgabe

aaddeeeghhhJklnnoooprtttwy

Regeln:

• Jede Sprache

• Kürzester Code gewinnt.

aks.
quelle
5
Wie sortiere ich Groß- / Kleinbuchstaben? Obere vor untere, umgekehrt oder stabil mit der Eingabe?
Howard
Müssen Buchstaben außerhalb des grundlegenden lateinischen Alphabets ("englisches Alphabet") verarbeitet werden?
Sebastian Negraszus
3
Ich hatte gehofft, mit dem Titel "Satz in alphabetischer Reihenfolge" durchzukommen. Oder "ceeennst". (OK, "Sceeennt", wenn Sie auf korrekter
Groß-
Wenn Sie Spaces and symbols can be ignored or deleted, bedeutet das, muss ignoriert werden; oder ist ausgabe wie , .aaddeeefferlaubt?
Blutorange
2
Sollte kder Ausgang nicht 2 s enthalten?
HyperNeutrino

Antworten:

2

MathGolf , 2 Bytes

áδ

Probieren Sie es online!

Beispielausgabe

      .aaddeeeghhhJkklnnoooprtttwy

Nicht alphabetische Zeichen entfernen

So entfernen Sie alle nicht alphabetischen Zeichen:

áδgÆ∞_δ¡

Es ist dasselbe wie der obige Code, gefolgt von einer Filterung, bei der jedes Zeichen zuerst verdoppelt und dann seine eigene Großschreibung verglichen wird. Beispielsweise wird die Zeichenfolge "a"in konvertiert "aa"und anschließend in groß geschrieben "Aa", was nicht gleich ist "aa". Auf die gleiche Weise wird die Zeichenfolge "B"in konvertiert "BB"und in groß geschrieben "Bb", was nicht gleich ist "BB". Wird jedoch in "."konvertiert ".."und bleibt bei Aktivierung unverändert, sodass es herausgefiltert wird.

Erläuterung

In MathGolf brauche ich wirklich mehr Zeichenkettenhandling ... Im Moment gibt es nicht einmal einen Operator, der in Klein- / Großbuchstaben konvertiert werden kann. Das einzige, was ich verwenden konnte, war der Großschreibungsoperator, der wie ein Großschreibungsoperator für Zeichenfolgen der Länge 1 funktioniert. Diese Lösung sortiert auch nicht-alphabetische Zeichen, aber diese können ignoriert werden. Die alphabetischen Zeichen behalten ihre Groß- und Kleinschreibung und werden in der richtigen Reihenfolge ausgegeben.

á    sort by comparator
 δ   capitalize string
maxb
quelle
12

GolfScript, 24/6 Zeichen

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

Beispiel:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

Wenn die Eingabe auf druckbare ASCII-Dateien beschränkt ist, kann der Code mit {95&.64>\91<&},dem Filter "Als Filter" um drei Zeichen gekürzt werden.

Kann hier getestet werden .

Die ignorierbare Version ist noch kürzer (6 Zeichen):

{31&}$

und ergibt Output

> Johnny walked the dog to the park.
      aaddeeeghhhJkkl.nnoooprtttwy
Howard
quelle
und wenn "alphabetisieren" so ausgelegt werden könnte, dass es "ASCII-Ordnung in Ordnung" bedeutet, könnte es einfach auf{}$
McKay
@McKay Die Frage lautet ausdrücklich anders. Und {}$wäre gleichbedeutend mit $.
Howard
Oh ja. Danke, ich versuche Golfscript zu lernen
McKay
7

GNU-Kern-Utils - 25 Zeichen (29 Drop-Symbole)

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

Beispiel (aus GNU Bash 3):

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

Aus der Frage:

Leerzeichen und Symbole können ignoriert oder gelöscht werden

Ich habe sie hier gelassen! Um nur alphabetische Zeichen zu behalten, ersetzen fold -1mit grep -o \\wfür 4 Zeichen.

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

Dank Firefly für die Empfehlung grep -oüber sedund Wumpus für fold -1. ;-)

joeytwiddle
quelle
Dies ist keine alphabetische Reihenfolge, der Großbuchstabe J sollte immer noch alphabetisch mit den anderen Kleinbuchstaben sortiert sein.
aks.
Oh, guter Punkt, aks. Ich muss hinzufügen -f(falten) sort, um Groß- / Kleinschreibung zu ignorieren.
Joeytwiddle
6

C 121

Dies ist im Vergleich zu anderen Einträgen ziemlich lang, erfordert jedoch keine eingebauten Sortier- oder ToLower-Funktionen:

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

Mehr lesbare Version:

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

Dies ist eine Implementierung der Einfügesortierung mit einem Vergleich zwischen Elementen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird (unter Verwendung der |32bitweisen Operation). Dies liegt daran, dass sich Groß- und Kleinbuchstaben bei der ASCII-Codierung nur um das 2 5- Bit unterscheiden.

user12205
quelle
5

Ruby - 33 Zeichen

$><<gets.chars.sort(&:casecmp)*''
Siva
quelle
Wo ist der Ausgabecode?
John Dvorak
Sie können 2 Zeichen sparen, indem Sie *""anstelle von verwenden .join.
Manatwork
Sie könnten verwenden p, aber das ist fraglich, also verwenden Sie einfach puts. Auch $<ist eine Abkürzung für ARGF
Shelvacu
@manatwork bearbeitet ...
Siva
Sie können 1 Zeichen sparen, indem Sie $><<anstelle von putsdas Trennzeichen entfernen.
Manatwork
5

PowerShell: 39

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

Ergebnis

  .aaddeeeghhhJkklnnoooprtttwy

C #: 100

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

Ergebnis

aaddeeeghhhJkklnnoooprtttwy
Ralf de Kleine
quelle
Das ist kein Programm, wie von der Frage gefordert.
Howard
Du brauchst nicht ToCharArray; StringAnbaugeräteIEnumerable<char>
Rik
@howard zählen Skripte also als Programm?
Ralf de Kleine
1
Ihre symbolausschließenden Lösungen funktionieren nur für die Beispieleingabe. Diese Eingabe war nur ein Beispiel (die reale Eingabe kann auch andere Symbole enthalten).
Sander
1
@ RalfdeKleine Sorry, ich habe mich vertippt sal, ich glaube nicht, dass du das benutzen kannst. Mit können Sie jedoch die Variablenzuordnung aufheben "$([string[]][char[]](Read-Host)|sort)".
Kris Harper
4

APL 16

      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.
Mark Plotnick
quelle
Dies entspricht nicht den Anforderungen, da J nicht vor a, d, e usw. kommt.
Timtech
Großartige Arbeit dort +1
Timtech
3

Perl6: 26 Zeichen

Sortiert zuerst die Ausgabe in Großbuchstaben, dann in Kleinbuchstaben und löscht Symbole / Leerzeichen

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

Wenn Leerzeichen / Symbole in der Ausgabe ebenfalls ignoriert werden, sind dies nur 21 Zeichen.

say [~] get.comb.sort

Dies sortiert ohne Rücksicht auf Groß- und Kleinschreibung, behält Symbole (26 Zeichen)

say [~] get.comb.sort: &lc
Ayiko
quelle
Es muss unabhängig von Groß- und Kleinschreibung sortiert werden, kann jedoch bei Bedarf Leerzeichen und Symbole ignorieren.
Timtech
3

Perl 34

Nimmt nun Eingaben von STDIN.

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

Perl 18

Wenn die Ausgabe mit Großbuchstaben und eingeschlossenen Symbolen akzeptabel ist:

print sort<>=~/./g
Dom Hastings
quelle
Ich vermute, Sie können es weiter verkürzen, indem Sie die Zeichenfolge aus der Eingabe (wie in der Beschreibung angegeben) nehmen, anstatt sie aus der Befehlszeile abzurufen.
Brotkasten
Oooh richtig du bist!
Dom Hastings
2

Haskell, 88

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

(38 ohne importe aus der standard lib)

Vektorweg
quelle
2

k ( 10 9)

Liest von stdin

x@<_x:0:0

Beispiel

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

C #: 83

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

Aktualisierung: 65

In LinQPad ausführbar

new string(Console.ReadLine().OrderBy(i=>i+"").ToArray()).Dump();
Abbas
quelle
1
Sie können den Dump entfernen und angeben, dass er im Ausdrucksmodus von LinqPad ausgeführt wird :)
Jacob,
1

Python 3: 45

print(''.join(sorted(input(),key=str.lower)))
evuez
quelle
Ich mag Python nicht, aber entfernt Ihr Code die Leerzeichen in der Periode?
Ralf de Kleine
Nein, aber "Leerzeichen und Symbole können ignoriert oder gelöscht werden", also ignoriere ich sie einfach!
Evuez
Ah Lesen ist schwierig;)
Ralf de Kleine
Durch die Verwendung von Lambda werden einige Bytes gespart: Online
testen
1

J, 12 Zeichen

(/:32|a.i.])

Ignoriert alle Nicht-Alpha-Zeichen.

Gareth
quelle
Diese Aufgabe erfordert ein Programm. Ich kann hier kein I / O sehen. Wenn Sie Interpreter-Flags verwenden, müssen Sie diese angeben und in die Zeichenanzahl einbeziehen.
John Dvorak
@JanDvorak Okay, würde eine Funktion zählen - f=.oder soll ich die hinzufügen 1!:1[1?
Gareth
1!:1[1und echobitte
John Dvorak
@JanDvorak Warum möchtest du echo?
Gareth
Gibt der J-Interpreter beim Ausführen einer Skriptdatei automatisch das Ergebnis des letzten Ausdrucks aus? Oder wie läuft es?
John Dvorak
1

Javascript - 74

Aufgrund der Art und Weise, wie JS Zeichen sortiert, können wir die Standardsortierfunktion leider nicht verwenden:

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

Tatsächlich kann dies verkürzt werden auf:

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

F # ( 68 56)

Ich lerne F # und bin mir sicher, dass dies kürzer sein könnte:

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

Ausgabe:

> f "Johnny walked the dog to the park."
        .aaddeeeghhhJkklnnoooprtttwy 
Rik
quelle
1

PHP, 50 Bytes

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

entfernt keine Nichtbuchstaben, nimmt Eingaben von STDIN entgegen; renn mit -R.

Titus
quelle
0

R, 48 Zeichen

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

Beispielverwendung:

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

q / k4 (3 & le; 5 & le; 8 & le;)

Wenn es ausreicht, den Code und die Eingabe direkt in die REPL einzugeben, ist es nur asc:

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

Das `s#is-Bit der q-Notation gibt an, dass die Zeichenfolge in sortierter Reihenfolge vorliegt (kann binär durchsucht werden usw.). Wenn es gehen muss, kostet das zwei Zeichen und macht fünf:

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

Wenn Sie möchten, dass es auf stdin bereitgestellt wird, ist es Zeit, auf k4 umzusteigen (und wir werden das `s#kostenlos los ), und es ist eine Lösung mit acht Zeichen:

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

Diese wird übrigens genauso wie sie ist als Codedatei funktionieren (immer noch acht Zeichen, da q in Ordnung ist, wenn die letzte Zeile in einer Codedatei nicht vorhanden ist). Normalerweise gibt es Probleme mit einem Begrüßungsbanner und der REPL, die offen bleiben, aber wenn Sie die Eingabe als Herestring übergeben, geht alles verloren:

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

Ich bin mir nicht sicher, woher diese zusätzliche Zeile in der Ausgabe kommt.

Aaron Davies
quelle
0

Gelee, 3 Bytes

ŒlÞ

Meine erste Jelly-Lösung auf dieser Seite! Vielen Dank an @LeakyNun und @ErikTheOutgolfer, die mir beigebracht haben, wie man Jelly und @Dennis benutzt, um es zu machen! : D

Erläuterung

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

Alternativ wird ŒuÞgenau dasselbe ausgeführt, außer dass stattdessen in Großbuchstaben konvertiert wird.

HyperNeutrino
quelle
0

PowerShell, 36 Bytes

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

Testskript:

$f = {

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

}

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

Ausgabe:

True: aaddeeeghhhJkklnnoooprtttwy
mazzy
quelle
0

05AB1E , 3 Bytes

áΣl

Probieren Sie es online aus .

Erläuterung:

á      # Only leave the letters of the (implicit) input-string
 Σ     # Sort those letters by:
  l    #  Their lowercase equivalent
       # (And output the result implicitly)
Kevin Cruijssen
quelle
0

Java 10, 72 Bytes (als Lambda-Funktion)

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

Probieren Sie es online aus.

Da es sich jedoch um eine alte Herausforderung handelt, die das vollständige Programm angibt:

Java 10, 126 Bytes (als volles Programm)

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

Probieren Sie es online aus.

Erläuterung:

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
quelle