Для N
заданного числа выведите NxN прямоугольный треугольник, где каждая строка i
заполнена числами до i
.
пример
n = 0
(нет выхода)
n = 4
1
1 2
1 2 3
1 2 3 4
п = 10
1
1 2
1 2 3
.
.
.
1 2 3 4 5 6 7 8 9 10
(выравнивание не требуется)
n = N
1
1 2
1 2 3
.
.
.
1 2 3 4 .... N
В конце каждой строки нет пробела.
Наименьшее количество байтов побеждает, и стандартные лазейки не допускаются.
Ответы:
Джо ,
53 байта (+2 или +3 для-t
флага)Ну, очевидно, я не использовал весь потенциал Джо. Это было возможно еще тогда, когда я впервые опубликовал это.
Здесь
R
дает диапазон от 0 до n, эксклюзив. Затем\A
принимает последовательные префиксы этого (A
функция идентичности). Примеры:С
-t
флагом (примечание: теперь это стандартный вывод даже без флага):Без этого:
Правила немного изменились. Мой старый код не работал правильно с N = 0. Кроме того, теперь выходные данные могут быть просто вложенным списком, поэтому
-t
их можно отбросить.Теперь
Rn
дает диапазон от 0 до n, эксклюзив. Если задано 0, возвращается пустой список.1+
добавляет 1 к каждому элементу этого диапазона.1R
сопоставляет значения с диапазонами от 1 до x. Пустые лиаты, при отображении возвращают пустые списки.Пример вывода:
Обновление: я только что заметил что-то. Функция автоматически сопоставляется с рангом 0 элементов. Следующий пример запускается с
-t
флагом.Старый: 5 байт (с
-t
флагом)Это анонимная функция, которая принимает число, создает список от 1 до N (
1Rn
) и отображает эти значения в предыдущий диапазон, давая диапазон от 1 до x для каждого элемента в диапазоне от 1 до N.-t
Флаг дает выходной сигнал в виде J-подобной таблицы.Примечание: язык очень новый и не полный, но перед этим испытанием была выпущена последняя версия.
источник
Python 3,
4845 байтУра для побочных эффектов.
источник
print
чтобы выполнитьprint
с в обратном порядке.APL, 5
создает вектор 1..n и для каждого элемента другой такой вектор.
Тогда ⍪ делает столбец из всех векторов. Это позволяет избежать проблемы с конечными пробелами.
Попробуйте это на tryapl.org
Старое решение:
Создает вектор 1..n
{⎕ ← ⍳⍵} - это функция, которая выводит для каждого (¨) элемента вектор 1..n в отдельной строке
К сожалению, этого нельзя попробовать на tryapl.org, потому что ⎕ ← там не работает.
источник
J, 27 байт
J не подходит для числового вывода без массива. Эта функция создает правильно отформатированную строку из чисел.
Попробуйте это онлайн здесь.
источник
]\@i.
чтобы получить;@(<@,&LF@":@:>:@:]\@i.)
PHP, 53 байта
Изменить 2: Исмаэль Мигель предложил читать из ввода вместо определения функции, поэтому оценка теперь составляет 53 байта для PHP:
И еще раз, это может быть улучшено, если PHP настроен на игнорирование ошибок (52 байта):
Редактировать: Остин предложил 60-байтовую версию в комментариях:
Что можно улучшить, если мы не отображаем ошибки PHP (59 байт):
$a
хранит следующую строку, которая будет напечатана, и каждый раз, когда она печатается, пробел и следующий номер (print
всегда возвращается1
) конкатенируются к нему.Рекурсивные функции (65 байт):
Более короткая рекурсивная функция с отключенным сообщением об ошибках (64 байта):
Еще более короткая рекурсивная функция с отключенным сообщением об ошибках и пустой строкой перед реальным выводом (62 байта):
Просто для удовольствия, нерекурсивные функции:
источник
for($a=1;@$i<$n;$a.=" ".(@++$i+print"$a\n"));
for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));
(44 байта)function f($n){for($a=1;@$i++<$n;$a.=" ".($i+print"$a\n"));}
, что составляет 60 байтов.for($a=1;$i++<$n=$_GET[n];$a.=" ".($i+print"$a\n"));
-> попробуйте это (полный код, используя параметр urln
с номером)CJam,
1312 байтКак это работает :
Попробуйте онлайн здесь
источник
Pyth, 9 байт
Действительно думал, что это можно сделать короче, но это не так.
Попробуйте онлайн .
источник
VQaYhNjdY
. Если бы толькоa
вернули список, то что-то вродеVQjdaYhN
бы было 8.a
кратко используется для возврата в добавленный список.N+1+1-1
?r
- это функция диапазона Python, поэтому -1 (r1N
создает список[1, 2, ..., N-1]
). Но в N-й итерации цикла мне нужен список[1, 2, ..., N+1]
, поэтому мне нужно добавить2
кN
.r1hhN
переводит прямо вrange(1, N+1+1)
. Другая возможность будетr1+N2
(range(1, N+2)
).mhdhN
, но это совершенно другой подход.JavaScript (ES6) 49
52Такая простая задача, мне интересно, можно ли это сделать короче в JS (Обновление: да, с помощью рекурсии)
Рекурсивный 49
Итераив 52
источник
Java,
8584 байтаЭто удивительно мало в Java.
Отступ:
1 байт благодаря Bigtoes / Geobits
источник
b+=...
вprintln(b+=...)
.Пролог - 119
источник
Python 2 -
625465 байтисточник
n
следует указывать в качестве входных данных для программы, а не инициализировать в переменной.N
, делаяN=input()
или что-то подобное, чтобы ваша программа могла работать как таковая. Вот мета-обсуждение по теме.J, 9 символов
Как молчаливый, монадический глагол.
i. y
- числа от0
доy - 1
.1 + i. y
- числа от1
доy
.": y
- векторy
представленный в виде строки.":\ y
- каждый префиксy
представлен в виде строки.":\ 1 + i. y
- каждый префикс чисел от1
доy
представлен в виде матрицы символов.источник
> <> (Рыба) ,
4037 + 3 = 40 байтЕще раз,> <> неплохо справляется с другим упражнением по печати чисел. Запустите с
-v
флагом для ввода, напримеробъяснение
источник
C (без петель, да!) - 72 байта
Это создает функцию,
r(n)
которую можно использовать следующим образом:Посмотрите это в действии, здесь на tutorialspoint.com
Требуется очень мало трюков, которые легко объяснить. Я думаю, что это может быть значительно улучшено.
источник
b(n,c){if(n){b(n-1,32);printf("%d%c",n,c);}}r(n){if(n){r(n-1);b(n,10);}}
b(n,c){n&&b(n-1,32)^printf("%d%c",n,c);}r(n){n&&r(n-1)^b(n,10);}
Wandbox наPython 2 - 72
источник
p
. С другой стороны, вы можете удалить два пробела - один междуprint
и,'\n'
а другой между)))
иfor
.def p(N):print'\n'.join(' '.join(map(str,range(1,i+2)))for i in range(N))
Perl, 28
Читает параметр из стандартного ввода.
Из командной строки:
но я не знаю, как считать это (вероятно, между 25 и 29).
источник
питон
источник
for i in range(int(input())):print(' '.join("123456789"[:i+1]))
- Обратите внимание, что строки обрабатываются как списки.Golfscript 14
Ожидает, что входной номер будет присутствовать в стеке.
Пример в сети: ссылка
источник
клип , 16
объяснение
источник
Идти,
9381789390 байтТекущий негольфированный
Если нам нужно обработать N> 9, мы можем использовать следующее в 78 байтах, однако это требует импорта
fmt
пакета.Если мы включим оператор импорта, я вернусь к моей первоначальной
939290 байтПроверьте это онлайн здесь: http://play.golang.org/p/BWLQ9R6ilw
Версия с
fmt
здесь: http://play.golang.org/p/hQEkLvpiqtисточник
!=
на>
.import
заявление, хотяZX / Sinclair BASIC - 39 байт
ZX Basic использует 1 байт на ключевое слово (все заглавные слова), поэтому помогает немного уменьшить размер байта ...
Используя n = 8
источник
VAL("1")
(6 байтов, поскольку VAL равен 1), вставлен из1
(7 байтов))Р, 28
источник
[1]
в каждой строке нарушением спецификации.1; 1 0
. (Притворись,;
что это разрыв строки.)cat(1:i,"\n")
. Несмотря на то, что он немного длиннееprint(1:i)
, он не включает в себя ведущие[1]
в каждой строке.TI-Basic, 28 байтов
источник
C, 89 символов
Чтобы устранить путаницу по поводу
puts("");
. Это просто печатает символ новой строки (как видно здесь ):Я получил немного короче с Java-алгоритмом @ TheBestOne:
источник
puts("");
ничего не делает. Вы можете использоватьchar b[999]=""
вместо того,char b[999]={0}
чтобы сохранить 1 символ.puts("");
печатает символ новой строки.Perl: 34 символа
Этот код получает входной номер, указанный через специальную переменную
$_
.источник
print"@$_\n"for map[1..$_],1..$_
тоже работает.C # - 94 байта
Написано как анонимная функция, которая возвращает строку, которая не запрещена спецификацией.
Вот негольфированная версия (комментарии читаются в порядке BDCA):
источник
Bash + coreutils, 26 байт
seq
просто генерирует числа от 1 до пsed
сохраняет весь вывод для данной строки в области удержания, а затем добавляет к ней следующую строку.источник
Haskell,
6257 байтБессмысленный стиль. Пример использования:
источник
e=enumFromTo 1
экономит 7 байтов.enumFromTo 1
, я тоже должен дать имя главной функции, так что это 5 байт. Без названия это была быlet
конструкция:let e=enumFromTo 1 in (putStr.unlines.map(unwords.map show.e).e) 5
Математика, 32
источник
TableForm[Range/@Range@#]&
?Grid[Range/@Range@#]&
Grid
.)Scala,
736562 байтаUngolfed
источник