Все любят геометрию. Так почему бы нам не попробовать и написать код в гольф? Эта задача включает в себя прием букв и цифр и создание фигур в зависимости от этого.
Вход
Вход будет в форме (shapeIdentifier)(size)(inverter)
.
Но что такое shapeIdentifier, размер и инвертор?
Идентификатор фигуры - это идентификатор типа фигуры, который вы будете создавать с помощью *
s. Ниже приведены идентификаторы формы:
s
- Площадьt
- треугольник
Размер будет между 1-20
, и это размер фигуры.
Инвертор определяет, будет ли форма перевернутой, что обозначается буквой а +
или а -
. Обратите внимание: s3-
== (равно), s3+
потому что квадраты симметричны. Однако t5-
! = (Не равно) t5+
.
Конечные пробелы в выходных данных допустимы, а начальные пробелы - нет.
Примеры вывода
Input: s3+
Output:
***
***
***
Input: t5+
Output:
*
***
*****
Input: t3-
Output:
***
*
Особые заметки
Ввод треугольника всегда будет нечетным числом, поэтому треугольники всегда будут заканчиваться цифрой 1 *
вверху.
Размер треугольника - это размер основания, если инвертор есть,
+
и размер вершины, если инвертор есть-
.
источник
Ответы:
Pyth,
40363432 байта-1 байт @isaacg
Точка с запятой внутри лямбды - теперь глобальное значение лямбда-переменной, функция, которая сохраняет один байт.
Попробуй это здесь .
Тестовый пакет .
источник
qez\+
с}\+z
, потому что+
может появиться только в последней позиции.Pyth, 38 байт
Тестирование
В основном так просто, как это получается. Хотелось бы объединить некоторую логику для двух фигур, но в настоящее время она разделена.
источник
JavaScript (ES6), 142
146 147Редактирование 1 байта сохранено thx @ETHproductions Редактирование 2 байта sve thx @ user81655
Тест (запустить в FireFox)
источник
\d
->.
, поскольку там гарантированно будет ровно одна нецифровка до и послеi.match(/.(.+)(.)/)
->i.match`.(.+)(.)`
Python 2, 106 байт
На выходе получается идеальный прямоугольник с каждой строкой, дополненной конечными пробелами, что, я полагаю, хорошо, основываясь на комментариях в ОП.
Примечание: я до сих пор не уверен,
input
разрешено ли в Python 2 для подобных проблем ...источник
Japt,
6260555251 байтПопробуйте онлайн!
Первое, что нам нужно сделать, это выяснить, насколько большой должна быть наша форма. Это довольно просто:
Теперь мы организуем форму вывода:
К настоящему времени мы позаботились о размере и форме вывода. Осталось только вращение. Треугольники в настоящее время направлены вверх, поэтому нам нужно перевернуть их, если третий символ
+
:И с неявным выводом наша работа здесь завершена. :-)
источник
Python 2,
235193167157 байтОбновить:
Сделал некоторую значительную оптимизацию, используя списки и str.center (). У меня такое чувство, что я могу сделать еще кое-что, собираюсь по-новому взглянуть на это позже.
Обновление 2
Сохранено 10 байт с предложениями Sherlock9. Большое спасибо! :)
Старый ответ
Довольно простой подход. Запись строки в строку в строке, которую я вывожу в конце. Треугольники всегда рисуются перевернутыми и при необходимости переворачиваются. Тот факт, что вы можете умножить строку на целое число, сэкономил мне много байтов!
Я постараюсь сыграть в эту игру чуть позже, в то же время буду признателен за предложения, так как я еще не очень разбираюсь в этом.
редактировать: играли в него много с помощью комментариев и кражи расчета размера из одного из других ответов на python. Я думаю, что больше всего я могу сделать с этим алгоритмом.
источник
wc
этого дает мне количество байтов 235. Я ошибаюсь?raw_input
, используяinput
экономит 4 байта. Кроме того, вам не нужны скобки во второй строке, это и вообще не использование переменнойx
(использованиеif"s"in d
) экономит вам еще 9 байтов.[]
скобки в каждом вызовеjoin
функции. Во-вторых,if d<"t"else
короче и работает потому что"s3+"<"t"<"t3+"
в Python. В-третьих,else"\n".join
и.center(x)for
. Нет места. Это не обязательно. В- четвертых,print o[::-1]if"+"in d else o
когда я переставить вещи для двух байтов (один пробел между]
иif
и другой междуif
и"+"
.JavaScript, 220 байт.
Бежать с
f(input here)
Попробуй это здесь!
Квадраты имеют завершающие символы новой строки, а треугольники - нет. Объяснение:
источник
Python 2,
157132 байтаПервая попытка показала, что
+/-
конец не обязателен, избавившись от этого, позвольте мне сбрить кучуИдея здесь состоит в том, чтобы создать список, который можно добавить в общий вывод. Сложнее всего было отделить длину от входа.
источник
x=int(d[1]if len(d)<4 else d[1:3])
d как строку ввода. Это на 5 байт короче вашего решения. Вы все еще далеко впереди моего python-ответа, но постарайтесь понять, что вы там сделали, и победить вас в следующий раз! :)x=int(d[1:-1])
это намного короче, только что видел это в другом ответе Python.Сетчатка ,
10285 байтПодсчет байтов предполагает, что исходный код закодирован как ISO 8859-1.
Попробуйте онлайн.
Я попробую сыграть в гольф еще немного позже.
источник
\n
вместо\r\n
. Base64 контента:XGQrCiQwJCo6wrYKXigoXHcpKyk6KDorKQokMSQyJDMkMsK2JDAKbWBzJHw6dAoKKWAoLispwrYtKFxEKikKLSQywrYkMQptYF4uCgpHYC4KVGB0czpgICo=
(прямое копирование из Notepad ++). Как ни странно, любое онлайн-решение дает мне 85 байт ... Хум ...¶
. Это определенно один байт в ISO 8859-1 (со значением 182).Серьезно, 54 байта
Попробуйте онлайн
@Mego: Видишь это
#dXdXεj
? STRING SLICING ????источник
ES6,
178172159 байтЭто работает из-за интересного наблюдения, которое я сделал. Если вы повторяете
n
пробелы иn
звездочки, вы получаете (например, дляn=5
) это:Теперь возьмем подстроки с одинаковым началом и длиной:
Эти подстроки являются именно теми строками, которые нам нужны
t5
.Редактировать: Сохранено 6 байтов благодаря @ edc65.
Редактировать: Сохранено 13 байтов благодаря сокрытию
u+=v
в третьем аргументе,substr
что позволяет мне упростить инициализацию.источник
t
код обработки, оказалось, чтоw
иu
стало эквивалентом и это спасло мне достаточно байт , чтобы взять меня обратно до 178![,b,c]=s.match
и позжеs<'t'
... следует сохранить несколько байтов (только Firefox)s
я могу использовать,s<'t'
что сэкономило мне 6 байтов, спасибо.MATL , 48 байтов
Использует текущую версию (10.1.0) языка / компилятора.
Код принимает входные символы в любом порядке: все
s11+
,11s+
и даже1+s1
бы допустимые входные строки.РЕДАКТИРОВАТЬ (30 июля 2016 г.): связанный код заменяется
1L3$)
на,Y)
чтобы соответствовать последним изменениям языкаПопробуйте онлайн!
объяснение
источник
C 259 байт
ungolfed
Предложения и критика очень приветствуются.
источник
Руби, 99
Вычисляет квадрат или треугольник высоты
n
и средней шириныn
, выравнивая наклон сторон (таким образом, рассчитанная ширина треугольника составляет 2n-1 в основании, 1 на кончике.) Но он печатает только те строки, которые не превышаютn
символов.разряженный в тестовой программе
источник
Джольф, 37 байт, неконкурентный
Я добавил функции после того, как этот вызов был опубликован, так что это не может рассматриваться для принятия. Это закодировано в ISO-8859-7. Попробуйте все контрольные примеры здесь .
Часть 1: разбор строки
Часть 2: получение результата
Часть 3: инвертирование результата
источник