正方形を作ってみてください!


20

仕事

空白以外の印刷可能な文字を1つ指定して、その入力の3x3の正方形表現を作成します。たとえば、入力がの場合#、出力は次のとおりです。

###
# #
###

ルール

  • 出力形式は厳密ですが、末尾の改行を使用できます。つまり、中央にスペースが必要であり、3行を区切る2つの改行文字も必要です。

テストケース

入力: #

出力:

###
# #
###

入力: A

出力:

AAA
A A
AAA

入力: 0

出力:

000
0 0
000

得点

これはです。バイト単位の最短回答が優先されます。


2
サイズが固定されているという事実により、ある程度の最適化が可能になります。リンクされた課題からの回答は、おそらくここでは競争力がないでしょう。だから私はそれが重複だとは思わない
ルイス・メンドー

12
私は、単純で退屈な挑戦であるという理由で、ダウン票を投じた人でした。私は通常、簡単なチャレンジのファンです。彼らは新しいゴルファーが始めるには良い場所だからです。
シャギー

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これから生きているがらくたをだますために。
魔法のタコUr

1
なぜこれは不正行為でしょうか?@carusocomputingと彼のanwserのニールは私には正しいようです
リュックH

1
@Ayoungcoderは、「文字通りの不正行為」ではなく、「安そうだ」という「不正行為」です。コードには「文字sを使用して次元nのボックスを印刷する」ためのビルトインがあり、このチャレンジの最短コードは次のとおりです。1.入力を読み取ります。2.ディメンションを定義します。3.印刷ボックス。入力が暗黙的である場合、このチャレンジに対する答えは論理的に2バイト未満にはなりません。
魔法のタコUr

2
@carusocomputingああ、皮肉なことに- ユークリッドアルゴリズムを再び視覚化するという私の答えでは、暗黙の二乗の振る舞いに悩まされました。
ニール


19

Python 2、32バイト

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

オンラインでお試しください!
For s='a':中間文字列がs+'\n \n'+s生成されa\n \nas.joinそれを有効にします(太字は追加するものです)。文字列を反復可能として受け入れるため、欠落している2つの文字で囲まれているためです。aa\na a\naaa.join.join


これにより、文字が中央の行に追加されますか?答えを教えてください。
Notts90

1
@ Notts90は説明を追加しましたc:
ロッド

おかげで、.joinが文字列を繰り返すことができるとは知らなかった。
Notts90

これはPython 3でも機能します。非常にクールなところで。(また、同じ方法を使用すると3*c+c.join('\n \n')+3*c32で結び付けられます。)
ジョナサンアラン

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バイトがそれほど速くなるとは思っていませんでした。
リュックH

2
コード・ゴルフ言語、あなたが知っている...¯\ _(ツ)_ /¯
ルイス・Mendo

11
もちろん、[true true true;の定義済みリテラルがないのはなぜですか。true false true; true true true]
-PunPun1000

11
@ PunPun1000標準の8接続マスク(ムーア周辺)であるため、実際には(畳み込みと一緒に)たくさん使用されています
ルイスメンドー

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を2進数として使用する元のアイデア(未完成、他の言語で誰かがこれを試してみます):

05AB1E、12バイト

30bûTIð«‡3ô»

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



11

Python 3.6, 33 bytes

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

Try it online!


No problem. It looks like it's actually 3.6.1 being run; if you try import sys and then sys.version in the repl, it returns 3.6.1 rather than 3.5.2. No idea why it says 3.5.2 at the top then, seems like they have made a mistake there!
numbermaniac

2
Oh, haha, a case of "don't always believe what you read" - thanks!
Jonathan Allan

9

RPL (Reverse Polish Lisp), 60 characters

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

(Note that "→" is a single character on the HP48 and compatible calculators)

Would visually represent what you want by having three items on the stack:

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

If you insist to return it as one string, one has to add the newline characters as well and combine the strings, left as exercise to the next tester.

Input (can be anything, does not need to be a string) Entered code Result

Explanation:

  • →STR: Make the last object in the stack into a string. (So the input can be anything, e.g. a number.)
  • 1 4: Push the number 1 and 4 to the stack.
  • START [...] NEXT:forループに似ていますが、カウンター変数にアクセスできません。スタックから2つの数値を取得し(ここではプッシュ14[...]、対応する回数(ここでは4回)コードを実行します。
  • DUP:スタック内の最後のエントリを複製します。
  • " ":文字列(つまり、空白が1つある文字列)をスタックにプッシュします。
  • +:スタックから2つのオブジェクトを取得し、それらを一緒に追加して返します。
  • 4:番号4をスタックにプッシュします。
  • ROLLD4スタックから最後の要素(ここではプッシュしたばかり)を取得し、スタックから取得した数値が指定するスタックの次の要素をロールダウンします。
  • SWAP:最後の2つのスタック要素を交換します。
  • 22スタックにプッシュします。
  • PICK: Takes an element (here: The 2 we just pushed to the stack), interprets it as a number n, and copies the nth element from the stack.

7

JavaScript, 28 bytes

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

Try it

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>


I think you might be able to save a byte or two by storing the result of c+'\n'+c in a temporary.
Neil

Never mind, I miscounted, it's still 28 bytes.
Neil

@Neil: Yeah, there are a couple of options for assigning stuff to a variable, but they all come in at 28 bytes or more.
Shaggy

6

Jelly, 8 bytes

1 byte thanks to Erik the Outgolfer.

x4,`Ks3Y

Try it online!


I was wondering how to do this... I had x4µ©;⁶;®œs3Y for 12 bytes because I couldn't figure out how to avoid having the repetition multiply my entire intermediate step but nice!
HyperNeutrino

1
You know, there's a builtin K for doing j⁶. Oh, and there's a quick, `, to convert a dyad to a monad by using the same argument on both sides.
Erik the Outgolfer

5

Java 7, 56 55 bytes

-1 Thanks to Leaky Nun for pointing out the space I missed

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

Simply replaces the periods with the given character, for input #:

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

Try it online!





5

Pyth, 7 bytes

jc3.[9d

Try this online.

Explanation:

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 bytes

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

Try it online!

This is 58 bytes of code +1 byte for the -c flag which enables ASCII input and output.

Explanation:

(((
   (
    (
     (

      #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

Octave, 36 bytes

x=repmat(input(0),3);x(5)=32;disp(x)

Try it online!

Explanation

This creates a 3x3 char matrix with the input char repeated, and sets its 5th entry in column-major order (i.e. its center) to 32 (ASCII for space).



3

Ruby, 27 25 bytes

Saved 2 bytes thanks to Level River St

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

Try it online!


when you are doing anwsers like this, please also include the footer as code because it does not work without
Luc H

@Ayoungcoder this is an anonymous function. you can assign it to a variable (f=...) then call it with f.call(...)
Cyoce

1
You can use a literal newline inside quotes instead of "\n" for a saving of 1 byte . Even better use $/ which is a special variable set to newline by default - saving 2 bytes.
Level River St

1 byte less than the tr solution. nice work
Cyoce

3

Brainfuck, 40 bytes

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

Try it online! Requires an implementation that can access left of the starting position.

Also see: Graviton's brainfuck answer which takes a different approach (but is longer).


Explanation:

Brainfuck can do a lot of cool tricks with its limited instruction set. Unfortunately, this answer doesn't use any of them, because it's cheaper (in terms of bytes) to just hardcode everything.

+++++[->++<<++++++>]                         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| ###

# = input character, _ = space (ASCII 32), \n = newline (ASCII 10)


Results in this beautiful box (for input '+'):

+++
+ +
+++

3

05AB1E, 7 6 bytes

-1 byte thanks to carusocomputing.

ж¹ðJû

Explanation:

         # 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                 # []

Uses the CP-1252 encoding. Try it online!


Oooo... Smart, I never think about how palindromize works on newlines.
Magic Octopus Urn

ж¹ðJû for 6 bytes.
Magic Octopus Urn

3

Pyth, 11 bytes

jc++K*z4dK3

Try it online!

Explanation:

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

Welcome to PPCG!
Stephen


2

Swift3, 50 bytes

[1,2,3].map{$0==2 ? print(c+" "+c) : print(c+c+c)}

This uses the ternary operator to print different strings, depending on the row.

Try it online



2

C#,50 bytes

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

Test Case:

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

You need to fully qualify the Console i.e. System.Console..
TheLethalCoder

2

Vim, 9 keystrokes

Assuming the input char is present in a buffer, vim makes this straightforward

x3pY2plr<space>

There is probably some magic vim commands of use here (there always seem to be some) so improvement suggestions are welcome. Only one keystroke behind V!


I'm pretty sure this is as short as it can get. Nice answer!
DJMcMayhem

2

Z80 or 8080 Assembly, 21 bytes machine code

Assume a memory mapped I/O device:

              Z80                  8080
3A xx xx    ld  a, (input)      lda  input       ; get input character
11 0A 20    ld  de, 200ah       lxi  d, 200ah   ; space & newline
21 yy yy    ld  hl, output      lxi  h, output  ; get output address
77          ld  (hl), a         mov  m, a       ; output character * 3
77          ld  (hl), a         mov  m, a
77          ld  (hl), a         mov  m, a
73          ld  (hl), e         mov  m, e       ; output newline
77          ld  (hl), a         mov  m, a       ; output character
72          ld  (hl), d         mov  m, d       ; output space
77          ld  (hl), a         mov  m, a       ; output character
73          ld  (hl), e         mov  m, e       ; output newline
77          ld  (hl), a         mov  m, a       ; output character * 3
77          ld  (hl), a         mov  m, a
77          ld  (hl), a         mov  m, a
76          halt                hlt             ; or C9 ret

No interpreter needed!

Hexdump:

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

where the input address is at FF00h and the output address is mapped at FF01h. The actual addresses will depend on the actual hardware. Of course this assumes the I/O is memory mapped. If it is I/O mapped, it would take several extra bytes because Z80 & 8080 I/O instructions are two bytes each. This also assumes the output device interprets 0Ah as a newline and doesn't require a CR (0Dh) which would add an extra 4 bytes to the program.


Welcome to Codegolf.stackexchange, while it seems that you have everything under control please do read the help center and the list of faqs. Good first post
Rohan Jhunjhunwala

Can you provide a hexdump of your code?
CalculatorFeline

The hex bytes are in the first column, but if you want a "pure" hexdump, I've added it.
Dan Howell

2

J-uby, 22 20 bytes

-2 bytes thanks to @Jordan

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

Explanation

String#tr is Ruby's character-wise replace method. The first & binds :tr to "...\n. .\n...", and the second partially applies '.' to it. Effectively, this is ->s{"...\n. .\n...".tr('.',s)}


Would :tr work as well as :gsub here?
Jordan

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