アルファベット順で文章を表示


13

文字列を受け取り、すべての文字をアルファベット順に出力するプログラムを作成します。スペースと記号は無視または削除できますが、大文字と小文字は同じ大文字のままにする必要があります。

サンプル入力:

Johnny walked the dog to the park.

サンプル出力

aaddeeeghhhJklnnoooprtttwy

ルール:

• どんな言語でも

•最短のコードが優先されます。


5
大文字/小文字を並べ替える方法は?上から下、下から上、または入力で安定?
ハワード14年

基本的なラテンアルファベット(「英語のアルファベット」)以外の文字を処理する必要がありますか?
セバスチャンネグラスズ14年

3
タイトルから、「アルファベット順の文章」を表示することで逃げることを望んでいました。または「ceeennst」。(OK、 "Sceeennt"、正しい大文字とASCII順序を主張する場合。)
ケシュラム14年

の場合Spaces and symbols can be ignored or deleted、それは無視する必要があるという意味ですか?または, .aaddeeeff許可されたような出力 ですか?
ブルトレンジ

2
k出力に2 秒はありませんか?
-HyperNeutrino

回答:


2

MathGolf、2バイト

áδ

オンラインでお試しください!

出力例

      .aaddeeeghhhJkklnnoooprtttwy

アルファベット以外の文字の削除

アルファベット以外の文字をすべて削除するには、このソリューションが機能します。

áδgÆ∞_δ¡

上記のコードと同じですが、各文字が最初に2倍になり、次に大文字と小文字が比較されるフィルタリングが続きます。たとえば、文字列"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<&},フィルターを使用してコードを3文字短くすることができます。

ここでテストできます

無視できるバージョンはさらに短くなります(6文字):

{31&}$

出力を生成します

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

そして、「アルファベット順」が「ASCIIオーダーOK」を意味すると解釈できる場合、それは単に{}$
McKay 14年

@McKay質問は明示的に異なって述べています。と{}$に相当します$
ハワード14年

そうそう。ありがとう、私はゴルフスクリプトを学ぼうとしています
マッケイ

7

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 -1grep -o \\w、+ 4文字に置き換えます。

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

grep -o以上を推薦してくれたFirefly sedと、Wumpusに感謝しfold -1ます。;-)


これはアルファベット順ではなく、大文字のJは他の小文字でアルファベット順にソートする必要があります。
aks。

ああいいですね。大文字と小文字を区別-fしないように追加(折りたたみ)する必要がありsortます。
joeytwiddle

6

C、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)*''

出力コードはどこにありますか?
ジョンドヴォルザーク14年

*""代わりに2文字を使用でき.joinます。
マナトワーク14年

を使用できますがp、それは疑わしいので、を使用してくださいputs。また、ARGFの$<ショートカットです
1

@manatwork編集...
シヴァ

区切りスペースを削除できるため、$><<代わりにputsを使用して1文字を節約できます。
マナトワーク14年

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

それは質問で要求されているプログラムではありません。
ハワード14年

必要ありませんToCharArrayString実装IEnumerable<char>
リック14年

@howardでは、スクリプトはプログラムとしてカウントされますか?
ラルフドクライン

1
シンボル除外ソリューションは、サンプル入力に対してのみ機能します。その入力は単なるサンプルでした(実際の入力には他の記号も含めることができます)。
サンダー14年

1
@RalfdeKleine申し訳ありませんが、私salはあなたがそれを使用できないと思います。ただし、を使用して変数の割り当てを取り除くことができます"$([string[]][char[]](Read-Host)|sort)"
クリスハーパー14年


3

Perl6:26文字

出力を最初に大文字でソートし、次に小文字でソートし、シンボル/空白を削除します

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

出力内の空白/記号も無視される場合、これは21文字のみです。

say [~] get.comb.sort

これは大文字と小文字を区別せずにソートし、シンボル(26文字)を保持します

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

大文字と小文字を区別せずにソートする必要がありますが、必要に応じて空白と記号を無視できます。
ティムテック14年

3

Perl 34

から入力を受け取りますSTDIN

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

Perl 18

最初に大文字を含み、記号を含む出力が許容される場合:

print sort<>=~/./g

cmdlineから文字列を取得する代わりに、(説明に従って)入力から文字列を取得することで、さらに短縮できると思います。
ブレッドボックス14年

ああ、そうだね!
ドムヘイスティングス14年

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

Python 3:45

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

私はPythonには興味がありませんが、コードはピリオドの間にスペースを削除しますか?
ラルフドクライネ14年

いいえ。ただし、「スペースとシンボルは無視または削除できます」ので、無視します!
evuez

ああ読みにくいです;)
ラルフ・ド・クライン14年

ラムダを使用すると、いくつかのバイトが節約されます。オンラインで試してください
Vedant Kandoi

1

J、12文字

(/:32|a.i.])

非アルファ文字を無視します。


このタスクはプログラムを要求します。ここにはI / Oがありません。インタープリターフラグを使用している場合は、フラグを指定する必要があります-そして、それらを文字カウントにカウントします。
ジョンドヴォルザーク14年

@JanDvorakさて、関数はカウントされf=.ますか- 、または追加し1!:1[1ますか?
ガレス14年

1!:1[1そしてしてechoください
ジョンドヴォルザーク14年

@JanDvorakどうして欲しいのecho
ガレス14年

Jインタープリターは、スクリプトファイルの実行時に最後の式の結果を自動的に出力しますか?または、どのように実行しますか?
ジョンドヴォルザーク14年

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表記のビットです。それが行かなければならない場合、それは2文字を費やし、5を作ります:

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

stdinで提供したい場合は、k4に切り替えます(そして`s#、無料で削除します)。これは8文字のソリューションです。

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

その1つであるbtwは、そのままの状態でコードファイルとして機能します(qはコードファイルに最後の改行がない場合でも問題ないため、8文字のままです)。通常、ウェルカムバナーとREPLが開いたままになると問題が発生しますが、ヒアストリングとして入力を渡すと、すべてが消えます:

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

出力の余分な改行がどこから来ているのか実際にはわかりません。


0

ゼリー、3バイト

ŒlÞ

このサイトでの私の最初のゼリーソリューション!Jellyと@Dennisを使って作る方法を教えてくれた@LeakyNunと@ErikTheOutgolferに感謝します!:D

説明

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

または、ŒuÞ代わりに大文字に変換する以外はまったく同じことを行います。


0

Powrshell、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


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.