Учитывая число N
, как я могу распечатать елку высотой, N
используя наименьшее количество кодовых символов? N
предполагается ограниченным минимальным значением 3
и максимальным значением 30
(границы и проверка ошибок не обязательны). N
задается как единственный аргумент командной строки для вашей программы или сценария.
Все языки приветствуются, если вы видите, что язык уже реализован, и вы можете сделать его короче, отредактируйте, если это возможно, прокомментируйте иначе и надеетесь, что кто-то исправит беспорядок. Включите новые строки и пробелы для ясности, но не включайте их в число символов.
Рождественская елка генерируется как таковая, с ее "стволом", состоящим только из центрированного "*"
N = 3:
*
***
*****
*
N = 4:
*
***
*****
*******
*
N = 5:
*
***
*****
*******
*********
*
N определяет высоту ветвей, не включая ствол одной линии.
Счастливого Рождества, PPCG!
c=:[:((\:i.@#),}.)"1[:$&'*'"0[:>:0,~i.
Brainfuck, 240 символов
Еще не сделано. Это работает, но только с однозначными числами.РЕДАКТИРОВАТЬ: Готово! Работает для переводчиков, использующих 0 как EOF. Смотрите
NOTE
s в закомментированном источнике для тех, у кого -1.РЕДАКТИРОВАТЬ еще раз: я должен отметить, что, поскольку в Brainfuck отсутствует стандартный метод чтения аргументов командной строки, я использовал вместо него стандартный ввод (стандартный ввод). ASCII, конечно.
РЕДАКТИРОВАТЬ в третий раз: О, дорогой, кажется, я сократил
.
(вывод) символов при сжатии кода. Исправлена...Вот основное управление памятью основного цикла. Я уверен, что он может быть сильно оптимизирован, чтобы уменьшить количество символов на 30 или около того.
Сжатая версия:
И красивая версия:
источник
Perl, 50 символов
(1 соответствующее место)
Perl: однострочная версия:
и теперь с большим количеством whitesapce:
Расширенное объяснение для не-Perl пользователей.
источник
Язык: Python (через оболочку), Количество символов: 64 (2 значащих пробела)
источник
x86 asm 16 бит, 50 байт
Еще нет сборочной версии? :)
(Примечание: N ограничено 1 - 9 в этой версии)
Скачать здесь
источник
Язык: Windows Batch Script ( шокирует! )
источник
setlocal enabledelayedexpansion
команды.Рубин, 64 байта
С Рождеством всех!
Изменить: улучшения, добавленные в соответствии с предложением Джошуа Суинк
источник
n=$*[0].to_i;puts [*1..n,1].map{|i|" "*(n-i)+"*"*(2*i-1)}
Язык: C #, Количество символов: 120
Просто код, без форматирования (120 символов):
Версия с 109 символами (только код):
Результат для высоты = 10:
источник
Язык: dc (через оболочку) Количество символов: 83
Немного короче версия DC:
РЕДАКТИРОВАТЬ: изменил константу 10 в $ 1
источник
Python, трюк "-c" ... @ 61 символ (и одна строка)
источник
Вот довольно экономичная версия на Haskell, состоящая из 107 символов:
запустив это:
С Рождеством всех :)
источник
Язык: dc (через оболочку), количество символов: 119 (1 значимое место)
Просто для неясности этого :)
источник
Лучше C ++, около 210 символов:
Свернуто до 179:
источник
Язык: питон, без хитростей, 78 символов
источник
Groovy 62B
_
источник
Улучшение ответа ΤΖΩΤΖΙΟΥ. Я не могу комментировать, так что вот новый пост. 72 персонажа.
Используя трюк "python -c", 61 символ.
Я узнал функцию центра и что "python -c" может принимать более одного строкового кода. Спасибо, ΤΖΩΤΖΙΟΥ.
источник
C # с использованием Linq:
170 символов.
источник
AWK, 86 символов в одной строке.
источник
Язык: Java, Количество символов: 219
Для справки, я смог побрить предыдущее Java-решение, используя рекурсию, до 231 символа, по сравнению с предыдущим минимумом 269. Хотя и немного дольше, мне нравится это решение, потому что
T
оно действительно объектно-ориентированное. Вы можете создать небольшой лес случайных размеровT
экземпляров. Вот последняя эволюция в этом направлении:источник
class T{public static void main(String[]v){long n=new Long(v[0]),r=1,s;String o="";for(;r<=n;r++){for(s=n-r;s-->0;)o+=' ';for(;++s<2*r;)o+='*';o+="\n";}while(n-->1)o+=' ';System.out.println(o+"*");}}
Язык: PowerShell, Количество символов: 41 (включая 1 пробел)
источник
21 персонаж с дьялогом APL.
⍳ дает вектор целых чисел, начиная с 1.
1, ⍨ добавляет единицу в конец вектора. Это будет подножие дерева.
'*' \ ¨⍨ дает вектор * -строк с длинами, заданными предыдущим вектором.
↑ преобразует вектор в матрицу и добавляет пробелы справа.
m ← сохраняет матрицу в m.
0 1 ↓ отбрасывает ноль строк и первый столбец.
⌽ переворачивает матрицу.
m, ⍨ соединяется с m с правой стороны.
источник
m,⍨⌽0 1↓m←
->(⌽,0 1↓⊢)
Язык: C, Количество символов: 133
Улучшение C-версии.
Работает и даже принимает высоту дерева в качестве аргумента. Требуется компилятор, который поддерживает код в стиле K & R.
Я чувствую себя таким грязным сейчас .. Это код ужасен.
источник
R (62 байта)
Я еще не видел решения R. Поправь меня, если я пропустил это.
Выход:
источник
Язык: C, Количество символов: 176 (2 соответствующих пробела)
источник
Версия оболочки, 134 символа:
источник
Язык: Python, Количество значащих символов: 90
Это некрасиво, но работает
...
источник
Поскольку это CW: мне не нравится, что кодовые гольфы всегда организованы в терминах «количество символов» или что-то подобное. Разве они не могут быть организованы с точки зрения количества инструкций для компилятора / интерпретатора (или какого-либо подобного критерия)? Вот снова решение Ruby , и оно в основном то же самое, но теперь и для потребления человеком:
источник
Древесный уголь , 9 байт (неконкурентный)
Попробуйте онлайн!
Подробный
Попробуйте онлайн!
источник
Желе , 12 байт
Попробуйте онлайн!
источник
PHP, 111 символов
(Самым последним символом должен быть перевод строки.)
Читаемая версия:
источник