Я получил этот вызов от Codingame, и мне интересно узнать о лучших решениях, чем у меня:
При заданной ширине с помощью стандартного ввода нарисуйте пустой квадрат '#' с заданной шириной и длиной.
Пример:
5 результатов в
#####
# #
# #
# #
#####
Я использовал Python для решения этой проблемы, поэтому я особенно заинтересован в другом коде Python. Но, пожалуйста, не стесняйтесь размещать свое решение на любом языке, который вы хотите.
code-golf
string
ascii-art
number
code-golf
grid
code-golf
string
ascii-art
code-golf
alphabet
cipher
code-golf
math
number
code-golf
quine
code-golf
palindrome
polyglot
code-golf
number
array-manipulation
counting
logic
code-golf
string
primes
binary
decision-problem
code-golf
ascii-art
kolmogorov-complexity
popularity-contest
code-golf
probability-theory
code-golf
string
code-golf
python
polyglot
programming-puzzle
c++
code-golf
math
code-golf
binary
integer
bitwise
code-golf
rational-numbers
code-golf
string
palindrome
code-golf
ascii-art
code-golf
code-golf
string
fibonacci
code-golf
math
sequence
code-golf
code-golf
string
palindrome
code-golf
string
code-golf
math
primes
source-layout
code-golf
sequence
binary
integer
code-golf
math
arithmetic
game
code-golf
restricted-source
palindrome
code-golf
restricted-source
palindrome
code-golf
combinatorics
binary
code-golf
string
math
code-golf
ascii-art
number
code-golf
cipher
code-golf
base-conversion
counting
code-golf
sequence
random
classification
code-golf
string
subsequence
code-golf
permutations
code-golf
string
code-golf
string
cipher
code-golf
kolmogorov-complexity
arithmetic
integer
code-golf
quine
markov-chain
code-golf
string
code-golf
code-golf
ascii-art
maze
sebingel
источник
источник
Ответы:
Пайк, 11 байт
Попробуй это здесь!
источник
Древесный уголь , 6 байт
Код:
Объяснение:
Попробуйте онлайн!
источник
N
также можно использовать в выражении, какint(input())
в Python. Если бы этот вызов был «нарисовать полый прямоугольник с заданной шириной и высотой», решение могло бы бытьBNN#
.MATL , 12 байт
Попробуйте онлайн!
объяснение
источник
Джольф, 8 байт
источник
#
?Python 2,
6254 байтаВозвращает,
#\n#
когда ввод1
Версия 55 байт, которая печатает
Версия 62 байта, которая работает для любого входа:
источник
f=
если не используете это - что вы не делаете.COW ,
426405348330 байтПопробуйте онлайн! Измените число во второй строке на любое число, чтобы изменить вывод.
Интерпретатор COW, который я здесь использую, был написан на Perl (и новее, чем этот вызов), но вы все равно можете получить тот же результат, введя здесь код .
объяснение
источник
Python 2,
5958 байтrepl.it
Примечание. Входные данные
1
создают выходные данные##
, но полый квадрат никогда не будет создаваться для входных данных меньше3
, поэтому, я думаю, это нормально.источник
Java 7,
113112110 байт1 байт сохранен благодаря @ OlivierGrégoire ;
2 байта сохранены благодаря @cliffroot .
Полученное решение основано на моем ответе « Создание пересеченного квадрата» .
Попробуй это здесь.
источник
for(int i=n,j;i-->0;r+="\n")
? Так как нам все равно, какая нижняя строка или верхняя, нет смысла соблюдать этот порядок, верно?PowerShell v2 +,
4847 байт-1 байт благодаря JohnLBevan
Принимает ввод
$n
, устанавливает$z
как$n
хеш-метки, с$n
пост-декрементом. Инкапсулирует это в паренсе, чтобы поместить копию в конвейер. Затем используется оператор запятой , чтобы создать массив предварительно декрементируются$n
линии#
, пространств,#
. Те остались на конвейере. Затем$z
снова ставит на конвейер. Вывод через неявныйWrite-Output
в конце вводит новую строку между элементами, так что мы получаем это бесплатно.Поскольку код OP не работает для ввода
n <= 1
, я понял, что нам также не нужно поддерживать ввод1
.Примеры
источник
param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
C 98 байт
Использование:
источник
05AB1E , 20 байтов
Попробуйте онлайн!
Или 18 байтов, если мы можем игнорировать
1 <= n
:Попробуйте онлайн!
источник
WinDbg,
206200182170 байт-6 байт от удаления паренов
.if
и использованияj
вместо второго.if
-18 байт, используя
f
вместо a.for
для создания строк.-12 байт не NULL-завершающими строками, вместо этого передавая длину
da
Ввод передается через псевдорегистр
$t0
(напримерr $t0 = 5; {above-code}
).Объяснение:
Пример вывода:
источник
JavaScript,
6158 байтСохранено 3 байта благодаря @lmis !
(Не обрабатывает
0
или1
)За 13 дополнительных байтов (при 71 байте ) вы можете!
Эти решения довольно просты: они занимают много места, чтобы не повторяться, чтобы сэкономить несколько байтов. Unminified без variablsm это будет выглядеть так:
Попытайся!
источник
!n?'':n==1?'#':
дополнительные 15 байтов в начале тела функции, вы можете обрабатывать вводы0
и1
.n=>(b='#'[r='repeat'](n))
а потом#${" "[r](n-=2)}
и т. д. экономит 3 байта, избегая повторенияrepeat
:)Python, 109 байт
источник
list(' '*n)
на[' ']*n
. Вы также можете заменитьx%(n-1)
наx%~-n
for
блок в понимание списка, вы можете сохранить более 20 байтовint()
и скобки вокругprint
.<1
вместо==0
.Рубин, 39 байт
Оказывается, таким образом короче, чем все модные вещи, которые я пытался. Имейте в виду, что это не обрабатывает 0 или 1 вообще.
источник
Python 2, 50 байт
Работает для
n>=2
. Печатает каждую строку со знаком фунта,n-2
соответствующего символа, затем другой знак фунта.Псевдоним символа фунта дает такую же длину:
Другие попытки:
источник
Haskell, 49 байтов
Работает для
n>=2
. Определяет операцию размещения символа между#
дляn
-character новой строки с завершающим нулем, а затем подает его в два раза , чтобы сделать 2D сетки.Звоните как:
источник
C
8382807877 BytesПробирайся умножь и сохрани байт ...
Также отсчитайте j и сохраните еще несколько ...
Обратный отсчет от нуля до нуля и сохранение нескольких байтов ...
Чуть проще понять и на 1 байт больше
источник
&&
вместо&
?Groovy,
5150 байтисточник
PHP,
8169 байтБеги с
-r
; предоставить ввод в качестве аргумента.Кидает
DivisionByZeroError
для ввода =1
.источник
Р, 68
70байтРаботает для n> 1. Спасибо @Billywob за пару байтов, заменяющих массив для матрицы.
Использует rbind и cbind для размещения строк и столбцов в
#
n-2 квадратной матрице пробелов. Новые строки также привязаны к строкам. Новая строка в источнике значительна. Ввод от STDINисточник
\n
. Вы можете сохранить два байта, используяmatrix
вместо этогоarray
.Common Lisp,
150130 байт-20 благодаря @Cyoce и @AlexL.
Использование:
В основном используется
format
дважды для верха и низа и петли для строк между ними. Вызов формата для верхнего и нижнего выводит строку, начинающуюся с#
и дополняющую до соответствующей ширины с помощью#
s. Вызов формата для строк между ними работает аналогично, за исключением того, что отступы - это пробелы и#
в конце строки печатается .Примечание: я довольно плохо знаком с Лиспом и ожидаю, что у меня будет много возможностей для этого.
источник
s
? Или анонимная функция?dotimes (h (- v 2))
или может бытьdotimes(h(- v 2))
?Haskell, 67 байт
Пример использования:
Как это работает:
источник
Желе , 13, байт
TryItOnline! или попробуйте от 0 до 15
Как?
источник
Пип , 16 байт
15 байтов кода, +1 за
-n
флаг.Работает на ввод> = 2. Попробуйте онлайн!
Объяснение несколько нелепой версии
Сначала мы определяем функцию,
y
которая принимает строковый аргумент, повторяет егоa-2
раз (гдеa
находится первый ввод командной строки) и переносит результат в#
.Затем мы применяем эту функцию дважды - один раз нормально, затем снова с картой - чтобы получить квадрат в виде списка строк:
Для ввода
4
,(y s)
результатов в"# #"
иy M (y s)
в["####"; "# #"; "# #"; "####"]
. Это последнее значение затем печатается с-n
флагом, делающим его разделенным новой строкой.Уловки гольфа
Чтобы перейти от игры без игры в гольф:
Y
является оператором, что означает, что мы можем использовать его в выражении. Вместо того, чтобыY...
следовать(ys)
, мы можем просто сделать(Y...s)
.y
; такyM(Y_Xa-2WR'#s)
не сработает. Решение: поменяйте местами операндыM
оператора ap. Пока один из них является функцией, а другой - итеративным типом, не имеет значения, в каком порядке они входят.источник
Ракетка 113 байт
Ungolfed:
Тестирование:
Выход:
источник
SpecBAS - 57 байт
?
это сокращениеPRINT
,#13
является возврат каретки , который может быть добавленным к концу строки без необходимости+
присоединиться к ним.Апостроф перемещает курсор печати вниз на одну строку.
источник
Застрял,
2927 байтДовольно чертовски долго для языка "игры в гольф", но я забыл, как много это работает: P
Объяснение:
источник
C #,
154152 байтаGolfed:
Ungolfed:
EDIT1: оптимизация диапазона петли.
источник
Lithp , 117 байт
Строка разделена на две части для удобства чтения:
Пример использования:
источник