Евро монеты и купюры


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
может быть пробел?
Дзайма

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

Попробуйте онлайн .


Отлично сработано! Вы получили галочку!
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отображает неотрицательные целые числа к 1, 2, 5, 1, 2, 5...

Это работает , потому что 5, 2, 1являются последовательными правыми bitshifts из 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 , затем выполните file -> export для вашей ОС (в противном случае вы не можете предоставить аргументы программе 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: Hmmmpf, позвольте мне принять ваш комментарий с долей соли. Автор сообщения говорит: « Онлайн-ссылка не показывает конечные нули, но офлайн-версия делает то, что хорошо для Javas BigDecimals ». Поэтому у меня нет возможности проверить, хорошо ли работает скрипт в автономной версии.
sergiol

@sergiol Ах, я пропустил этот текст. Интересно, почему онлайн-переводчик реализован по-другому в этом отношении - дзайма ...?
Джонатан Аллан

Я полагаю, что онлайн-переводчик написан на 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);}

Попробуйте онлайн!


Вы можете сохранить байт, переключившись на неиспользуемый параметр (мета-пост об этом) : попробуйте онлайн
Джастин Маринер,


2
81 байт . Работает в моей системе, потому что моя локаль по умолчанию be_FR. «Работа в моей системе» достаточно хороша. Я не могу найти метапост, связанный с этим, но вы можете использовать его. Чтобы смоделировать это, просто имейте Locale.setDefault(Locale.FRENCH);в неконкурентной части TIO.
Оливье Грегуар,

1
@ OlivierGrégoire Вот соответствующий мета-пост , и вы действительно правы, что это разрешено. Я даже попросил О.П. проверить, и он связал меня с ответом Денниса со ссылкой на этот мета-пост.
Кевин Круйссен,

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

Требуется соответствующая локаль, которая разрешена по умолчанию и не требует байтов .

Попробуйте онлайн!


Выходные данные не соответствуют возрастанию!
sergiol

Я сломал его, когда перешел с новой строки на пробел, чтобы сохранить байт. Исправлено сейчас.
Деннис

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

Попробуй это здесь!

Ungolfed

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

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

2

Сетчатка , 42 байта


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

Попробуйте онлайн! Пояснение: Есть пятнадцать значений, с 1, 2 и 5 в каждом из пяти мест. Первый этап вставляет пять нулей. Второй этап повторяет их в квадрат, затем меняет конечную диагональ на 1 с, затем дублирует эти строки три раза с 2 и 5. На третьем этапе вставляются запятые, а на последнем этапе удаляются ненужные начальные нули.






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 ++, 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 байт благодаря Руи Баррадасу

Outgolfed от 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
Вы можете сохранить 8 байтов, объединив два optionsв один. options(OutDec=",",scipen=5),
Руи Баррадас


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. Джонатан
Аллан

@sergiol зафиксировал его
овс



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.