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


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

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,14⍴2 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 ","
                   N2›i      #  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.