แสดงประโยคตามลำดับตัวอักษร


14

เขียนโปรแกรมที่รับสตริงและส่งออกอักขระทั้งหมดตามลำดับตัวอักษร ช่องว่างและสัญลักษณ์สามารถละเว้นหรือลบได้ แต่ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กจะต้องอยู่ในกรณีเดียวกัน

ตัวอย่างอินพุต:

Johnny walked the dog to the park.

ตัวอย่างผลลัพธ์

aaddeeeghhhJklnnoooprtttwy

กฎ:

•ภาษาใด ๆ

•รหัสที่สั้นที่สุดชนะ


5
วิธีการจัดเรียงตัวอักษรพิมพ์ใหญ่ / เล็กได้อย่างไร ด้านบนก่อนที่ต่ำกว่าในทางกลับกันหรือมีเสถียรภาพด้วยการป้อนข้อมูลหรือไม่
Howard

จำเป็นต้องจัดการกับตัวอักษรใด ๆ ที่อยู่นอกตัวอักษรละตินพื้นฐาน ("ตัวอักษรภาษาอังกฤษ") หรือไม่?
Sebastian Negraszus

3
จากชื่อฉันหวังว่าฉันจะได้ออกไปพร้อมกับการแสดง "ประโยคตามลำดับตัวอักษร" หรือ "ceeennst" (ตกลง "Sceeennt" หากคุณยืนยันในการใช้อักษรตัวพิมพ์ใหญ่และคำสั่ง ASCII ที่ถูกต้อง)
keshlam

เมื่อคุณSpaces and symbols can be ignored or deletedหมายความว่าต้องเพิกเฉย หรือเอาท์พุทเช่น , .aaddeeeffอนุญาต?
blutorange

4
หากไม่มีkเอาต์พุต2 วินาที
HyperNeutrino

คำตอบ:


1

MathGolf 2 ไบต์

áδ

ลองออนไลน์!

ตัวอย่างผลลัพธ์

      .aaddeeeghhhJkklnnoooprtttwy

การลบอักขระที่ไม่ใช่ตัวอักษร

ในการลบอักขระที่ไม่ใช่ตัวอักษรทั้งหมดวิธีนี้ใช้งานได้:

áδgÆ∞_δ¡

มันเป็นเช่นเดียวกับรหัสข้างต้นตามด้วยการกรองที่ตัวละครแต่ละตัวเป็นครั้งแรกและเปรียบเทียบตัวพิมพ์ใหญ่ของตัวเอง ยกตัวอย่างเช่นสตริง"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<&},เป็นตัวกรอง

สามารถทดสอบได้ที่นี่

เวอร์ชันที่ไม่สามารถเพิกเฉยนั้นสั้นกว่า (6 ตัวอักษร):

{31&}$

และผลผลิตผลผลิต

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

และหาก "เรียงตามตัวอักษร" สามารถตีความได้ว่าหมายถึง "คำสั่ง ASCII ไม่เป็นไรก็อาจลดลงเป็น{}$
McKay

@McKay คำถามที่ระบุอย่างชัดเจนแตกต่างกัน และจะเทียบเท่ากับ{}$ $
Howard

โอ้ใช่. ขอบคุณฉันพยายามเรียนรู้ golfscript
แมคเคย์

8

GNU core utils - 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 -1ด้วยgrep -o \\w+4 อักขระ

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

ขอขอบคุณที่หิ่งห้อยสำหรับแนะนำgrep -oมากกว่าsedและ Wumpus fold -1สำหรับ ;-)


นี่ไม่ใช่ลำดับตัวอักษร J ตัวพิมพ์ใหญ่ควรเรียงตามตัวอักษรด้วยตัวอักษรตัวเล็กอื่น ๆ
aks

โอ้จุดที่ดี 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

Ruby - 33 ตัวอักษร

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

รหัสส่งออกอยู่ที่ไหน
John Dvorak

คุณสามารถสำรอง 2 ตัวอักษรโดยใช้แทน*"" .join
จัดการ

คุณสามารถใช้แต่ที่น่าสงสัยการใช้งานดังนั้นเพียงแค่p putsนอกจากนี้ยัง$<เป็นทางลัดสำหรับARGF
Shelvacu

@manatwork แก้ไข ...
ศิวะ

คุณสามารถสำรอง 1 ตัวอักษรโดยใช้$><<แทนputsการลบช่องว่างที่สามารถลบได้
จัดการ

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

นั่นไม่ใช่โปรแกรมตามคำถาม
Howard

คุณไม่จำเป็นต้องToCharArray; StringการดำเนินการIEnumerable<char>
Rik

@ วิธีใดที่สคริปต์จะนับเป็นโปรแกรม
Ralf de Kleine

1
โซลูชันที่ไม่รวมสัญลักษณ์ของคุณใช้ได้กับอินพุตตัวอย่างเท่านั้น อินพุตนั้นเป็นเพียงตัวอย่าง (อินพุตจริงยังสามารถรวมสัญลักษณ์อื่น ๆ ได้)
Sander

1
@RalfdeKleine ขออภัยsalฉันทำผิดพลาดฉันไม่คิดว่าคุณจะใช้มันได้ "$([string[]][char[]](Read-Host)|sort)"แต่คุณจะได้รับการกำจัดของการกำหนดตัวแปรที่มี
Kris Harper

4

Perl6: 26 ตัวอักษร

เรียงลำดับเอาต์พุตตัวพิมพ์ใหญ่ก่อนจากนั้นตัวพิมพ์เล็กจะลบสัญลักษณ์ / ช่องว่าง

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

หากช่องว่าง / สัญลักษณ์ในเอาต์พุตอาจถูกละเว้นเช่นกันนี่เป็นเพียง 21 ตัวอักษร

say [~] get.comb.sort

จะเรียงตามตัวพิมพ์ใหญ่ - เล็กและเก็บสัญลักษณ์ (26 ตัวอักษร)

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

ต้องเรียงตามตัวพิมพ์ใหญ่ - เล็ก แต่สามารถละเว้นช่องว่างและสัญลักษณ์ได้หากต้องการ
Timtech

4

APL 16

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

สิ่งนี้ไม่เป็นไปตามข้อกำหนดเนื่องจาก J ไม่ได้มาก่อน, d, e ฯลฯ
Timtech

ทำได้ดีมากที่ +1
Timtech

3

Perl 34

STDINตอนนี้ใช้เวลาการป้อนข้อมูลจาก

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

Perl 18

หากเอาต์พุตรวมถึงเมืองหลวงก่อนและรวมสัญลักษณ์ไว้เป็นที่ยอมรับ:

print sort<>=~/./g

ฉันสงสัยว่าคุณสามารถย่อให้สั้นลงได้อีกโดยรับสายจากอินพุต (ตามคำอธิบาย) แทนที่จะรับจาก cmdline
breadbox

Oooh ใช่คุณ!
Dom Hastings

2

Python 3: 45

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

ฉันไม่ได้เป็น Python แต่รหัสของคุณลบช่องว่างระหว่างช่วงเวลาหรือไม่?
Ralf de Kleine

ไม่ แต่ "ช่องว่างและสัญลักษณ์สามารถละเว้นหรือลบได้" ดังนั้นฉันจึงเพิกเฉย!
evuez

อาอ่านเป็นเรื่องยาก;)
Ralf de Kleine

การใช้แลมบ์ดาจะช่วยประหยัดบางไบต์: ลองใช้งานออนไลน์
Vedant Kandoi

2

Haskell, 88

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

(38 โดยไม่ต้องนำเข้าจาก lib มาตรฐาน)


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
คุณสามารถลบการถ่ายโอนข้อมูลและระบุว่ามันทำงานในโหมด Expression ของ LinqPad :)
Jacob

1

J, 12 ตัวอักษร

(/:32|a.i.])

ละเว้นอักขระที่ไม่ใช่ตัวอักษรใด ๆ


งานนี้ถามหาโปรแกรม ฉันไม่เห็น I / O ที่นี่ หากคุณกำลังใช้แฟล็กล่ามคุณจะต้องระบุและนับเป็นจำนวนอักขระ
John Dvorak

@JanDvorak เอาล่ะจะนับฟังก์ชั่น - f=.หรือคุณต้องการให้ฉันเพื่อเพิ่ม1!:1[1?
Gareth

1!:1[1และechoโปรด
John Dvorak

@JanDvorak ทำไมคุณต้องการecho?
Gareth

ล่าม J จะแสดงผลลัพธ์ของนิพจน์สุดท้ายโดยอัตโนมัติเมื่อเรียกใช้ไฟล์สคริปต์หรือไม่ หรือคุณจะรันมันได้อย่างไร
John Dvorak

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 ที่บ่งชี้ว่าสตริงอยู่ในลำดับที่เรียงลำดับ (สามารถสืบค้นไบนารีอื่น ๆ ) ถ้าต้องไปนั่นต้องเสียค่าตัวละครสองตัวโดยทำห้า:

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

หากคุณต้องการให้มันเป็น stdin ก็ถึงเวลาเปลี่ยนเป็น k4 (และเราจะกำจัด`s#ให้ฟรี) และมันเป็นตัวละครแปดตัว:

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

หนึ่งนั้น btw จะทำงานเป็นไฟล์รหัสให้ตรงตามที่เป็นอยู่ (ยังมีอักขระแปดตัวเนื่องจาก q ใช้ได้ดีโดยไม่ต้องขึ้นบรรทัดใหม่สุดท้ายในไฟล์รหัส) โดยปกติจะมีปัญหากับแบนเนอร์ต้อนรับและเมื่อ REPL เปิดอยู่ แต่ถ้าคุณส่งอินพุตเป็น herestring สิ่งที่หายไป:

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

ไม่แน่ใจจริงๆว่าบรรทัดใหม่ที่เพิ่มในเอาต์พุตมาจาก ....


0

เยลลี่ 3 ไบต์

ŒlÞ

วิธีการแก้ปัญหาวุ้นแรกของฉันในเว็บไซต์นี้! ขอบคุณ @LeakyNun และ @ErikTheOutgolfer สำหรับการสอนฉันถึงวิธีการใช้ Jelly และ @Dennis เพื่อสร้างมันขึ้นมา! : D

คำอธิบาย

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

อีกวิธีหนึ่งคือŒuÞทำสิ่งเดียวกันแน่นอนยกเว้นการแปลงเป็นตัวพิมพ์ใหญ่แทน


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

0

05AB1E , 3 2 ไบต์

Σl

ละเว้นอักขระที่ไม่ใช่ตัวอักษรดังนั้นอักขระบางตัวจึงเป็นอักขระนำหน้าและอักขระบางตัวต่อท้าย

ลองมันออนไลน์

เวอร์ชันที่ลบอักขระที่ไม่ใช่ตัวอักษรคือ3 ไบต์แทน:

áΣl

ลองมันออนไลน์

คำอธิบาย:

á    # Optional: only leave the letters ([a-zA-Z]) of the (implicit) input-string
 Σ   # Sort the characters in the string by (sorted by their ASCII unicode value):
  l  #  Their lowercase equivalent (in case of the letters)
     # (And output the result implicitly)

0

Powershell ขนาด 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.