誕生日おめでとう、ケーキを食べよう!


12

それはすぐに私の友人の誕生日であり、彼はプログラマーでありASCIIアートの愛好家なので、私は彼にASCIIケーキを作ろうと思いました!

悲しいことに、私は彼の現在の年齢を忘れないので、指定した数のキャンドルでケーキを焼くアスキーオーブン用のプログラムが欲しいので、彼と間違っていたらもう一度自分でやる必要はありません年齢。

ASCIIオーブンのメモリとストレージ容量は限られているため、できるだけ少ないバイトを使用する必要があります


あなたのタスク:

誕生日ケーキをコンソールに出力するプログラムを作成します。入力で指定した数のキャンドルを使用します。

ケーキの要件は次のとおりです。

  • 水平線-と垂直|線、および頂点で構成される境界線が必要+です。
  • 少なくとも5文字の幅(ケーキの境界線を含む|
  • 少なくとも5文字の高さ(ケーキの境界線を含む-
  • そのスペースに炎がある場合を除いて、ケーキの境界と最初のキャンドルベース(炎ではなく)の間に、両側に空白文字がなければなりません。炎またはろうそくベースは、ケーキの境界線と重ならないようにする必要があります。
  • ケーキの最大幅は9文字なので、行ごとに最大5つのキャンドルがあります。
  • ケーキを2次元にしたくないので、ある程度のボリュームを持たせるには、2行余分に高くする必要があります。下部に別の境界線を追加し、頂点を上部の頂点に接続します。ここでも、上からのASCII文字(-|および+)を使用します。

キャンドルの要件は次のとおりです。

  • ベース|と炎*で構成され、ベースの上に炎が積み重ねられています。
  • キャンドルは、対角線を除き、互いに直接隣接していない場合があります。
  • ろうそくは、左から右へ、次に上から下へ、最大5行で配置されます。
    (注:前の行に5本のろうそくがあった場合、次の行にも5本のろうそくを置くことはできません。それは、それらが隣接するからです。)

その他の注意事項:

  • ケーキの幅は、最初の行のろうそくの数に依存しますが、最小5文字、最大9文字の幅にする必要があります。
  • ろうそくは、一番上の行から左から右に向かっていっぱいになります。1つの行が一杯になると、次の行は最初の行の下の行から始まります。

入力:

好きな(合理的な)形式の番号を受け入れることができます。

この挑戦のために、あなたはこの数字が0から2 31(0を含まない)の間であると仮定するかもしれません。

出力:

文字列を返すか、結果のケーキを出力コンソールに直接書き込むことができます。

ルール:

  • 標準的な抜け穴は禁止されています。
  • これはであるため、どの言語でもバイト単位の最短コードが優先されます。

例:

入力: 8

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

入力: 2

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

入力: 12

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

幸運を!


入力に対して複数の有効なソリューションがありますか?
officialaimm

1
@officialaimmキャンドルの注文とケーキのサイズの指定があるので、それは不可能であるべきです。
イアンH.

2
役に立たない事実:毎年ではなく毎秒誕生日を祝う場合、2 ^ 31〜= 68歳。しかし、それは毎日たくさんのケーキを作り、しばらくすると退屈になるかもしれません。
アーナルド

1
@Arnauldしかし、その後の時間の99%は、それはあなたの誕生日ではありません:( ...あなたはあなたが生まれたという一般的事実を祝っている場合を除く。
イアンH.

3
@IanH。それでは、開始タイムスタンプを祝っているとしましょう。:-)
アーナウド

回答:


10

76 71 70 66 46バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。編集:@ASCII_Onlyのおかげで1バイト保存されました。ロウソクを描くきちんとした方法を発見することで、20バイトを節約しました。説明:

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

余分なボリュームを含むケーキ全体とケーキの上部だけのサイズを計算して、それらを描画できるようにします。((== ASCII 61)=(+= ASCII 43)+ 9 * 2の追加ボリューム。)

↘↘Fθ«

5本のろうそくの最初の行にカーソルを移動します。各キャンドルをループします。

↑|*¶¶

ろうそくを印刷し、次のろうそくのために右に2文字移動します。

¿‹⁶﹪⁺ιι⁹«

ただし、(ゼロインデックスの)4番目、8番目、13番目、17番目、22番目などのキャンドル(行の最後にある)の後、

M⁹←↓

次の行の最初のキャンドルにカーソルを移動します。これは奇数行と偶数行の両方で機能します!


1
ソリューションでは、6より小さい入力番号に(不要な)余分な行を追加します。:)
イアンH.

@IanH。申し訳ありませんが、何らかの理由でこれが最小の高さだと思いました。それを修正すると、実際に4バイト節約できました!
ニール

それでもTIOで間違って表示されます:/
Ian H.

1
@IanH。オンラインでお試しください!あなたの例と同じ出力が得られます...
ニール

1
@Neil は、開始時に:Pを必要としないことを覚えています(別のゴルファー(そうではない)エッジケースを見つけてくれてありがとう)
ASCIIのみ

3

ゼリー、67 バイト

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

数字を取り、文字のリストを返す単項リンク、または出力を印刷する完全なプログラム。

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

どうやって?

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
聖なるもの炭を打つために+1
ASCIIのみ

@ASCIIのみ申し訳ありませんが、4バイトの節約が見つかりました
ニール

@ニールもそれは良いです、チャコールは結局ASCIIアート(ゼリーよりも良い)に優れているはずです:P
ASCIIのみ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.