Для любой строки выведите ее в форме треугольника, где текст проходит вверх и вниз по каждой диагонали. Например, вход "Hello World"
должен вывести:
d
l
r d
o l
W r d
o l
o W r d
l o l
l o W r d
e l o l
H l o W r d
e l o l
l o W r d
l o l
o W r d
o l
W r d
o l
r d
l
d
Пробел между каждым символом в строке должен быть не менее 1, чтобы поддерживать правильный формат.
code-golf
string
ascii-art
code-golf
string
abstract-algebra
code-golf
ascii-art
binary
fractal
code-golf
array-manipulation
sorting
permutations
code-golf
code-generation
code-golf
sequence
binary
code-golf
date
code-golf
array-manipulation
restricted-source
decision-problem
primes
code-golf
multi-threading
code-golf
array-manipulation
code-challenge
decision-problem
natural-language
test-battery
code-golf
array-manipulation
code-golf
array-manipulation
code-golf
code-golf
graph-theory
Макиавелли
источник
источник
H l o W r d
является допустимой центральной строкой? Спросите, потому что в вашем примере каждая строка имеет 3 пробела между каждым символом.Ответы:
Древесный уголь ,
107 байтПопробуйте онлайн!Попробуйте онлайн! Ссылки на подробную версию кода. Объяснение:Впервые я использовалUE
команду.источник
UE
...UE
..05AB1E ,
1087 байтСпасибо Emigna за сохранение 2 байта!
Использует кодировку 05AB1E . Попробуйте онлайн!
источник
¶«
. (также проверил действительность с OP)â
вðâ
вместоSð«
!Python 2 , 75 байт
Попробуйте онлайн!
Рууд сэкономил 3 байта.
источник
C
86787370 символовПопробуйте онлайн!
объяснение
Наивная реализация: два цикла, заполнение сверху вниз, слева направо (99 байт):
Здесь put () просто печатает \ n на выходе. Давайте объединим объявления переменных и совместим j ++ с чем-либо (94 байта):
Хорошо. Переменная j имеет диапазон 0 ... 2n; пусть это будет в пределах -n ... n, это упрощает математику. Обратите внимание, что логическое выражение справа от && всегда имеет значение 0 или 1. Это означает, что мы можем заменить && на &. 91 байт:
И теперь мы поняли, что печатаем лишнее пространство. И да, нам не нужно printf () для печати только одного символа. 86 байт:
Даже лучше. Обратите внимание, что условие i * i> = j * j такое же, как i> = abs (j), но короче. Давайте переместим put () в выражение для приращения цикла. И угадайте, что? На самом деле, нам не нужны скобки вокруг i + j. 78 байт:
Знаете ли вы, что putchar () возвращает напечатанный символ? Давайте использовать XOR для проверки чисел на эквивалентность. Давайте заменим пробел кодом ASCII, 32. Помните, что символ конца строки равен 13. И, наконец: знаете ли вы, что GCC / Clang поддерживает https://en.wikipedia.org/wiki/Elvis_operator ? 73 байта:
Наконец, угадайте что? Нам не нужны две петли. Мы можем заменить уродливый ~ i + j просто ij. 70 байтов:
Будущая работа: изменить направление петли? Это может сэкономить несколько байтов, если все сделано правильно.
источник
SOGL V0.12 ,
13109 байтовЭто использует функцию, которую я только что добавил , но был задокументирован некоторое время назад.
Попробуй это здесь!
В эту ссылку
,
добавляется, потому что это ожидает ввода в стек и{
добавляется, потому что в противном случае,
будет выполняться каждый раз в циклеисточник
Haskell , 73 байта
Попробуйте онлайн!
источник
Gaia , 16 байт
Попробуйте онлайн!
объяснение
источник
Python 2 ,
8683 байта-3 спасибо официалам
Попробуйте онлайн!
источник
Желе , 15 байт
Попробуйте онлайн!
источник
Октава,
59635857 байтПопробуйте онлайн!
источник
99
: good idea :-)Java, 292 байта (извините)
источник
boolean a=1<0,o=L%2>0;
.. 2. Если вам не нужноi
использовать этот цикл:for(i=0;i++<n;)
. 3. Вы можете избавиться отo
:j%2<L%2
тогдаj%2>L%2
. 4. Использованиеd
функции flip занимает столько символов: просто сделайтеj<(x<0?-x:x)
. 5. У вас больше переменных, чем нужно. 6. Вам не нужна полная программа: достаточно лямбды или метода. - Если вы хотите пример игры в гольф на Java, проверьте мой ответ .Haskell , 81 байт
Попробуйте онлайн!
источник
Java (OpenJDK 8) , 116 байт
Попробуйте онлайн!
объяснение
источник
C ++, 135 байт
Хорошо, вот мой снимок с C ++:
Попробуйте онлайн (ideone)!
источник
Haskell ,
140137 байтПопробуйте онлайн!
Сохранено 3 байта спасибо Challenger5
Я не думаю, что это оптимально ...
f
производит одну из строк (m
= 0 или 1 по модулю номера строки,n
это номер строки)g
интеркалирует «нечетные» и «четные» строки и добавляет к результату зеркало самого себя.источник
f
как инфиксную функцию (как в(m#n)s=...
), а не как префиксную функцию.Pyth , 25 байт
Попробуй это здесь.
источник
Желе , 18 байт
Попробуйте онлайн!
источник
Mathematica 105 байт
Может быть, я мог бы сбрить еще один или два байта, но накладные расходы на счет символов при работе со строками в Mathematica делают такие простые задачи неконкурентоспособными.
источник
J 54 байта
Попробуйте онлайн!(обратите внимание, что вывод на TIO имеет новую строку и три пробела, но это не из вызова функции - это, вероятно, то, что интерпретатор J делает автоматически).
Я думаю, что общая идея для решения этой проблемы верна, но есть небольшие вещи, которые я, вероятно, делаю неоптимально, которые добавляют к счету байтов.
Предыдущие варианты
55 байт
56 байт
объяснение
Это будет разделено на несколько функций. Кроме того, я не был настолько внимателен с последними частями объяснения, поэтому дайте мне знать, если вы хотите более подробное объяснение определенной части, и я могу отредактировать это в.
dup
дублирует каждый символ столько раз, сколько его индекс (плюс один) в строкеspace
вставляет пробелы между каждым символомpad
дополняет символы нужным количеством пробеловtrans
транспонирует полученную матрицуОбразец звонка:
дубликат
Результаты помещены в рамку, чтобы предотвратить заполнение J пробелами (поскольку они имеют неравную длину).
Образец звонка:
Космос
Образец звонка:
подушечка
В основном, отступ первого элемента с длиной - 1 пробел, второго с длиной - 2 и т. Д. Также удаляется бокс.
Образец звонка:
Транспонирование
Это просто встроенная функция,
|:
которая выполняет транспонирование матрицы.источник
|:@(-@i.@-@#|."0 1((,@,.~' '#~#)@$"0~1+i.@#))
. это, безусловно, может быть дальше. эта часть-@i.@-@#
- какой-то низко висящий фрукт, скорее всегоf=. <some tacit expression>
затем5!:2 <'f'
дает коробочную визуализацию и5!:4 <'f'
дает древовидную визуализацию. в моем случае попробуйте$"0~1+i.@#
сначала запустить с какой-нибудь строкой, затем запустить все справа от|."0 1
, затем понять, что|."0 1
и все слева, кроме окончательной транспонирования, просто выполняет необходимые повороты.#
|:@((-#)|."_1(1j1##)"0)~#\
JavaScript (ECMAScript 6), 161 байт
Попробуйте онлайн!
источник
Perl 5 , 86 + 2 (-F) = 88 байт
Использовал предложения @ Dom и несколько моих собственных настроек, чтобы уменьшить количество байтов.
Попробуйте онлайн!
источник
-aF
для ввода всех букв,@F
и несколько небольших настроек (-F
считается как 3, так как после этого требуется пробел): попробуйте онлайн!perl -e'code...'
иperl -eF 'code...'
? Также-a
не-F
требуется при использовании , чтобы можно было вырезать байт.-F
принимает аргумент, но мы не хотим его передавать (-F
позволяет нам контролировать то,-a
на что делится, без аргументов, разделять каждый символ самостоятельно), так что это разница междуperl -ae '...'
иperl -aF -e '...'
. По умолчанию-a
разделяется на/\s+/
. Надеюсь, это поможет уточнить!$#F
! Всегда забудь об этом!q / kdb +, 55 байт
Решение:
Пример:
Объяснение:
СДЕЛАТЬ. Развернутая версия - 66 байт:
Бонус:
Чтобы получить тот же вывод, что и в примере (74 байта):
источник