Tente fazer um quadrado!


20

Tarefa

Dado um caractere imprimível sem espaço em branco, faça uma representação quadrada de 3x3 dessa entrada. Por exemplo, se a entrada for #, a saída será:

###
# #
###

Regras

  • O formato de saída é rigoroso, embora uma nova linha à direita seja permitida. Isso significa que o espaço no meio é necessário e também que os dois caracteres de nova linha que separam as três linhas são necessários.

Casos de teste

Entrada: #

Saída:

###
# #
###

Entrada: A

Saída:

AAA
A A
AAA

Entrada: 0

Saída:

000
0 0
000

Pontuação

Este é . A resposta mais curta em bytes vence.


2
O fato de o tamanho ser fixo permite alguma otimização. As respostas do desafio vinculado provavelmente não serão competitivas aqui. Portanto, não acho que seja uma duplicata.
— Luis Mendo

12
Fui eu quem votou mal, por ser um desafio simples e chato. Normalmente sou fã de desafios fáceis, pois eles são um bom lugar para os novos jogadores começarem, mas isso parece fácil demais.
— Shaggy

32
@ YoungCoder É uma razão perfeitamente válida para rebaixar um desafio.
— Assistente de trigo

2
@ Shagy: Em termos de dificuldade, há dificuldade para escrever o programa e dificuldade para jogar golfe no programa. Este programa é fácil de escrever, mas não tenho tanta certeza de que seja fácil jogar golfe nele.

5
Na minha opinião, este é um bom desafio para as pessoas que estão apenas começando no golfe com código. É bom ter uma mistura de dificuldades. Sobrecarregar qualquer tipo será em detrimento de alguma parte da comunidade. Então, estou feliz que este desafio tenha sido escrito.
— Isaacg 13/05

Respostas:


30

Carvão , 5 3 bytes

B³S

Experimente online! Editar: economizou 40% graças a @carusocomputing. Explicação:

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

3
Eu sinto que isso é batota ...> _>
— HyperNeutrino

14
Então, é claro, B³Spara enganar a porcaria viva disso.
— Magic Octopus Urn

11
Por que isso seria trapaça? @carusocomputing e neil seu anwser parece certo para mim
— Luc H

11
@Youngcoder "trapaça" como em "parece barato" não como em "trapaça literal"; o código possui um built-in para "imprimir uma caixa de dimensões n usando caracteres s", o código mais curto para esse desafio é: 1. Leia a entrada. 2. Defina a dimensão. 3. Caixa de impressão. A resposta para esse desafio logicamente não será inferior a 2 bytes se a entrada estiver implícita.
— Magic Octopus Urn

2
@carusocomputing Ah, a ironia - o comportamento implícito do quadrado me incomodou na minha resposta ao Visualize o algoritmo euclidiano novamente .
— 1111 Neil


19

Python 2 , 32 bytes

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

Experimente online!
Para s='a': o meio s+'\n \n'+sgera a\n \nae s.joinentrega (negrito s são os que adiciona), porque aceita uma sequência como iterável e, em seguida, é cercada pelos dois caracteres ausentesaa\na a\naaa.join.join


Como isso adiciona os caracteres à linha do meio? Você poderia explicar a resposta, por favor?
— Notts90

11
@ Notts90 adicionou uma explicação c:
— Rod

obrigado eu não sabia que .join poderia iterar uma string.
— Notts90

Isso funciona também em Python 3. BTW muito legal. (Além disso, usando o mesmo método 3*c+c.join('\n \n')+3*cempata em 32).
— Jonathan Allan

15

MATL , 5 bytes

3Y6*c

Experimente online!

Explicação

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

11
aquilo foi rápido! não esperava que um byte de 5 bytes chegasse tão rápido.
— Luc H

2
Linguagens de código-golfe, você sabe ... ¯ \ _ (ツ) _ / ¯
— Luis Mendo

11
Claro, porque por que você não teria um literal predefinido para [true true true; verdadeiro falso verdadeiro; verdadeiro verdadeiro verdadeiro]
— PunPun1000

11
@ PunPun1000 Isso é realmente muito usado (juntamente com convolução) como é o padrão 8-conectividade máscara ( neighboorhood Moore )
— Luis Mendo

3
@LuisMendo Isso é incrível, aprender algo novo por aqui todos os dias, não é sempre sobre golfe código
— PunPun1000

13

05AB1E , 8 bytes

4×ð«û3ô»

Experimente online!

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                   |

Idéia original usando 30 como um número binário (inacabado, alguém tenta isso em outro idioma):

05AB1E , 12 bytes

30bûTIð«‡3ô»

Experimente online!



11

Python 3.6 , 33 bytes

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

Experimente online!


Sem problemas. Parece que está na verdade 3.6.1 sendo executado; se você tentar import syse depois sys.versionna repl, ele retornará 3.6.1 em vez de 3.5.2. Não faço ideia por que diz 3.5.2 no topo, parece que eles cometeram um erro lá!
— Numbermaniac #

2
Ah, haha, um caso de "nem sempre acredite no que lê" - obrigado!
— Jonathan Allan

9

RPL (Lisp polonês reverso) , 60 caracteres

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

(Observe que "→" é um caractere único na HP48 e calculadoras compatíveis)

Representaria visualmente o que você deseja, tendo três itens na pilha:

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

Se você insistir em devolvê-lo como uma sequência, será necessário adicionar os caracteres da nova linha e combinar as seqüências, deixadas como exercício para o próximo testador.

Entrada (pode ser qualquer coisa, não precisa ser uma string) Código inserido Resultado

Explicação:

  • →STR: Transforma o último objeto da pilha em uma sequência. (Portanto, a entrada pode ser qualquer coisa, por exemplo, um número.)
  • 1 4: Empurre o número 1e 4para a pilha.
  • START [...] NEXT: Como um loop for, mas sem acesso à variável do contador. Pega dois números da pilha (aqui, apenas pressionamos 1e 4) e executa o código [...]nos tempos correspondentes (aqui, quatro vezes).
  • DUP: Duplique a última entrada na pilha.
  • " ": Empurre a string (ou seja, a string com um espaço em branco) para a pilha.
  • +: Pegue dois objetos da pilha e devolva-os juntos, para seqüências de caracteres: Concatenated.
  • 4: Empurre o número 4para a pilha.
  • ROLLD: Pega o último elemento (aqui: 4que acabamos de enviar) da pilha e rola o próximo elemento o mais abaixo possível, conforme especifica o número que acabamos de tirar da pilha.
  • SWAP: Troca os dois últimos elementos da pilha.
  • 2: Empurre 2para a pilha.
  • PICK: Pega um elemento (aqui: O 2que acabamos de enviar para a pilha), interpreta como um número n e copia o enésimo elemento da pilha.

7

JavaScript, 28 bytes

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

Tente

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>


Eu acho que você pode salvar um byte ou dois armazenando o resultado de c+'\n'+cforma temporária.
— 1111 Neil

Não importa, calculei mal, ainda são 28 bytes.
— 1111 Neil

@ Neil: Sim, existem algumas opções para atribuir itens a uma variável, mas todas elas têm 28 bytes ou mais.
— Shaggy

6

Gelatina , 8 bytes

1 byte graças a Erik, o Outgolfer.

x4,`Ks3Y

Experimente online!


Fiquei me perguntando como fazer isso ... Eu tinha x4µ©;⁶;®œs3Y12 bytes porque não conseguia descobrir como evitar que a repetição multiplique todo o meu passo intermediário, mas é legal!
— HyperNeutrino

11
Você sabe, há um construto Kpara fazer j⁶. Ah, e é rápido `converter uma díade em mônada usando o mesmo argumento dos dois lados.
— Erik the Outgolfer

5

Java 7, 56 55 bytes

-1 Obrigado a Leaky Nun por apontar o espaço que eu perdi

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

Simplesmente substitui os períodos pelo caractere fornecido, para a entrada #:

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

Experimente online!





5

Pitão, 7 bytes

jc3.[9d

Experimente isso online.

Explicação:

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

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

Experimente online!

São 58 bytes de +1byte de código para o -csinalizador que habilita a entrada e saída ASCII.

Explicação:

(((
   (
    (
     (

      #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

Oitava , 36 bytes

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

Experimente online!

Explicação

Isso cria uma matriz de caracteres 3x3 com o caractere de entrada repetido e define sua quinta entrada na ordem principal da coluna (ou seja, seu centro) como 32(ASCII para espaço).



3

Ruby , 27 25 bytes

Economizou 2 bytes graças ao Level River St

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

Experimente online!


quando você está fazendo anwsers como esta, inclua também o rodapé como código porque ele não funciona sem
— Luc H

@ YoungCoder esta é uma função anônima. você pode atribuí-lo a uma variável ( f=...) e depois chamá-lo com #f.call(...)
— Cyoce

11
Você pode usar uma nova linha literal entre aspas, em vez de "\n"economizar 1 byte. Melhor ainda, $/que é uma variável especial definida como nova linha por padrão - economizando 2 bytes.
— Level River St

1 byte a menos que a trsolução. bom trabalho
— Cyoce

3

Brainfuck, 40 bytes

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

Experimente online! Requer uma implementação que possa acessar à esquerda da posição inicial.

Veja também: Resposta do cérebro de Graviton, que adota uma abordagem diferente (mas é mais longa).


Explicação:

O Brainfuck pode fazer muitos truques legais com seu conjunto de instruções limitado. Infelizmente, esta resposta não usa nenhuma delas, porque é mais barato (em termos de bytes) codificar apenas tudo.

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

# = caractere de entrada, _ = espaço (ASCII 32), \ n = nova linha (ASCII 10)


Resultados nesta linda caixa (para entrada '+'):

+++
+ +
+++

3

05AB1E , 7 6 bytes

-1 byte graças à carusocomputação.

ж¹ðJû

Explicação:

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

Usa a codificação CP-1252 . Experimente online!


Oooo ... Inteligente, nunca penso em como o palindromize funciona em novas linhas.
— Magic Octopus Urn

ж¹ðJûpor 6 bytes.
— Magic Octopus Urn

3

Pitão , 11 bytes

jc++K*z4dK3

Experimente online!

Explicação:

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

Bem-vindo ao PPCG!
— Stephen


2

Swift3, 50 bytes

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

Isso usa o operador ternário para imprimir seqüências diferentes, dependendo da linha.

Experimente online



2

C #, 50 bytes

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

Caso de teste:

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

Você precisa qualificar totalmente o ConsoleieSystem.Console..
— TheLethalCoder

2

Vim, 9 pressionamentos de teclas

Assumindo que o char de entrada esteja presente em um buffer, o vim torna isso simples

x3pY2plr<space>

Provavelmente existem alguns comandos de uso do magic vim aqui (sempre parece haver alguns), portanto sugestões de melhoria são bem-vindas. Apenas um pressionamento de tecla atrás de V!


Tenho certeza de que isso é o mais curto possível. Boa resposta!
— DJMcMayhem

2

Montagem Z80 ou 8080, código de máquina de 21 bytes

Suponha um dispositivo de E / S mapeado para memória:

              Z80 8080
3A xx xx ld a, entrada lda (entrada); obter caractere de entrada
11 0A 20 ld de 200ah lxi d, 200ah; espaço e nova linha
21 aa aa aa ld hl, saída lxi h, saída; obter endereço de saída
77 ld (hl), a mov m, a; caractere de saída * 3
77 ld (hl), um mov m, um
77 ld (hl), um mov m, um
73 ld (hl), e mov m, e; nova linha de saída
77 ld (hl), a mov m, a; caractere de saída
72 ld (hl), d mov m, d; espaço de saída
77 ld (hl), a mov m, a; caractere de saída
73 ld (hl), e mov m, e; nova linha de saída
77 ld (hl), a mov m, a; caractere de saída * 3
77 ld (hl), um mov m, um
77 ld (hl), um mov m, um
76 hlt; ou C9 ret

Não é necessário nenhum intérprete!

Hexdump:

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

onde o endereço de entrada está em FF00h e o endereço de saída é mapeado em FF01h. Os endereços reais dependerão do hardware real. Obviamente, isso pressupõe que a E / S esteja mapeada na memória. Se for E / S mapeada, levaria vários bytes extras, porque as instruções de E / S Z80 e 8080 têm dois bytes cada. Isso também pressupõe que o dispositivo de saída interpreta 0Ah como uma nova linha e não requer um CR (0Dh) que adicionaria 4 bytes extras ao programa.


Bem-vindo ao Codegolf.stackexchange, embora pareça que você tem tudo sob controle, leia o centro de ajuda e a lista de perguntas frequentes. Bom primeiro post
— Rohan Jhunjhunwala 20/05

Você pode fornecer um hexdump do seu código?
— CalculadoraFeline

Os bytes hexadecimais estão na primeira coluna, mas se você quiser um hexdump "puro", eu o adicionei.
— Dan Howell

2

J-uby , 22 20 bytes

-2 bytes graças a @Jordan

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

Explicação

String#tré o método de substituição de caracteres do Ruby. Os primeiros &se liga :tra "...\n. .\n...", e o segundo se aplica parcialmente '.'a ele. Efetivamente, isso é->s{"...\n. .\n...".tr('.',s)}


Funcionaria :trtão bem quanto :gsubaqui?
— Jordânia

@ Jordan sim, obrigado!
— Cyoce 25/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.