Введение
Отчасти вдохновленный этим вопросом StackOverflow , давайте нарисуем ASCII Lightning Bolt.
Напишите программу, которая принимает положительное целое число n
через STDIN или командную строку и выводит молнию ASCII ниже.
вход
Положительное целое n
число, представляющее количество зигзагообразных ярусов молнии для рисования.
Пример вывода
п = 1
__
\ \
\ \
\ \
\/
п = 2
__
\ \
\ \
__\ \
\ __\
\ \
\ \
\/
п = 3
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
п = 4
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
, , , так далее
Дополнительные замечания
- Вы можете написать функцию, которая принимает
n
в качестве единственного аргумента и печатает или возвращает строку. - Конечные пробелы и новые строки в порядке.
- Нет начальных пробелов, кроме случаев, когда это подходит для обозначенного шаблона.
- Самый короткий код в байтах побеждает.
Ответы:
Ява,
201196189186182 байтаОчевидно , что не лучший, но это в Java.
источник
main
метода.main
не должно учитываться при подсчете байтов, и в некоторых языках, которые имеют подробные ключевые слова, возможно, следует разрешить макросы. Тогда было бы интересноCJam, 41 байт
Я, вероятно, могу выжать еще несколько байтов, но вот немного сжатия. Я выбрал базу, которая не привела бы к печати.
Попробуйте онлайн .
Молнии разделяются на
top + middle * (input-1) + bottom
, гдеtop
,middle
,bottom
(сжато с использованием преобразования базового) являются(Пробелы отмечены
.
)40 байт
Благодаря Оптимизатору
источник
top + middle * (input-1) + bottom
, он напомнил мне, что powershell может умножать строки: PJavaScript ( ES6 ) 76
Используя строку шаблона, 3 новых строки значимы и подсчитаны.
Тестовый запуск фрагмента (только Firefox)
источник
PowerShell,
7263 байтаГлупая винда и твой \ r \ n ... Это могло быть
6759 байт!источник
PHP -
84 7978 байтПросмотрите источник результатов или сверните,
<pre />
чтобы проверить результаты. Новые строки требуются в коде.-1 можно перенести в
define
, но я посчитал это читом.1-е улучшение: заменить на новые
\n
строки2-е: Поскольку я могу определить переменную, я использовал CONTANT, сохраняя
$
. + ненужный пробел в str_repeat3-й: Случайно удалил -1, но сохранил байт, используя
<?=
вместо echo.источник
Pyth,
6054 байта (спасибо @isaacg)Моя первая попытка Pyth, вероятно, очень плохо.
Проверьте это здесь .
источник
\n
. Также первым\\
в программе может быть просто\
.CJam, 50 байтов
Попробуй здесь
источник
Brainfuck, 164 байта
С комментариями:
Хорошо, как этот ответ Brainfuck побеждает Java и C #?
источник
> <> (Рыба), 409 байт
Выполнить,
fish.py bolt.fish --value n
гдеbolt.fish
имя программы иn
ваш положительный целочисленный ввод.Это не коротко, но выглядит круто. Я пытался сделать так, чтобы это выглядело как удар молнии. Кроме того, это всегда ошибки по завершении.
источник
Perl, 69 + 1
69 символов, плюс 1 для
-n
переключателя командной строки для получения ввода из стандартного ввода.Пример использования:
источник
perl -pe'$_="__\ns s"."__s\\ __\\\n s"x--$_." s \\/";s!s!\\ \\\n!g'
. Также\n
может быть заменен литералом разрыва строки для сохраненных еще 3 символов.Javascript (ES6), 86
Не выиграю, но я люблю 1-строчное решение и ненавижу слэши.
источник
atob
документациюC 101 байт
Моя не очень оригинальная реализация в c
источник
C #, 221 байт
Это не самый лучший или самый маленький ответ, но я решил попробовать. Ответ Fsacer намного короче, и я думаю, что вы должны проверить это. Я просто решил сделать это просто как альтернативный метод на самом деле.
источник
class C{static void Main(string[]n){var e=int.Parse(n[0]);var o=@"__{0}\ \{0} \ \{0}";while(e-->1){o+=@"__\ \{0}\ __\{0} \ \{0}";}System.Console.Write(o+@" \ \{0} \/{0}","\n");}}
C #, 166 байт
EDIT 1: улучшен результат с 186B до 173B
EDIT 2: сохранен 1B с использованием
PadLeft
вместоPadRight
EDIT 3: сохранен 8B путем удаления
PadLeft
второго параметра и использования дословных строковых литераловисточник
public
в начале, и вместо использования массива char вы можете использоватьString.PadRight(int, char)
, который короче и позволит вам использовать ascii char, который не нуждается в экранировании.Awk, 101 + 8 байт
101 символ плюс 8 для
-v n=$1
получения целого числа из оболочки.Новое на этом сайте SE, неясно , должны ли эти параметры учитываться.
Ungolfed
Пример использования:
источник
-v
детали нет необходимости . Не говоря уже о том, что сама идея переменной не нужна, как отдельныйEND
блок. 89 символов:{l="\\ \\";print"__\n"l"\n "l;for(;--$1;)print"__"l"\n\\ __\\\n "l;print" "l"\n \\/"}
pastebin.com/NCznF9kHPython
978278чар:Это мой первый код гольф
@ (^ _ ^) @
Тест здесь
источник
C
119108 байтПервая попытка, 150 байт
main
принимает аргумент int, поэтому запустите так:./lightning . . .
передать в4
качестве аргумента.источник
Питон 3,
126118117 байтПросто с чего-то начать.
источник
[0]*(n-1)
выполнить итерацию для полученияn-1
итераций. Вы также можете написать(n-1)
как~-n
.i in [0]
наi in[0]
.for i in[0]*~-n:p(' \\ \\\n__\\ \\\n\\ __\\')
.Python 2, 76 байт
Просто напечатайте первые три строки, затем напечатайте следующие три строки
n-1
, а затем напечатайте последние 2 строки. Все за один раз.И вот хорошая попытка альтернативы, которая (к сожалению) использует точно такое же количество байтов:
источник
*
, что дает мне 77 байтов - или не вставляет его, но стоит 79 байтов. :(F #, 98 символов, 105 байтов
источник
CJam 54 символа
не самое короткое, но с тех пор, как я начал CJam сегодня, я доволен этим.
Попытайся
источник
Паскаль:
149142141137 символовВ конце концов, единственная сила Pascal в игре в гольф заключается в том, что обратные слеши не нужно убегать
источник
for n:=2 to n do
тоже работает.Google Sheets, 60 байт
Функция анонимного рабочего листа, которая принимает данные из диапазона
[A1]
и выводит их в вызывающую ячейку.источник
Perl 5 , 58 + 1 (
-n
) = 59 байтПопробуйте онлайн!
источник
SpecBAS -
135104 байтаАпостроф в операторах PRINT перемещает курсор на новую строку.
SpecBAS позволяет включать символы ASCII в строку с помощью способа
#n
, поэтому встроены некоторые возвраты каретки (ASCII 13).Создайте строку, используя возврат каретки и другие символы, а затем
REP$
повторяйте ее необходимое количество раз.источник
PHP 155
Безголовая версия
источник
echo$l=PHP_EOL,"__$l";$g="\\ \\$l";for($i=0;$i<$argv[1];$i++){echo($i?"__$g\\ __\\$l":$g)," $g";}echo" $g",' \\/',$l;
$i=0
; снять скобки дляfor
петли; увеличить счетчик внутри цикла (echo($i++?"…
).Ява,
183180 байтЛуа, 110 байт
источник
Сетчатка , 46 байт
Принимает ввод как унарный.
Каждая строка должна идти в свой собственный файл и
#
должна быть заменена на новую строку в файлах. Это нецелесообразно, но вы можете запускать код как есть, как один файл, с-s
флагом, сохраняя#
маркеры. При желании вы можете изменить#
символы на новые строки в выходных данных. Например:Алгоритм очень прост. Пары строк (regex - замещающие пары) выполняют следующие шаги замещения:
1
из одинарного ввода.\ \
части молнии, чтобы получить желаемый результат.источник
Powershell, 59 байт
Тестовый скрипт:
Выход:
Объяснение:
Этот скрипт традиционный
top
+middle
+bottom
. Есть только одна умная вещь: запятая перед средней строкой заставляет повторять элемент массива, а не строку. Поэтому каждыйmiddle
отображается в новой строке.источник