Hiển thị câu theo thứ tự chữ cái


13

Viết chương trình lấy một chuỗi và xuất ra tất cả các ký tự theo thứ tự bảng chữ cái. Dấu cách và ký hiệu có thể được bỏ qua hoặc xóa, nhưng chữ in hoa và chữ thường phải giữ nguyên trường hợp.

Đầu vào mẫu:

Johnny walked the dog to the park.

Sản lượng mẫu

aaddeeeghhhJklnnoooprtttwy

Quy tắc:

• bất kỳ ngôn ngữ

• Mã ngắn nhất sẽ thắng.


5
Làm thế nào để sắp xếp chữ in hoa / in thường? Thượng trước thấp hơn, ngược lại hay ổn định với đầu vào?
Howard

Có cần phải xử lý bất kỳ chữ cái nào bên ngoài bảng chữ cái Latin cơ bản ("bảng chữ cái tiếng Anh") không?
Sebastian Negraszus

3
Từ tiêu đề, tôi đã hy vọng tôi có thể thoát khỏi việc hiển thị "Câu theo thứ tự chữ cái". Hoặc "ceeennst". (OK, "Sceeennt", nếu bạn nhấn mạnh vào cách viết hoa và thứ tự ASCII chính xác.)
keshlam

Khi bạn Spaces and symbols can be ignored or deleted, điều đó có nghĩa là phải bỏ qua; hoặc là đầu ra như , .aaddeeeffđược phép?
blutorange

2
Không nên có 2 ks trong đầu ra?
HyperNeutrino

Câu trả lời:


2

MathGolf , 2 byte

áδ

Hãy thử trực tuyến!

Ví dụ đầu ra

      .aaddeeeghhhJkklnnoooprtttwy

Xóa các ký tự không theo thứ tự chữ cái

Để xóa tất cả các ký tự không theo thứ tự chữ cái, giải pháp này hoạt động:

áδgÆ∞_δ¡

Nó giống như mã ở trên, theo sau là bộ lọc trong đó mỗi ký tự được nhân đôi đầu tiên và sau đó so sánh viết hoa của chính nó. Ví dụ, chuỗi "a"được chuyển đổi thành "aa"và sau đó được viết hoa "Aa", không bằng "aa". Cùng một cách, chuỗi "B"được chuyển đổi "BB"và viết hoa thành "Bb", không bằng "BB". Tuy nhiên, "."được chuyển đổi thành ".."và không thay đổi khi viết hoa, vì vậy nó sẽ bị lọc ra.

Giải trình

Tôi thực sự cần xử lý chuỗi nhiều hơn trong MathGolf ... Ngay bây giờ thậm chí không có toán tử nào chuyển đổi thành chữ thường / chữ hoa. Điều duy nhất tôi có thể sử dụng là toán tử viết hoa, hoạt động giống như toán tử chữ hoa cho các chuỗi có độ dài 1. Giải pháp này cũng sắp xếp các ký tự không theo thứ tự chữ cái, nhưng chúng có thể bị bỏ qua. Các ký tự chữ cái bảo tồn trường hợp của họ và được xuất theo đúng thứ tự.

á    sort by comparator
 δ   capitalize string

12

GolfScript, 24/6 ký tự

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

Thí dụ:

> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy  

Nếu đầu vào bị giới hạn ở ascii có thể in, mã có thể được rút ngắn bằng ba ký tự sử dụng {95&.64>\91<&},làm bộ lọc.

Có thể được thử nghiệm ở đây .

Phiên bản có thể bỏ qua thậm chí còn ngắn hơn (6 ký tự):

{31&}$

và sản lượng

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

và nếu "bảng chữ cái" có thể được hiểu là "thứ tự ASCII ổn, thì nó có thể được rút gọn thành{}$
McKay

@McKay Câu hỏi rõ ràng khác nhau. Và {}$sẽ tương đương với $.
Howard

Ồ, vâng. Cảm ơn, tôi đang cố gắng học chơi golf
McKay

7

Tiện ích lõi GNU - 25 ký tự (29 ký hiệu thả)

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

Ví dụ (từ GNU bash 3):

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

Từ câu hỏi:

Dấu cách và ký hiệu có thể được bỏ qua hoặc xóa

Tôi đã chọn để chúng vào! Để chỉ giữ lại các ký tự chữ cái, thay thế fold -1bằng grep -o \\w+4 ký tự.

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

Nhờ Firefly cho đề xuất grep -otrên sed, và Wumpus cho fold -1. ;-)


Đây không phải là thứ tự chữ cái, chữ hoa J vẫn nên được sắp xếp theo thứ tự abc với các chữ cái viết thường khác.
aks.

Oh điểm tốt aks. Tôi phải thêm -f(gấp) sortđể bỏ qua trường hợp.
joeytwiddle

6

C, 121

Điều này khá dài so với các mục khác, nhưng nó không dựa trên bất kỳ chức năng sắp xếp hoặc ToLower tích hợp nào:

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

Phiên bản dễ đọc hơn:

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

Đây là một triển khai sắp xếp chèn với so sánh không phân biệt chữ hoa chữ thường giữa các phần tử (sử dụng |32 thao tác bitwise). Điều này là do trong mã hóa ASCII, chữ in hoa và chữ thường chỉ khác nhau 2 5 bit.


5

Ruby - 33 ký tự

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

Mã đầu ra ở đâu?
John Dvorak

Bạn có thể phụ tùng 2 ký tự bằng cách sử dụng *""thay vì .join.
thao tác

Bạn có thể sử dụng p, nhưng đó là nghi vấn, vì vậy chỉ cần sử dụng puts. Ngoài ra, $<là một lối tắt cho ARGF
Shelvacu

@manatwork đã chỉnh sửa ...
Siva

Bạn có thể sử dụng 1 ký tự bằng cách sử dụng $><<thay vì putskhoảng cách có thể được loại bỏ.
manatwork

5

PowerShell: 39

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

Kết quả

  .aaddeeeghhhJkklnnoooprtttwy

C #: 100

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

Kết quả

aaddeeeghhhJkklnnoooprtttwy

Đó không phải là một chương trình theo yêu cầu của câu hỏi.
Howard

Bạn không cần ToCharArray; Stringthực hiệnIEnumerable<char>
Rik

@howard vậy kịch bản được tính là một chương trình?
Ralf de Kleine

1
Các giải pháp loại trừ biểu tượng của bạn chỉ hoạt động cho đầu vào mẫu. Đầu vào đó chỉ là một mẫu (đầu vào thực cũng có thể bao gồm các ký hiệu khác).
Sander

1
@RalfdeKleine Xin lỗi, tôi nhớ sai sal, tôi không nghĩ bạn có thể sử dụng nó. Nhưng, bạn có thể thoát khỏi sự phân công biến với "$([string[]][char[]](Read-Host)|sort)".
Kris Harper

4

APL 16

      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.

Điều này không đáp ứng các yêu cầu, bởi vì J không đến trước a, d, e, v.v.
Timtech

Công việc tuyệt vời ở đó +1
Timtech

3

Perl6: 26 ký tự

Sắp xếp chữ hoa đầu ra trước, sau đó viết thường, xóa ký hiệu / khoảng trắng

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

Nếu khoảng trắng / ký hiệu trong đầu ra cũng có thể bị bỏ qua, đây chỉ là 21 ký tự.

say [~] get.comb.sort

Kiểu này không phân biệt chữ hoa chữ thường, giữ các ký hiệu (26 ký tự)

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

Nó phải sắp xếp không phân biệt chữ hoa chữ thường nhưng nó có thể bỏ qua khoảng trắng và ký hiệu nếu được ưu tiên.
TimTech

3

Perl 34

Bây giờ có đầu vào từ STDIN.

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

Perl 18

Nếu đầu ra bao gồm cả chữ viết hoa trước và các ký hiệu được bao gồm có thể chấp nhận được:

print sort<>=~/./g

Tôi nghi ngờ bạn có thể rút ngắn nó hơn nữa bằng cách lấy chuỗi từ đầu vào (theo mô tả) thay vì lấy nó từ cmdline.
hộp bánh mì

Oooh phải bạn!
Dom Hastings

2

Haskell, 88

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

(38 không nhập từ lib tiêu chuẩn)


2

k ( 10 9)

Đọc từ stdin

x@<_x:0:0

Thí dụ

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

Cập nhật: 65

Thực thi trong LinQPad

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

1
Bạn có thể xóa Dump và nói nó chạy trong Chế độ biểu hiện của LinqPad :)
Jacob

1

Con trăn 3: 45

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

Tôi không vào Python nhưng mã của bạn có xóa khoảng trắng trong khoảng thời gian không?
Ralf de Kleine

Không, nhưng "Không gian và biểu tượng có thể bị bỏ qua hoặc xóa", vì vậy tôi chỉ cần bỏ qua chúng!
evuez

Ah đọc rất khó;)
Ralf de Kleine

Sử dụng lambda giúp tiết kiệm một số byte: Dùng thử trực tuyến
Vedant Kandoi

1

J, 12 ký tự

(/:32|a.i.])

Bỏ qua mọi ký tự không phải alpha.


Nhiệm vụ này yêu cầu một chương trình. Tôi có thể thấy không có I / O ở đây. Nếu bạn đang sử dụng bất kỳ cờ thông dịch viên nào, bạn phải nêu chúng - và đếm chúng vào số đếm ký tự.
John Dvorak

@JanDvorak Được rồi, một chức năng sẽ được tính - f=.hay bạn muốn tôi thêm 1!:1[1?
Gareth

1!:1[1echolàm ơn
John Dvorak

@JanDvorak Tại sao bạn muốn echo?
Gareth

Trình thông dịch J có tự động xuất kết quả của biểu thức cuối cùng khi chạy tệp tập lệnh không? Hoặc, làm thế nào để bạn chạy nó?
John Dvorak

1

Javascript - 74

Thật không may, do cách sắp xếp các ký tự của JS, chúng tôi không thể sử dụng chức năng sắp xếp tiêu chuẩn:

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

Trên thực tế điều này có thể được rút ngắn thành:

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

1

F # ( 68 56)

Tôi đang học F # vì vậy tôi chắc chắn điều này có thể ngắn hơn:

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

Đầu ra:

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

1

PHP, 50 byte

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

không xóa các chữ cái, lấy đầu vào từ STDIN; chạy với -R.


0

R, 48 ký tự

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

Ví dụ sử dụng:

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

nếu đủ để nhập mã và đầu vào trực tiếp vào REPL, thì chỉ cần asc:

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

những `s#là chút ký hiệu q chỉ ra rằng chuỗi là theo thứ tự sắp xếp (có thể là nhị phân tìm kiếm, vv). nếu nó phải đi, nó có giá hai ký tự, tạo thành năm:

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

nếu bạn muốn nó được cung cấp trên stdin, đã đến lúc chuyển sang k4 (và chúng tôi loại bỏ `s#miễn phí), và đó là một giải pháp tám ký tự:

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

cái đó, btw, sẽ hoạt động như một tệp mã chính xác (vẫn có tám ký tự, vì q vẫn ổn khi không có dòng mới cuối cùng trong tệp mã). thông thường sẽ có một số vấn đề với biểu ngữ chào mừng và với REPL vẫn mở, nhưng nếu bạn vượt qua đầu vào dưới dạng di truyền, tất cả sẽ biến mất:

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

không thực sự chắc chắn rằng dòng mới bổ sung trong đầu ra đến từ đâu ....


0

Thạch, 3 byte

ŒlÞ

Giải pháp Jelly đầu tiên của tôi trên trang web này! Cảm ơn @LeakyNun và @ErikTheOutgolfer đã dạy tôi cách sử dụng Jelly và @Dennis để tạo ra nó! : D

Giải trình

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

Ngoài ra, ŒuÞlàm điều tương tự chính xác ngoại trừ chuyển đổi sang chữ hoa thay thế.


0

Powrshell, 36 byte

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

Kịch bản thử nghiệm:

$f = {

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

}

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

Đầu ra:

True: aaddeeeghhhJkklnnoooprtttwy


0

Java 10, 72 byte (dưới dạng hàm lambda)

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

Hãy thử trực tuyến.

Nhưng vì đó là một thách thức cũ nêu rõ chương trình đầy đủ:

Java 10, 126 byte (dưới dạng chương trình đầy đủ)

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

Hãy thử trực tuyến.

Giải trình:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.