Я уже сделал это в Python, но кажется, что это может быть значительно сокращено:
txt = input("Type something.. ")
c = "#"
b = " "
print(c * (len(txt) + 4))
print(c, b * len(txt), c)
print(c, txt, c)
print(c, b * len(txt), c)
print(c * (len(txt) + 4))
Так что, если пользователь вводит:
Hello World
Программа печатает:
###############
# #
# Hello World #
# #
###############
Побеждает меньше всего байтов - и, конечно, ответ может быть написан на любом языке.
Ответы:
CJam,
2220 байтПроверьте это здесь.
объяснение
Как вы оборачиваете двумерную сетку символов в один слой пробелов (или любого другого символа)? Правильно: четыре раза вы добавляете пробел к каждой строке, а затем поворачиваете сетку на 90 градусов. Это именно то, что я делаю здесь с восемью поворотами: четыре для пробелов, четыре для
#
:источник
vim,
2827 нажатий клавишПредполагается, что ввод осуществляется в виде одной строки текста в текущем открытом файле.
Объяснение:
Это также можно запустить как «программу», например так:
Что немного запутано, но это работает.
источник
pb - 89 байт
Это такой вызов, для которого был создан pb! Не то, чтобы он был конкурентоспособен для такого рода вызовов или чего-то еще. Это все еще ужасный язык гольфа. Тем не менее, такие проблемы гораздо сложнее решить, чем другие. Поскольку pb обрабатывает свой вывод как 2D-холст и может записывать любые координаты, все, что связано с позиционированием текста / рисованием вокруг текста (т.е. это вызов), обрабатывается довольно интуитивно.
Наблюдайте за ходом:
эта визуализация была создана с помощью находящейся в разработке версии pbi, интерпретатора pb. Строка с синим фоном - это место
Y=-1
, где хранятся входные данные при запуске программы. Прямоугольник с красным фоном является текущим местоположением кисти. Прямоугольники с желтым фоном везде, где символ 32 ascii (пробел) явно записан на холсте. Любые пробелы без этого фона на самом деле имеют значение0
, которое преобразуется в пробел.Вот код с комментариями, которые я использовал при написании, с некоторыми тематически соответствующими заголовками разделов;)
источник
Not that it's competitive... It's still a horrible golf language.
Я говорю это, но сейчас я привязан только к последнему. Я ожидал быть последним прямо. : Dбрейкфук - 156 байт
Это, вероятно, гольф. В некоторых местах я не знал, будет ли лучше хранить значение где-то для повторного использования или переделывать его / иди получать его из другого места на ленте. Вместо того, чтобы делать работу, чтобы понять это, я этого не делал. : D
С комментариями:
источник
К, 21 байт
Включите строку, добавьте пробел ко всем четырем сторонам строки, затем добавьте восьмиугольник к каждой стороне строки. В бою:
Работает в ок, коне и к5.
В одном символе длины существует довольно много вариаций, которые устраняют избыточность в вышеприведенном, но, похоже, ни один из них не сломается, даже когда нам нужно только выполнить операцию «обтекания» дважды:
источник
Pyth, 31 байт
Благодаря тому, что люди в комментариях давали советы о том, как дальше играть в гольф, я действительно плохо знаю язык, как вы можете (вероятно) сказать.
источник
"#"
равно\#
. Если вам нужно объединить много объектов, вам лучше использоватьj""[
список объектов, который равенjk[
.s[
равноjk[
для массивов строк. Кроме того, вы также можете назначитьK
на лету, какjk[K\#
, и просто отбросить первоначальное назначение. Назначениеlz
наJ
не помогает, если используется только дважды, так что сэкономьтеJ
на чем-то другом. При этом, если вы подкачкиZ
дляJ
вас можно удалить=
. Наконец, вы можете назначитьJ
на лету. Код выглядит следующим образом:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
Python 3, 88 байт
Спасибо @WorldSEnder
Пример ввода / вывода:
источник
s=" "
в начале экономит 1 байт в целом, я думаю.;
вместо новых строк кстати? Оба должны быть одного байта, верно?Perl,
4376 байтПреобразуйте каждую строку ввода текста, как указано:
Например:
Вот как можно увидеть, что он на самом деле делает:
Так что-то вроде этого:
источник
e
модификатор ... но если вы сделаете это, вы можете также просто уронить замену вообще:$x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x"
. Используйте фактические символы новой строки вместо,\n
и это только 65 байтов, плюс 2 для-lp
.JavaScript (ES6), 73
Тяжело используя строку шаблона, 2 новых строки значимы и считаются.
Попробуйте запустить приведенный ниже фрагмент в любом браузере, совместимом с EcmaScript 6 (FireFox и последняя версия Chrome, возможно, Safari).
Это намного короче, чем моя первая попытка, полученная из этой другой задачи :
источник
z
в качестве побочного эффекта?)Python 2, 74
Принимает ввод в кавычках, как
"Hello World"
.# _ #
.b
являются# #
с правого ряда пространств, окруженных символами новой строки в обе стороны , чтобы заботиться о всех четырех новых строк.#
умножаются на длину вводаСтроки соединяются и печатаются.
источник
MATLAB,
9391 байтНе самая красивая, но она выполняет свою работу.
Код Объяснение
Шаг 1
Прочитайте строку из STDIN и поместите в нее начальный и конечный пробел. 32 - это код ASCII для пробела и чтение во входных данных, когда строковый тип объединяет 32 в пробелы.
Шаг 2
Объявите массив символов из 5 хеш-символов в векторе столбца.
Шаг 3
Создайте двухрядную символьную матрицу, которая сначала заполняется знаками хеша, а затем пробелом. Количество символов - это длина входной строки плюс 2, чтобы мы могли разместить пробел до и после строки.
Шаг № 4
Мы собираемся собрать все вместе. Мы помещаем первый столбец из 5 хешей, за которым следует центральная часть, а затем еще один столбец из 5 хешей. Центральная часть состоит из двухстрочной символьной матрицы, созданной на шаге № 3, самой входной строки, которая имеет конечный и начальный пробел, за которой следует двухстрочная символьная матрица, но обратная.
Примеры запусков
источник
Perl 5.14+,
5756 байт54 байта + 2 байта для
-lp
(если ввод не заканчивается новой строкой,-l
может быть сброшен для сохранения одного байта).Принимает ввод на STDIN:
Как это работает
Ядром программы является фрагмент списка:
Это обеспечивает компактный способ хранения трех уникальных строк выходных данных (первые две строки ограничивающего прямоугольника совпадают с двумя последними, только отражаются). Для входной строки
foo
результаты среза будут:Соединение этих значений с
#\n#
дает нам нашу коробку.Обратите внимание, что Perl 5.14+ требуется для использования неразрушающего
r
модификатора для оператора транслитерацииy///
.источник
PHP,
9593 байтаНе совсем блестящий или что-то подобное, но это было на самом деле весело!
Не совсем красиво или что-то, но это работает блестяще!
Спасибо @Titus за сохранение 2 байта.
источник
$argv
вместо$_GET
и-r
.C ++, 198 байт
Мой первый удар в Codegolf, и хотя я узнал, что C ++, вероятно, не лучший язык для игры в гольф, я чувствовал, что сделал прилично (?) Для своей первой попытки.
Ungolfed
n, o и t представляют собой полностью хэшированные строки, входные данные (с хэш-кодами на каждом конце) и строки между входными и хэшированными строками соответственно.
источник
> <> ,
106104 байтаУ меня такое ощущение, что> <> может быть не лучшим языком для этого, но я зашел слишком далеко, чтобы сдаться и не публиковать это. В
*
конце строки 4 предполагается пробел. Тебе не нравится, как невероятно гротескно выглядит этот код? Попробуйте онлайн .Вот версия, в которой нет ничего, кроме смены направления, чтобы дать представление о том, как движется указатель (обратите внимание, что я пропустил операторы "teleport", т.е.
.
).Направление потока:
объяснение
Моя визуализация стека будет основана на вводе
input
. > <> - это двумерный язык, поэтому обратите внимание на то, где указатель перемещается между строками, так как он выполняет код под ним (в этом коде<>v^
в основном используются для изменения направления). Я начну свои объяснения, откуда начинается указатель. Обратите внимание, что повторятся две строки, так как указатель перемещается назад после пятой строки.Что мне всегда нравится в <>, так это его способность изменять собственный исходный код, и я использую его в этой программе. Строки 3 и 4 используются повторно для печати последних двух строк путем изменения символа в каждой.
Строка 1: входной цикл
стек:
[-1,t,u,p,n,i]
Строка 2: генерирует третью строку вывода
стек:
[9,9,9,9,#, ,t,u,p,n,i, ,#]
Строка 3: печатает первую строку вывода
стек:
[0,9,9,9,#, ,t,u,p,n,i, ,#]
Выход:
Строка 4: печатает вторую строку вывода
стек:
[0,9,9,#, ,t,u,p,n,i, ,#]
Выход (
*
представляет пространство):Строка 5: печатает третью строку вывода
стек:
[9,9,0]
Выход:
Строка 6: настраивается для печати четвертой и пятой строк вывода
стек:
[0,9,9,0]
Строка 4: печать четвертой строки вывода
стек:
[0,9,0]
Выход (
*
представляет пространство):Строка 3: печать последней строки вывода
стек:
[0,0]
Выход:
источник
PHP,
9391 байтПринимает данные из аргумента командной строки; пробелы или использовать одинарные кавычки. Беги с
-r
.источник
Пайк (неконкурентоспособный), 6 байт
Попробуй это здесь!
Пайк был написан после испытания и поэтому неконкурентоспособен.
.X
принимает строку и строковую константу arg и окружает строку этой группой символов. Константа arg может содержать до 8 символов и оказывать различное влияние на окружение строки.источник
05AB1E,
26 байтов, не конкурируетПопробуйте онлайн!
РЕДАКТИРОВАТЬ: Вау! Не заметил, что это старый вызов! Сожалею!
источник
C # - 142 байта (тело метода - 104)
Ungolfed:
источник
PowerShell,
8482 байтаисточник
Луа, 90 байт
источник
Рубин, 83 байта
Я думаю, что это может быть дальше, но, так как пока нет ответа Ruby, вот оно:
источник
Ракетка 172 байта
Ungolfed:
Тестирование:
Выход:
источник
C #,
116110 байтовUngolfed:
Первоначальный вариант:
Полная программа с тестовыми примерами:
источник
var
вместоstring
.var
ключевое слово допускает только одно объявление.C (gcc) 165 байт
Неуправляемая версия
источник
SmileBASIC, 73 байта
источник