Bazı fiyatları ayarlama zamanı!


19

Eminim 10 $ kullanmak yerine 9.99 $ fiyat şemasını biliyorsunuzdur. Büyük bir perakende mağazasında sys yöneticisi olarak yeni işinizde, fiyatların benzer bir şemaya uymasını istiyorlar:

  • Tüm fiyatlar tam dolar, sent yok.
  • Tüm fiyatlar 5 veya 9 ile bitmeli, en yakın sayıya yuvarlanmalı ancak son basamak 5 ile 9 arasındaysa yukarı doğru olmalıdır. (Son basamak 2 ve 7 için geçerlidir)
  • En düşük girdi 1 $ ve en düşük çıktı fiyatı 5 $ olmalıdır.

Girişiniz tamsayıların bir listesidir:

12
8
41
27
144
99
3

Ve çıktı yeni fiyatların bir listesini olmalıdır. Yukarıdaki durumda:

15
9
39
29
145
99
5

Girişi tek tek alabilir miyiz? Yoksa bir satırsonu dışında bir şeyle mi ayrıldınız?
mınxomaτ

Basitlik için, belirtilen formatın en iyi olduğunu düşünüyorum, böylece formatlamayı da kullanmak yerine asıl sorunu çözmeye odaklanabilirsiniz. Ancak elbette bir satırda tek bir tamsayıya izin verilir. :)
ciscoheat

1
Evet, dile özgü bir listenin işlenmesi muhtemelen daha kolaydır. Ancak özellikleri ne kadar süreyle değiştirebilirim? Bu kod golf bir şey göndermek için tereddüt nedenlerinden biridir.
ciscoheat

2
Newline artık sadece bir liste belirterek bir gereklilik olarak bırakılmıştır. Umarım işleri daha iyi yapar, daha da kötüsü değil ...!
ciscoheat

6
"Ama özellikleri ne kadar değiştirmeye devam edebilirim? Bu kod golf bir şey göndermek için tereddüt nedenlerinden biridir." Farkında değilseniz , sandbox'ta meydan okuma fikirlerini , meydan okuma başlamadan önce topluluk geri bildirimi alabileceğiniz şekilde yayınlayabilirsiniz, böylece bu tür şeyler (umarım) değişiklikler mevcut yanıtları geçersiz kılmadan önce işaret edebilir ve düzeltebilir.
Martin Ender

Yanıtlar:


13

Brainfuck, 4428 bayt (geçersiz)

Algoritmanın çalıştığını anladıktan sonra ilgimi kaybettim ve giriş işleyiciyi bitirmedim. Bu yüzden bu çözüm teknik olarak sorunu çözüyor, ancak kullanımı çok zor. Programı etkileşimli bir tercümanda başlattığınızda (daha hızlı daha iyidir), "numaranızı" girebilirsiniz. Tercümanınız sayı dönüştürmeyi desteklemiyorsa (benimki desteklemiyorsa) Base256'ya girilmelidir. Bu nedenle girebileceğiniz maksimum fiyat 255'tir.

Sonrasında sayı hariç tüm rakamları bölmek için sayı 9'dan büyükse döngüsel bir modülo gerçekleştirir. Son basamak 5 veya 9'a yuvarlanırken bölme sonuçları kaydedilir. Sonra eklenir ve yazdırılır. Daha sonra program, kullanılmış tüm kayıtları temizler (aşırı doldurma) ve bir sonraki numarayı ister.

Tüm özel durumları (kolları $1, $20/$21 -> $19vs.). 4Buradaki sayı için çalıştığını izleyin (yaklaşık 3 dakika, video kısaltıldı):

video demo

kod

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

Hırs için oy alacaksın, keşke birden fazla verebilsem. :)
ciscoheat

8
GIF'in epilepsi uyarısına ihtiyacı olduğunu düşünüyorum.
Alex A.

12

CJam, 19 17 bayt

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

Burada test edin.

Bir CJam stil listesi olarak girdi alır ve çıkış satırsonunu ayrılmış olarak döndürür.

açıklama

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]

Yuvarlanmış değerlerin sırasına bakarsak, bunların 5 blok halinde geldiğini görürüz.

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

Hangi sayı bloğunda olduğumuzu buluyoruz (n+3)/5(bu değeri çağırın J). Sonra, sağ katını almak 5ile J*5ve benzeri şeyleri ayarlamak 30için aşağı 29çıkarılarak 1her Jbile olduğunu.

Özel durum yerine 1vermek 5yerine -1, sonucu aktarıyoruz max(5,_).


Pyth sürümünü düzeltmek için yapabileceğinizi düşünüyorummeS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman

2
veya 2 bayt daha kısa:m-|*K5hJ/-d2K6%J2Q
Jakube

1
@Jakube Zekice, nasıl gönderiyorsunuz?
xnor

Tamam yapacağım. Ancak Python cevabınız için fikri alabilirsiniz. Bir bayt kaydeder:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube

8

Retina, 32 bayt

Virgülle ayrılmış bir listede girişi kabul eder. Sonunda virgül olmalı. Aynı formattaki çıktılar.

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

Açıklama:

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 bayt

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

Bunu geliştirmek için yer olmalı, ancak farklı bir stratejinin daha iyi olabileceğini düşünüyorum. Taramadan bir tamsayılar vektörü alır ve bir tamsayılar vektörü çıkarır. Temelde bu sayı aşağı yuvarlamak için tamsayı bölme kullanır, 1 ekler ve beş ile çarpar. 10'a bölünebilen her şey 1 aldı. N = 1 ise, tamsayı bölünmesini 1 arttırır.

Test sürüşü

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

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

11'in altındaki değerlerde kısalık ve 1'in 5'i değerlendirme gereksinimi için mücadele ettim.


Programınız tek bir tamsayı alıyor mu?
daniero

@daniero doğru, listeyi kabul etmek için şimdi düzeltildi.
Todd

4

Pyth, 21 18 29 28 bayt

3 byte'ı kesmek için @ Jakube'a teşekkürler!

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

Burada deneyin.

EDIT: Görünüşe göre geçersizdi. 11 baytlık bir maliyetle düzelttim; Daha fazla golf yapmaya çalışacağım.


eQaynı şey %Q10, aynı zamanda atama satır içi:I<KeQ6+-QK5;E+-QK9
Jakube

Harika, bunu bilmiyordum!
RK.

Sorun değil. Yine de yaklaşımınız yanlış. Sen yuvarlanacak gereken 9son basamak ise, 0ya1
Jakube

Ah, üzerinde çalışacağım.
RK.

4

Pyth, 21 bayt

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

Ne yazık ki 1 $ doğru işlemek için 4 bayt harcamak zorunda.


Oldukça zeki. 1Ancak sadece 2 bayt ile başa çıkabilirsiniz . mt|t+d@jC"²a<"6ed6Q
Jakube

4

Pyth, 18 bayt

m-|*K5hJ/-d2K6%J2Q

Çevrimiçi deneyin: Gösteri veya Test Paketi

Bu cevap @ xor'un Python / Pyth çözümüne dayanmaktadır. Temel fark, özel durumu 1farklı ele almam . Bunun için asıl sonuç 1olurdu 0 - 1 = -1. Python kullanarak var orben yerine 0bir ile 6sonuçlanan 6 - 1 = 5. Bu, maksimum 5ve sonucu alma acısını azaltır .

Açıklama:

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 Bayt

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

Genişletin ve genişletilmiş çevrimiçi görün: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4


Bağlantının kopması için üzgünüz, bazı veritabanı çalışmaları yapıyorduk. Şimdi çalışıyor.
Jacob Misirian

Kod golf etiketi wiki'de belirtildiği gibi , cevaplar tam programlar veya işlevler olmalıdır. Soru açıkça aksini söylemedikçe, girdiyi yalnızca kodlayan snippet'lere izin verilmez.
Dennis

3

TI-BASIC, 19 bayt

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

Xnor'un algoritmasını kullanır. TI-BASIC, vektörleştirme ve çarpma işlemlerini ücretsiz olarak alır, ancak modülo olmadığı için birkaç bayt daha harcarız.


1

Haskell, 114 bayt

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)

Açıklama:

İşlev if veya else if veya else gdöndürür . son basamağı verilir ve giriş numarasına eklenmesi gerekeni döndürür. çözümü elde etmek için kullanır (artı çok sayıda dize manipülasyonu). her girdi satırı için sonucu çıktılar .9-nn>65-nn>1-n-1gfgmainf


1

Yakut, 55 50 + 1 bayt

İle çalıştırın nşöyle, bayrak: ruby -n prices.rb. Her fiyatı ayrı bir satıra girin.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.