มาสร้างบันไดกัน


19

เรามีความท้าทายอย่างง่ายไม่เพียงพอ (กึ่ง -) สำหรับผู้เริ่มต้น คนง่าย ๆ เพิ่มมากขึ้นเรื่อย ๆ ดังนั้นฉันจึงพยายามหาบางสิ่งที่อาจเป็นไปได้สำหรับผู้เริ่มต้น แต่ก็ไม่ซ้ำกัน

การป้อนข้อมูล:

สตริงเดี่ยวคั่นด้วยบรรทัดใหม่ของระบบปฏิบัติการ (เช่น\r\n)
หรืออาร์เรย์ที่มีหลายสตริง

เอาท์พุท - บันได :

ลบสัญลักษณ์ที่ไม่ใช่ตัวอักษรและไม่ใช่ตัวเลขทั้งหมด [A-Za-z0-9]ดังนั้นสิ่งที่เหลือคือ จากนั้น 'สร้างบันได'; โดยทั่วไปแล้วให้เรียงตามความยาวโดยมีขนาดเล็กที่สุดที่ด้านบนและกว้างที่สุดที่ด้านล่าง

กฏท้าทาย:

  1. เมื่อทั้งสองสายมีความยาวเท่ากันเราจะรวมกันเป็นสตริงขนาดใหญ่หนึ่ง (ลำดับไม่สำคัญดังนั้นอาจเป็นจากลำดับแรกไปครั้งสุดท้ายหรือครั้งสุดท้ายไปครั้งแรกแล้วแต่จำนวนใดก็ได้ที่คุณต้องการ)
  2. กฎด้านบนสามารถสแต็กเมื่อสตริงที่ผสานมีความยาวเท่ากันอีกครั้ง (ดูกรณีทดสอบ 2)

กฎทั่วไป:

  • อินพุตเป็น STDIN และมีอักขระ ASCII เท่านั้น และผลลัพธ์คือ STDOUT
  • กรณีของการส่งออกจะต้องเหมือนกันกับการป้อนข้อมูล
  • การส่งแต่ละครั้งจะต้องเป็นโปรแกรมเต็มรูปแบบที่สามารถรวบรวมและเรียกใช้ดังนั้นไม่ใช่เพียงวิธี / ฟังก์ชั่น แก้ไข: ฉันค่อนข้างใหม่ดังนั้นบางทีมันอาจจะดีกว่าที่จะใช้ค่าเริ่มต้นนับจากนี้ไปแม้ว่าฉันจะชอบโปรแกรมเต็มรูปแบบด้วยตัวเอง ขออภัยสำหรับทุกคนที่โพสต์โปรแกรมเต็มแล้ว รู้สึกอิสระที่จะแก้ไขและฉันจะพยายามไม่เปลี่ยนโพสต์กลาง - ท้าทายในครั้งต่อไป
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ ฉันอาจยอมรับคำตอบที่สั้นที่สุดในหนึ่งปีนับจากนี้
    อย่าปล่อยให้คำตอบของ code-golf กีดกันคุณจากการโพสต์ภาษาที่ไม่ใช่ codegolf ที่ตีกอล์ฟเช่น C # และเหมือนกัน! พยายามหาคำตอบที่สั้นที่สุดสำหรับภาษาโปรแกรมใด ๆ
  • อย่าลังเลที่จะใช้ภาษาใหม่กว่าคำถามนี้

กรณีทดสอบ:

อินพุต 1:

This is a sample text,
that you will have to use to build stairs.
The wood may be of excellent quality,
or pretty crappy almost falling apart and filled with termites.
Bla bla bla - some more text
Ok, that will do

เอาท์พุท 1:

Okthatwilldo
Thisisasampletext
Blablablasomemoretext
Thewoodmaybeofexcellentquality
thatyouwillhavetousetobuildstairs
orprettycrappyalmostfallingapartandfilledwithtermites

อินพุต 2:

A
small
one
that
contains
equal
length
strings
for
the
special
rule

เอาท์พุท 2:

A                   Or alternatively:       A
length                                      length
oneforthe                                   theforone
smallequal                                  equalsmall
stringsspecial                              specialstrings
thatrulecontains                            containsrulethat

ขั้นตอนอธิบาย 2:

สั่งซื้อครั้งแรกกับความยาว:

A
one
for
the
that
rule
small
equal
length
strings
special
contains

การรวมครั้งแรก:

A
oneforthe
thatrule
smallequal
length
stringsspecial
contains

ความยาวอันดับสอง:

A
length
thatrule
contains
oneforthe
smallequal
stringsspecial

การรวมครั้งที่สอง:

A
length
thatrulecontains
oneforthe
smallequal
stringsspecial

ความยาวอันดับสาม:

A
length
oneforthe
smallequal
stringsspecial
thatrulecontains

อินพุต 3:

Test,
test.
This
is
a
test.

เอาท์พุท 3:

a                   Or alternatively:       a
is                                          is
TesttestThistest                            testThistestTest

อินพุต 4:

a
bc
d!
123

เอาท์พุท 4:

123     Or alternatively:    123
adbc                         dabc

1
containsไม่ควรอยู่ในเอาต์พุต 2 มันถูกรวมเข้ากับthatrule
Keatinge

2
คุณสวยตรงข้ามกับสิ่งที่คุณต้องการมันค่อนข้างยากที่จะทำสิ่งนี้
Bálint

"รู้สึกอิสระที่จะใช้ภาษาใหม่กว่าคำถามนี้" - ดังนั้นถ้าฉันสร้างภาษาเพียงเพื่อแก้ปัญหานี้ใน 0 ไบต์นั่นเป็นเรื่องทางเทคนิคใช่ไหม?
Bálint

นี่เป็นความท้าทายในกล่องทรายหรือไม่?
Bálint

1
@nimi โดยส่วนตัวฉันชอบโปรแกรมเต็มรูปแบบ แต่ถ้าคุณยืนยันจริงๆฉันสามารถลบออกตอนนี้และทุกคนสามารถใช้ค่าเริ่มต้น .. ฉันค่อนข้างใหม่ดังนั้นบางทีมันอาจจะดีกว่าถ้าคุณใช้ค่าเริ่มต้นจากนี้ ขออภัยสำหรับทุกคนที่โพสต์โปรแกรมเต็มแล้ว อย่าลังเลที่จะแก้ไขและฉันจะพยายามไม่เสี่ยงต่อกฎกลางการท้าทายครั้งต่อไป
Kevin Cruijssen

คำตอบ:


4

Huskขนาด 11 ไบต์

ωȯmΣġLÖLmf□

ลองออนไลน์!

Husk อายุน้อยกว่าความท้าทายนี้ (ซึ่งไม่ได้สร้างความแตกต่างอย่างเป็นทางการ แต่ก็ยัง)

คำอธิบาย

ωȯmΣġLÖLmf□  Implicit input (list of strings), say ["a","bc","d!","123"]
        mf□  Keep only alphanumeric chars of each: ["a","bc","d","123"]
ωȯ           Repeat until fixed point is reached:
      ÖL       Sort by length: ["a","d","bc","123"]
    ġL         Group by length: [["a","d"],["bc"],["123"]]
  mΣ           Concatenate each group: ["ad","bc","123"]
             Final result ["123","adbc"], print implicitly separated by newlines.

เมื่อ "เก็บเฉพาะอักขระที่เป็นตัวเลขและตัวอักษรของแต่ละ" mf□คุณควรจะอิจฉา เมื่อ "จัดกลุ่มตามความยาว" ġLคุณควรจะประหลาดใจ
Erik the Outgolfer

ฉันยอมรับคำตอบของคุณแล้ว เมตาใหม่คือภาษาที่ใหม่กว่าความท้าทายที่สามารถใช้ได้ อย่างที่ฉันบอกไปก่อนคำตอบดี ๆ !
Kevin Cruijssen

4

Python 3, 264 Bytes

ฉันไม่เก่งเรื่องรหัสกอล์ฟดังนั้นฉันมั่นใจว่านี่จะไม่ใช่คำตอบที่ดีที่สุดของ Python 3 วิธีนี้ใช้การเรียกซ้ำและเขียนตามคำสั่งพร้อมคำทั้งหมดในแต่ละความยาว

from collections import*
def f(i):
 d = defaultdict(list)
 for l in i: x = "".join(c for c in l if c.isalnum());d[len(x)].append(x)
 n = (sorted(["".join(d[z]) for z in d.keys()], key=len))
 if n == i:return "\n".join(n)
 return f(n)
print(f(eval(input())))

ใช้อินพุตจาก stdin เป็นรายการตัวอย่างทดสอบด้วยรายการนี้:

['A', 'small', 'one', 'that', 'contains', 'equal', 'length', 'strings', 'for', 'the', 'special', 'rule']

จะส่งออก:

A
length
oneforthe
smallequal
stringsspecial
thatrulecontains

1
คำตอบที่ดี! เคล็ดลับในการเล่นกอล์ฟ: 1) คุณไม่จำเป็นต้องมีช่องว่างรอบ = สัญญาณหรือ == สัญญาณ 2) Python สามารถตรวจสอบคำหลักได้หากรู้ว่าไม่สามารถเป็นชื่อตัวแปรอื่นได้เช่นเดียวกับสิ่งที่คุณทำกับ "import *" (เช่น ") สำหรับ", "return" \ n "") 3) ฉันค่อนข้างแน่ใจ (ไม่ใช่บวก) ที่คุณไม่ต้องการวงเล็บที่เรียง () การเข้ารหัสมีความสุข!
สีฟ้า

คุณสามารถใช้filter(str.isalnum, l)แทน"".joinส่วน
njzk2

4

เรติน่า, 69 63 ไบต์

[^ \ w¶] | _

{ `\ ข ((.) +) ¶ ((?). +) \ ข (? (2) (?!))
$ 1 $ 3
O $ `(.) +
$ # $ 1 *

ลองออนไลน์!


[^\w¶]|_ฉันคิดว่าคุณสามารถเปลี่ยนบรรทัดแรกที่ แม้ว่าฉันจะยังไม่แน่ใจว่ามันเหมาะสมที่สุด
FryAmTheEggman

3

Oracle SQL 11.2, 346 ไบต์

บรรทัดในสตริงอินพุตถูกคั่นด้วย '¤' วิธีนี้ไม่จำเป็นต้องสร้างตารางเพื่อใช้เป็นอินพุต

This is a sample textthat you will have to use to build stairsThe wood may be of excellent qualityor pretty crappy almost falling apart and filled with termitesBla bla bla - some more text¤Ok, that will do
A¤small¤one¤that¤contains¤equal¤length¤strings¤for¤the¤special¤rule
TesttestThis¤is¤a¤test         

คำค้นหา:

WITH v AS(SELECT REGEXP_REPLACE(COLUMN_VALUE,'[^a-zA-Z0-9]')s FROM XMLTABLE(('"'||REPLACE(:1,'¤','","')||'"'))),r(s,i,l)AS(SELECT s,1,1 FROM v UNION ALL SELECT LISTAGG(s)WITHIN GROUP(ORDER BY s)OVER(PARTITION BY LENGTH(s)),ROW_NUMBER()OVER(PARTITION BY LENGTH(s)ORDER BY s),l+1 FROM r WHERE l<LENGTH(:1)AND i=1)SELECT s FROM r WHERE l=LENGTH(:1);  

ยกเลิกแข็งแรงเล่นกอล์ฟ

WITH v AS
( 
  -- Splits on ¤ and keeps only alphanum characters 
  SELECT REGEXP_REPLACE(COLUMN_VALUE,'[^a-zA-Z0-9]')s FROM XMLTABLE(('"'||REPLACE(:1,'¤','","')||'"'))
)
-- Recursive view 
-- s : string
-- i : index of the string in case of duplicates
-- l : exit condition
,r(s,i,l)AS
(
  -- Start with every element of the input
  SELECT s,1,1 FROM v
  UNION ALL
  SELECT -- Concatenate elements of the same lengths
         LISTAGG(s)WITHIN GROUP(ORDER BY s)OVER(PARTITION BY LENGTH(s))
         -- Index of elements of the same length (listagg with over generates duplicates)
        ,ROW_NUMBER()OVER(PARTITION BY LENGTH(s) ORDER BY s)
        -- exit condition
        ,l+1 FROM r WHERE l<LENGTH(:1) AND i=1
)
-- Keep only the elements from the last iteration (automaticaly sorted on my system)
SELECT s FROM r WHERE l=LENGTH(:1)  

คุณสามารถแทนที่ regex ของคุณด้วย[\W_]
FliiFe

@FliiFe ไม่ได้ลบ ',' และ '.' ในกรณีทดสอบสุดท้าย
Jeto

แปลก ... แต่คุณยังสามารถใช้ทดแทนด้วย0-9 \dบางทีกฎ regex อาจแตกต่างกันใน sql มากกว่าใน python / php / javascript (js ยังคงเป็นกรณีพิเศษเนื่องจาก
lookbehinds

2

Haskell, 129 ไบต์

import Data.List
import Data.Char
l=length
print.(foldl(const.map concat.groupBy((.l).(==).l).sortOn l)=<<(filter isAlphaNum<$>))

ยอมรับและพิมพ์อาร์เรย์ของสตริง หากผลลัพธ์สามารถส่งคืนจากฟังก์ชัน (ตรงกันข้ามกับที่พิมพ์ไปยัง stdout) คุณสามารถละเว้นprint.และบันทึก 6 ไบต์

วิธีการใช้งาน (โปรดทราบว่าฉันใช้xสำหรับพารามิเตอร์อินพุตซึ่งแน่นอนว่าไม่ปรากฏในรุ่น pointfree ด้านบน):

 (    )=<<(     )          -- (f =<< g) x is f (g x) x, so we fold over x with a
                           -- starting value of:
     filter isAlphaNum<$>x -- keep only alphanumeric chars in every line of x

                           -- during folding, I ignore the the elements of x.
                           -- However folding stops the repeatedly applied function
                           -- after (length x) steps, which is enough for combining
                           -- lines of equal length

 const                     -- ignore elements from x, deal only with start value
                sortOn l   -- sort lines from shortest to longest
      groupBy((.l).(==).l) -- group lines of equal length
    map concat             -- concatenate each group      

print                      -- print result after (length x) iterations

2

Python 3, 184 180 ไบต์

def f(x):l=len;m=filter;y=sorted([''.join(m(str.isalnum,i))for i in x],key=l);*z,=m(l,[''.join(i for i in y if-~j==l(i))for j in range(l(y[-1]))]);y==z and+print(*z,sep='\n')or f(z)

ฟังก์ชันที่รับอินพุตตามอาร์กิวเมนต์เป็นรายการของสตริงและพิมพ์ผลลัพธ์ไปที่ STDOUT การดำเนินการทำให้เกิดข้อผิดพลาด (เนื่องจากการใช้ตัวดำเนินการ + ก่อนที่จะพิมพ์คำสั่ง) แต่ไม่ก่อนที่จะพิมพ์ออก

มันทำงานอย่างไร

def f(x):                              Function with input of list of strings
l=len;m=filter                         Redefine much-used functions: len gives the length
                                       of an object and filter chooses those items from an
                                       iterable for which a function is true
[''.join(m(str.isalnum,i))for i in x]  Strip to leave only alphanumeric characters...
y=sorted(...,key=l)                    ...and sort by length, into y
''.join(i for i in y if-~j==l(i))      Concatenate equal length strings...
[...for j in range(l(y[-1]))]          ...for all possible string lengths...
*z,=(m(l,...))                         ...and remove empty strings by filtering by length
                                       (the empty string has length 0, and is thus false),
                                       into z
y==z and+print(*z,sep='\n')...         If no change after concatenation, no more equal
                                       length strings exist, so print result to STDOUT...
...or f(z)                             ...else pass new list to function

ลองใช้กับ Ideone


2

J , 48 ไบต์

[:(/:#&>)[:(#&>,&.>//.])^:_(#~e.&AlphaNum_j_)&.>

ลองออนไลน์!

ungolfed

[: (/: #&>) [: (#&> ,&.>//. ])^:_ (#~e.&AlphaNum_j_)&.>

คำอธิบาย

  • (#~e.&AlphaNum_j_)&.> ลบไม่ใช่ตัวอักษร
  • (#&> ,&.>//. ]) รวมรายการความยาวเดียวกัน
  • ^:_ รวมกันต่อไปเรื่อย ๆ จนกว่ามันจะหยุดการเปลี่ยนแปลง
  • (/: #&>) จัดเรียงตามความยาว

1

Javascript 198 188 186 179 ไบต์

นี่เป็นโปรแกรมจาวาสคริปต์ที่ยาวที่สุดเป็นอันดับสองของฉัน

s=>s.replace(/[^\w]|_/g,``,l=0).split(/\s/g).sort(g=(a,b)=>a[m=`length`]-b[m]).reduce((a,b,c)=>a+(a.split(/\s/g)[c-1][m]<b[m]?`
`:` `)+b).replace(/ /g,``).split`
`.sort(g).join`
`

อาจจะสามารถเล่นกอล์ฟต่อไปได้


คุณใช้tตัวแปรเพื่ออะไร
gcampbell

ตกลงเพื่อให้คุณสามารถเล่นกอล์ฟได้โดยการประกาศ y = "แยก" แล้วแทนที่จะใช้.split()คุณสามารถใช้[y]()
Bald Bantha

@ gcampbell นั่นเป็นเพียงส่วนที่เหลือจากการทดสอบ
Bálint

@BaldBantha ฉันไม่คิดว่ามันจะทำให้มันสั้นลง
Bálint

@BaldBantha ฉันทำอย่างนั้นยาวแม้ว่า
Bálint


1

เยลลี่ขนาด 17 ไบต์

f€ØWṖ¤L€Ġị⁸Ẏ€µÐLY

ลองออนไลน์!

ไม่แน่ใจว่าทำไมẎf¥€ØWṖ¤L€ĠịµÐLYไม่ทำงาน ...

คำอธิบาย:

f€ØWṖ¤L€Ġị⁸Ẏ€µÐLY Full program
             µÐL  Execute the following until we get a result a second time
     ¤              The following as a nilad
  ØW                  [A-Za-z0-9_]
    Ṗ                 Remove last element (_)
f€                  Filter the left argument (current result) with the above nilad
       €            Left map
      L               Length
        Ġ           Group indices of same values, sort values
          ⁸         Left argument
         ị          Index on ^^ and ^
            €       Left map
           Ẏ          Concatenate elements
                Y Join on newlines (full program will display correctly)

1

Pyth, 22 ไบต์

jlDusM.glkG@Ls++GrG1UT

ลองที่นี่

คำอธิบาย:

jlDusM.glkG@Ls++GrG1UT
j                      join on newlines
 lD                     sort by length
   u                     run until duplicate result, return result (argument G, iteration number H)
    sM                    map concatenate elements
      .g                   group elements by function (argument k)
        l                   length
         k                   k
          G                 G
           @L             left map filter on presence (extra argument first)
             s             concatenate elements
              +             concatenate two items
               +             concatenate two items
                G             G (default = lowercase alphabet)
                 r 1          to uppercase
                  G            G
                    U        unary range [0..n)
                     T        T (default = 10)

1

Pyth, 39 ไบต์

กลับไปเล่นกอล์ฟ!

มีโปรแกรม:

=Qm:d"[\W_]"kQKYLmsd.glkolNb;WnKQ=KQ=yQ;jQ

=Qm:d"[\W_]"kQLmsd.glkolNb;WnYQ=YQ=yQ;j

ทดสอบที่นี่!

คำอธิบาย

=Qm:d"[\W_]"kQLmsd.glkolNb;WnYQ=YQ=yQ;j       (Implicit) Assign evaluated imput to Q (In this case, an array)
=Q                                            Reassign a value to Q
  m          Q                                map a function over Q
   :d"[\W_]"k                                 Replace any special character with an empty string
              L           ;                   Declare a function y(b)
                      olNb                      Sort b by length
                  .glk                          Group strings of same length in arrays
               msd                              Concat each inner array
                           WnYQ      ;        While Y != Q (previous array is not equal to current array)
                               =YQ              Assign the current array to Y (Y=Q)
                                  =yQ           Assign y(Q) to Q (Q=yQ). Here, the assigned variable name is implicit
                                      j       Display the resulting array

ลองใช้RและLแทนm
Leaky Nun

1

Java 8, 268 ไบต์

แลมบ์ดาเป็นโมฆะยอมรับการเปลี่ยนแปลงList<String>(เช่นการดำเนินการaddและremove; เช่นArrayList) เอาต์พุตถูกพิมพ์ไปยังเอาต์พุตมาตรฐานคั่นด้วยบรรทัดใหม่ด้วยบรรทัดใหม่ต่อท้าย Consumer<List<String>>โยนไป

l->{int i=0,z;while(i<l.size())l.set(i,l.get(i++).replaceAll("\\W| ",""));while(l.size()>0){l.sort((s,t)->s.length()-t.length());String s=l.remove(0);for(i=0,z=s.length();l.size()>0&&l.get(0).length()==z;i++)s+=l.remove(0);if(i<1)System.out.println(s);else l.add(s);}}

ลองใช้ออนไลน์

จบลงด้วยการนานกว่าที่ฉันคาดไว้มาก อย่างที่เควินสังเกตพบมันซับซ้อนกว่าที่เห็นในครั้งแรก

แลมบ์ดา

l -> {
    int i = 0, z;
    while (i < l.size())
        l.set(i, l.get(i++).replaceAll("\\W| ", ""));
    while (l.size() > 0) {
        l.sort((s, t) -> s.length() - t.length());
        String s = l.remove(0);
        for (
            i = 0, z = s.length();
            l.size() > 0 && l.get(0).length() == z;
            i++
        )
            s += l.remove(0);
        if (i < 1)
            System.out.println(s);
        else
            l.add(s);
    }
}

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

ฉันเริ่มต้นด้วยวิธีแก้ปัญหาที่น่ารักที่ใช้ลำดับความสำคัญคิวในการติดตามสายกลาง น่าเสียดายที่java.util.PriorityQueue<String>มันค่อนข้างยาว (และการใช้ประเภทดิบก็นานกว่า) ดังนั้นมันจึงต้องไป


1

Japt v2.0a1 -h, 11 ไบต์

อินพุตและเอาต์พุตเป็นอาร์เรย์ของสตริง

£=mk\W üÊmq

ลองมัน

£=mk\L üÊmq
                :Implicit input of string array U
£               :Map
  m             :  Map U
   k            :    Remove
    \W          :    /[^A-Z0-9]/gi
       ü        :  Sort & partition by
        Ê       :    Length
         m      :  Map
          q     :    Join
 =              :  Reassign to U for next iteration
                :Implicit output of last element

แม้ว่าฉันลืมที่จะเพิ่มกรณีทดสอบสำหรับมันในเวลา (จะเพิ่มในขณะนี้) ตัวเลขควรถูกเก็บไว้ในสตริง (ดังนั้น[a-zA-Z0-9]แทนที่จะเป็น[a-zA-Z])
Kevin Cruijssen

@KevinCruijssen แก้ไขแล้ว
Shaggy

1

จาวาสคริปต์, 119 ไบต์

ฉันรู้สึกว่าควรสั้นกว่านี้ ...

มีบรรทัดใหม่ 2 บรรทัดในเอาต์พุต

f=s=>s==(s.replace(/[^\w\n]|_/g,t=``).split`
`.sort((x,y)=>x[l=`length`]-y[l]).map(x=>t+=s==(s=x[l])?x:`
`+x),t)?t:f(t)

ลองออนไลน์


ช่วงลบอักขระดูเหมือนจะถือว่าเป็นธงทั่วโลกเพื่อให้คุณสามารถวางg118
ม.ค.


จากนั้นก็จะต้องมีการเรียกซ้ำยังคงคุณสามารถวางธงโลก
ม.ค.

@ ม.ค. ที่จะล้มเหลวเช่นtio.run/##TY3NDoIwEITvfQtuuxHqnWTxQQDdikUxtSV0ozXx3fEn/…
Shaggy


1

Pyth, 21 ไบต์

jusM.glkG:R"[^\w\d]"k

อินพุตคือรายการของสตริง ลองออนไลน์ได้ที่นี่หรือตรวจสอบทุกกรณีทดสอบที่นี่

jusM.glkG:R"[^\w\d]"kQ   Implicit: Q=eval(input()), k=""
                         Trailing Q inferred
          R          Q   For each string in Q...
         : "[^\w\d]"     ... replace non-alphanumerics...
                    k    ... with k (empty string)
 u                       Repeat the following until a fixed point occurs, current as G:
    .g  G                  Group the elements of G...
      lk                   ... by length
                             Groups ordered by the result of the inner function, i.e. length
                             This means that, in the final iteration, this acts as a sort by length
  sM                       Concatenate each group back into a string
j                        Join the resulting list on newlines, implicit print

0

05AB1E , 16 ไบต์

εžKÃ}»Δ¶¡é.γg}J»

อินพุตเป็นรายการสตริง

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

อาจมีขนาด 14 ไบต์εžKÃ}Δé.γg}J}»หากΔทำงานกับรายการสตริงได้เช่นกัน ..

คำอธิบาย:

ε   }            # Map the (implicit) input-list of strings:
 žjà             #  Leave only the letters and digits of each string
                 #   i.e. ["a","bc","d!","123"] → ["a","bc","d","123"]
     »           # Join the list by newlines to a single string
                 #  i.e. ["a","bc","d","123"] → "a\nbc\nd\n123"
      Δ          # Loop until the string no longer changes:
       ¶¡        #  Split by newlines
                 #   i.e. "a\nbc\nd\n123" → ["a","bc","d","123"]
          }    #  Group the strings by:
           g     #   Their length
                 #    i.e. ["a","bc","d","123"] → [["a,"d"],["bc"],["123"]]
             J   #  Join each group-list to a single string
                 #   i.e. [["a,"d"],["bc"],["123"]] → ["ad","bc","123"]
              »  #  Join this list by newlines again
                 #   i.e. ["ad","bc","123"] → "ad\nbc\n123"
                 # (and the result is output implicitly after the loop)
                 #  i.e. "123\nadbc"

-1

Powershell, Windows 10, 63 ไบต์

ดังนั้นอินพุต ...

$n = @"
This is a sample text,
that you will have to use to build stairs.
The wood may be of excellent quality,
or pretty crappy almost falling apart and filled with termites.
Bla bla bla - some more text
Ok, that will do
"@

และรหัส ...

((($n -Split '\n').Replace(" ","")) -Replace '[\W]','')|Sort *h

ที่ครอบคลุมอินพุต / เอาต์พุต 1 ทำงานบน 2 และ 3 ...


ยินดีต้อนรับสู่ PPCG! เรามักจะไม่อนุญาตให้ป้อนข้อมูลโดยการตั้งค่าตัวแปร คุณต้องสร้างฟังก์ชั่นที่รับอาร์กิวเมนต์หรือรับอินพุตจาก STDIN บรรทัดคำสั่ง arg หรือคล้ายกัน
สตีเฟ่น

1
ยินดีต้อนรับสู่ PPCG! นอกจากสิ่งที่ @StepHen พูดแล้วคำตอบปัจจุบันของคุณล้มเหลวสำหรับกรณีพิเศษ มันรวมทุกอย่างเข้าด้วยกันและเรียงลำดับครั้งเดียว แต่ไม่รวมเส้นขนาดเท่ากันเข้าด้วยกันและจัดเรียงอีกครั้ง (ดูกรณีทดสอบ 2)
Kevin Cruijssen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.