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


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: 수를 밀어 1및 4스택에.
  • 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("#");

당신은 충분히 평가해야 할 Console예System.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.