หากคุณเรียงลำดับสตริงคุณมักจะได้รับสิ่งที่ชอบ:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
ใช่นั่นเป็นประโยคแรกที่เรียง
ที่คุณสามารถดูมีจำนวนมากของตัวละครซ้ำ, aa
, eee
, ttttt
, 9 ช่องว่างและอื่น ๆ
ถ้าเราเพิ่ม128
ค่า ASCII ของรายการที่ซ้ำกันครั้งแรก256
ที่สอง384
ที่สามและอื่น ๆ เรียงลำดับอีกครั้งและส่งออกสตริงใหม่ (โมดูลัส 128 เพื่อรับตัวอักษรเดียวกันกลับ) เราได้รับสตริง:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(หมายเหตุช่องว่างนำหน้าเดียวและช่องว่างต่อท้าย 4 ช่อง)
สตริงคือ "เรียงตามลำดับ" <space>':I....uy
, <space>aeg....uy
, <space>egi....ty
, <space>iloty
, <space>lt
, <space>
, <space>
, ,<space>
<space>
มันอาจจะง่ายขึ้นที่จะเห็นภาพนี้ถ้าเราใช้สตริงที่มีตัวเลขอยู่ในนั้น สตริง111222334
จะเมื่อ "เรียง" 123412312
เป็น:
ท้าทาย:
ไม่แปลกใจเลยว่าความท้าทายคือการเขียนโค้ดที่เรียงสตริงตามคำอธิบายข้างต้น
คุณสามารถสันนิษฐานได้ว่าสตริงอินพุตจะมีเฉพาะอักขระ ASCII ที่พิมพ์ได้ในช่วง 32-126 (เว้นวรรคถึงตัวหนอน)
กรณีทดสอบ:
**Test cases:**
*:Tacest*es*s*
If you sort a string you'll typically get something like:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
Hello, World!
!,HWdelorlol
#MATLAB, 114 bytes
#,14ABLMTbesty 1A
f=@(s)[mod(sort(cell2mat(cellfun(@(c)c+128*(0:nnz(c)-1),mat2cell(sort(s),1,histc(s,unique(s))),'un',0))),128),''];
'()*+,-0128:;=@[]acdefhilmnoqrstuz'(),0128@acefilmnorstu'(),12celmnostu'(),12celnstu(),clnst(),cls(),cs(),()()()()
นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดในแต่ละภาษานับไบต์จะชนะโทษ
{'S', 'g', 'i', 'n', 'r', 't'}
ในหลามตั้งแต่วิธี "ปกติ" "String"
ที่จะทำคือ
{'a','b'}
ไม่เป็นที่ยอมรับใน Matlab {'aa','b'}
เนื่องจากคุณสามารถเพิ่มตัวอักษรให้ตัวละครแต่ละตัวเช่นนี้ อินพุตและเอาต์พุตของคุณต้องอยู่ในรูปแบบเดียวกัน