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.

aks.
sumber
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
maks
sumber
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
Howard
sumber
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. ;-)

joeytwiddle
sumber
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.

pengguna12205
sumber
5

Ruby - 33 Chars

$><<gets.chars.sort(&:casecmp)*''
Siva
sumber
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
Ralf de Kleine
sumber
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
4

APL 16

      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.
Tandai Plotnick
sumber
Ini tidak memenuhi persyaratan, karena J tidak datang sebelum a, d, e, dll.
Timtech
Kerja bagus di
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
Ayiko
sumber
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
Dom Hastings
sumber
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)

Vektorweg
sumber
2

k ( 10 9)

Baca dari stdin

x@<_x:0:0

Contoh

x@<_x:0:0
Johhny walked the dog to the park.
"      .aaddeeeghhhhJkklnoooprtttwy"
skeevey
sumber
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();
Abbas
sumber
1
Anda dapat menghapus Dump dan menyatakannya berjalan dalam Mode Ekspresi LinqPad :)
Jacob
1

Python 3: 45

print(''.join(sorted(input(),key=str.lower)))
evuez
sumber
Saya tidak ke Python tetapi apakah kode Anda menghapus spasi dalam periode?
Ralf de Kleine
Tidak, tetapi "Spasi dan simbol dapat diabaikan atau dihapus", jadi saya abaikan saja!
evuez
Ah sulit membaca;)
Ralf de Kleine
Menggunakan lambda menghemat beberapa byte: Cobalah Online
Vedant Kandoi
1

J, 12 karakter

(/:32|a.i.])

Abaikan karakter non-alfa.

Gareth
sumber
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("")
eithed
sumber
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 
Rik
sumber
1

PHP, 50 byte

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

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

Titus
sumber
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
plannapus
sumber
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 ...

Aaron Davies
sumber
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.

HyperNeutrino
sumber
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
mazzy
sumber
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)
Kevin Cruijssen
sumber
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
Kevin Cruijssen
sumber