欧元硬币和纸币


26

由于使用欧元的大多数国家/地区都将 ,用作小数点分隔符,因此您也必须使用它。

任务是按升序输出所有欧元硬币和纸币的值。您还必须将尾随,00放在整数值上。

0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00

我既接受标准输出的输出,也可以接受返回数组/列表的函数。如果将输出输出到stdout,则可接受的值之间的分隔符为:空格,制表符或换行符。

除非我看到我觉得很有创造力的答案,否则不会有公认的答案。

,所以我想按语言知道最短的答案。

更新:

前导0零是不可接受的。抱歉,我应该先说清楚。

更新2:

返回字符串的函数也是可以接受的。


1
会有尾随的空间吗?
dzaima

1
@dzaima:是的。:)
sergiol

1
前导零是否可以接受(如000,01等)?
乔纳森·艾伦,

8
接受的答案就是赢得挑战的答案。您可以接受最短的答案,也可以完全不接受,但不能随意。
丹尼斯,

2
@KevinCruijssen:参见丹尼斯的答案以供参考:codegolf.stackexchange.com/a/141484/29325
sergiol

Answers:


27

纯净重击,48

s={1,2,5}
eval echo 0,0$s 0,${s}0 ${s}{,0,00},00

在线尝试


打的好!您有复选标记!
sergiol

3
我从未注意到这种模式……而且我已经使用该货币超过15年了
。–

@StephanBijzitter许多货币都是这样工作的。
NieDzejkob


7

Python 2,72个字节

print[('%.2f'%(10**(x/3-2)*(5>>~x%3))).replace(*'.,')for x in range(15)]

在线尝试!

表达5>>~x%3的非负整数映射到125125...

它的工作原理,因为521是连续的右bitshifts 50b101→交通0b10→交通0b1); 我们向后循环通过它们。


6

木炭,36字节

EE×125⁵⁺⁺×0⁻²÷κ³ι×0÷κ³⁺⁺✂ι⁰±²¦¹,✂ι±²

在线尝试!链接是详细版本的代码。说明:

   125                                  String `125`
  ×   ⁵                                 Repeated 5 times
 E                                      Map over each character
              ÷κ³   ÷κ³                 Integer divide loop index by 3
            ⁻²                          Subtract from 2
          ×0      ×0                    Repeat the string `0` x times
        ⁺⁺       ι                      Concatenate with the character
E                                       Map over each resulting string
                         ✂ι⁰±²¦¹        Slice off the last two digits
                                ✂ι±²    Extract the last two digits
                       ⁺⁺       ,       Concatenate with a comma
                                        Implicitly print one per line

6

SOGL在线离线,27 26 25 24 23 22 21 字节

252¹5∙īυ;{⁴Ζ.,ŗP*F⁾?½

在这里尝试!

在线链接不显示尾随零,但脱机版本显示为零,因为Javas BigDecimals很不错。

说明:

252¹5∙īυ;{⁴Ζ.,ŗP*F⁾?½
252¹                 push the array [2, 5, 2]
    5∙               multiply vertically by 5
      īυ;            push 0.01 below that - the main number
         {           iterate over that array - [2,5,2,2,5,2,2,5,2,2,5,2,2,5,2]
          ⁴            duplicate the main number
           Ζ.,ŗ        replace "." with ","
               P       output in a new line
                *      multiply the main number with the current item of the array
                 F⁾?   if the current array item-2 isn't 0, then
                    ½    divide by 2

要在离线解释器中运行,请下载SOGLOnlines存储库,转到编译器/解释器,.pde使用Processing打开任何文件,然后对OS进行文件->导出(否则,您不能将参数提供给Processing程序:/),然后使用带有代码的文件路径的参数执行编译的程序。然后,stdout将包含this

2L¼2¹5∙īυ;{⁴Ζ.,ŗP*18个字节几乎可以工作,但是零数量增加,导致0,01 0,02 0,050 0,100 0,200 0,5000 1,0000 2,0000 5,00000 10,00000 20,00000 50,000000 100,000000 200,000000 500,0000000(换行符用空格代替)


2
输出格式不正确:“还必须将尾随,00放在整数值上。” (我想这也打算,0在适当时包括尾随)
Jonathan Allan

您应该根据@JonathanAllan的观察来修正您的帖子。乔纳森·
艾伦(

@JonathanAllan:嗯,让我发表一点评论。帖子作者说:“ 在线链接不显示尾随零,但脱机版本显示Java的BigDecimals很好。 ”。因此,我无法检查脚本在脱机版本上是否运行良好。
sergiol

@sergiol啊,我错过了那个文字。我想知道为什么在这方面在线解释器的实现方式有所不同-dzaima ...?
乔纳森·艾伦,

我相信在线解释器是用JavaScript编写的,而离线解释器是在Processing中编写的。另外的解决方案不具备可检验的网上。:P
totallyhuman

6

Java 8,109 108 81 80字节

感谢@OlivierGrégoire的Locale想法

x->{for(double i=.001;i<11;)System.out.printf("%.2f %.2f %.2f ",i*=10,i*2,5*i);}

在线尝试!


您可以通过切换到未使用的参数来保存字节(有关此内容的详细信息,
参见


2
81个字节。在我的系统上可以使用,因为我的默认语言环境是be_FR。“在我的系统上工作”就足够了。我找不到与此相关的元信息,但是您可以使用它。要模拟它,只需Locale.setDefault(Locale.FRENCH);在TIO的非竞争部分中进行即可。
OlivierGrégoire17年

1
@OlivierGrégoire 这是相关的meta-post,您确实是对的,它是允许的。我什至要求OP进行验证,他通过此meta帖子的链接将我链接到Dennis的答案。
凯文·克鲁伊森

1
80个字节:x->{for(double i=.001;i<11;)System.out.printf("%.2f %.2f %.2f ",i*=10,i*2,5*i);}
Nevay


5

APL(Dyalog)30 28字节

完成程序。输出以空格分隔到STDOUT。

'\.'R','2⍕×\.01,142 2.5 2

在线尝试!

2 2.5 2 列表;
[2,2.5,2]

14⍴ 周期性ř ESHAPE到长度14;
[2,2.5,2,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5]

.01 前置0.01;
[0.01,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5]

×\ 累积乘法;
[0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500]

2⍕ 带有两个小数的格式;
" 0.01 0.02 0.05 0.10 0.20 0.50 1.00 2.00 5.00 10.00 20.00 50.00 100.00 200.00 500.00"

 得到的是(分离','2

'\.'⎕R',' PCRE ř用逗号E放置周期;
" 0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00"


4

R 70,50字节

受@Giuseppe启发:

format(c(1,2,5)*10^rep(-2:2,e=3),ns=2,de=",",sc=F)

在这里尝试!

不打高尔夫球

format(c(1,2,5)*10^rep(-2:2, each = 3),
   nsmall = 2, 
   decimal.mark = ",",
   scientific = FALSE)

我只能使用类似的方法(仅使用t(outer())而不是rep())来管理56。不知道我们是否允许使用前导空格,但要花费4个字节才能解决。
刑事


3

JavaScript(ES6),83个字节

返回一个数组。

_=>[...'125'.repeat(k=5)].map(c=>(c*(c-1?k:k*=10)/5e3).toFixed(2).split`.`.join`,`)

演示版


递归版本(ES7),84个字节

返回带有尾随空格的字符串。

f=(i=0)=>i<15?('125'[i%3]/100*10**(i/3|0)).toFixed(2).split`.`.join`,`+' '+f(i+1):''

演示版


3

Python 2中80个 77 75 73字节

感谢@ Mr.Xcoder -2个字节感谢@EriktheOutgolfer
-1个字节感谢@totallyhuman
-2个字节感谢@Lynn
-2个字节

print[('%.2f'%(v*m)).replace(*'.,')for m in.01,.1,1,10,100for v in 1,2,5]

在线尝试!


@EriktheOutgolfer 忘记删除空格
Xcoder先生17年

我忘记指定可接受的值之间的分隔符类型。不用担心,换行符是可以接受的。
sergiol

2

视网膜,42字节


5$*0
0
$'1$`¶$'2$`¶$'5$`¶
..¶
,$&
m`^00?

在线尝试!说明:有15个值,在五个位置中分别有1、2和5。第一级插入五个0。第二阶段将它们重复成一个正方形,然后将尾部对角线更改为1,然后用2和5将这些行重复三遍。第三阶段插入逗号,最后一步则删除不必要的前导零。




1

JavaScript(ES6),81个字节

返回一个数组。

_=>[...Array(13),b=.005,i=0].map(p=>(b*=++i%3?2:2.5).toFixed(2).replace(".",","))

演示版



1

Common Lisp,95个字节

(dotimes(i 5)(dolist(j'(1 2 5))(princ(substitute #\, #\.(format()"~$ "(*(expt 10(- i 2))j))))))

在线尝试!


1

外壳,28字节

ṁm↔ṪöJ',CtN`J§¤eR'0≥≤2ḣ5"125

在线尝试!

只是字符串操作,因为Husk在格式化浮点数方面很糟糕。

说明

ṁm↔ṪöJ',CtN`J§¤eR'0≥≤2ḣ5"125
                        "125  The string "125".
                      ḣ5      The range [1,2,3,4,5].
   Ṫö                         Compute their outer product wrt this function:
                               Arguments are number n (say 3) and character c (say '5').
             §     ≥≤2         Compute max(0,n-2+1) and max(0,2-n+1),
                R'0            repeat '0' those numbers of times,
              ¤e               and put them into a list: ["00",""]
           `J                  Join with c: "005"
        CtN                    Split to lengths 2 and at most 3: ["00","5"]
     J',                       Join with ',': "00,5"
                              This gives a 2D array of the outputs reversed.
ṁ                             Map and concatenate
 m↔                           map reversal.
                              Implicitly print separated by newlines.

1

C ++ 138120字节

-18字节归功于MSalters

#include<iostream>
void p(){for(auto&a:{"0,0%d ","0,%d0 ","%d,00 ","%d0,00 ","%d00,00 "})for(int b:{1,2,5})printf(a,b);}

硬编码版本,Lynn编写,116字节

#include<ios>
void p(){puts("0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00");}

您应该提供一些在线示例,供人们看到它运行。我已经为您做到了:tio.run/…–
sergiol

不需要vfvoid p(){for(auto&a:{"0,0%d ","0,%d0 ","%d,00 ","%d0,00 ","%d00,00 "})for(int b:{1,2,5})printf(a,b);}-仅120个字节
MSalters

#include<ios>␤void p(){puts("0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00");}是116个字节。
林恩

1

R70 61字节

options(scipen=9,OutDec=",")
print(c(1,2,5)*10^rep(-2:2,e=3))

在线尝试!

-9字节归功于Rui Barradas

AndriusZ超越


我认为没有1000欧元,2000欧元和5000欧元
AndriusZ

您可以删除以下内容来节省5个字节print
AndriusZ

通过混合您和我的答案,我们可以实现50个字节format(c(1,2,5)*10^rep(-2:2,e=3),ns=2,de=",",sc=9)
AndriusZ

@AndriusZ我认为您仍然需要一个print答案,但您应该自己发布;我只是使用了最野蛮的方法来更改设置,并使用了format一些实际的想法。
朱塞佩

1
通过将两者options合并为一个,可以节省8个字节。options(OutDec=",",scipen=5)
Rui Barradas


1

05AB1E,25 个字节

125S5иεN3÷°*т/'.',:N2›i0«

返回字符串列表。

在线尝试。

说明:

125                          # Push 125
   S                         # Split to a list of digits: [1,2,5]
    5и                       # Repeat it 5 times: [1,2,5,1,2,5,1,2,5,1,2,5,1,2,5]
      ε                      # Map each to:
       N3÷                   #  Integer-divide the map-index by 3
          °                  #  Take it to the power 10
           *                 #  Multiply the current map number with it
            т/               #  Divide it by 100
              '.',:          #  Replace all "." with ","
                   N2i      #  And if the map-index is larger than 2:
                       0«    #   Append a "0"

125S5и可以是•}•15∍(将其压缩125;将其放大到15 :)125125125125125'.',:也可以是„.,`:(将字符串“。,”弹出,并将字符作为单独的项目弹出并推入堆栈),以获得相同的字节数:在线尝试。
同样,N3÷°*т/可以将其缩短为N3÷Í°*Í减去2),但是不幸的是我们需要将/所有数字都变为小数,而N3÷Í°*大多数数字将保持整数。


1

T-SQL,104个字节

SELECT FORMAT(p*n,'0\,00')
FROM(VALUES(1),(2),(5))a(n),(VALUES(1),(10),(100),(1E3),(1E4))b(p)
ORDER BY p,n

换行符仅供阅读。

令人讨厌的比普通PRINT版本更长(90字节):

PRINT'0,01 0,02 0,05 0,10 0,20 0,50 1,00 2,00 5,00 10,00 20,00 50,00 100,00 200,00 500,00'

您可以在答案中附加在线演示:rextester.com/IBKO53221
sergiol

并删除换行符以使其更具高尔夫感:rextester.com/ZANC22480
sergiol

0

泡泡糖,41个字节

00000000: 1dc5 8105 0040 1402 d055 1ae0 50d1 feab  .....@...U..P...
00000010: dd2f 788f 8fc2 e192 433c 5c42 e891 7049  ./x.....C<\B..pI
00000020: 11ab 67a6 b8bc 90f5 01                   ..g......

在线尝试!


0

视网膜 58字节


¶0¶00¶000¶0000¶
.*¶
1$&2$&5$&
^
¶
+`¶(.?.?¶)
¶0$1
..¶
,$&

在线尝试!


1
我对操作员做了一个双重检查-前导零是不可接受的:(
Jonathan Allan

您应该根据@JonathanAllan的观察来修正您的帖子。乔纳森·
艾伦(

@sergiol修复了问题
ovs



0

JavaScript-96个字节

x=>{for(o="",b=-2;b<3;b++)for(n of[1,2,5])o+=(n*10**b).toFixed(2).replace(".",",")+" ";return o}

这是一种稍长(98个字符)的功能性方法:

x=>[].concat.apply([],[.01,.1,1,10,100].map(n=>[n,n*2,n*5])).map(n=>n.toFixed(2).replace(".",","))


0

Tcl,80字节

lmap d {-2 -1 0 1 2} {lmap c {1 2 5} {puts [regsub \\. [format %.2f $c\e$d] ,]}}

在线尝试!

Tcl,90字节

lmap d {.01 .1 1 10 100} {lmap c {1 2 5} {puts [regsub \\. [format %.2f [expr $c*$d]] ,]}}

在线尝试!

还很长,以后再打高尔夫球吧!


失败的outgolf:tio.run
##



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.