Попробуйте сделать квадрат!


20

задача

Учитывая один непечатаемый печатный символ, создайте 3x3 квадратное представление этого ввода. Например, если вход является #, то выход:

###
# #
###

правила

  • Формат вывода является строгим, хотя допускается завершающий перевод строки. Это означает, что в середине необходим пробел, а также требуются два символа новой строки, разделяющие три строки.

Testcases

Входные данные: #

Выход:

###
# #
###

Входные данные: A

Выход:

AAA
A A
AAA

Входные данные: 0

Выход:

000
0 0
000

счет

Это . Кратчайший ответ в байтах побеждает.


2
Тот факт, что размер является фиксированным, допускает некоторую оптимизацию. Ответы из связанной задачи, вероятно, здесь не будут конкурентоспособными. Так что я не думаю, что это дубликат
Луис Мендо

12
Я был тем, кто проголосовал против, потому что это был простой, скучный вызов. Я, как правило, фанат легких испытаний, потому что это хорошее место для начинающих игроков в гольф, но это слишком просто.
Лохматый

32
@ Ayoungcoder Это совершенно веская причина, чтобы понизить вызов.
Пшеничный волшебник

2
@ Shaggy: С точки зрения сложности, есть сложность, чтобы написать программу, и трудности в игре в гольф. Эту программу легко написать, но я не уверен, что в нее легко играть в гольф.

5
На мой взгляд, это хороший вызов для людей, которые только начинают заниматься гольфом. Хорошо иметь смесь трудностей. Перегрузка на какой-либо один тип будет в ущерб какой-то части сообщества. Итак, я рад, что этот вызов был написан.
Исаак

Ответы:


30

Древесный уголь , 5 3 байта

B³S

Попробуйте онлайн! Изменить: Экономия 40% благодаря @carusocomputing. Объяснение:

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

3
Я чувствую, что это обман ...> _>
HyperNeutrino

14
Тогда, конечно, B³Sобмануть живого дерьма из этого.
Волшебная Урна Осьминога

1
Почему это будет обман? @carusocomputing и Нил его ответ мне кажется правильным
Люк Х

1
@Ayoungcoder "обманывает" как в "кажется дешевым", а не как в "буквальном обмане"; код имеет встроенную функцию «напечатать коробку измерений n, используя символ s», кратчайший код для этой задачи: 1. Чтение ввода. 2. Определите размерность. 3. Распечатать коробку. Логически ответ на этот вызов не будет ниже 2 байтов, если ввод неявный.
Волшебная Урна Осьминога

2
@carusocomputing Ах, ирония - неявное квадратное поведение раздражало меня в моем ответе снова визуализировать евклидов алгоритм .
Нил

48

Морковь , 11 байт

###
# #
###

Попробуйте онлайн!

Программа находится в режиме каретки, где #s заменяется вводом.


26
Ощущение, когда программа, которая на первый взгляд выглядит совершенно недействительной, на самом деле совершенно допустимо.
Эрик Outgolfer

3
@EriktheOutgolfer когда-нибудь слышал о Perl?
NoOneIsHere

19

Python 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:
Род

спасибо, я не знал, что .join может перебрать строку.
Notts90

Это работает и в Python 3. Очень круто, кстати. (Также, используя тот же метод 3*c+c.join('\n \n')+3*cсвязи в 32.)
Джонатан Аллан

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 байт придут так быстро.
Люк Х

2
Языки игры в гольф, вы знаете ... ¯ \ _ (ツ) _ / ¯
Луис Мендо

11
Конечно, потому что почему бы вам не иметь предопределенный литерал для [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 как двоичное число (незаконченное, кто-то еще попробует это в другом языке):

05AB1E , 12 байтов

30bûTIð«‡3ô»

Попробуйте онлайн!



11

Python 3.6 , 33 байта

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

Попробуйте онлайн!


Нет проблем. Похоже, что это на самом деле 3.6.1 выполняется; если вы попытаетесь, import sysа затем sys.versionв repl, он возвращает 3.6.1, а не 3.5.2. Понятия не имею, почему там написано 3.5.2 вверху, похоже, они ошиблись там!
Numbermaniac

2
О, ха-ха, случай "не всегда верь тому, что читаешь" - спасибо!
Джонатан Аллан

9

RPL (обратный польский лисп) , 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, но без доступа к переменной counter. Извлекает два числа из стека (здесь мы только что нажали 1и 4) и выполняет код [...]соответствующее время (здесь, четыре раза).
  • DUP: Дублировать последнюю запись в стеке.
  • " ": Вставьте строку (то есть строку с одним пробелом) в стек.
  • +: Возьмите два объекта из стека и верните их вместе, для строк: Конкатенация.
  • 4: Вставьте номер 4в стек.
  • ROLLD: Берет последний элемент (здесь: 4который мы только что вытолкнули) из стека и катит следующий элемент так далеко вниз по стеку, как указано число, которое мы только что взяли из стека.
  • SWAP: Меняет местами два последних элемента стека.
  • 2: Толкать 2в стек.
  • PICK: Берет элемент (здесь: который 2мы только что поместили в стек), интерпретирует его как число n и копирует n-й элемент из стека.

7

JavaScript, 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во временном файле.
Нил

Неважно, я не учел, это все еще 28 байтов.
Нил

@Neil: Да, есть пара опций для назначения материала переменной, но все они имеют размер 28 байт или более.
Лохматый

6

Желе , 8 байт

1 байт благодаря Эрику Аутгольферу.

x4,`Ks3Y

Попробуйте онлайн!


Мне было интересно, как это сделать ... У меня было x4µ©;⁶;®œs3Y12 байтов, потому что я не мог понять, как избежать повторения, умножив весь мой промежуточный шаг, но приятно!
HyperNeutrino

1
Вы знаете, есть встроенный Kдля этого j⁶. О, и есть быстрое `преобразование диады в монаду, используя один и тот же аргумент с обеих сторон.
Эрик Outgolfer

5

Java 7, 56 55 байт

-1 Спасибо Leaky Nun за указание места, которое я пропустил

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

Просто заменяет периоды указанным символом для ввода #:

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

Попробуйте онлайн!


5

PHP, 32 байта

<?=strtr("000
0 0
000",0,$argn);

Попробуйте онлайн!


Интересно <?=$a=$argn,"$a$a\n$a $a\n$a$a$a";(реальный разрыв строки вместо \ n, конечно) имеет точно такое же количество байтов.
Кристоф

@ Кристоф сделать это как ваш подход. я не пробовал этот альтернативный путь
Йорг Хюльсерманн

5

sed, 28 18 байтов

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

Попробуйте онлайн!


этот новый не работает, старый действительно редактировал: он работает, но вы забыли: в ответе
Luc H

@ Ayoungcoder Извините, неправильно вставил финал :. Исправлена.
eush77

попробовать его в Интернете должно быть [Попробовать онлайн!]: tio.run/nexus/sed#@19spWelpqYWk6emACLU1Kz@/0/… "sed - TIO Nexus"
Люк Х

@ Ayoungcoder Конечно, спасибо.
eush77



4

Brain-Flak , 61 , 59 байт

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

Попробуйте онлайн!

Это 58 байт кода +1для -cфлага, который позволяет вводить и выводить ASCII.

Объяснение:

(((
   (
    (
     (

      #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 байт

Сохранено 2 байта благодаря Level River St

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

Попробуйте онлайн!


когда вы делаете такие анвзеры, пожалуйста, включите нижний колонтитул как код, потому что он не работает без
Luc H

@ Ayoungcoder это анонимная функция. Вы можете присвоить его переменной ( f=...), затем вызвать его с помощьюf.call(...)
Cyoce

1
Вы можете использовать буквальный перевод строки внутри кавычек вместо того, "\n"чтобы сэкономить 1 байт. Еще лучше использовать $/специальную переменную, установленную по умолчанию на новую строку, экономя 2 байта.
Уровень Река St

На 1 байт меньше, чем trрешение. хорошая работа
Cyoce

3

Brainfuck, 40 байт

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

Попробуйте онлайн! Требуется реализация, которая может получить доступ слева от начальной позиции.

Также см .: ответ Гравитона на мозг, который использует другой подход (но дольше).


Объяснение:

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 байтов

-1 байт благодаря carusocomputing.

ж¹ð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 . Попробуйте онлайн!


Оооо ... Умно, я никогда не думаю о том, как палиндромиз работает на новых строках.
Волшебная Урна Осьминога

ж¹ðJûдля 6 байтов.
Волшебная Урна Осьминога

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!
Стивен


2

Swift3, 50 байт

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

Это использует троичный оператор для печати различных строк, в зависимости от строки.

Попробуйте онлайн



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 байт

Предположим, что устройство ввода-вывода с отображенной памятью:

              Z80 8080
3A xx xx ld a, (вход) lda вход; получить входной символ
11 0A 20 ld de, 200ah lxi d, 200ah; пробел и перевод строки
21 гггг гг лд гл, выходной лкси ч, выходной; получить выходной адрес
77 л.д. (гл), мов м, а; выходной символ * 3
77 л.д. (гл), мов м, а
77 л.д. (гл), мов м, а
73 л.д. (гл), е мов м, е; вывод новой строки
77 л.д. (гл), мов м, а; выходной символ
72 л.д. (гл), д мов, д; выходное пространство
77 л.д. (гл), мов м, а; выходной символ
73 л.д. (гл), е мов м, е; вывод новой строки
77 л.д. (гл), мов м, а; выходной символ * 3
77 л.д. (гл), мов м, а
77 л.д. (гл), мов м, а
76 остановка HLT; или C9 ret

Переводчик не нужен!

HexDump:

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. Фактические адреса будут зависеть от фактического оборудования. Конечно, это предполагает, что ввод / вывод отображен в память. Если это отображение ввода / вывода, потребуется несколько дополнительных байтов, потому что инструкции ввода / вывода Z80 и 8080 по два байта каждая. Это также предполагает, что устройство вывода интерпретирует 0Ah как новую строку и не требует CR (0Dh), который добавил бы к программе дополнительные 4 байта.


Добро пожаловать на Codegolf.stackexchange, хотя кажется, что у вас все под контролем, прочтите справочный центр и список часто задаваемых вопросов. Хороший первый пост
Rohan Jhunjhunwala

Можете ли вы предоставить hexdump вашего кода?
CalculatorFeline

Шестнадцатеричные байты находятся в первом столбце, но если вы хотите «чистый» hexdump, я добавил его.
Дэн Хауэлл

2

J-uby , 22 20 байтов

-2 байта благодаря @Jordan

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

объяснение

String#trэто метод замены символов в Ruby. Первый &привязывается :trк "...\n. .\n...", а второй частично относится '.'к нему. По сути, это->s{"...\n. .\n...".tr('.',s)}


Будет :trработать так же, как :gsubздесь?
Иордания

@ Джордан, да, спасибо!
Cyoce
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.