Koin dan uang kertas Euro


26

Karena mayoritas negara yang menggunakan Euro memiliki ,pemisah desimal, Anda harus menggunakannya juga.

Tugasnya adalah untuk mengeluarkan semua nilai koin dan catatan Euro dalam urutan menaik. Anda juga harus meletakkan trailing ,00pada nilai integer.

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

Saya menerima keluaran untuk stdout atau fungsi yang mengembalikan array / daftar. Jika output akan stdout, pemisah yang dapat diterima antara nilai adalah: spasi, tab, atau baris baru.

Tidak akan ada jawaban yang diterima, kecuali saya melihat seseorang yang saya temukan sangat kreatif.

, jadi saya ingin tahu jawaban tersingkat berdasarkan bahasa.

Memperbarui:

Angka 0nol di depan tidak dapat diterima. Maaf, saya harus menjelaskan sebelumnya.

Pembaruan 2:

Juga dapat diterima fungsi yang mengembalikan string.


1
dapatkah ada trailing space?
dzaima

1
@zaza: ya. :)
sergiol

1
Apakah nol di depan dapat diterima (seperti 000,01dll.)?
Jonathan Allan

8
Jawaban yang diterima adalah jawaban yang memenangkan tantangan. Anda bisa menerima jawaban terpendek atau tidak menjawab sama sekali, tetapi bukan jawaban sewenang-wenang.
Dennis

2
@KevinCruijssen: Lihat jawaban Dennis untuk referensi: codegolf.stackexchange.com/a/141484/29325
sergiol

Jawaban:




7

Python 2 , 72 byte

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

Cobalah online!

Ekspresi 5>>~x%3memetakan bilangan bulat non-negatif 1, 2, 5, 1, 2, 5...

Ia bekerja karena 5, 2, 1adalah berturut kanan bitshifts dari 5( 0b1010b100b1); kami berputar melalui mereka mundur.


6

Arang , 36 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

   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

SOGLOnline offline, 27 26 25 24 23 22 21 byte

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

Coba Di Sini!

Tautan online tidak menunjukkan angka nol di belakangnya, tetapi versi luring melakukannya karena Javas BigDecimals bagus.

Penjelasan:

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

UNTUK dijalankan di penerjemah offline, unduh SOGLOnlines repositori , buka kompiler / interpreter, buka .pdefile apa saja dengan Memproses , lalu lakukan file -> ekspor untuk OS Anda (jika tidak, Anda tidak dapat memberikan argumen ke program Pemrosesan: /), dan kemudian jalankan program yang dikompilasi dengan argumen ke jalur file dengan kode. Kemudian, stdout akan memuat ini .

2L¼2¹5∙īυ;{⁴Ζ.,ŗP*untuk 18 byte hampir berfungsi tetapi jumlah nol tumbuh, menghasilkan 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(baris diganti dengan spasi)


2
Format output salah: "Anda juga harus meletakkan trailing ,00pada nilai integer." (Saya membayangkan ini juga dimaksudkan untuk menyertakan jejak di ,0mana sesuai)
Jonathan Allan

Anda harus memperbaiki posting Anda sesuai dengan pengamatan @JonathanAllan. JonathanAllan, terima kasih
sergiol

@ JonathanAllan: Hmmmpf, izinkan saya mengambil komentar Anda dengan sebutir garam. Penulis posting mengatakan: " Tautan online tidak menunjukkan angka nol, tetapi versi luring memang bagus karena Javas BigDecimals bagus. ". Jadi saya tidak punya cara untuk memeriksa apakah skrip berperilaku baik atau tidak pada versi offline.
sergiol

@sergiol Ah, saya merindukan teks itu. Saya ingin tahu mengapa penerjemah online diterapkan secara berbeda dalam hal ini - dzaima ...?
Jonathan Allan

Saya percaya interpreter online ditulis dalam JavaScript sedangkan yang offline ditulis dalam Processing. Juga solusi tidak harus dapat diuji secara online. : P
totallyhuman

6

Java 8, 109 108 81 80 byte

Terima kasih kepada @ OlivierGrégoire untuk ide Lokal

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

Cobalah online!


Anda dapat menyimpan byte dengan beralih ke parameter yang tidak digunakan (meta post ini) : Cobalah online
Justin Mariner


2
81 byte . Bekerja pada sistem saya karena lokal default saya adalah be_FR. "Bekerja di sistem saya" sudah cukup baik. Saya tidak dapat menemukan meta-post yang ditautkan dengan ini, tetapi Anda dapat menggunakannya. Untuk mensimulasikannya, miliki saja Locale.setDefault(Locale.FRENCH);di bagian TIO yang tidak bersaing.
Olivier Grégoire

1
@ OlivierGrégoire Ini adalah meta-post yang relevan , dan Anda memang benar bahwa itu diperbolehkan. Saya bahkan meminta OP untuk memverifikasi, dan dia menghubungkan saya dengan jawaban Dennis dengan tautan ke pos meta ini.
Kevin Cruijssen

1
80 byte: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 byte

Program lengkap. Output ke ruang-dipisahkan ke STDOUT.

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

Cobalah online!

2 2.5 2 Daftar;
[2,2.5,2]

14⍴ siklis r eshape dengan panjang 14;
[2,2.5,2,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5]

.01 prepend 0,01;
[0.01,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5,2,2,2.5]

×\ perkalian kumulatif;
[0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50,100,200,500]

2⍕ format dengan dua desimal;
" 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"

 hasilkan itu (untuk memisahkan ','dari 2)

'\.'⎕R',' PCRE R eplace period dengan koma;
" 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 byte

terinspirasi oleh @Giuseppe:

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

Coba di sini!

Tidak disatukan

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

Saya hanya bisa mengelola 56 menggunakan metode yang sama, hanya dengan t (luar ()) daripada rep (). Tidak yakin apakah kami diizinkan untuk menjalankan spasi putih, itu akan membutuhkan biaya 4 byte untuk diperbaiki.
CriminallyVulgar


3

JavaScript (ES6), 83 byte

Mengembalikan array.

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

Demo


Versi rekursif (ES7), 84 byte

Mengembalikan string dengan spasi tambahan.

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

Demo


3

Python 2 , 80 77 75 73 byte

-2 byte terima kasih kepada @ Mr.Xcoder
-1 byte terima kasih kepada @EriktheOutgolfer
-2 byte terima kasih kepada @totallyhuman
-2 byte terima kasih kepada @Lynn

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

Cobalah online!


@EriktheOutgolfer lupa untuk menghapus spasi
Tn. Xcoder

Saya lupa menentukan jenis pemisah antara nilai yang dapat diterima. Jangan khawatir, baris baru dapat diterima.
sergiol

2

Retina , 42 byte


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

Cobalah online! Penjelasan: Ada lima belas nilai, dengan 1, 2 dan 5 di masing-masing dari lima tempat. Tahap pertama memasukkan lima 0s. Tahap kedua mengulangi mereka menjadi kotak, kemudian mengubah trailing diagonal menjadi 1s, lalu menduplikasi garis-garis itu tiga kali dengan 2 dan 5. Tahap ketiga memasukkan koma dan tahap terakhir menghilangkan nol di depan yang tidak perlu.



1

Bash , 88 byte

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

Cobalah online!


3
Setelah semua kerja keras itu, 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,00adalah panjang yang sama :(
Digital Trauma

@DigitalTrauma Tapi itu tidak menyenangkan: P
Justin Mariner

1

JavaScript (ES6), 81 byte

Mengembalikan array.

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

Demo



1

Gangguan Umum, 95 byte

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

Cobalah online!


1

Sekam , 28 byte

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

Cobalah online!

Hanya manipulasi string, karena Husk mengerikan dalam memformat angka floating point.

Penjelasan

ṁ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 byte

-18 byte berkat 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);}

Versi hardcoded, oleh Lynn, 116 byte

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

Anda harus menyertakan beberapa contoh online untuk orang-orang yang melihatnya berjalan. Saya sudah melakukannya untuk Anda: tio.run/…
sergiol

Tidak perlu untuk vdan 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);}- hanya 120 byte
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");}adalah 116 byte.
Lynn

1

R , 70 61 byte

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

Cobalah online!

-9 byte berkat Rui Barradas

Dikalahkan oleh AndriusZ


Saya pikir tidak ada € 1000, € 2000 dan € 5000
AndriusZ

Anda dapat menyimpan 5 byte dengan menghapusprint
AndriusZ

dengan mencampurkan jawaban Anda dan saya, kami dapat mencapai 50 byte -format(c(1,2,5)*10^rep(-2:2,e=3),ns=2,de=",",sc=9)
AndriusZ

@ AndriusZ Saya pikir Anda masih membutuhkan printjawaban itu, tetapi Anda harus mempostingnya sendiri; Saya hanya menggunakan metode paling barbar untuk mengubah pengaturan, menggunakan formatdiperlukan beberapa pemikiran yang sebenarnya.
Giuseppe

1
Anda dapat menyimpan 8 byte dengan menggabungkan keduanya optionsmenjadi satu. options(OutDec=",",scipen=5).
Rui Barradas


1

05AB1E , 25 byte

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

Mengembalikan daftar string.

Cobalah online.

Penjelasan:

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иbisa •}•15∍(tekan terkompresi 125; perbesar ke ukuran 15 125125125125125:) dan '.',:bisa „.,`:(tekan string ".,", pop dan dorong karakter sebagai item yang terpisah ke tumpukan) untuk byte-count yang sama: Coba online.
Juga, N3÷°*т/dapat disingkat menjadi N3÷Í°*(di mana Ímengurangi 2), tetapi sayangnya kita membutuhkan /sehingga semua angka menjadi desimal, sedangkan dengan N3÷Í°*sebagian besar angka akan tetap bilangan bulat.


1

T-SQL, 104 byte

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

Jeda baris hanya untuk keterbacaan.

Mengganggu lebih lama dari PRINTversi sepele (90 byte):

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'

Anda dapat menambahkan ke jawaban Anda demo online: rextester.com/IBKO53221
sergiol

Dan hapus baris baru agar lebih golf: rextester.com/ZANC22480
sergiol

0

Bubblegum , 41 byte

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

Cobalah online!


0

Retina , 58 byte


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

Cobalah online!


1
Saya memeriksa ulang dengan pertanyaan ke OP - nol terkemuka tidak dapat diterima :(
Jonathan Allan

Anda harus memperbaiki posting Anda sesuai dengan pengamatan @JonathanAllan. JonathanAllan, terima kasih
sergiol

@sergiol memperbaikinya
ovs



0

JavaScript - 96 byte

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

Dan inilah pendekatan fungsional yang sedikit lebih panjang (98 karakter):

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


0

Tcl , 80 byte

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

Cobalah online!

Tcl , 90 byte

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

Cobalah online!

Masih sangat lama, bermain golf lebih lambat!





gunakan timeuntuk beralih daripada lmapmembuat lebih banyak byte:set d -3;time {incr d;lmap c {1 2 5} {puts [regsub \\. [format %.2f $c\e$d] ,]}} 5
sergiol
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.