Doğum günün kutlu olsun, biraz pasta alalım!


12

Yakında arkadaşımın doğum günü ve programcı ve ASCII sanat aşığı olduğu için ona ASCII pastası yapacağımı sanıyordum!

Ne yazık ki, şu anki yaşını unutmaya devam ediyorum, bu yüzden ASCII fırınım için belirli sayıda mum içeren bir pasta pişiren bir programım olmasını istiyorum, bu yüzden onunla yanılıyorsam tekrar kendim yapmak zorunda değilim yaş.

ASCII fırınlar sadece sınırlı bellek ve depolama kapasitesine sahiptir, bu nedenle mümkün olan en az baytı kullanmalıdır .


Senin görevin:

Konsola doğum günü pastası veren, girdinin belirttiği kadar mum içeren bir program yazın.

Kek gereksinimleri:

  • Yatay -ve dikey |çizgilerden ve köşelerden oluşan bir kenarlığı olmalıdır +.
  • En az 5 karakter genişliğinde (pasta kenarlığı dahil |)
  • En az 5 karakter yüksekliğinde (pasta kenarlığı dahil -)
  • Bir boşluk karakteri olmalı bu alanda bir alev ise kek sınır ve birinci mum baz (alevinden) arasında, her bir tarafında, hariç. Bir alev veya mum bazı kek kenarlarının üzerine gelmemelidir.
  • Pastanın maksimum genişliği 9 karakterdir, bu nedenle sıra başına maksimum 5 mum vardır.
  • Pastanızın 2 boyutlu olmasını istemediğimizden, biraz hacim vermek için ekstra 2 satır yüksekliğinde olması gerekir. Altta başka bir kenarlık ekleyin ve yine üstteki ASCII karakterlerini ( -, |ve +) kullanarak köşeleri üstlerindeki çizgilere bağlayın .

Mum gereksinimleri:

  • Taban |ve alevden oluşur , alev tabanın *üzerine istiflenir.
  • Mumlar, diyagonal olarak hariç, doğrudan birbirine bitişik olmayabilir.
  • Mumlar soldan sağa, sonra yukarıdan aşağıya doğru yerleştirilir, 5 maksimumda bir satırdadır.
    (Not: Bir önceki satırda 5 mum olsaydı, bir sonraki satır muhtemelen 5 tane daha alamaz, çünkü o zaman bitişik olurlar.)

Ek Notlar:

  • Pasta genişliği ilk sıradaki mum sayısına bağlıdır , ancak en az 5 karakter ve en fazla 9 karakter genişliğinde olmalıdır.
  • Mumlar en üst sıradan başlayarak soldan sağa doğru doldurulur. Bir satır doluysa diğeri ilk satırın altındaki satırda başlamalıdır.

Giriş:

İstediğiniz sayıyı (makul) biçimde kabul edebilirsiniz.

Bu meydan okuma için, bu kadar yaşlı birini kabul etmeme rağmen , sayının 0 ile 2 31 (0 dahil değil) arasında olduğunu varsayabilirsiniz .

Çıktı:

Bir dizeyi döndürebilir veya elde edilen pastayı doğrudan çıkış konsoluna yazabilirsiniz.

Kurallar:

  • Standart boşluklar yasaktır.
  • Bu , bayt cinsinden en kısa kod, herhangi bir dilde, kazanır.

Örnekler:

Giriş: 8

+-----------+
| * * * * * |
| |*|*|*| | |
|  | | |    |
|           |
+-----------+
|           |
+-----------+

Giriş: 2

+-----+
| * * |
| | | |
|     |
+-----+
|     |
+-----+

Giriş: 12

+-----------+
| * * * * * |
| |*|*|*|*| |
| *|*|*| |  |
| | | |     |
|           |
+-----------+
|           |
+-----------+

İyi şanslar!


Bir girdi için birden fazla geçerli çözüm olabilir mi?
officialaimm

1
@officialaimm Mum siparişi ve kek boyutlandırması için spesifikasyonlar olduğundan mümkün olmamalıdır.
Ian H.

2
Yararsız gerçek: Doğum gününüzü her yıl yerine her saniyede kutlarsanız, 2 ^ 31 ~ = 68 yaşında. Ancak bu her gün çok fazla kek yapar ve bir süre sonra sıkıcı olabilir.
Arnauld

1
@Arnauld Ama o zaman% 99'u doğum gününüz değil :( ... doğduğunuzu genel olarak kutluyor olmanız dışında
Ian H.

3
@IanH. Diyelim ki başlangıç ​​zaman damganızı kutluyorsunuz. :-)
Arnauld

Yanıtlar:


10

Kömür , 76 71 70 66 46 bayt

NθF=+B⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹↘↘Fθ«↑|*¶¶¿‹⁶﹪⁺ιι⁹«M⁹←↓

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Düzenleme: @ASCII_Only sayesinde 1 bayt kaydedildi. Mumları çizmenin düzgün bir yolunu keşfederek büyük bir 20 bayt kurtardı. Açıklama:

NθF=+B⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹

Ekstra hacim de dahil olmak üzere tüm pastanın boyutunu ve pastanın sadece üstünü çizebilmeleri için hesaplayın. (( == ASCII 61) = ( += ASCII 43) + ekstra hacim için 9 * 2.)

↘↘Fθ«

İmleci 5 mumluk ilk satıra götür. Her mumdan geçirin.

↑|*¶¶

Bir mum yazdırın ve bir sonraki mum için iki karakter sağa hareket edin.

¿‹⁶﹪⁺ιι⁹«

Ancak (sıfır indeksli) 4., 8., 13., 17., 22. vb. Mumlardan (bir satırın sonunda) sonra,

M⁹←↓

imleci sonraki satırdaki ilk muma götür. Bu hem tek hem de çift sıralarda çalışır!


1
Çözümünüz, 6'dan küçük giriş sayısı için (istenmeyen) fazladan bir satır yerleştirir. :)
Ian H.

@IanH. Üzgünüm, bunun bir sebepten dolayı minimum yükseklik olduğunu düşündüm. Bu beni gerçekten 4 bayt kurtardı!
Neil

TIO'da hala yanlış görüntüleniyor: /
Ian H.

1
@IanH. Çevrimiçi deneyin! örneğinize aynı çıktıyı veriyor ...
Neil

1
@ Başlangıçta başlangıçta ihtiyacınız olmadığını hatırlayın : P (btw başka bir golfçü (o kadar da değil) kenar kasa bulduğunuz için teşekkürler)
Sadece ASCII-

3

Jöle , 67 bayt

s9s€5Ẏa;⁶;⁶z⁶Z
ç”|ṙ-ż"ç”*$U⁸RḤ’¤¦Ẏ€j@€“| “|”Zj@€⁾--Z”+®¦€0,1©¦;ṫ¥-Y

Bir sayı alan ve karakterlerin bir listesini veya çıktıyı basan tam bir programı döndüren monadik bir bağlantı.

Çevrimiçi deneyin!

Nasıl?

s9s€5Ẏa;⁶;⁶z⁶Z - Link 1, make some candle parts & topping: number, age; character, part
s9             - split (implicit range(age)) into chunks of 9 (or remainder)
  s€5          - split each chunk of 9 into chunks of 5 (a 5 and a 4 or remainder)
     Ẏ         - tighten (to a list of lists of length 5, 4, 5, 4, ..., remainder)
      a        - logical and with the part character (either | or * here)
       ;⁶      - concatenate a space (we all still want topping when no candles)
         ;⁶    - ...and another (we also want some extra topping below the last row)
           z⁶  - transpose with filler space (fill the top with topping!)
             Z - transpose (put it back around the right way again chef)

ç”|ṙ-ż"ç”*$U⁸RḤ’¤¦Ẏ€j@€“| “|”Zj@€⁾--Z”+®¦€0,1©¦;ṫ¥-Y - Main link: number, age
ç”|                                                  - call last link (1) as a dyad with '|'
   ṙ-                                                - rotate left by -1
          $                                          - last two links as a monad:
       ç”*                                           -   call (1) as a dyad with '*'
      "                                              - zip with the dyadic operation:
     ż                                               -   zip (interleave each)
                 ¦                                   - sparse application:
           U                                         - ...of: upend (reverse each)
                ¤                                    - ...to indexes: nilad+links as a nilad:
            ⁸                                        -   chain's left argument, age
             R                                       -   range
              Ḥ                                      -   double (vectorises)
               ’                                     -   increment
                  Ẏ€                                 - tighten €ach (from '|*' or '*|' pairs)
                       “| “|”                        - literal ["| ", "|"]
                    j@€                              - join (swap arguments) for €ach (add a little extra topping to the left, and add piping to the sides)
                             Z                       - transpose
                                 ⁾--                 - literal "--"
                              j@€                    - join (swap arguments) for €ach (add piping to the top and bottom edges)
                                    Z                - transpose (time to invest in a potters wheel!)
                                              ¦      - sparse application:
                                          0,1        - ...to indexes: [0,1] (both ends)
                                             ©       -   (copy that to the register)
                                         €           - ...of: for each:
                                        ¦            -   sparse application:
                                     ”+              -   ...of: '+' character
                                       ®             -   ...to indexes: recall from register (both ends)
                                                  -  - literal -1
                                                 ¥   - last two links as a dyad
                                                ṫ    -   tail from index (gets last two rows)
                                               ;     -   concatenate (repeats them underneath)
                                                   Y - join with newlines
                                                     - as a full program: implicit print

1
Holy what
sadece ASCII-sadece

@ Sadece ASCII Üzgünüm, 4 baytlık bir tasarruf buldum ...
Neil

@Neil iyi de, Charcoal'ın ASCII sanatında (jöleden daha iyi) iyi olması gerekiyor: P
sadece ASCII-sadece

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.