생일 축하해, 케이크 좀 먹자!


12

친구의 생일이자 프로그래머이자 ASCII 예술 애호가이므로 ASCII 케이크로 만들 것이라고 생각했습니다!

슬프게도, 나는 그의 현재 나이를 계속 잊어 버렸습니다. 따라서 ASCII 오븐을위한 프로그램을 만들고 싶습니다.이 프로그램은 지정된 양의 촛불로 케이크를 굽습니다. 나이.

ASCII 오븐은 메모리 및 저장 용량이 제한되어 있으므로 가능한 최소 바이트를 사용해야 합니다 .


당신의 작업 :

생일 케이크를 콘솔에 출력하는 프로그램을 입력하십시오.

케이크 요구 사항은 다음과 같습니다

  • 가로 -및 세로 |선과 정점으로 구성된 테두리가 있어야합니다 +.
  • 5 자 너비의 이스트 라스트 (케이크 테두리 포함 |)
  • Atleast 5 자 높이 (케이크 테두리 포함 -)
  • 해당 공간에 불꽃이있는 경우를 제외하고 케이크 테두리와 첫 번째 양초 바닥 (화염 아님) 사이에 공백 문자 가 있어야합니다. 불꽃이나 양초 받침대가 케이크 테두리와 겹치지 않아야합니다.
  • 케이크의 최대 너비는 9 자이므로 행당 최대 5 개의 양초가 있습니다.
  • 우리는 케이크가 2 차원 적이기를 원하지 않기 때문에, 약간의 부피를 주려면 여분의 2 행이어야합니다. 아래쪽에 다른 테두리를 추가하고 위의 ASCII 문자를 사용하여 정점을 그 위에있는 정점과 다시 연결하십시오 ( -, |+).

양초 요구 사항은 다음과 같습니다.

  • 받침대 |와 불꽃 으로 구성 *되며 불꽃이 받침대 위에 쌓입니다.
  • 양초는 대각선을 제외하고 서로 직접 인접하지 않을 수 있습니다.
  • 양초는 왼쪽에서 오른쪽으로 배치 한 다음 위에서 아래로 배치하며 최대 한 줄에 5 개가 배치됩니다.
    (참고 : 이전 행에 5 개의 양초가 있으면 다음 행에 5 개의 양초가있을 수 있으므로 인접 해있을 수 있습니다.)

추가 사항 :

  • 케이크 너비는 첫 번째 행 의 양초 수에 따라 다르지만 최소 5 자, 최대 9 자 여야합니다.
  • 양초는 맨 위 줄부터 왼쪽에서 오른쪽으로 채워집니다. 한 행이 가득 찬 경우 다음 행은 첫 번째 행 아래의 행에서 시작해야합니다.

입력:

원하는 (합리적인) 형식의 숫자를 사용할 수 있습니다.

이 도전 에 대해이 나이를 가진 사람을 인정하지 않더라도 숫자는 0과 2 31 사이에 있다고 가정 할 수 있습니다 (0 제외).

산출:

문자열을 반환하거나 결과 케이크를 출력 콘솔에 직접 쓸 수 있습니다.

규칙 :

  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 언어에서 바이트 단위의 가장 짧은 코드가 승리합니다.

예 :

입력: 8

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

입력: 2

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

입력: 12

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

행운을 빕니다!


입력에 대해 여러 가지 유효한 솔루션이있을 수 있습니까?
officialaimm

1
@officialaimm 양초 주문 및 케이크 크기 지정에 대한 사양이 있으므로 불가능합니다.
Ian H.

2
쓸모없는 사실 : 당신이 매년 대신 생일을 1 초마다 축하한다면, 2 ^ 31 ~ = 68 세. 그러나 그것은 매일 많은 케이크를 만들고 얼마 후에 지루해질 수 있습니다.
Arnauld

1
@Arnauld 그런데 당신은 일반적인 사실을 축하하는 경우 당신이 태어난 것을 제외하고는 ... 생일 :( 아니라 시간의 99 %.
이안 H.

3
@IanH. 그러면 시작 타임 스탬프를 축하한다고 가정 해 봅시다. :-)
Arnauld

답변:


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 초의 첫 번째 행으로 이동하십시오. 각 촛불을 반복합니다.

↑|*¶¶

양초를 인쇄하고 다음 양초에 대해 두 문자를 오른쪽으로 이동하십시오.

¿‹⁶﹪⁺ιι⁹«

그러나 4 번째, 8 번째, 13 번째, 17 번째, 22 번째 등 (열의 끝에있는) 초 (0 인덱스) 후에는,

M⁹←↓

커서를 다음 행의 첫 번째 촛불로 이동하십시오. 이것은 홀수 행과 짝수 행 모두에서 작동합니다!


1
솔루션은 6보다 작은 입력 번호에 대해 (원치 않는) 추가 행을 넣습니다. :)
Ian H.

@IanH. 미안, 나는 그것이 어떤 이유로 최소 높이라고 생각했다. 실제로 4 바이트를 절약 한 수정!
Neil

TIO에서 여전히 잘못 표시됨 : /
Ian H.

1
@IanH. 온라인으로 사용해보십시오! 나에게 당신의 예와 동일한 결과를 제공합니다 ...
Neil

1
당신이 필요하지 않은 기억 @Neil P를 (에지 케이스) (- 소위하지 다른 골퍼를 찾는 BTW 감사) : 시작시
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 전용 12

@ASCII 전용 죄송합니다. 4 바이트 절약을 발견했습니다.
Neil

@Neil 잘 잘, 숯은 결국 ASCII 아트 (젤리보다 나은) 잘해야합니다 : P
ASCII 전용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.