算上我的零钱


21

您的任务是对包含字符串“ quarter”,“ dime”,“ nickel”和“ penny”的数组进行无数次排序(无特定顺序),然​​后对其进行排序,以使它们的顺序为:(quarter dime nickel penny换句话说,最高至最低货币价值)。


规则

  1. 您的程序必须将包含美国硬币名称的数组作为输入,并按货币值从大到小对它们进行排序。
    • 对于那些不是来自美国或不使用零钱的人,美国硬币的价值(从最大到最小)是:
      • 季度:25美分
      • 一角钱:10美分
      • 镍:5美分
      • 竹enny: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
所有测试用例都应包括输出。在移动设备中,第二和第三种情况以两行显示,因此看起来第二行是输出
Luis Mendo

4
我是加拿大人,我可以假设输入内容没有几分钱吗?;)
Undergroundmonorail

1
@undergroundmonorail不幸的是,没有。
ckjbgames

1
疯子和半美元怎么了?
亚当

Answers:


26

Japt5 3字节

ñg9

在线测试!

说明

在过去的几周中,我也为我的语言添加了排序功能:-) ñ接受一个数组和一个函数,并对数组进行排序,就好像每个项目都已通过该函数进行了映射一样。

g字符串上的函数接受一个数字n并返回字符串中的nth字符,如果n为负或在字符串末尾,则换行。字符串因此可以如下对齐:

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

每个字符串的第9个字符(0索引)以粗体突出显示。这些是正确的顺序,所以我们要做的就是ñg9。(尽管现在回头看,它ñg5也可以工作...)


我认为它也应该与5一起工作。
FlipTack

@FlipTack是的,我只是注意到自己。并不是说它
有所作为

这个。不能。是。大败。
ckjbgames

1
@ckjbgames丹尼斯没有发布任何答案;-)
ETHproductions '17

1
@ETHproductions他可能会的。告诉他这个问题。
ckjbgames

8

V,7个字节

ú/¨qu©¿

在线尝试!

这使用了大约一个星期前()我添加到V中的新的排序命令ú。美好的时机!

这种工作方式是通过默认排序(ASCII值)对每一行进行排序,但忽略某个正则表达式的第一个匹配项。在这种情况下,正则表达式为(qu)?,尽管它有一些总的非ASCII内容,以避免使用反斜杠。如果忽略“季度”的前两个字母,则以“ a”开头,然后所有硬币都已经按字母顺序排列。

非竞争版本,4字节

ú!/.

该功能已经实现,但是我还没有对其进行广泛的测试,因此它存在一个仅由于这一挑战才意识到的错误。没有TIO链接,因为TIO稍微落后。

这是通过对每一行进行反向排序,而忽略每行的第一个字符来实现的。


8

Python,36个字节

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

未命名函数,根据给定的键函数对列表进行就地排序。

每个硬币名称的切片然后,arterdimeickel,和penny-它们是按字母(或更重要的是,有序)的顺序。


哦,糟糕-如果我el走错路了,我会想念c:p
乔纳森·艾伦,



5

PowerShell,21字节

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

在线尝试!

说明

(从根本上)无耻地偷走了ETHproductions答案中的算法。我将每个字符串乘以3,然后根据结果字符串的第9个字符进行排序。


什么是$_PowerShell中的?
ckjbgames

@ckjbgames在管道中的脚本块中,它引用当前项目。所以类似的1,2,3,4 | ForEach-Object { $_*2 }将输出每个数字乘以2;脚本块每个输入项运行一次。
briantist

那讲得通。
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

Jelly中列表的第N个索引是从左边开始的第N个项目,从1开始计数,并在需要时循环返回到开始。(第0位在右边,第-1位在左边,依此类推)。

因此的第六个特征['d','i','m','e']'i'因为六个等于两个模四。

四个硬币中的第六个字符依次为夸脱er d ime尼克lpenny。这些是按字母顺序(或更重要的是顺序)排列的。


达到同样的事情的另一种方式是通过排序与旋转的琴弦ṙ5µÞ,在向右旋转,使琴弦erquartimedlnicke,和penny


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

怎么运行的

反向排序,使用“排序键”从第一个字段(单词)的第二个字符到行尾,即:

uarter
ime
ickel
enny

测试

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

quarter
dime
nickel
penny

在线尝试!


4

CJam,8个字节

q~{5=}$p

在线尝试!

说明

q~        Get and eval all input (array of coin names)
  {5=}$   Sort the array by the 5th index of each element (array indices loop in CJam)
       p  Print the result



3

V8 7字节

@DJMcMayhem节省了1个字节

Úç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将返回整个字符串,如果是太短)arterdimeickelpenny


q是后面的下一个字母p,因此,对于一个简单的mod来说,得出的值q小于p,需要将该值设为的因数q,这是素数。您可以先减去1,然后模数为7即可,但是大概至少要占用113个字节。–
Neil

@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

外壳,3个字节

Öṙ9

在线尝试!

从我的Brachylog答案移植而来,该答案剥夺了ETHproductions的Japt答案,但由于它使用旋转而不是简单地访问第n个元素,因此并不是确切的翻译。在这里,我这样做是因为不允许您在输入的末尾进行索引(由于语言的声明性,在很多情况下这可能很有用)。在Husk中,! 确实让您索引了输入的末尾,并且ñg9使用了Japt所用的相同模块包装,但是它是从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,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

Mathematica,50个字节

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

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字节

这是一个 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(" ");}

移出:对于4个硬币中的每个,依次输入,并在每次匹配该硬币的唯一字符时将硬币的名称附加到结果中。将结果拆分成数组并返回。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.