นับการเปลี่ยนแปลงของฉัน


21

งานของคุณคือการจัดเรียงอาร์เรย์ที่มีสตริง "ไตรมาส", "เล็กน้อย", "นิกเกิล" และ "เพนนี" จำนวนครั้งใด ๆ ในไม่มีคำสั่งที่เฉพาะเจาะจงและเรียงลำดับพวกเขาเพื่อให้พวกเขาอยู่ในลำดับนี้: quarter dime nickel penny(ในคำอื่น ๆ มูลค่าทางการเงินมากที่สุดถึงน้อยที่สุด)


กฎระเบียบ

  1. โปรแกรมของคุณต้องใช้อาร์เรย์เป็นอินพุตที่มีชื่อเหรียญสหรัฐและเรียงลำดับจากมากไปหาน้อยโดยใช้มูลค่าทางการเงิน
    • สำหรับผู้ที่ไม่ได้มาจากสหรัฐอเมริกาหรือไม่ใช้การเปลี่ยนแปลงค่าของเหรียญสหรัฐจากมากไปน้อยคือ:
      • ไตรมาส: 25 เซ็นต์
      • ค่าเล็กน้อย: 10 เซ็นต์
      • นิกเกิล: 5 เซนต์
      • เพนนี: ร้อยละ 1
  2. คุณสามารถเรียงลำดับอาร์เรย์นี้ได้ตามที่คุณต้องการตราบใดที่เอาต์พุตถูกเรียงลำดับตามค่าเงินที่แสดงด้านบน
  3. อินพุตสามารถถูกนำมาด้วยวิธีใด ๆ ไม่ว่าจะเป็นอาร์กิวเมนต์บรรทัดคำสั่งหรือ STDIN
  4. อาร์เรย์อินพุตจะเป็นสตริงตัวพิมพ์เล็กทั้งหมดดังนี้:
    • quarter dime nickel nickel quarter dime penny penny
  5. รูปแบบที่แท้จริงของอินพุตและเอาต์พุตขึ้นอยู่กับคุณ

กรณีทดสอบ

"penny nickel dime quarter" 
-> "quarter dime nickel penny"

"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"

"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"

นี่คือดังนั้นจึงใช้กฎมาตรฐาน & ช่องโหว่


1
ขอให้เรายังคงอภิปรายนี้ในการแชท
ckjbgames

1
กรณีทดสอบทั้งหมดควรรวมเอาท์พุท ในมือถือกรณีที่สองและสามจะแสดงเป็นสองบรรทัดดังนั้นดูเหมือนว่าบรรทัดที่สองคือผลลัพธ์
Luis Mendo

4
ฉันเป็นชาวแคนาดาฉันสามารถสันนิษฐานได้ว่าการป้อนข้อมูลไม่มีเพนนีหรือไม่ ;)
undergroundmonorail

1
@undergroundmonorail น่าเศร้าที่ไม่มี
ckjbgames

1
เกิดอะไรขึ้นกับคนบ้าและเงินครึ่งดอลลาร์?
Adám

คำตอบ:


26

Japt , 5 3 ไบต์

ñg9

ทดสอบออนไลน์!

คำอธิบาย

ฉันได้เพิ่มฟังก์ชั่นการเรียงลำดับในภาษาของฉันในสองสามสัปดาห์ที่ผ่านมา :-) ñใช้เวลาในอาร์เรย์และฟังก์ชั่นและเรียงลำดับอาร์เรย์ราวกับว่าแต่ละรายการได้รับการแมปผ่านฟังก์ชั่นนั้น

gฟังก์ชั่นในสตริงใช้เวลาในจำนวนnและผลตอบแทนnถ่าน TH ในสตริงห่อถ้าnเป็นลบในอดีตหรือจุดสิ้นสุดของสตริง สตริงสามารถจัดตำแหน่งได้ดังนี้:

quarterquarter...
dimedimedimedi...
nickelnickelni...
pennypennypenn...

อักขระที่เก้า (0 ที่จัดทำดัชนีไว้) ของแต่ละสตริงจะถูกเน้นด้วยตัวหนา ñg9เหล่านี้อยู่ในลำดับที่ถูกต้องเพื่อให้ทุกสิ่งที่เราต้องทำคือ (แม้ว่าตอนนี้ฉันจะมองย้อนกลับไปมันñg5ก็ใช้ได้เหมือนกัน ... )


มันควรทำงานกับ 5 ด้วยฉันคิดว่า
FlipTack

@FlipTack ใช่ฉันเพิ่งสังเกตเห็นว่าตัวเอง ไม่ใช่ว่ามันสร้างความแตกต่าง ;-)
ETHproductions

นี้. ไม่ได้. เป็น แพ้
ckjbgames

1
@ckjbgames Dennis ไม่ได้โพสต์คำตอบใด ๆ ;-)
ETHproductions

1
@ETHproductions เขาอาจจะ เพียงแสดงคำถามนี้ให้เขา
ckjbgames

8

V , 7 ไบต์

ú/¨qu©¿

ลองออนไลน์!

นี่ใช้คำสั่งการเรียงลำดับแบบใหม่ที่ฉันเพิ่มไปยัง V เมื่อประมาณหนึ่งสัปดาห์ที่ผ่านมา ( ú) ช่วงเวลาที่แสนหวาน!

วิธีการทำงานนี้คือการเรียงลำดับทุกบรรทัดโดยการเรียงลำดับเริ่มต้น (ค่า ASCII) แต่ไม่สนใจคู่แรกของ regex ที่แน่นอน ในกรณีนี้ regex คือ(qu)?แม้ว่ามันจะมีสิ่งที่ไม่ใช่ ASCII ขั้นต้นบางอย่างเพื่อหลีกเลี่ยงการใช้แบ็กสแลช หากคุณไม่สนใจตัวอักษรสองตัวแรกของ "ไตรมาส" มันเริ่มต้นด้วย 'a' จากนั้นเหรียญทั้งหมดจะเรียงตามตัวอักษรแล้ว

รุ่นที่ไม่ใช่การแข่งขัน 4 ไบต์

ú!/.

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

สิ่งนี้ทำงานโดยการเรียงลำดับย้อนกลับทุกบรรทัด แต่ไม่สนใจอักขระแรกในแต่ละบรรทัด


8

Python ขนาด 36 ไบต์

lambda a:a.sort(key=lambda x:x[-5:])

ฟังก์ชั่นไม่มีชื่อที่เรียงลำดับรายการในสถานที่โดยฟังก์ชั่นคีย์ที่กำหนด

ชิ้นชื่อเหรียญแต่ละแล้วarter, dime, ickelและpenny- ที่อยู่ในตัวอักษร (หรือที่สำคัญกว่าลำดับ) การสั่งซื้อ


โอ้โอ้ - ถ้าฉันไม่เข้าใจelผิดฉันคิดถึงc: p
Jonathan Allan


6

Python 3 , 42 41 38 ไบต์

ฟังก์ชัน lambda ที่ไม่มีชื่อซึ่งรับอินพุตเป็นรายการสตริงเรียงลำดับ

(Outgolfed โดย Jonathan Allan)

lambda x:x.sort(key=lambda s:(s*2)[5])

ลองออนไลน์!

โซลูชันอื่น ๆ ที่ฉันทำไปด้วย:

lambda x:x.sort(key=lambda s:s*(s<'q'))
lambda x:x.sort(key=lambda s:(s+'pi')[5])
lambda x:x.sort(key=lambda s:ord(s[3])%16)

5

PowerShellขนาด 21 ไบต์

$args|sort{($_*3)[9]}

ลองออนไลน์!

คำอธิบาย

การขโมยอัลกอริทึมลงคอในคำตอบของ ETHproductions (โดยทั่วไป) ฉันคูณสตริงแต่ละตัวด้วย 3 จากนั้นเรียงลำดับตามอักขระที่ 9 ของสตริงผลลัพธ์


คืออะไร$_ใน PowerShell?
ckjbgames

@ckjbgames ในไปป์ไลน์ภายใน scriptblock นั้นจะอ้างอิงถึงรายการปัจจุบัน ดังนั้นสิ่งที่ชอบ1,2,3,4 | ForEach-Object { $_*2 }จะเอาท์พุทแต่ละจำนวนคูณ 2; บล็อกสคริปต์จะทำงานหนึ่งครั้งต่อไอเท็มอินพุต
ต้มตุ๋น

นั่นทำให้รู้สึก
ckjbgames

5

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

6ịµÞ

ลองออนไลน์! (ส่วนท้าย,ÇYรวมรายการผลลัพธ์ด้วยการป้อนบรรทัดสำหรับการพิมพ์ที่สวยกว่า)

อย่างไร?

6ịµÞ - Main link: list of strings
  µ  - monadic chain separation
   Þ - sort the list of strings by the monadic function:
6ị   - the sixth index - Jelly indexing is modular and 1-based

ดัชนี Nth ของรายการใน Jelly เป็นรายการ Nth ที่เริ่มต้นทางซ้ายนับจาก 1 และวนกลับไปที่จุดเริ่มต้นเมื่อจำเป็น (0 อยู่ทางขวาส่วนที่ 1 จากซ้ายเป็นเช่นนั้น)

ดังนั้นตัวละครที่หกของการ['d','i','m','e']เป็น'i'ตั้งแต่หกสอดคล้องสองแบบโมดูโลสี่

ตัวละครที่หกของสี่เหรียญในการสั่งซื้อวอร์eR, วันที่iฉัน Nicke l, pEnny เหล่านี้อยู่ในลำดับตัวอักษร (หรือที่สำคัญกว่านั้นลำดับ)


วิธีการที่จะประสบความสำเร็จในสิ่งเดียวกันอีกก็จะไปจัดเรียงตามสตริงหมุนกับṙ5µÞที่หมุนไปทางขวาทำให้สตริงerquart, imed, และlnickepenny


5

Pythonขนาด 32 ไบต์

lambda s:s.sort(key="npr".strip)

ลองออนไลน์! เรียงลำดับรายการในตำแหน่ง

lambdaความคิดที่จะใช้ฟังก์ชั่นการเรียงลำดับที่สำคัญโดยไม่ต้อง ตัวเลือกที่ดีคือx.stripซึ่งใช้สตริงxและลบขอบซ้ายและขวาของอักขระทั้งหมดในอินพุต ตัวอย่างเช่น"abcdef".strip("faces") == "bcd".

วิธีการ"npr".stripใช้เวลา:

quarter ->  np
dime    ->  npr
nickel  ->  pr
penny   ->  r

ซึ่งเรียงลำดับตามพจนานุกรม ฉันพบสตริงnprด้วยกำลังดุร้าย npuและnptก็ใช้ได้เช่นกันและก็ไม่มีใครที่สั้นกว่านี้


5

Bash (+ coreutils) 11 ไบต์

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

sort -rk1.2

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

Reverse sort โดยใช้ "sort key" จากอักขระตัวที่สองของฟิลด์แรก (คำ) จนถึงท้ายบรรทัดเช่น:

uarter
ime
ickel
enny

ทดสอบ

>echo penny nickel dime quarter|tr ' ' '\n'|sort -rk1.2

quarter
dime
nickel
penny

ลองออนไลน์!





3

V , 8 7 ไบต์

บันทึก 1 ไบต์ขอบคุณ @DJMcMayhem

Úçq/:m0

[ลองออนไลน์!]

ดูคำตอบของ @ DJMcMayhem ใน V ( 1 0 ไบต์สั้นกว่าของฉัน)

ลองออนไลน์!

Ú                    " sort all lines "
 ç                   " globally "
  q/                 "  where there a q is matched, "
    :m0              "  move it to the top of the buffer "

นี่เป็นวิธีแก้ปัญหาแบบเก่าที่มีขนาดใหญ่กว่า 1 ไบต์ แต่ฉันชอบจริงๆ

V , 8 ไบต์

Ú/q
dGHP

[ลองออนไลน์!]

ลองออนไลน์!

คำอธิบาย

Ú        " sorts the lines

ตอนนี้บัฟเฟอร์จะอยู่ในรูปแบบนี้:

dimes
nickels
pennies
quarters

สิ่งเดียวที่เหลือให้ทำตอนนี้คือการย้ายไตรมาสไปด้านบน

/q      " search for a q "
dG      " delete everything from the first quarter to the end of buffer "
HP      " and paste it at the top of the buffer

คุณสามารถ:m0แก้ปัญหาทางเลือกของคุณเพื่อบันทึกไบต์ (และผูกฉัน)Úçq/:m0
DJMcMayhem

@DJMcMayhem ขอบคุณ TIL เกี่ยวกับ:move
Kritixi Lithos


1

T-SQL, 41 36 34 ไบต์

select*from @ order by right(a,5)

คำอธิบาย

สมมติว่าอินพุตถูกโหลดล่วงหน้าในตัวแปรตารางชื่อ@โดยมีคอลัมน์ชื่อเดียวaโดยที่แต่ละค่าจะเรียงเป็นหนึ่งเหรียญ

select * from @ส่วนหนึ่งเป็นหม้อไอน้ำจาน 'ได้รับค่าทั้งหมดจะกลับมา' เวทมนตร์ที่แท้จริงเกิดขึ้นในorder byข้อ

โดยใช้กลยุทธ์เดียวกับโจนาธานอัลลันผมเรียงลำดับตามช่วงห้าตัวอักษร (SQL จะกลับสตริงทั้งหมดถ้ามันสั้นเกินไป): arter, dime, ,ickelpenny


qเป็นตัวอักษรถัดไปpดังนั้นสำหรับการดัดแปลงอย่างง่ายที่จะส่งผลให้qมีค่าน้อยกว่าpจะต้องเป็นปัจจัยqที่สำคัญ คุณสามารถลบ 1 ครั้งแรกและจากนั้นโมดูลัส 7 จะทำงาน แต่สันนิษฐานว่าจะใช้เวลาอย่างน้อยเป็นไบต์มากที่สุดเท่าที่ 113
นีล

@ Neil ใช่ฉันรู้ว่า 113 การเป็นนายกกำลังทำลายความพยายามของฉันเพื่อลดจำนวน ทำ -1 แล้ว mod 7 เป็นจำนวนไบต์มากขึ้น (รวมถึงวงเล็บที่จำเป็น
Brian J

1

JavaScript (ES6), 35 33 ไบต์

a=>a.sort(([,...a],[,...b])=>b>a)

กรณีทดสอบ


1

Befunge, 158 ไบต์

~:0`v0v4<~_
9:%8_^>8*`^1p9\+1g
$:!#@_1-0" ynnep">:#,_>
1-0" lekcin">:#,_>$:!#^_
" emid">:#,_>$:!#^_1-0
>:#,_$1>-:!#^_0" retrauq"
*84g9< ^*84g91-*84g94-*84g96-

ลองออนไลน์!

การประมวลผลสตริงและการเรียงลำดับไม่ใช่สิ่งที่คุณต้องการลองใน Befunge แต่วิธีนี้ใช้ประโยชน์จากการสังเกตของJohn Kasunichซึ่งเราไม่จำเป็นต้องเรียงลำดับอะไรเลย เราเพียงแค่นับจำนวนการเกิดของแต่ละเหรียญ (ซึ่งสามารถกำหนดได้อย่างง่ายดายจากตัวอักษรตัวแรก) จากนั้นให้เอาท์พุตว่าแต่ละชื่อเหรียญจำนวนมากตามลำดับที่เหมาะสม

มันยังคงไม่สามารถแข่งขันกับภาษาอื่น ๆ ในแง่ของขนาดได้ แต่วิธีการนี้ดีกว่าอย่างน้อยถ้าเราพยายามจัดการกับความท้าทายในรูปแบบการเรียงสตริง



1

APL (Dyalog APL) 11 ไบต์

รับและส่งคืนรายการสตริง

{⍵[⍋↑5⌽¨⍵]}

ลองออนไลน์!

{ ฟังก์ชั่นไม่ระบุชื่อ:

⍵[] ข้อโต้แย้งที่จัดทำดัชนีโดย

 ดัชนีจากน้อยไปมาก

 เมทริกซ์ซึ่งแถวเป็นเบาะ

5⌽ ห้าขั้นตอนที่หมุน

¨⍵ รายการของการโต้แย้ง

}



1

Huskขนาด 3 ไบต์

Öṙ9

ลองออนไลน์!

ส่งจากคำตอบ Brachylog ของฉันซึ่งตัดคำตอบ Japt ของ ETHproductions แต่ไม่ใช่การแปลที่แน่นอนเนื่องจากใช้การหมุนแทนการเข้าถึงองค์ประกอบแบบเรียบง่าย ที่นั่นฉันทำเพราะไม่อนุญาตให้คุณจัดทำดัชนีในตอนท้ายของการป้อนข้อมูล (ซึ่งอาจเป็นประโยชน์มากในหลาย ๆ สถานการณ์เนื่องจากลักษณะที่เปิดเผยของภาษา) ในแกลบ! ไม่ให้คุณดัชนีที่ผ่านมาในตอนท้ายของการป้อนข้อมูลแบบเดียวกับที่รอบห่อโมดูลที่ Japt ñg9ใช้ แต่ก็ตั้งแต่วันที่ 1 Ö!10ดังนั้นโปรแกรมนี้โดยเฉพาะอย่างยิ่งจะจบลงด้วยการเป็นหนึ่งไบต์อีกต่อไป:

Ö      Sort by
 ṙ     rotation by
  9    9.

0

แบตช์ 82 ไบต์

@for %%c in (quarter dime nickel penny)do @for %%a in (%*)do @if %%a==%%c echo %%c

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



0

Ruby, 31 ไบต์

->s{s.sort_by{|i|i[1]}.reverse}

สิ่งนี้จะไม่เรียงลำดับ "นิกเกิล" และ "เล็กน้อย" อย่างถูกต้องเสมอไป
daniero

0

Ruby ขนาด 30 ไบต์

->m{m.sort_by{|s|s[3].ord^16}}

หมายเลขที่พบโดยการลองผิดลองถูก บิตเงอะงะ .reverseแต่สั้นกว่าการใช้


0

Perl 6 ,  40 36  34 ไบต์

*.sort: {(<q d n p>Zxx 1..*).Bag{~m/./}}

ลองมัน

*.sort: {%(<q d n p>Z=>1..*){~m/./}}

ลองมัน

*.sort: {%(<q d n p>Z=>^4){~m/./}}

ลองมัน

ขยาย:

*\            # WhateverCode lambda ( this is the parameter )

.sort:        # sort using the following code block

{             # bare block lambda with implicit parameter 「$_」

  %(          # treat this list as a hash

    <q d n p> # list of first characters
    Z[=>]     # zipped using pair constructor
    ^4        # Range from 0 up-to 4 ( excludes 4 )

  ){          # get the value associated with this key

    ~m/./     # regex which gets the first character ( implicitly from 「$_」 )

  }

}


0

RProgNขนาด 18 ไบต์

~{3mtt¢\3mtt¢>}$

อธิบาย

~               # Zero Space Segment
 {            } # Anonymous Function
  3m            # Repeat the inputted string 3 times
    tt¢         # And take the tenth character of that
       \3mtt¢   # Do the same for the entry underneith
             >  # Compare the ascii value of the two
               $# Sort the input by the anonymous function.

ลองออนไลน์!


0

java 8, 128 112 bytes

นี่คือการแสดงออกแลมบ์ดาสำหรับ java.util.function.Function<String[],String[]>

s->{String r="";for(String k:"q d c p".split(" "))for(String t:s)if(t.contains(k))r+=" "+t;return r.split(" ");}

Explantion: สำหรับเหรียญทั้ง 4 ใบเรียงตามลำดับให้ป้อนชื่อและต่อท้ายชื่อเหรียญนั้นเพื่อผลทุกครั้งที่มีการแข่งขันสำหรับตัวละครที่เป็นเอกลักษณ์ของเหรียญนั้น แยกผลลัพธ์ออกเป็นอาร์เรย์แล้วส่งคืน


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