사각형을 만들어보십시오!


20

태스크

공백이 아닌 인쇄 가능한 문자가 있으면 해당 입력을 3x3 정사각형으로 표현하십시오. 예를 들어 입력이 #인 경우 출력은 다음과 같습니다.

###
# #
###

규칙

  • 후행 줄 바꿈이 허용되지만 출력 형식은 엄격합니다. 중간에 공백이 필요하고 세 줄을 구분하는 두 줄 바꿈 문자가 필요하다는 것을 의미합니다.

테스트 케이스

입력: #

산출:

###
# #
###

입력: A

산출:

AAA
A A
AAA

입력: 0

산출:

000
0 0
000

채점

이것은 입니다. 바이트 단위의 최단 답변이 이깁니다.


2
크기가 고정되어 있기 때문에 일부 최적화가 가능합니다. 연결된 도전 과제에 대한 답변은 여기서 경쟁력이 없을 것입니다. 그래서 나는 그것이 중복이라고 생각하지 않습니다
Luis Mendo

12
나는 단순하고 지루한 도전에 대해 공감 한 사람이었습니다. 나는 보통 새로운 골퍼들이 시작하기에 좋은 곳이기 때문에 쉬운 도전의 팬이지만, 이것은 너무 쉬운 느낌입니다.
Shaggy

32
@Ayoungcoder 도전 과제를 내려야하는 이유는 완벽합니다.
밀 마법사

2
@Shaggy : 난이도는 프로그램 작성이 어렵고 골프를 치는 데 어려움이 있습니다. 이 프로그램은 작성하기 쉽지만 골프를 치기 쉽지는 않습니다.

5
제 생각에 이것은 코드 골프를 막 시작한 사람들에게 좋은 도전입니다. 여러 가지 어려움을 겪는 것이 좋습니다. 어느 한 유형에 과부하가 걸리면 커뮤니티의 일부가 손상 될 수 있습니다. 그래서이 도전이 쓰여져 기쁘다.
isaacg

답변:


30

, 5 3 바이트

B³S

온라인으로 사용해보십시오! 편집 : @carusocomputing 덕분에 40 % 절약되었습니다. 설명:

B   Draw a box
³   3×3 (second dimension is implicit if omitted)
S   Using the input character

3
이게 속이는 것 같아요 ...> _>
HyperNeutrino

14
물론 B³S살아있는 쓰레기를 속이는 것입니다.
Magic Octopus Urn

1
왜이게 속임수일까요? @carusocomputing과 그의 대답은 나에게 옳은 것 같습니다
Luc H

1
"리터럴 부정 행위"가 아닌 "저렴한 것"에서와 같이 @Ayoungcoder "속임수"; 이 코드에는 "문자 s를 사용하여 차원 n의 상자 인쇄"에 대한 기본 제공 기능이 있으며이 문제에 대한 가장 짧은 코드는 다음과 같습니다. 1. 입력을 읽습니다. 2. 차원을 정의하십시오. 3. 프린트 박스. 이 챌린지에 대한 대답은 논리적으로 입력이 암시 적이라면 2 바이트 미만이되지 않습니다.
Magic Octopus Urn

2
@carusocomputing 아, 아이러니-내재 된 사각형 행동 은 유클리드 알고리즘을 다시 시각화하는 나의 대답에서 나를 괴롭혔다 .
Neil


19

파이썬 2 , 32 바이트

lambda s:s+s.join(s+'\n \n'+s)+s

온라인으로 사용해보십시오!
의 경우 s='a': 중간이 s+'\n \n'+s발생 a\n \na하고 s.join그것을 회전 (굵은 s는 것들 때문에, 추가) 반복 가능 등의 문자열을 받아, 다음은 두없는 문자로 둘러싸여aa\na a\naaa.join.join


중간 줄에 문자를 어떻게 추가합니까? 대답을 설명해 주시겠습니까?
Notts90

1
@ Notts90가 설명을 추가했습니다 c :
Rod

고마워요 .join이 문자열을 반복 할 수 있다는 것을 몰랐습니다.
Notts90

이것은 Python 3에서도 작동합니다. 아주 멋진 BTW. (또한 같은 방법을 사용하여 3*c+c.join('\n \n')+3*c32에 연결합니다.)
Jonathan Allan

15

MATL , 5 바이트

3Y6*c

온라인으로 사용해보십시오!

설명

3Y6   % Push predefined literal: [true true true; true false true; true true true]
*     % Implicitly input a character. Multiply element-wise by its code point
c     % Convert to char. Implicitly display. Char 0 is displayed as space

1
그것은 빠르다! 5 바이트가 그렇게 빨리 올 것으로 기대하지 않았습니다.
Luc H

2
코드 골프 언어, 알다시피 ... ¯ \ _ (ツ) _ / ¯
Luis Mendo

11
물론, 왜 당신은 [true true true; 참 거짓 참; true true true]
PunPun1000

11
@ PunPun1000의 실제로 표준의로 (함께 회선에) 많이 사용되는 8 연결 마스크 ( 무어 neighboorhood )
루이스 Mendo

3
@LuisMendo 대단합니다. 코드 골프에 관한 것이 아니라 매일 여기에서 새로운 것을 배우십시오
PunPun1000

13

05AB1E , 8 바이트

4×ð«û3ô»

온라인으로 사용해보십시오!

INPUT    # ['R']                 | Implicit Input: 'R'
---------#-----------------------+-------------------------------
4×       # ['RRRR']              | Repeat string 4 times.     
  ð      # ['RRRR',' ']          | Push space onto top of stack.
   «     # ['RRRR ']             | Concatenate last 2 items.
    û    # ['RRRR RRRR']         | Palindromize.
     3ô  # [['RRR','R R','RRR']] | Split into 3 pieces.
       » # ['RRR\nR R\nRRR']     | Join with newlines
---------#-----------------------+-------------------------------
OUTPUT   # RRR                   | Implicitly print the top
         # R R                   | of the stack on exit.
         # RRR                   |

30을 이진수로 사용하는 독창적 인 아이디어 (미완성, 다른 사람은 다른 언어로 시도) :

05AB1E , 12 바이트

30bûTIð«‡3ô»

온라인으로 사용해보십시오!



11

파이썬 3.6 , 33 바이트

lambda c:f'{3*c}\n{c} {c}\n{3*c}'

온라인으로 사용해보십시오!


문제 없어. 실제로 3.6.1이 실행중인 것 같습니다. 시도한 import sys다음 sys.versionrepl에서 3.5.2가 아닌 3.6.1을 반환합니다. 왜 상단에 3.5.2가 표시되는지 전혀 모릅니다. 실제로 실수를 한 것 같습니다!
numbermaniac

2
오, 하하, "당신이 읽은 것을 항상 믿지 마세요"의 사례-감사합니다!
Jonathan Allan

9

RPL (Reverse Polish Lisp) , 60 자

→STR 1 4 START DUP NEXT " " + SWAP + 4 ROLLD + + SWAP 2 PICK

"→"는 HP48 및 호환 계산기에서 단일 문자입니다.

스택에 세 개의 항목을 두어 원하는 것을 시각적으로 나타냅니다.

3.: "###"
2.: "# #"
1.: "###"

문자열을 하나의 문자열로 반환해야한다고 주장하면 줄 바꿈 문자를 추가하고 문자열을 결합해야합니다. 다음 테스터에게는 연습으로 남겨 둡니다.

입력 (무엇이든 될 수 있으며 문자열 일 필요는 없습니다) 입력 된 코드 결과

설명:

  • →STR: 스택의 마지막 개체를 문자열로 만듭니다. (따라서 입력은 숫자와 같은 것이 될 수 있습니다.)
  • 1 4: 수를 밀어 14스택에.
  • START [...] NEXT: for 루프와 비슷하지만 카운터 변수에 액세스 할 수 없습니다. 스택에서 두 개의 숫자를 가져 1오고 (여기서 푸시 하고 4) 코드 [...]를 해당 시간 (여기서는 네 번) 실행합니다.
  • DUP: 스택의 마지막 항목을 복제합니다.
  • " ": 문자열 (예 : 공백이있는 문자열)을 스택으로 밉니다 .
  • +: 문자열에서 스택에서 두 개의 객체를 가져와 함께 추가하여 반환합니다.
  • 4: 숫자 4를 스택으로 밉니다 .
  • ROLLD: 4스택에서 마지막 요소 (여기서 방금 푸시 한 요소)를 가져 와서 스택에서 가져온 숫자가 지정한대로 스택 아래로 다음 요소를 롤링합니다.
  • SWAP: 마지막 두 스택 요소를 교체합니다.
  • 2: 2스택으로 밉니다 .
  • PICK: 요소 (여기서 2방금 스택으로 푸시 한 요소 )를 가져 와서 숫자 n으로 해석하고 스택에서 n 번째 요소를 복사합니다.

7

자바 스크립트, 28 바이트

c=>c+c+c+`
${c} ${c}
`+c+c+c

시도 해봐

f=
c=>c+c+c+`
${c} ${c}
`+c+c+c
o.innerText=f(i.value="#")
i.oninput=_=>o.innerText=f(i.value)
<input id=i maxlength=1><pre id=o>


c+'\n'+c임시 결과를 저장하여 바이트를 저장할 수 있다고 생각합니다 .
Neil

걱정하지 마십시오. 잘못 계산되었지만 여전히 28 바이트입니다.
Neil

@Neil : 예, 변수에 변수를 할당하는 몇 가지 옵션이 있지만 모두 28 바이트 이상으로 제공됩니다.
Shaggy

6

젤리 , 8 바이트

Outgolfer 에릭 덕분에 1 바이트.

x4,`Ks3Y

온라인으로 사용해보십시오!


나는 이것을하는 방법을 궁금해했다 ... 나는 x4µ©;⁶;®œs3Y반복이 내 전체 중간 단계를 곱하지 않도록하는 방법을 알 수 없었기 때문에 12 바이트를 가지고 있었지만 멋졌다!
HyperNeutrino

1
알다시피 내장 K기능이 j⁶있습니다. 아, 그리고 `양쪽에 동일한 인수를 사용하여 dyad를 모나드로 변환 하는 빠른 방법이 있습니다.
아웃 골퍼 Erik 14

5

자바 7, 56 55 바이트

-1 내가 놓친 공간을 지적한 Leaky Nun에게 감사합니다.

String a(char s){return"...\n. .\n...".replace('.',s);}

입력 #에 대해 마침표를 주어진 문자로 간단히 대체하십시오.

...       ###
. .  =>   # #
...       ###

온라인으로 사용해보십시오!



5

sed, 28 18 바이트

s:.:&&&\n& &\n&&&:

온라인으로 사용해보십시오!


이 새로운 나던 작업, 예전 편집 한 : 그것은 수행을하지만 당신은 잊었 다음 anwser에
뤽 H

@Ayoungcoder 죄송합니다 :. 최종 붙여 넣기를 잘못 붙여 넣었습니다 . 결정된.
eush77

온라인으로 사용해보십시오 [온라인으로 사용해보십시오!] : tio.run/nexus/sed#@19spWelpqYWk6emACLU1Kz@/0/… "sed – TIO Nexus"
Luc H

@Ayoungcoder 물론입니다. 감사합니다.
eush77


5

Pyth, 7 바이트

jc3.[9d

온라인으로 해보십시오.

설명:

jc3.[9d Expects quoted input.
  3     3
     9  9
      d ' '
        Q (eval'd input) as implicit argument
   .[   Pad B on both sides with C until its length is a multiple of A
 c      Split B to chunks of length A, last chunk may be shorter
j       Join A on newlines

4

Brain-Flak , 61 , 59 바이트

(((((((({})))<([][][]())>)<(([][][]()){})>)<([]()()())>)))

온라인으로 사용해보십시오!

이것은 58 바이트의 코드입니다 +1-cASCII 입력 및 출력을 가능하게 하는 플래그에 대해 바이트입니다 .

설명:

(((
   (
    (
     (

      #Duplicate the input 3 times
      ((({})))

#Push 10 (newline)
<([][][]())>

     #Push the input again
     )

#Push 32 (space)
<(([][][]()){})>

    #Push the input again
    )

#Push 10 (newline)
<([]()()())>)

#Push input 3 times
)))





3

루비 , 27 25 바이트

Level River St 덕분에 2 바이트 절약

->x{[s=x*3,x+" "+x,s]*$/}

온라인으로 사용해보십시오!


이와 같은 답변을 할 때는 바닥 글이 코드로 포함되어 있어야합니다.
Luc H

@Ayoungcoder 이것은 익명의 기능입니다. 변수에 변수 ( f=...)를 할당 한 다음f.call(...)
Cyoce

1
"\n"1 바이트 절약 대신 따옴표 안에 리터럴 개행 문자를 사용할 수 있습니다 . $/기본적으로 개행으로 설정된 특수 변수 인 2 바이트를 절약하는 것이 더 좋습니다 .
Level River St

tr솔루션 보다 1 바이트 작습니다 . 좋은 일
Cyoce

3

Brainfuck, 40 바이트

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

온라인으로 사용해보십시오! 시작 위치의 왼쪽에 액세스 할 수있는 구현이 필요합니다.

또한보십시오 : Graviton의 brainfuck answer 은 다른 접근법을 취하지 만 더 길다.


설명:

Brainfuck은 제한된 명령 세트로 많은 멋진 트릭을 수행 할 수 있습니다. 불행히도,이 답변은 모든 것을 하드 코딩하는 것이 저렴하기 때문에 (바이트 단위로) 저렴하기 때문에 그중 하나를 사용하지 않습니다.

+++++[->++<<++++++>]                         Sets the cells to |5*6|>0<|5*2|
,                   Takes input character into the middle cell | 30|>#<| 10|
...                                Print the top of the square | 30|>#<| 10| ###
>.                                   Print a newline character | 30| # |>10|    \n
<.                               Print another input character | 30|>#<| 10| #
<++.                  Add 30+2 for a space character and print |>32| # | 10|  _
>.                   And just print the 5 remaining characters | 32|>#<| 10|   #
>.                                                             | 32| # |>10|    \n
<...                                                           | 32|>#<| 10| ###

# = 입력 문자, _ = 공백 (ASCII 32), \ n = 줄 바꿈 (ASCII 10)


이 아름다운 상자 (입력 '+')의 결과 :

+++
+ +
+++

3

05AB1E , 7 6 바이트

carusocomputing 덕분에 -1 바이트

ж¹ðJû

설명:

         # Implicit input                  # ['R']
 Ð       # Repeat string three times       # ['R', 'R', 'R']
  ¶      # Push newline character          # ['R', 'R', 'R', '\n']
   ¹     # Push first input                # ['R', 'R', 'R', '\n', 'R']
    ð    # Push space                      # ['R', 'R', 'R', '\n', 'R', ' ']
     J   # Join stack                      # ['RRR\nR ']
      û  # Palindromize ("abc" -> "abcba") # ['RRR\nR R\nRRR']
         # Implicit output                 # []

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


Oooo ... 똑똑하다. 나는 개행에서 어떻게 회각이 작동하는지에 대해 결코 생각하지 않는다.
Magic Octopus Urn

ж¹ðJû6 바이트
Magic Octopus Urn

3

Pyth , 11 바이트

jc++K*z4dK3

온라인으로 사용해보십시오!

설명:

jc++K*z4dK3    expects a single char as input

j              joins on new line
 c        3    chops array into 3 sized pieces
  +            joins +K*z4d and K
   +           joins K*z4 and d
    K          initialize variable K as *z4
     *z4       duplicate the input 4 times
        d      variable initialized to string " "
         K     calls variable K, in this case *z4

PPCG에 오신 것을 환영합니다!
Stephen




2

C #, 50 바이트

a=>Console.Write(a+a+a+"\n"+a+" "+a+"\n"+a+a+a);

테스트 사례 :

var f = new Action<string>(
a=>Console.Write(a+a+a+"\n"+a+" "+a+"\n"+a+a+a);
);
f("#");

당신은 충분히 평가해야 할 ConsoleSystem.Console..
TheLethalCoder

2

Vim, 9 개의 키 입력

입력 문자가 버퍼에 있다고 가정하면 vim은 이것을 간단하게 만듭니다.

x3pY2plr<space>

아마도 여기에는 마법의 vim 명령이있을 것입니다 (항상 일부는있는 것처럼 보입니다). 개선 제안은 환영합니다. V 뒤에 한 번의 키 입력!


나는 이것이 가능한 한 짧다고 확신합니다. 좋은 대답입니다!
DJMcMayhem

2

Z80 또는 8080 어셈블리, 21 바이트 머신 코드

메모리 맵핑 된 I / O 장치를 가정하십시오.

              Z80 8080
3A xx xx ld a, (입력) lda 입력; 입력 문자를 얻을
110 A 20 ld de, 200ah lxi d, 200ah; 공간 및 개행
21 yy yy ld hl, 출력 lxi h, 출력; 출력 주소를 얻다
77 d1 (h1), mov m, a; 출력 문자 * 3
77 ld (hl), mov m, a
77 ld (hl), mov m, a
73 ld (hl), e mov m, e; 줄 바꿈 출력
77 d1 (h1), mov m, a; 출력 문자
72 ld (11), d mov m, d; 출력 공간
77 d1 (h1), mov m, a; 출력 문자
73 ld (hl), e mov m, e; 줄 바꿈 출력
77 d1 (h1), mov m, a; 출력 문자 * 3
77 ld (hl), mov m, a
77 ld (hl), mov m, a
76 정지 정지; 또는 C9 ret

통역이 필요 없습니다!

16 진 덤프 :

0000 : 3A 00 FF 11 0A 20 21 01 FF 77 77 77 73 77 72 77
0010 : 73 77 77 77 76

여기서 입력 주소는 FF00h에 있고 출력 주소는 FF01h에 매핑됩니다. 실제 주소는 실제 하드웨어에 따라 다릅니다. 물론 이것은 I / O가 메모리 매핑 된 것으로 가정합니다. I / O 매핑 된 경우 Z80 및 8080 I / O 명령어는 각각 2 바이트이므로 몇 바이트가 더 필요합니다. 또한 출력 장치가 0Ah를 줄 바꿈으로 해석하고 프로그램에 추가 4 바이트를 추가하는 CR (0Dh)이 필요하지 않다고 가정합니다.


Codegolf.stackexchange에 오신 것을 환영합니다. 통제 할 수있는 모든 것이있는 것 같지만 도움말 센터와 FAQ 목록을 읽으십시오. 좋은 첫 번째 게시물
Rohan Jhunjhunwala

코드의 16 진 덤프를 제공 할 수 있습니까?
CalculatorFeline

16 진수 바이트는 첫 번째 열에 있지만 "순수한"16 진수 덤프를 원한다면 추가했습니다.
Dan Howell

2

J-uby , 22 20 바이트

@Jordan 덕분에 -2 바이트

:tr&"...
. .
..."&?.

설명

String#trRuby의 문자 별 대체 방법입니다. 첫 번째는에 &바인딩 :tr되고 "...\n. .\n..."두 번째는 부분적으로 적용됩니다 '.'. 효과적으로, 이것은->s{"...\n. .\n...".tr('.',s)}


:tr뿐만 아니라 같은 일을 :gsub여기에?
Jordan

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