Эта задача касается печати серии растущих стрелок ASCII-art. Я опишу шаблон словами, но может быть проще взглянуть на то, как выглядит начало этой серии:
>
<
->
<-
-->
<--
--->
<---
---->
<----
----->
<-----
------>
<------
...
Стрелка длиной n содержит стрелку ( <
или >
) и n-1
тире ( -
). Направленная вправо стрелка имеет сначала тире, а затем a >
. Левая стрелка начинается с <
и сопровождается черточками. Серия состоит из n
стрелки со стрелкой вправо длиной, за которой следует стрелка, указывающая длину n, с n от 1 до бесконечности.
Чтобы выполнить задачу, напишите программу или функцию, которая принимает одно входное значение, целое число i >= 1
и выводит первые i
стрелки. Стрелки индивидуальны, а не в парах вправо-влево, поэтому i=3
вы должны вывести:
>
<
->
Вы можете вернуть список строк или распечатать их одну за другой. При печати стрелки должны быть разделены каким-либо непротиворечивым разделителем, который не должен быть переводом строки, как в примере.
Это код-гольф , поэтому побеждает меньше байтов.
Ответы:
Холст , 10 байт
Попробуй это здесь!
источник
↔
вроде как похоже!↔
это встроенная>
<
R 69 байт
Попробуйте онлайн!
источник
strrep
приводит второй аргумент,integer
чтобы вы могли использовать/
вместо%/%
a
полностью избавиться от индексации0...(n-1)
: попробуйте онлайн!Java (JDK) , 81 байт
Попробуйте онлайн!
Пояснения
источник
import java.util.function.*;
считается?Haskell,
4140 байтПопробуйте онлайн!
Обычная старая рекурсия: начните со строки
p
=">"
, собирайтеp
,<
перед всеми, кроме последнего символа,p
и рекурсивного вызова с одним-
передp
. Возьмите первыеn
пункты этого списка.Редактировать: -1 байт благодаря @xnor.
источник
Commodore BASIC V2 (C64), 94 байта
Не совсем уверен насчет количества байтов, это основано на текстовом представлении для ввода правильной программы. На диске он немного короче (91 байт), потому что BASIC V2 использует «токенизированное» представление программ.
Демо онлайн
Слегка "разгул"
источник
Самомодифицирующийся Brainfuck , 55 байтов
Принять ввод как код символа.
Поддерживает ввод только до 255.
Используйте нулевой символ для разделения строк.
По совпадению, все символы рисования стрелок используются в качестве команд BF. К сожалению, это не сохраняет никаких байтов (в настоящее время).
Попробуйте онлайн!
объяснение
источник
Python 2 , 54 байта
Спасибо и Джо Кингу за исправление ошибки.
Попробуйте онлайн!
источник
Pyth, 17 байт
Вывод представляет собой список строк. Попробуйте это онлайн здесь .
источник
PowerShell ,
625650 байтПопробуйте онлайн!
Цикл от
0
ввода до ввода$n
, каждая итерация создает две строки стрелок. Затем они индексируются,0..--$n
чтобы вытащить правильное количество элементов.Сохранено 6 байтов благодаря KGlasier.
источник
param($n)(0..$n|%{($j='-'*$_++)+'>';"<$j"})[0..--$n]
. Так что теперь вам не нужно писать$x
дважды.++
in,($j='-'*$_++)
поскольку вы больше$_
нигде не используете .Python 3, 53 байта
Мой первый ответ Codegolf.
-10 байт благодаря Джо Кингу
источник
Haskell ,
5144 байта-7 байт благодаря xnor (используя
iterate
over-list-compceptionsion)!Попробуйте онлайн!
Объяснение / Ungolfed
Использование
do
-notation спасает насconcat
, а использование infix-notation позволяет использовать функцию pointfree, отменаtake
которой даст:источник
Джапт
-m
,16151312 байтСохранено 1 байт благодаря Shaggy
Протестируйте это онлайн
Объяснение:
источник
Желе , 15 байт
Попробуйте онлайн!
источник
MathGolf ,
1715 байтСохранено 2 байта благодаря Джо Кингу и Кевину Круйссену
Попробуйте онлайн!
объяснение
15-байтовый подход отличается от моего исходного решения, я не могу взять на себя ответственность за реализацию.
источник
if/else
работает в MathGolf? Я знаю, как работают операторы if-без-else и else-без-if, но как создать if {...} else {...} в MathGolf с помощью¿
? (Может быть, я должен опубликовать это в чате, а не здесь ... Но я мог бы сохранить 1 байт, если смогу исправить if-else.)¿12
, нажмет 1, если true, иначе 2,¿Å3*Å1+
добавит один, если true, иначе утроит следующий элемент¿{"foo"}{"bar"}
или¿1{2}
.Japt
-m
, 14 байтПопробуйте онлайн!
Обновлен совершенно новым методом.
Объяснение:
источник
ç
автоматически преобразует первый параметр в строку, поэтому вы можете удалить'
.u
метод благодаря переносу индекса, так что это может быть 14 байтов.C (gcc) ,
8077767471 байтПопробуйте онлайн!
-3 байта с идеей только из ASCII .
-1 с
\0
вместо\n
-5 перестановка деталей
Вывод включает в себя трейлинг
\0
.источник
!n--
в первом кодовом блокеJavaScript (ES6), 58 байт
Возвращает разделенную пробелами строку.
Попробуйте онлайн!
источник
СНОБОЛ4 (CSNOBOL4) ,
123122118 байтПопробуйте онлайн!
источник
V , 22 байта
Попробуйте онлайн!
источник
Древесный уголь , 16 байт
Попробуйте онлайн! Ссылка на подробную версию кода. У меня было три 17-байтовых решения, прежде чем я наткнулся на это. Объяснение:
Вход
n
.Повторите
n
раз, 0-проиндексированы.Нарисуйте линию
-
s длины, равной половине индекса (усеченной).Нарисуйте стрелку и перейдите к следующей строке.
Отражать все, переворачивая стрелки.
Вышеуказанный цикл имеет
n
отражения, но нам нужно четное количество отражений, поэтому выполните другоеn
отражение.источник
Чисто ,
7673 байтаПопробуйте онлайн!
Использует аккуратный факт, который так
['-','-'..]
же, как['--'..]
сэкономить немного.источник
JavaScript, 49 байт
Попробуйте онлайн!
источник
10000
, мое решение ES6 все еще работает: D В любом случае, ваше решение очень крутое)Powershell, 51 байт
источник
6502 машинный код (C64), 49 байтов
Все еще немного короче, чем BASIC ;) У этого есть диапазон чисел только до,
255
потому что естественный целочисленный размер машины имеет только 8 бит.Онлайн демо
Использование:
SYS49152,[n]
(например,SYS49152,3
для примера из задачи)Прокомментировал разборку :
источник
Perl 6 , 39 байт
Попробуйте онлайн!
Блок анонимного кода, который возвращает список строк.
источник
K (нгн / к) ,
3129 байтПопробуйте онлайн!
сначала мы генерируем списки с 0 вместо
"<"
, 1 вместо"-"
и 2 вместо">"
:{
}
функция с аргументомx
x{
...}\0
применить время внутренней функцииx
, начиная с начального значения0
и сохраняя промежуточные результаты|x
обратный2-
замените 0 на 2 и наоборот, оставьте 1 как есть1,
добавить 1(1=*x)_
первый изx
равен 1? если да, удалить один элемент, иначе удалить 0 элементов (ничего не делать)2,
добавить 2 для начальной">"
стрелкиx#
у нас слишком много списков, поэтому возьмите только первыйx
из них"<->"
использовать элементы списков (0/1/2) в качестве индексов в этой строкеисточник
05AB1E ,
2320 байтПопробуйте онлайн!
Впервые использую 05AB1E или любой другой язык для игры в гольф. Любые идеи приветствуются.
-3 от Кевина Круйссена
источник
"><"
можно„><
сохранить байт. Есть встроенные функции для 1, 2, 3 и символьных строк, будучи'
,„
и…
соответственно. Вот 18-байтовая альтернатива, которую я придумал, но, возможно, ее можно было бы сыграть немного больше. Если вы еще этого не видели, у нас есть советы по игре в гольф на странице 05AB1E , а также вы можете задать любой вопрос в чате .C # (.NET Core) , 90 байт
Попробуйте онлайн!
Использует делегат действия для ввода ввода и не требует возврата.
Ungolfed:
источник
ES6,
96827970 байтПопробуйте онлайн! (Спасибо @Oliver)
источник
i=>
перед вашим кодом!) или из аргумента командной строки или STDIN или что-то еще.Красный ,
109108 байт-1 байт благодаря NK1406
Попробуйте онлайн!
источник