Создание скрещенного квадрата
Вам нужно ввести целое число, равное одному или нескольким, и вывести квадрат, сделанный из любого печатного символа по вашему выбору, с диагональным крестом через центр.
Общая идея состоит в том, чтобы на выходе был полый квадрат с диагональным крестом:
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
В приведенном выше примере «*» представляют внешнее поле, а «#» - диагональный крест.
Обратите внимание, что в приведенном выше примере используются два разных символа, чтобы было легче увидеть, как выглядит вывод, ваша программа должна использовать только один символ.
вход
Целое число 1 или более, оно гарантированно будет нечетным.
Выход
Квадрат, составленный из персонажа по вашему выбору с крестом посередине.
- Крест должен быть диагональным
- Квадрат может быть выведен через функцию или записан для вывода
- Конечные переводы в порядке
- Можно вывести в виде графика, диаграммы или изображения, если вы тоже хотите
Примеры
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Спекуляции
- Функции или полные программы разрешены
- Вы можете получить вход предпочитаемым способом
- Стандартные лазейки запрещены
- Программы должны работать без каких-либо дополнительных утверждений, т.
using
Е.C#
Они должны быть включены в запись - Вы можете вывести из функции или распечатать результат
Это код гольф, поэтому выигрывает самое короткое решение.
0,1,2,3,...
?n
и напечатать квадрат размера2n+1
.*
но для него это будет ввод 0?1
даст ваш пример для3
.Ответы:
MATL ,
201917 байтВы можете попробовать это экспериментально в MATL онлайн . Возможно, вам придется обновить страницу, если она не работает.
Образец прогона:
Версия ASCII: 19 байт
Попробуйте онлайн!
источник
VBA Excel, 168 байт
Инструкция:
Я считаю, что Excel с помощью VBA является эффективным и достаточным инструментом для решения этой задачи. Установите лист Excel следующим образом
Да, мы используем маленькие, классические квадратные пиксели, как в старые времена, используя ячейки на листе в качестве пикселей. Ха-ха ...
Здесь я использую ячейку A1 в качестве ввода и меняю цвет шрифта на красный. Почему красный? Потому что красный цвет состоит из трех букв, поэтому он подходит для игры в гольф. Напишите и запустите следующий код в Immediate Window:
Разрушил код:
Пошаговое объяснение:
Цикл по диагонали ячеек диапазона:
Cells(i, i).Interior.Color = vbRed
Последний шаг и вывод:
Cells(i, N + 1 - i).Interior.Color = vbRed
источник
Cells.RowHeight=48:set r=[A1]:r.Resize(r,r).Interior.Color=0:[B2].Resize(r-2,r-2).Clear:For i=1To[A1]:set r=Union(r,Cells(i,i),Cells(i,r-i+1)):Next:r.Interior.Color=0
JavaScript (ES6), 96 байт
источник
Python 2, 65 байт
Использует идею Джонатана Аллана о выводе двоичных чисел, таких как:
Строки создаются с использованием битовой арифметики и отображаются в двоичном виде. Каждая часть это или введены в остальные. Части произведены степенями 2
n
(фиксированными) иi
(падающими) через1
n
i
иn/i
n-1
когдаi==1
илиi==n
.Фактически, (1) и (4) объединяются, производя,
1
когда1<i<n
иn-1
иначе.источник
Python,
114 110 9690 байтПолностью изменилось:
Возвращает список строк, символов с использованием
1
и0
.-6 байт благодаря TheBikingViking
Проверьте это на Ideone
Предыдущий Python 2 @ 110
Проверьте это на Ideone
источник
lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)]
.Java 7,
131130128125124122 байта3 байта сохранены благодаря @LeakyNun ;
1 байт сохранен благодаря @ OliverGrégoire в моем ответе на Рисование пустого квадрата # с заданным значением ширины ;
2 байта сохранены благодаря @cliffroot .
Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
String c(int n){String r="";for(int i=-1,j;++i<n;r+="\n")for(j=0;j<n;r+=i<1|j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ")return r;}
Сохранено 4 байта;
внутренний цикл.i-->0
а неn-->0
вы можете использоватьi*j<1
вместоi<1|j<1
2 байтовMatlab,
68 66 6458 байтПоскольку графический вывод также разрешен:
Какие выходы например
Версии ascii only будут:
Это использует индексацию
0,1,2,3,...
Альтернативно с индексацией
1,3,7,...
:источник
C #,
112101 байтСпасибо TheLethalCoder за напоминание о том, что эти анонимные лямбда-выражения-выражения-выражения разрешены в C #.
Кто сказал, что C # не веселый язык для игры в гольф?
источник
Логотип, 155 байт
Графическое решение, реализованное как функция
Я переписал свой ответ на Алфавитный треугольник и немного изменил углы вокруг. Как и прежде,
r
рисует линию символов. На этот разb
функция рисует прямоугольник, рисуя один прямой край и одну диагональ, вращая и повторяя четыре раза. Это приводит к тому, что диагонали рисуются дважды (друг над другом), но кода было меньше, чем обрабатывать отдельно. Этот ответ также правильно обрабатывает четные числа. Мне пришлось добавить специальную обработку для ввода,1
чтобы предотвратить его дальнейшее развитие.Я реализовал это как функцию,
b
которая принимает размер в качестве аргумента:Попробуйте это на интерпретаторе логотипа Calormen.com . Чтобы позвонить, добавьте строку и позвоните
b
в следующем формате:... или попробуйте блюдо для сэмплера, которое рисует четыре образца размером 5, 7, 9 и 11, поворачиваясь на 90 градусов между ними:
источник
R, 102 байта
Обратите внимание, что более эффективно выразить условие с использованием% в%, чем i == 1 | j == 1 | ...
источник
n=scan();for(i in n:1){for(j in n:2){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(i,n))z="*";cat(z)};cat("*\n")}
Haskell,
102100969187 байтany
any
наelem
Безголовая версия:
Я уверен, что это все еще можно улучшить, но это то, что я придумал на данный момент.
Старая версия:
источник
[1..s]
дважды, я думаю, вы могли бы определить это вwhere
.c s=unlines$(\m->(m#)<$>z)<$>z where z=[1..s];m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
<$>[1..s]
в функцию, верно? Нравитсяc s=unlines$f(\m->f(m#))where m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' ';f=(<$>[1..s])
c s=unlines$f$f.(#)where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
Java, 130 байт
Тестовая программа
источник
int
предыдущийj
и использоватьint i=0,j;
вместо этого. Вы также можете заменить все||
на|
и удалить круглые скобки в троичной проверке. Кроме того, вы используетеs-1
четыре раза, поэтому я бы поместил это в переменную. Кроме того , вы можете изменить==0
к<1
. Таким образом, в итоге он становитсяs->{for(int i=0,j,x=s-1;i<s;i++)for(j=0;j<s;j++)System.out.print(x-i==j|i==j|i<1|j<1|i==x|j==x?j==x?"*\n":"*":" ");}
( 116 байт ) немного короче, чем мой ответ на Java 7 , так что хороший подход!C
140121114 байтов19 байтов благодаря Квентину.
7 байтов сохраняются при переключении из цикла с двойным вложением в один цикл.
Предложения по игре в гольф приветствуются.
источник
int i,j;for(i=0;
кfor(int i=0,j;
int i,j;
послеscanf
!n+~i-j
и т. Д.#include
полностью.PowerShell (133)
Неуклюжий, но это работает достаточно хорошо.
Предложения по игре в гольф, безусловно, приветствуются, прошло слишком много времени с тех пор, как я использовал PowerShell.
источник
СИЛОС , 212 байт
Попробуйте онлайн!
источник
GNU sed,
117114 + 1 (флаг r) = 115 байтТак как sed не имеет встроенной поддержки чисел, ввод дается в унарном формате на основе этого консенсуса . Вторая половина квадрата - это первая половина, которая была сохранена в обратном порядке в трюме.
Бег:
Выход:
источник
Python, 89 байт
Это был возврат! Я использовал модуль черепахи Python.
Вот результат, когда n = 200:
источник
Scala,
141137 байтБег:
$ scala cross.scala 10
Технически я мог бы удалить материал для печати и перейти к чему-то вроде
Это будет 135 или 121 байт в зависимости от того, считаете ли вы синтаксис функции.
Читаемая версия:
источник
Pyth,
2725 байтПопробуйте онлайн!
Вероятно, гольф.
источник
Python 2, 83 байта
Изменяет список символов строки, чтобы поместить
*
в первое, последнее, i и i до последнего места. Первый и последний ряд начинаются как все*
, а остальные как все пробелы. Работает и на вечер.lambda
Выражение, вероятно , короче , чем модификации, но мне нравится этот метод.источник
Пайк,
282423 байтаПопробуй это здесь!
источник
Mathematica, 81 байт
Создает систему координат с началом координат в центре и вычисляет, куда
*
должны идти s. Выводит массив строк, по одной на строку.источник
Javascript (
289270 байт)Ungolfed:
РЕДАКТИРОВАТЬ: Сохранено 19 байтов благодаря Филипп Фленкер.
источник
size==1
Perl 83 +1 = 84 байта
Беги с
-n
флагом.Буквальный перевод строки сохраняет на 1 байт больше
\n
или$/
.Удобочитаемый:
Код печатает верхнюю строку и сохраняет ее
$c
, затем печатает группу пробелов с соответствующими слотами, замененными наa
s, затем снова печатает верхнюю строку.Присвоение
$\
переменной указывает интерпретатору печатать содержимое (звездочку, символ новой строки и другую звездочку) после каждогоprint
, но это НЕ происходит после asay
.источник
SmileBASIC, 46 байтов
(Нет, SB НЕ использует 1-индексированную графику ...)
источник
Древесный уголь, 8 байт (неконкурентоспособен; вызов языковых постдатов)
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение: При использовании в качестве параметра
PolygonHollow
команды+
рисует прямоугольник, а стрелки затем создают диагонали. Существуют и другие символы быстрого доступа, но их необходимо переопределить, чтобы они были полезны, напримерY
, эквивалентно,↖↗↓
но если бы оно было эквивалентным,↗↓↖
то этогоY+
было бы достаточно.источник
ОБОЛОЧКА ( 135 байт ):
Тесты:
источник
Котлин ,
123116 байтизменить, если с \ n на println
Попробуйте онлайн!
источник