ユーロ硬貨と紙幣


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

回答:




7

Python 2、72バイト

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

オンラインでお試しください!

式は5>>~x%3、非負の整数をマッピングし125125...

ので、それは動作します521の連続した右bitshiftsです50b1010b100b1)。それらを逆方向に循環します。


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リポジトリをダウンロードし、コンパイラー/インタープリターに移動し.pdeProcessingでファイルを開いてから、ファイル-> OSにエクスポートします(そうしないと、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、一粒のコメントをお願いします。投稿者は次のように述べています。「オンラインリンクには末尾のゼロは表示されませんが、オフラインバージョンはJava BigDecimalsがいいので表示されます。そのため、オフラインバージョンでスクリプトが正常に動作するかどうかを確認する方法はありません。
セルジオ

@sergiolああ、私はそのテキストを見逃した。この点でなぜオンライン通訳が異なるように実装されているのだろう-dzaima ...?
ジョナサンアラン

オンラインインタプリタはJavaScriptで記述され、オフラインインタプリタはProcessingで記述されていると思います。また、ソリューションはオンラインでテスト可能である必要はありません。:P
完全に人間の

6

Java 8、109 108 81 80バイト

ロケールのアイデアを提供してくれた@OlivierGrégoireに感謝

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 ここに関連するメタ投稿がありますが、許可されていることは確かです。私もOPに確認を求め、彼はこのメタ投稿へのリンクを使ってDennisの回答にリンクしました。
ケビンCruijssen

1
80バイト: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バイト

完全なプログラム。スペースで区切られてSTDOUTに出力されます。

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

オンラインでお試しください!

2 2.5 2 リスト;
[2,2.5,2]

14⍴ 周期的にrの長さ14にeshapeします。
[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⍕ 小数点以下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)

ここで試してみてください!

非ゴルフ

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

rep()ではなくt(outer())を使用して、同様の方法を使用して56のみを管理できました。ただし、その先頭の空白を許可するかどうかはわかりませんが、修正するには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

パイソン280の 77 75 73バイト

@ Mr.Xcoderのおかげで-2バイト@EriktheOutgolferの
おかげで-1バイト- @ totallyhumanのおかげで-2バイト-@ Lynnの
おかげで
-2バイト

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?

オンラインでお試しください!説明:15の値があり、5つの場所のそれぞれに1、2、および5があります。最初のステージでは、5つの0が挿入されます。2番目のステージはそれらを正方形に繰り返し、後続の対角線を1に変更し、2と5でそれらの行を3回複製します。3番目のステージはコンマを挿入し、最後のステージは不要な先行ゼロを削除します。




1

JavaScript(ES6)、81バイト

配列を返します。

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

デモ




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 ++、138120バイト

MSaltersのおかげで-18バイト

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

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し、fvoid 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

R70 61バイト

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

オンラインでお試しください!

ルイ・バラダスのおかげで-9バイト

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その答えはまだ必要だと思いますが、自分で投稿する必要があります。私は設定を変更するために最も野barな方法を使用しましたが、format必要な実際の考えを使用しています。
ジュゼッペ

1
2つoptionsを1 つに結合することにより、8バイトを節約できます。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)と'.',:することができ„.,`:(プッシュ文字列を「」、ポップ、スタックへの分離のアイテムとして文字を押して)同じバイトカウント用:オンラインそれを試してみてください。
また、(2を引く)にN3÷°*т/短縮することもできますが、残念なことに、すべての数値が小数になりますが、ほとんどの数値では整数のままです。N3÷Í°*Í/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

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



より多くのバイトtimelmapレンダリングする代わりに反復に使用: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.