Đếm sự thay đổi của tôi


21

Nhiệm vụ của bạn là sắp xếp một mảng chứa các chuỗi "quarter", "dime", "niken" và "penny" bất kỳ số lần nào theo thứ tự cụ thể và sắp xếp chúng sao cho chúng theo thứ tự này: quarter dime nickel penny(nói cách khác, lớn nhất đến giá trị tiền tệ ít nhất).


Quy tắc

  1. Chương trình của bạn phải lấy một mảng làm đầu vào chứa tên của các đồng tiền Hoa Kỳ và sắp xếp chúng từ lớn nhất đến tối thiểu theo giá trị tiền tệ.
    • Đối với những người không đến từ Hoa Kỳ hoặc không sử dụng thay đổi, giá trị của các đồng tiền Hoa Kỳ, từ lớn nhất đến tối thiểu, là:
      • Quý: 25 xu
      • Dime: 10 xu
      • Niken: 5 xu
      • Penny: 1 xu
  2. Bạn có thể sắp xếp mảng này theo bất kỳ cách nào bạn muốn, miễn là đầu ra được sắp xếp theo các giá trị tiền tệ được hiển thị ở trên.
  3. Đầu vào có thể được thực hiện theo bất kỳ cách nào, có thể là đối số dòng lệnh hoặc STDIN.
  4. Một mảng đầu vào sẽ là tất cả các chuỗi chữ thường, đại loại như thế này:
    • quarter dime nickel nickel quarter dime penny penny
  5. Định dạng thực tế của đầu vào và đầu ra là tùy thuộc vào bạn.

Các trường hợp thử nghiệm

"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"

Đây là , vì vậy các quy tắc & sơ hở tiêu chuẩn được áp dụng.



1
Tất cả các trường hợp thử nghiệm nên bao gồm đầu ra. Trong điện thoại di động, trường hợp thứ hai và thứ ba được hiển thị thành hai dòng, vì vậy có vẻ như dòng thứ hai là đầu ra
Luis Mendo

4
Tôi là người Canada, tôi có thể cho rằng đầu vào không có đồng xu không? ;)
undergroundmonorail

1
@undergroundmonorail Đáng buồn thay, không.
ckjbgames

1
Điều gì đã xảy ra với tiền lãi và nửa đô la?
Adám

Câu trả lời:


26

Japt , 5 3 byte

ñg9

Kiểm tra nó trực tuyến!

Giải trình

Tôi cũng vậy, tôi đã thêm một chức năng sắp xếp vào ngôn ngữ của mình trong vài tuần qua :-) ñlấy một mảng và một chức năng và sắp xếp mảng như thể mỗi mục đã được ánh xạ qua chức năng đó.

Các gchức năng trên một chuỗi mất trong một số nvà trả về các nchar thứ trong chuỗi, gói nếu nlà tiêu cực hay quá khứ cuối chuỗi. Do đó, các chuỗi có thể được căn chỉnh như sau:

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

Char thứ 9 (0-index) của mỗi chuỗi đã được tô đậm. Đây là theo đúng thứ tự, vì vậy tất cả chúng ta phải làm là ñg9. (Mặc dù bây giờ tôi nhìn lại, nó ñg5cũng sẽ hoạt động ...)


Nó cũng nên làm việc với 5, tôi nghĩ vậy.
FlipTack

@FlipTack Vâng, tôi chỉ nhận thấy rằng bản thân mình. Không phải là nó làm cho một sự khác biệt ;-)
ETHproductions

Điều này. Không thể. Được. Bị đánh bại.
ckjbgames

1
@ckjbgames Dennis không đăng bất kỳ câu trả lời nào ;-)
ETHproductions

1
@ETHproductions Anh ấy có thể sẽ. Chỉ cần cho anh ta câu hỏi này.
ckjbgames

8

V , 7 byte

ú/¨qu©¿

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

Điều này sử dụng lệnh sắp xếp mới tinh vi mà tôi đã thêm vào V khoảng một tuần trước ( ú). Thời gian ngọt ngào!

Cách thức hoạt động này là bằng cách sắp xếp mọi dòng theo cách sắp xếp mặc định (giá trị ASCII) nhưng bỏ qua kết quả khớp đầu tiên của một biểu thức chính quy nhất định. Trong trường hợp này, regex là (qu)?, mặc dù nó có một số nội dung không phải ASCII thô để tránh sử dụng dấu gạch chéo ngược. Nếu bạn bỏ qua hai chữ cái đầu tiên của "quý", nó bắt đầu bằng 'a', và sau đó tất cả các đồng tiền đã được sắp xếp theo thứ tự bảng chữ cái.

Phiên bản không cạnh tranh, 4 byte

ú!/.

Tính năng này đã được triển khai, nhưng tôi chưa thử nghiệm rộng rãi vì vậy nó có một lỗi mà tôi chỉ nhận ra vì thử thách này. Không có liên kết TIO vì TIO hơi phía sau.

Điều này hoạt động bằng cách sắp xếp ngược lại mỗi dòng nhưng bỏ qua ký tự đầu tiên trên mỗi dòng.


8

Python, 36 byte

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

Hàm không tên sắp xếp danh sách tại chỗ theo chức năng chính được cung cấp.

Các lát của mỗi tên đồng tiền này sau đó được, arter, dime, ickel, và penny- đó là theo thứ tự chữ cái (hoặc quan trọng hơn, thứ tự).


Ôi trời ơi - nếu tôi không hiểu ellầm, tôi sẽ bỏ lỡ c: p
Jonathan Allan


6

Python 3 , 42 41 38 byte

Một hàm lambda không tên được lấy đầu vào là một danh sách các chuỗi, sắp xếp theo vị trí.

(Bị ruồng bỏ bởi Jonathan Allan)

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

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

Các giải pháp khác tôi đã nhầm lẫn với:

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 byte

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

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

Giải trình

Không biết xấu hổ đã đánh cắp thuật toán trong câu trả lời của ETHproductions (về cơ bản). Tôi nhân mỗi chuỗi với 3, sau đó sắp xếp dựa trên ký tự thứ 9 của chuỗi kết quả.


Có gì $_trong PowerShell?
ckjbgames

@ckjbgames Trong một đường ống dẫn, trong một scriptblock, nó đề cập đến mục hiện tại. Vì vậy, một cái gì đó như 1,2,3,4 | ForEach-Object { $_*2 }sẽ xuất ra mỗi số lần 2; khối tập lệnh được chạy một lần cho mỗi mục đầu vào.
briantist

Điều đó có ý nghĩa.
ckjbgames

5

Thạch , 4 byte

6ịµÞ

Hãy thử trực tuyến! (chân trang,ÇYtham gia danh sách kết quả với nguồn cấp dữ liệu cho bản in đẹp hơn.)

Làm sao?

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

Chỉ số thứ N của danh sách trong Jelly là mục thứ N bắt đầu ở bên trái, đếm từ 1 và lặp lại từ đầu khi cần. (Số 0 ở bên phải, số thứ 1 bên trái và tương tự).

Vì vậy, các nhân vật thứ sáu của ['d','i','m','e']'i'từ sáu là đồng dư với hai modulo bốn.

Nhân vật thứ sáu trong bốn đồng tiền theo thứ tự là quart er, d ime, nicke l, penny. Đây là theo thứ tự chữ cái (hoặc quan trọng hơn, thứ tự).


Một cách khác để đạt được điều tương sẽ được sắp xếp theo các dây xoay với ṙ5µÞ, nơi quay sang bên phải, làm cho chuỗi erquart, imed, lnicke, và penny.


5

Python , 32 byte

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

Hãy thử trực tuyến! Sắp xếp danh sách tại chỗ.

Ý tưởng là sử dụng hàm phân loại mà không có a lambda. Một ứng cử viên tốt là x.strip, lấy chuỗi xvà loại bỏ các cạnh trái và phải của nó tất cả các ký tự trong đầu vào. Ví dụ , "abcdef".strip("faces") == "bcd".

Phương pháp "npr".stripnày có:

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

được sắp xếp theo từ vựng. Tôi tìm thấy chuỗi nprbằng vũ lực. npunptcũng làm việc, và không có ngắn hơn.


5

Bash (+ coreutils) 11 byte

Chơi gôn

sort -rk1.2

Làm thế nào nó hoạt động

Sắp xếp ngược lại, với "khóa sắp xếp" từ ký tự thứ hai của trường thứ nhất (từ) cho đến cuối dòng, nghĩa là:

uarter
ime
ickel
enny

Kiểm tra

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

quarter
dime
nickel
penny

Dùng thử trực tuyến!





3

V , 8 7 byte

Lưu 1 byte nhờ @DJMcMayhem

Úçq/:m0

[Dùng thử trực tuyến!]

Xem câu trả lời của @ DJMcMayhem bằng V ( ngắn hơn 1 byte so với của tôi)

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

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

Đây là một giải pháp cũ hơn với dung lượng lớn hơn 1 byte, nhưng tôi thực sự thích nó.

V , 8 byte

Ú/q
dGHP

[Dùng thử trực tuyến!]

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

Giải trình

Ú        " sorts the lines

Bây giờ bộ đệm sẽ ở định dạng này:

dimes
nickels
pennies
quarters

Điều duy nhất còn lại phải làm bây giờ là di chuyển các phần tư lên trên cùng.

/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

Bạn có thể thực hiện :m0trên giải pháp thay thế của mình để lưu một byte (và ràng buộc tôi)Úçq/:m0
DJMcMayhem

@DJMcMayhem Cảm ơn, TIL về:move
Kritixi Lithos


1

T-SQL, 41 36 34 byte

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

Giải trình

Giả sử đầu vào được tải sẵn trong một biến bảng có tên @, với một cột duy nhất được đặt tên a, trong đó mỗi giá trị là một đồng xu được sắp xếp.

Phần select * from @là nồi hơi 'lấy tất cả các giá trị để trả về'. Phép thuật thực sự xảy ra trong order bymệnh đề.

Sử dụng chiến lược tương tự như Johnathan Allan , tôi sắp xếp theo các năm nhân vật cuối cùng (SQL sẽ trả lại toàn bộ chuỗi nếu nó quá ngắn): arter, dime, ickel, penny.


qlà chữ cái tiếp theo sau p, vì vậy để một mod đơn giản có kết quả qnhỏ hơn pgiá trị cần phải là một yếu tố q, là số nguyên tố. Bạn có thể trừ 1 trước và sau đó mô-đun 7 sẽ hoạt động, nhưng điều đó có lẽ sẽ mất ít nhất nhiều byte như 113.
Neil

@Neil Vâng, tôi nhận ra 113 là thủ tướng đang phá hỏng nỗ lực của tôi để giảm số lượng. Thực hiện -1 và sau đó mod 7 là nhiều byte hơn (bao gồm cả dấu ngoặc đơn bắt buộc.
Brian J

1

JavaScript (ES6), 35 33 byte

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

Các trường hợp thử nghiệm


1

Befunge, 158 byte

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

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

Xử lý và sắp xếp chuỗi không phải là những thứ bạn thường muốn thử trong Befunge, nhưng giải pháp này đang lợi dụng sự quan sát của John Kasunich rằng chúng ta thực sự không cần phải sắp xếp bất cứ thứ gì. Chúng tôi chỉ đếm số lần xuất hiện của mỗi đồng xu (có thể dễ dàng xác định từ ký tự đầu tiên), và sau đó xuất ra nhiều tên của mỗi đồng xu theo thứ tự phù hợp.

Nó vẫn hoàn toàn không cạnh tranh với các ngôn ngữ khác về kích thước, nhưng cách tiếp cận này ít nhất là tốt hơn so với nếu chúng ta cố gắng xử lý thử thách như một bài tập sắp xếp chuỗi.


1

Bình thường, 3 byte

@D5

Trình diễn

Dựa trên ETHproductions câu trả lời 's trong Japt.

Giải trình:

@D5
@D5Q    Variable introduction
 D Q    Sort the input by
@ 5     Its fifth character

1

APL (Dyalog APL) , 11 byte

Đưa và trả về danh sách các chuỗi.

{⍵[⍋↑5⌽¨⍵]}

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

{ chức năng ẩn danh:

⍵[Các ] đối số được lập chỉ mục bởi

 các chỉ số tăng dần của

 ma trận có các hàng được đệm

5⌽ năm bước

¨⍵ mục của đối số

}



1

Husk , 3 byte

Öṙ9

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

Được chuyển từ câu trả lời Brachylog của tôi, nó tách ra câu trả lời Japt của ETHproductions nhưng không phải là một bản dịch chính xác vì nó sử dụng phép quay thay vì yếu tố truy cập đơn giản. Ở đó, tôi đã làm điều đó bởi vì không cho phép bạn lập chỉ mục qua phần cuối của đầu vào (điều này có thể khá hữu ích trong nhiều trường hợp do tính chất khai báo của ngôn ngữ). Trong Husk, ! không cho phép bạn lập chỉ mục qua phần cuối của đầu vào, với cùng một mô-đun bao quanh mà Japt ñg9sử dụng, nhưng nó là từ 1 nên chương trình này đặc biệt sẽ dài hơn một byte : Ö!10.

Ö      Sort by
 ṙ     rotation by
  9    9.

0

Mẻ, 82 byte

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

Đưa đầu vào làm đối số dòng lệnh và đầu ra cho STDOUT. Hoạt động bằng cách ghép các danh sách kết quả từ việc lọc danh sách gốc trên mỗi đồng tiền.


0

Ruby, 34 byte

->m{m.sort_by{|c|c[1..2]}.reverse}

đầu vào và đầu ra như một chuỗi các chuỗi


0

Ruby, 31 byte

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

Điều này sẽ không luôn luôn sắp xếp "niken" và "xu" chính xác.
daniero

0

Ruby, 30 byte

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

Số ma thuật được tìm thấy bởi thử nghiệm và lỗi. Một chút vụng về, nhưng ngắn hơn so với sử dụng .reverse.


0

Perl 6 ,  40 36  34 byte

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

Thử nó

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

Thử nó

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

Thử nó

Mở rộng:

*\            # 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

Toán học, 50 byte

Flatten@{Last@#,Most@#}&@Split@Sort@StringSplit@#&

0

RProgN , 18 byte

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

Giải thích

~               # 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.

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


0

java 8, 128 112 byte

Đây là một biểu thức lambda cho một 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(" ");}

Giải thích: Đối với mỗi trong số 4 đồng tiền theo thứ tự, hãy đi qua đầu vào và nối tên của đồng xu vào kết quả mỗi khi có kết quả khớp với ký tự duy nhất của đồng tiền đó. Chia kết quả thành một mảng và trả lại.


0

Ruby, 27 byte

->s{s.sort_by{|x|(x*2)[5]}}
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.