Tampilkan Kalimat dalam Urutan Abjad


13

Tulis program yang mengambil string dan output semua karakter dalam urutan abjad. Spasi dan simbol dapat diabaikan atau dihapus, tetapi huruf besar dan kecil harus tetap sama.

Input sampel:

Johnny walked the dog to the park.

Output sampel

aaddeeeghhhJklnnoooprtttwy

Aturan:

• Bahasa apapun

• Kode terpendek menang.


5
Bagaimana cara mengurutkan huruf besar / kecil? Atas sebelum rendah, sebaliknya atau stabil dengan input?
Howard

Apakah perlu menangani huruf di luar alfabet Latin dasar ("alfabet bahasa Inggris")?
Sebastian Negraszus

3
Dari judulnya, saya berharap bisa lolos dengan menampilkan "Kalimat dalam Urutan Alfabet". Atau "ceeennst". (Oke, "Sceeennt", jika Anda bersikeras kapitalisasi dan urutan ASCII yang benar.)
keshlam

Ketika Anda Spaces and symbols can be ignored or deleted, apakah itu berarti harus diabaikan; atau apakah output seperti , .aaddeeeffdiizinkan?
blutorange

2
Haruskah tidak ada 2 ks dalam output?
HyperNeutrino

Jawaban:


2

MathGolf , 2 byte

áδ

Cobalah online!

Contoh output

      .aaddeeeghhhJkklnnoooprtttwy

Menghapus karakter non-abjad

Untuk menghapus semua karakter non-abjad, solusi ini berfungsi:

áδgÆ∞_δ¡

Ini sama dengan kode di atas, diikuti dengan pemfilteran di mana masing-masing karakter digandakan, dan kemudian membandingkan kapitalisasi sendiri. Misalnya, string "a"dikonversi menjadi "aa"dan kemudian dikapitalisasi menjadi "Aa", yang tidak sama dengan "aa". Dengan cara yang sama, string "B"dikonversi ke "BB"dan dikapitalisasi menjadi "Bb", yang tidak sama dengan "BB". Namun, "."dikonversi menjadi ".."dan tidak berubah saat dikapitalisasi, sehingga akan disaring.

Penjelasan

Saya benar-benar membutuhkan lebih banyak penanganan string di MathGolf ... Saat ini bahkan tidak ada operator untuk mengkonversi ke huruf kecil / huruf besar. Satu-satunya hal yang bisa saya gunakan adalah operator huruf besar, yang bekerja seperti operator huruf besar untuk string panjang 1. Solusi ini juga mengurutkan karakter non-alfabet, tetapi mereka dapat diabaikan. Karakter alfabet mempertahankan kasingnya dan menampilkan urutan yang benar.

á    sort by comparator
 δ   capitalize string

12

GolfScript, 24/6 karakter

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

Contoh:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

Jika input dibatasi untuk dicetak ascii kode dapat disingkat tiga karakter menggunakan {95&.64>\91<&},filter.

Dapat diuji di sini .

Versi yang dapat diabaikan bahkan lebih pendek (6 karakter):

{31&}$

dan menghasilkan output

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

dan jika "abjad" dapat ditafsirkan berarti "pesanan ASCII baik-baik saja, itu hanya dapat dikurangi menjadi{}$
McKay

@ McKay Pertanyaannya secara jelas menyatakan berbeda. Dan {}$akan setara dengan $.
Howard

Oh ya. Terima kasih, saya mencoba belajar skrip golf
McKay

7

Utilitas inti GNU - 25 karakter (29 menjatuhkan simbol)

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

Contoh (dari GNU bash 3):

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

Dari pertanyaan:

Spasi dan simbol dapat diabaikan atau dihapus

Saya memilih untuk meninggalkan mereka! Untuk hanya mempertahankan karakter alfabet, ganti fold -1dengan grep -o \\w+4 karakter.

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

Terima kasih kepada Firefly untuk merekomendasikan grep -olebih sed, dan Wumpus untuk fold -1. ;-)


Ini bukan urutan abjad, huruf besar J harus tetap diurutkan berdasarkan abjad dengan huruf kecil lainnya.
aks.

Oh good point aks. Saya harus menambahkan -f(lipat) sortuntuk mengabaikan case.
joeytwiddle

6

C, 121

Ini cukup lama dibandingkan dengan entri lain, tetapi tidak bergantung pada fungsi penyortiran bawaan atau 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);}

Versi yang lebih mudah dibaca:

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

Ini adalah implementasi jenis penyisipan dengan perbandingan case-insensitive antara elemen (menggunakan |32operasi bitwise). Ini karena dalam ASCII penyandian huruf besar dan huruf kecil hanya berbeda dengan 2 5 bit.


5

Ruby - 33 Chars

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

Di mana kode output?
John Dvorak

Anda dapat menyimpan 2 karakter dengan menggunakan *""alih-alih .join.
manatwork

Anda bisa menggunakan p, tapi itu dipertanyakan, jadi gunakan saja puts. Juga, $<merupakan jalan pintas untuk ARGF
Shelvacu

@manatwork diedit ...
Siva

Anda dapat menyimpan 1 karakter dengan menggunakan $><<alih-alih putskarena ruang pemisah dapat dihapus.
manatwork

5

PowerShell: 39

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

Hasil

  .aaddeeeghhhJkklnnoooprtttwy

C #: 100

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

Hasil

aaddeeeghhhJkklnnoooprtttwy

Itu bukan program seperti yang dipersyaratkan oleh pertanyaan.
Howard

Anda tidak perlu ToCharArray; StringmengimplementasikanIEnumerable<char>
Rik

@ bagaimana pula skrip dihitung sebagai program?
Ralf de Kleine

1
Solusi tanpa simbol Anda hanya berfungsi untuk input sampel. Input itu hanya sampel (input nyata juga dapat menyertakan simbol lainnya).
Sander

1
@RalfdeKleine Maaf, saya salah bicara sal, saya tidak berpikir Anda bisa menggunakannya. Tapi, Anda bisa menghilangkan penugasan variabel dengan "$([string[]][char[]](Read-Host)|sort)".
Kris Harper


3

Perl6: 26 karakter

Mengurutkan output huruf besar terlebih dahulu, lalu huruf kecil, menghapus simbol / spasi

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

Jika spasi putih / simbol dalam output mungkin diabaikan juga, ini hanya 21 karakter.

say [~] get.comb.sort

Ini semacam case-insensitive, menjaga simbol (26 karakter)

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

Ini harus mengurutkan case-insensitive tetapi dapat mengabaikan spasi dan simbol jika diinginkan.
Timtech

3

Perl 34

Sekarang ambil input dari STDIN.

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

Perl 18

Jika output termasuk huruf kapital terlebih dahulu dan simbol yang disertakan dapat diterima:

print sort<>=~/./g

Saya menduga Anda dapat mempersingkat lebih lanjut dengan mengambil string dari input (sesuai deskripsi) alih-alih mendapatkannya dari cmdline.
kotak roti

Oooh benar kamu!
Dom Hastings

2

Haskell, 88

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

(38 tanpa impor dari lib standar)


2

k ( 10 9)

Baca dari stdin

x@<_x:0:0

Contoh

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

Pembaruan: 65

Dapat dijalankan di LinQPad

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

1
Anda dapat menghapus Dump dan menyatakannya berjalan dalam Mode Ekspresi LinqPad :)
Jacob


1

J, 12 karakter

(/:32|a.i.])

Abaikan karakter non-alfa.


Tugas ini meminta sebuah program. Saya tidak bisa melihat I / O di sini. Jika Anda menggunakan bendera juru bahasa apa pun, Anda harus menyatakannya - dan menghitungnya ke dalam jumlah karakter.
John Dvorak

@ JanDvorak Oke, apakah fungsi akan diperhitungkan - f=., atau Anda ingin saya menambahkan 1!:1[1?
Gareth

1!:1[1dan echotolong
John Dvorak

@ JanDvorak Mengapa kamu mau echo?
Gareth

Apakah J interpreter secara otomatis menampilkan hasil dari ekspresi terakhir ketika menjalankan file skrip? Atau, bagaimana Anda menjalankannya?
John Dvorak

1

Javascript - 74

Sayangnya, karena cara JS mengurutkan karakter, kami tidak dapat menggunakan fungsi penyortiran standar:

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

Sebenarnya ini dapat disingkat menjadi:

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

1

F # ( 68 56)

Saya belajar F # jadi saya yakin ini bisa lebih pendek:

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

Keluaran:

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

1

PHP, 50 byte

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

tidak menghapus huruf, mengambil input dari STDIN; jalankan bersama -R.


0

R, 48 karakter

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

Contoh penggunaan:

> 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?)

jika cukup untuk memasukkan kode dan input langsung ke REPL, itu hanya asc:

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

itu `s#adalah sedikit notasi q yang menunjukkan bahwa string dalam urutan diurutkan (dapat dicari biner, dll.). jika harus pergi, biayanya dua karakter, membuat lima:

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

jika Anda menginginkannya disediakan di stdin, saatnya untuk beralih ke k4 (dan kami menyingkirkannya `s#secara gratis), dan ini adalah solusi delapan karakter:

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

yang itu, btw, akan berfungsi sebagai file kode persis seperti itu (masih delapan karakter, karena q baik-baik saja dengan tidak memiliki baris akhir terakhir dalam file kode). biasanya akan ada masalah dengan spanduk selamat datang dan dengan REPL tetap terbuka, tetapi jika Anda lulus input sebagai herestring, semua itu hilang:

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

tidak benar-benar yakin dari mana baris baru tambahan dalam output berasal ...


0

Jelly, 3 byte

ŒlÞ

Solusi Jelly pertama saya di situs ini! Terima kasih kepada @LeakyNun dan @ErikTheOutgolfer karena mengajari saya cara menggunakan Jelly dan @Dennis untuk membuatnya! : D

Penjelasan

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

Atau, ŒuÞlakukan hal yang sama persis kecuali mengkonversi ke huruf besar.


0

Powrshell, 36 byte

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

Skrip uji:

$f = {

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

}

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

Keluaran:

True: aaddeeeghhhJkklnnoooprtttwy

0

05AB1E , 3 byte

áΣl

Cobalah online .

Penjelasan:

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

0

Java 10, 72 byte (sebagai fungsi lambda)

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

Cobalah online.

Tapi karena ini adalah tantangan lama yang menyatakan program lengkap:

Java 10, 126 byte (sebagai program lengkap)

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

Cobalah online.

Penjelasan:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.