いくつかの価格を調整する時間です!


19

10ドルを使用する代わりに、9.99ドルの価格体系について知っていると思います。さて、大規模な小売店のシステム管理者としてのあなたの新しい仕事では、彼らは価格が同様のスキームに従うことを望んでいます:

  • 価格はすべてドル単位で、セント単位ではありません。
  • すべての価格は5または9で終了する必要があります。最後の桁が5から9の間にある場合、最も近い値に切り上げます(最後の桁2および7に適用)
  • 最低価格は1ドルで、最低価格は5ドルです。

入力は整数のリストです:

12
8
41
27
144
99
3

出力には、新しい価格のリストが表示されます。上記の場合:

15
9
39
29
145
99
5

入力を1つずつ取得できますか?または、改行以外で区切られていますか?
mınxomaτ

簡単にするために、指定された形式が最適であると思うので、フォーマットを処理する代わりに実際の問題の解決に集中できます。ただし、もちろん1つの行に1つの整数を使用できます。:)
ciscoheat

1
はい、言語固有のリストはおそらく扱いやすいでしょう。しかし、いつまで仕様を変更できますか?これが、私がコードゴルフに何かを投稿するのをためらった理由の1つです。
ciscoheat

2
「リスト」のみを指定して、改行が要件として削除されました。事態が悪化するのではなく、改善されることを願っています...!
ciscoheat

6
「しかし、どのくらい仕様を変更し続けることができますか?これは、コードゴルフに何かを投稿することをheした理由の1つです。」気付いていない場合は、チャレンジのアイデアをサンドボックスに投稿して、チャレンジが公開されるにコミュニティのフィードバックを得ることができます。これにより、変更が既存の回答を無効にする前に、このようなことを指摘して修正することができます。
マーティンエンダー

回答:


13

Brainfuck、4428バイト(無効)

アルゴリズムが機能することがわかったら、興味を失い、入力ハンドラを終了しませんでした。そのため、このソリューションは技術的に問題を解決しますが、使用するのは非常に困難です。対話型インタープリターでプログラムを開始するとき(速いほど良い)、「番号」を入力できます。インタプリタが数値変換をサポートしていない場合(私の場合は)、Base256に入力する必要があります。したがって、入力できる最大価格は255です。

次に、数値が9より大きい場合、最後の桁を除くすべての桁を分割するために、モジュロループを実行します。除算結果は保存され、最後の桁は5または9に丸められます。その後、それらが追加されて印刷されます。次に、プログラムはすべての使用済みレジスターを消去し(おそらく過剰)、次の番号を要求します。

これは、すべての特別なケース(ハンドル$1$20/$21 -> $19など)。4ここで番号の実行を見てください(約3分、ビデオを短縮):

ビデオデモ

コード

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]

あなたが野心に賛成票をもらえるでしょう、私が1つ以上与えることができればいいのに。:)
ciscoheat

8
gifにはてんかんの警告が必要だと思います。
アレックスA.

12

CJam、19 17バイト

q~{2-Ab)4>59s=N}/

ここでテストしてください。

入力をCJamスタイルのリストとして受け取り、改行で区切られた出力を返します。

説明

qN/{   e# Run this block for each line of the input...
  ~    e#   Evaluate the current line to get the integer.
  2-   e#   Subtract 2 to get all but the last digit right.
  Ab)  e#   Convert to base 10 (discarding a potential minus sign) and split off
       e#   the last digit.
  4>   e#   Test if it's greater than 4.
  59s= e#   Select the correct digit from the string "59" based on this result.
  N    e#   Push a line feed.
}/

11

Python 2、47

lambda l:[max(5,(n+3)/5*5-(n-2)/5%2)for n in l]

丸められた値のシーケンスを見ると、5のブロックになっていることがわかります。

... 25, 29, 29, 29, 29, 29, 35, 35, 35, 35, 35, 39, ...

使用している番号ブロックを見つけます(n+3)/5(この値を呼び出しますJ)。次に、5with の適切な倍数を取得し、偶数になるたびに減算することにより、以下のJ*5ように調整します。30291J

特殊なケースで15なく、与える-1ために、結果をに渡しmax(5,_)ます。


Pythバージョンを修正するには、できると思いますmeS,-*hJ/-d2K5K%J2KQ
-FryAmTheEggman

2
または2バイト短い:m-|*K5hJ/-d2K6%J2Q
ジャクベ

1
@ジャクベそれは賢いですね、投稿してみてはいかがですか?
xnor

わかった。しかし、Pythonの答えのアイデアを取ることができます。1バイト節約されますlambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
。–ジャクベ

8

網膜、32バイト

コンマ区切りリストの入力を受け入れます。末尾にコンマが必要です。同じ形式で出力します。

T`d`aa555559`.,
T+`da`ad`\da
a
5

説明:

T`               #Transliteration mode.
  d`aa555559`    #Map the digits 0-9 to aa55555999
             .,  #Map only the trailing digits.
T+`              #Do until input does not change.
   da`ad`        #Map a to 9, 0 to a, and 1-9 to 0-8
         \da     #Only do this to each a and the character before each a.
a                #Match all leftover a's. This only happens when the input contains the integer 1.
5                #Replace them with 5.

5

R、51 49 47 43バイト

(f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)

これを改善する余地があるはずですが、私は別の戦略がより良いかもしれないと考えています。スキャンから整数のベクトルを取得し、整数のベクトルを出力します。基本的に、これは整数の除算を使用して数値を切り捨て、1を加算し、5を乗算します。10で割り切れるものはすべて1を取り去ります。n = 1の場合、整数の除算を1増やします。

試運転

> (f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)
1: 1
2: 12
3: 8
4: 41
5: 27
6: 144
7: 99
8: 3
9: 
Read 8 items
[1]   5  15   9  39  29 145  99   5
> 

5

Python 3、74 82バイト

a=eval(input())
for i in a:print(round(i,-1)+[5,-1][max(4,i-2)%10>4])

11未満の値の簡潔さと、1が5に評価されるための要件に苦労しました。


あなたのプログラムは単一の整数しかとらないようですか?
daniero

@danieroが正しい、リストを受け入れるように修正されました。
トッド

4

Pyth、 21 18 29 28バイト

@Jakubeに3バイトをカットしてくれてありがとう!

KeQJ-QKI<K2tJ.q;I<K6+J5;E+J9

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

編集:どうやらそれは無効でした。11バイトのコストで修正しました。もっとゴルフしてみます。


eQは、と同じものです%Q10。また、割り当てをインライン化することもできますI<KeQ6+-QK5;E+-QK9
。–ジャクベ

クール、私はそれについて知りませんでした!
RK。

問題ない。あなたのアプローチは間違っています。あなたはに切り捨てなければならない9最後の数字がある場合、0または1
Jakube

ああ、私はそれに取り組みます。
RK。

4

Pyth、21バイト

m?tdtt+d@jC"²a<"6ed5Q

残念ながら、$ 1を正しく処理するには4バイトを費やす必要があります。


かなり賢い。1ただし、2バイトのみで処理できます。mt|t+d@jC"²a<"6ed6Q
ジャクベ

4

Pyth、18バイト

m-|*K5hJ/-d2K6%J2Q

オンラインで試す:デモンストレーションまたはテストスイート

この答えは、@ xorのPython / Pythソリューションに基づいています。主な違いは、特殊なケースの処理方法が1異なることです。の実際の結果はに1なります0 - 1 = -1。Pythonを使用して、をにor置き換えて、を作成できます。これにより、最大限の結果を得るための苦痛が軽減されます。066 - 1 = 55

説明:

m-|*K5hJ/-d2K6%J2Q
m                Q   map each number d of the input list Q to:
    K5                  K = 5
       J/-d2K           J = (d - 2) / K
   *K hJ                   K * (J + 1)
  |                     or
             6             6 # if K*(J+1)==0
 -            %J2       minus (J mod 2)

3

Hassium、133バイト

func main(){i=[12,8,41,27,144,99,3];foreach(e in i){f=e%10;if(!(e/10==0))print(e/10);if(f<5)r=5;else if(f>5)r=9;elser=f;println(r);}}

実行して、展開されたオンラインを参照してくださいhttp : //hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4


リンクが壊れてすみません、データベースの作業をしていました。今すぐ動作します。
ジェイコブミシリアン

コードゴルフタグwikiに概説されているように、回答は完全なプログラムまたは機能でなければなりません。質問で特に明記されていない限り、単に入力をハードコードするスニペットは許可されません。
デニス

3

TI-BASIC、19バイト

int(Ans/5+.6
max(5,5Ans-not(fPart(Ans/2

xnorのアルゴリズムを使用します。TI-BASICはベクトル化と乗算を無料で取得しますが、モジュロを持たないため、さらに数バイトを費やします。


1

Haskell、114バイト

g n
 |n>6=9-n
 |n>1=5-n
 |1>0=(-n-1)
f n=show$(read n)+(g$read$(:[])$last n)
main=interact(unlines.(map f).lines)

説明:

関数g9-nif n>6またはelse 5-nif n>1またはelseを返します-n-1g最後の数字が与えられ、入力番号に追加されるべきものを返します。解決策を取得するためにf使用gします(さらに多くの文字列操作)。入力の各行mainの結果を出力しfます。


1

ルビー、 55 50 + 1バイト

次のnようにフラグを付けて実行しますruby -n prices.rb。各価格を別々の行に入力します。

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.