เหรียญยูโรและธนบัตร


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 หรือฟังก์ชั่นที่ส่งคืนอาร์เรย์ / รายการ หากเอาต์พุตคือ stdout ตัวคั่นที่ยอมรับได้ระหว่างค่าคือ: space, tab หรือ newline

จะไม่มีคำตอบที่ยอมรับเว้นแต่ฉันจะเห็นคนที่ฉันคิดว่าสร้างสรรค์มาก

ดังนั้นฉันต้องการรู้คำตอบสั้น ๆ ด้วยภาษา

ปรับปรุง:

0ค่าศูนย์นำหน้าไม่เป็นที่ยอมรับ ขออภัยฉันควรทำให้ชัดเจนก่อน

อัปเดต 2:

นอกจากนี้ยังเป็นที่ยอมรับฟังก์ชั่นกลับสตริง


1
จะมีพื้นที่ต่อท้ายหรือไม่
dzaima

1
@dzaima: ใช่ :)
sergiol

1
ศูนย์นำหน้าเป็นที่ยอมรับ (เช่น000,01ฯลฯ ) หรือไม่
Jonathan Allan

8
คำตอบที่ได้รับการยอมรับคือคำตอบที่ชนะการท้าทาย คุณสามารถยอมรับคำตอบที่สั้นที่สุดหรือไม่มีคำตอบก็ได้ แต่ไม่ใช่คำตอบใด ๆ
Dennis

2
@KevinCruijssen: ดูคำตอบของเดนนิสสำหรับการอ้างอิง: codegolf.stackexchange.com/a/141484/29325
sergiol

คำตอบ:


27

Pure Bash, 48

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

ลองมันออนไลน์


เล่นดี! คุณได้เครื่องหมายถูก!
sergiol

3
ฉันไม่เคยสังเกตเห็นรูปแบบ ... และฉันใช้สกุลเงินมานานกว่า 15 ปี ..
Stephan Bijzitter

@StephanBijzitter สกุลเงินจำนวนมากทำงานเช่นนั้น
NieDzejkob


7

Python 2 , 72 ไบต์

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

ลองออนไลน์!

การแสดงออก5>>~x%3แผนที่ integers เชิงลบเพื่อ1, 2, 5, 1, 2, 5...

มันทำงานได้เพราะ5, 2, 1เป็นต่อเนื่องขวาของ bitshifts 5( 0b101→การ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ไฟล์ใด ๆ ที่มีการประมวลผลแล้วทำไฟล์ -> ส่งออกสำหรับระบบปฏิบัติการของคุณ (มิฉะนั้นคุณจะไม่สามารถโต้แย้งโปรแกรมประมวลผล: /) จากนั้นรันโปรแกรมที่คอมไพล์ด้วยอาร์กิวเมนต์ไปยังพา ธ ของไฟล์ด้วยรหัส จากนั้นจะมี stdout นี้

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 ขอบคุณ
sergiol

@JanathanAllan: อืมมมมมมฉันจะแสดงความคิดเห็นของคุณด้วยเม็ดเกลือ ผู้เขียนโพสต์กล่าวว่า: " ลิงก์ออนไลน์ไม่แสดงศูนย์ต่อท้าย แต่เวอร์ชันออฟไลน์ทำหน้าที่เหมือน Javas BigDecimals ดีมาก " ดังนั้นฉันจึงไม่มีวิธีตรวจสอบว่าสคริปต์ทำงานได้ดีหรือไม่ในเวอร์ชันออฟไลน์
sergiol

@sergiol อาฉันพลาดข้อความนั้นไป ฉันสงสัยว่าทำไมล่ามออนไลน์นั้นมีการใช้งานที่แตกต่างกันในเรื่องนี้ - dzaima ... ?
Jonathan Allan

ฉันเชื่อว่าล่ามออนไลน์เขียนด้วย JavaScript ในขณะที่ออฟไลน์เขียนอยู่ในการประมวลผล โซลูชันยังไม่จำเป็นต้องทดสอบทางออนไลน์ : P
เต็มเปาโดยมนุษย์

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);}

ลองออนไลน์!


คุณสามารถบันทึก byte โดยเปลี่ยนเป็นพารามิเตอร์ที่ไม่ได้ใช้(โพสต์ meta นี้) : ลองออนไลน์
Justin Mariner

100 ไบต์
Olivier Grégoire

2
81 ไบต์ ทำงานบนระบบของฉันเพราะภาษาเริ่มต้นของฉันคือ be_FR "ทำงานในระบบของฉัน" ดีพอ ฉันไม่พบเมตาโพสต์ที่เชื่อมโยงกับสิ่งนี้ แต่คุณสามารถใช้งานได้ หากต้องการจำลองเพียงแค่Locale.setDefault(Locale.FRENCH);อยู่ในส่วนที่ไม่สามารถแข่งขันได้ของ TIO
Olivier Grégoire

1
@ OlivierGrégoire นี่คือเมตาโพสต์ที่เกี่ยวข้องและแน่นอนว่าคุณได้รับอนุญาต ฉันยังขอให้ OP ยืนยันและเขาก็เชื่อมโยงฉันกับคำตอบของเดนนิสพร้อมลิงก์ไปยังเมตา
Kevin Cruijssen

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

5

Bash , 38 ไบต์

printf %.2f\\n {1,2,5}e{-2..2}|sort -h

ต้องมีสถานที่ที่เหมาะสมที่จะได้รับอนุญาตโดยค่าเริ่มต้นและไม่มีค่าใช้จ่ายไบต์

ลองออนไลน์!


เอาต์พุตไม่เคารพคำสั่งจากน้อยไปมาก!
sergiol

ฉันแตกเมื่อฉันเปลี่ยนจากบรรทัดใหม่เป็นช่องว่างเพื่อบันทึกไบต์ แก้ไขแล้ว
Dennis

5

APL (Dyalog) , 30 28 ไบต์

โปรแกรมที่สมบูรณ์ ส่งออกไปยังช่องว่างคั่นด้วย STDOUT

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

ลองออนไลน์!

2 2.5 2 รายการ;
[2,2.5,2]

14⍴ ครบวงจรr 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 R eplace ใช้เครื่องหมายจุลภาค;
" 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)

ลองที่นี่!

Ungolfed

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

ฉันทำได้เพียงจัดการ 56 โดยใช้วิธีที่คล้ายกันเพียงแค่ใช้ t (outer ()) แทนที่จะเป็นตัวแทน () ไม่แน่ใจว่าเราได้รับอนุญาตให้นำช่องว่างนั้นนำค่า 4 ไบต์มาแก้ไขหรือไม่
CriminallyVulgar


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 ไบต์ขอบคุณ by @EriktheOutgolfer
-2 ไบต์ขอขอบคุณ @totallyhuman
-2 ไบต์ขอบคุณ @Lynn

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

ลองออนไลน์!


@EriktheOutgolfer ลืมที่จะลบช่องว่าง
Mr. Xcoder

ฉันลืมระบุประเภทของตัวคั่นระหว่างค่าที่ยอมรับได้ ไม่ต้องกังวลบรรทัดใหม่เป็นที่ยอมรับ
sergiol

2

เรติน่า 42 ไบต์


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

ลองออนไลน์! คำอธิบาย: มีสิบห้าค่าโดยที่ 1, 2 และ 5 ในแต่ละแห่งมีห้าแห่ง ด่านแรกแทรกห้า 0s ขั้นตอนที่สองทำซ้ำมันเป็นสี่เหลี่ยมจัตุรัสจากนั้นเปลี่ยนเส้นทแยงมุมเป็น 1s จากนั้นทำซ้ำบรรทัดเหล่านั้นสามครั้งด้วย 2 และ 5 ขั้นตอนที่สามแทรกเครื่องหมายจุลภาคและขั้นตอนสุดท้ายลบศูนย์นำที่ไม่จำเป็น



1

Bash , 88 ไบต์

s=125
for i in {0..14};{ printf %1.2f\  `bc<<<"scale=2;${s:i%3:1}*10^$[i/3-2]"`|tr . ,;}

ลองออนไลน์!


3
หลังจากการทำงานอย่างหนักecho 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นั้นมีความยาวเท่ากัน :(
Digital Trauma

@DigitalTrauma แต่นั่นไม่ใช่เรื่องสนุก: P
Justin Mariner



1

Husk , 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 ++, 138 120 ไบต์

-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);}

รุ่น Hardcoded โดย 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

ไม่ต้องการvและf: 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);}- เพียง 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 ไบต์
Lynn

1

R , 70 61 ไบต์

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

ลองออนไลน์!

-9 ไบต์ขอบคุณ Rui Barradas

โดดเด่นด้วยAndriusZ


ฉันคิดว่าไม่มี 1,000 €, 2000 €และ 5,000 €
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ความคิดจริงบางอย่าง
Giuseppe

1
คุณสามารถบันทึก 8 ไบต์โดยรวมสองoptionsเป็นหนึ่ง 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

เรติน่า 58 ไบต์


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

ลองออนไลน์!


1
ฉันตรวจสอบอีกครั้งโดยมีคำถามถึง OP - ศูนย์ส่วนนำไม่ยอมรับ :(
Jonathan Allan

คุณควรแก้ไขโพสต์ของคุณตามการสังเกตของ @JonathanAllan JonathanAllan ขอบคุณ
sergiol

@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/##BcFBCoAgEAXQq/…
sergiol

มันใช้ขอบเขตไบต์เดียวกับตัวอักษร: ทำให้ "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 "
sergiol


ใช้timeเพื่อวนซ้ำแทนการlmapแสดงผลไบต์เพิ่มขึ้น:set d -3;time {incr d;lmap c {1 2 5} {puts [regsub \\. [format %.2f $c\e$d] ,]}} 5
sergiol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.