Yoğun sezon


12

Spor salonumdaki barbelller şöyle:

=========[]-----------------------[]=========

Beş farklı boyutta, 2.5 pound, beş pound, on pound, 25 pound ve 45 poundluk tabakları tutabilirler:

                .
        .   !   |
.   !   |   |   |
|   |   |   |   |
'   !   |   |   |
        '   !   |
                '

Güvenlik için, varsa klipsleri ]veya [tüm plakalarımızın dışına da ekliyoruz . Barın ağırlığı 45 kilo. Her zaman en ağır plakaları merkeze en yakın, hiçbir plaka arasında boşluk bırakmadan koyarız ve her iki tarafa da aynı plakaları koyarız. Ayrıca her zaman mümkün olan en az sayıda plaka kullanıyoruz, örn. Tek bir on kiloluk plaka yerine bir tarafta asla iki beş kiloluk plaka kullanmıyoruz. 215 kilo kaldırmak istersem, barım şöyle görünür:

        .                           .
      .!|                           |!.
     !|||                           |||!
====]||||[]-----------------------[]||||[====
     !|||                           |||!
      '!|                           |!'
        '                           '

Kodunuz, bir işlev veya tam program, 45 ile 575 arasında, her zaman 5'in katları olarak bir tamsayı almalı ve bu ağırlığa kadar olan çubuğu çıkarmalıdır. Örneğin:

Giriş: 45

Çıktı (boş bir çubukta klip olmadığını unutmayın):

=========[]-----------------------[]=========

Giriş: 100

Çıktı:

        !                           !
       .|                           |.
======]||[]-----------------------[]||[======
       '|                           |'
        !                           !

Giriş: 575

Çıktı:

    .....                           .....
  .!|||||                           |||||!.
 !|||||||                           |||||||!
]||||||||[]-----------------------[]||||||||[
 !|||||||                           |||||||!
  '!|||||                           |||||!'
    '''''                           '''''

Her satırda sondaki boşluklar olabilir veya olmayabilir, ancak çıktınızda önde gelen veya sondaki boş satırlar olamaz (45 için çıktı bir satır olmalıdır, 50 için üç satır olmalıdır, 65 için beş satır olmalıdır vb.)

Bu kod golf, en kısa kod kazanır!


7'li olanlar da dahil olmak üzere her durum için, bir dize Python'lar kullanılarak yazdırılmış gibi bir boş satır yazdırmamıza izin verilir printmi?
PurkkaKoodari

Yanıtlar:


1

Pyth, 126 bayt

K[Z5TyT50 90)jfrT6.e::++J+?qk3\=dsm@bxKdhfqQ+45sTSSM^K8?qk3r"[]23-[]"9*27d_J"=\|""]|""\|=""|["c7s@L". !|='"jC"¾ª±À£¤¯aàI7"6

Kaynak kodu yazdırılamaz karakterler içeriyor, bu yüzden burada bir XXD dökümü var:

0000000: 4b5b 5a35 5479 5435 3020 3930 296a 6672  K[Z5TyT50 90)jfr
0000010: 5436 2e65 3a3a 2b2b 4a2b 3f71 6b33 5c3d  T6.e::++J+?qk3\=
0000020: 6473 6d40 6278 4b64 6866 7151 2b34 3573  dsm@bxKdhfqQ+45s
0000030: 5453 534d 5e4b 383f 716b 3372 225b 5d32  TSSM^K8?qk3r"[]2
0000040: 332d 5b5d 2239 2a32 3764 5f4a 223d 5c7c  3-[]"9*27d_J"=\|
0000050: 2222 5d7c 2222 5c7c 3d22 227c 5b22 6337  ""]|""\|=""|["c7
0000060: 7340 4c22 2e20 217c 3d27 226a 4322 04be  s@L". !|='"jC"..
0000070: aa1f b1c0 a3a4 81af 61e0 4937 2236       ........a.I7"6

Bu kod, gerçek bir kullanım olmadığı noktaya kadar son derece yavaştır . Kodu işlevsel olarak eşdeğer tutarken, arasına bir .{( set) çağrısı ekleyerek yaklaşık 1000 kat hızlandırabilirsiniz . Ortaya çıkan kodun kopyala yapıştır dostu bir sürümü:

K[Z5TyT50 90)jfrT6.e::++J+?qk3\=dsm@bxKdhfqQ+45sTS.{SM^K8?qk3r"[]23-[]"9*27d_J"=\|""]|""\|=""|["c7s@L". !|='"j96235640060099376576144045263159 6

2

Python 2, 295 bayt

i=input()-45
w=90,50,20,10,5;p=".|||||'"," !|||! "," .|||' ","  !|!  ","  .|'  "
a=[' '*46]
b=zip(*a*3+['='*9+'[]'+'-'*24+'[]'+'='*9]+a*3)
v=8
j=0
while i:
 if i>=w[j]:i-=w[j];b[v]=b[-v-1]=p[j];v-=1
 else:j+=1
if v<8:b[v]=b[10];b[-v-1]=b[9]
for l in zip(*b):
 L=''.join(l).rstrip()
 if L:print L

Çubuğu dikey olarak oluşturur, ardından boş olmayan satırları döndürür ve yazdırır.


-v-1bitsel olumsuzlama için birincil adaydır; ~v.
Jonathan Frech

1

Kömür , 65 bayt

¹²[]P×=⁹≔⁻N⁴⁵θWΦ⟦⁵χ²⁰¦⁵⁰¦⁹⁰⟧¬›κθ«P|§⪪”{⊞⧴&β1←Z↶RΣ”,Lι→P[≧⁻⊟ιθ»‖B←

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

¹²[]P×=⁹

12 -sn []ve 9 =sn yazdırın . Bu, çubuğun yarısını içerir. İmleç =s başlangıcında bırakılır .

≔⁻N⁴⁵θ

Çubuğun ağırlığına izin vermek için girişten 45 çıkarın.

WΦ⟦⁵χ²⁰¦⁵⁰¦⁹⁰⟧¬›κθ«

Girişten daha büyük olmayanlar için olası ağırlık çiftlerinin bir listesini filtreleyin ve liste boşken tekrarlayın.

P|§⪪”{⊞⧴&β1←Z↶RΣ”,Lι

Dizgiyi |||.,|.,|!,||.,||!virgülle ayırın ve mümkün olan en ağır ağırlığa karşılık gelen parçayı seçin ve hem yukarı hem de aşağı yazdırın. (Alternatif olarak, sadece yukarı doğru yazdırmak ve ¬sondaki yönde yansıtmak mümkündür ; bir dizi varyasyon aynı uzunluğa sahiptir.)

→P[

Klibi yazdırın (varsa bir sonraki ağırlıkla üzerine yazılır).

≧⁻⊟ιθ»

Ağırlığı girişten çıkarın.

‖B←

Halter tamamlamak için yansıtın.

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.