Монети та купюри в євро


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, прийнятними роздільниками між значеннями є: пробіл, вкладка або новий рядок.

Не буде прийнятої відповіді, якщо я не побачу якусь, яку мені здається дуже творчою.

, тому я хочу знати найкоротшу відповідь мовою.

Оновлення:

Провідні 0нулі неприйнятні. Вибачте, я повинен це дати зрозуміти раніше.

Оновлення 2:

Також прийнятна функція, що повертає рядок.


1
чи може бути простір?
dzaima

1
@dzaima: так. :)
sergiol

1
Чи прийнятні провідні нулі (наприклад, 000,01тощо)?
Джонатан Аллан

8
Прийнята відповідь - це відповідь, яка виграє виклик. Ви можете прийняти найкоротшу відповідь або взагалі немає відповіді, але не довільну.
Денніс

2
@KevinCruijssen: Див. Відповідь Денніса для довідки: codegolf.stackexchange.com/a/141484/29325
sergiol

Відповіді:


27

Чистий Баш, 48

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

Спробуйте в Інтернеті .


Гарно зіграно! Ви отримали галочку!
сергіол

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відображає невід'ємні цілі числа до 1, 2, 5, 1, 2, 5...

Він працює тому 5, що 2, 1є послідовними праворуковими змінами 5( 0b1010b100b1); ми проїжджаємо їх назад.


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

SOGLOnline офлайн, 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 , а потім зробіть файл -> експортуйте для вашої ОС (інакше ви не можете наводити аргументи програмі Processing: /), а потім виконати складену програму з аргументом до шляху файлу з кодом. Тоді 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де це доречно)
Джонатан Аллан

Ви повинні виправити свою посаду відповідно до спостереження @JonathanAllan. JonathanAllan, дякую
sergiol

@JonathanAllan: Hmmmpf, дозвольте мені взяти ваш коментар із зерном солі. Автор публікації каже: " Посилання в Інтернеті не відображає кінцевих нулів, але офлайн-версія робить так, як Javas BigDecimals приємно ". Тому я не маю можливості перевірити, чи добре працює сценарій чи не в автономній версії.
сергіол

@sergiol Ах, я пропустив цей текст. Цікаво, чому в Інтернеті інтерпретатор реалізується по-різному в цьому плані - dzaima ...?
Джонатан Аллан

Я вважаю, що онлайн-перекладач написаний на JavaScript, а офлайн - в Processing. Також рішення не повинні бути перевірені в Інтернеті. : 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);}

Спробуйте в Інтернеті!


Ви можете зберегти байт, перейшовши на невикористаний параметр (мета-повідомлення про це) : Спробуйте в Інтернеті
Джастін Марінер


2
81 байт . Працює в моїй системі, тому що моєю локальною програмою за замовчуванням є be_FR. "Робота над моєю системою" досить хороша. Я не можу знайти мета-пост, пов’язаний із цим, але ви можете використовувати його. Щоб імітувати це, просто увійдіть Locale.setDefault(Locale.FRENCH);у неконкурентну частину TIO.
Олів'є Грегоар

1
@ OlivierGrégoire Ось відповідна мета-публікація , і ви справді маєте рацію, що це дозволено. Я навіть попросив ОП перевірити, і він пов’язав мене з відповіддю Денніса посиланням на цю мета-посаду.
Kevin Cruijssen

1
80 байт:x->{for(double i=.001;i<11;)System.out.printf("%.2f %.2f %.2f ",i*=10,i*2,5*i);}
Невай

5

Баш , 38 байт

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

Потрібна відповідна локаль, яка дозволена за замовчуванням і не коштує байтів .

Спробуйте в Інтернеті!


Вихід не дотримується порядку зростання!
сергіол

Я порушив це, коли перейшов з нових рядків у пробіли, щоб зберегти байт. Виправлено зараз.
Денніс

5

APL (Dyalog) , 30 28 байт

Повна програма. Виводи в розділений пробілом STDOUT.

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

Спробуйте в Інтернеті!

2 2.5 2 список;
[2,2.5,2]

14⍴ циклічно r- форму до довжини 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 заміняють періоди комами;
" 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)

Я міг управляти лише 56, використовуючи аналогічний метод, лише за допомогою t (external ()), а не з rep (). Не впевнений, чи дозволено нам провідне пробіл, але це коштувало б 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 байт

-2 байти завдяки @ Mr.Xcoder
-1 байт завдяки @EriktheOutgolfer
-2 байти завдяки @totallyhuman
-2 байти завдяки @Lynn

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

Спробуйте в Інтернеті!


@EriktheOutgolfer забуває видалити пробіли
містер Xcoder

Я забув вказати, який роздільник між значеннями прийнятний. Не хвилюйтесь, новий рядок прийнятний.
сергіол

2

Сітківка , 42 байти


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

Спробуйте в Інтернеті! Пояснення: Є п'ятнадцять значень, по 1, 2 і 5 у кожному з п’яти місць. Перший етап вставляє п'ять 0. Другий етап повторює їх у квадрат, потім змінює діагоналі, що знаходяться в кінці, на 1s, потім дублює ці рядки три рази з 2 і 5. Третій етап вставляє коми, а останній етап видаляє непотрібні провідні нулі.






1

Лушпиння , 28 байт

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

Спробуйте в Інтернеті!

Просто маніпуляція з рядками, оскільки Хеск жахливий при форматуванні чисел з плаваючою комою.

Пояснення

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

Версія з твердим кодом, Лінн, 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 байт.
Лінн

1

R , 70 61 байт

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

Спробуйте в Інтернеті!

-9 байт завдяки Rui Barradas

Перевершив АндріусZ


Я думаю, що немає 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
Ви можете зберегти 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
Я ще раз перевірив запитання до ОП - провідні нулі неприйнятні :(
Джонатан Аллан

Ви повинні виправити свою посаду відповідно до спостереження @JonathanAllan. JonathanAllan, дякую
sergiol

@sergiol виправив це
1717



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]] ,]}}

Спробуйте в Інтернеті!

Ще дуже довго, граючи в гольф пізніше!


Не вдалося подолати: 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 "
сергіол


використовуючи time ітерації замість lmapвізуалізації більшої кількості байтів:set d -3;time {incr d;lmap c {1 2 5} {puts [regsub \\. [format %.2f $c\e$d] ,]}} 5
sergiol
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.