Ваша задача - вывести изображение легендарного древа жизни Иггдрасиля .
Вы должны написать программу, вывод которой именно такой:
/\
/**\
/****\
/******\
/******\
/********\
/**********\
/************\
/**************\
/************\
/**************\
/****************\
/******************\
/********************\
/**********************\
/******************\
/********************\
/**********************\
/************************\
/**************************\
/****************************\
/******************************\
/************************\
/**************************\
/****************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/************************************************************************\
/**************************************************************************\
/****************************************************************************\
/******************************************************************************\
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|________|
Там нет конечных пробелов. Последний перевод строки может быть опущен.
Чтобы упростить проверку, вот суммы md5 ожидаемого результата:
374899e56bc854d04639c43120642e37
- Нет новой строки в конце.03afb81d960b8e130fe2f9e0906f0482
- Новая строка в конце
Применяются стандартные лазейки. Это код-гольф, поэтому выигрывает самая маленькая запись в байтах!
code-golf
ascii-art
kolmogorov-complexity
Caird Coneheringaahing
источник
источник
Ответы:
Golfscript,
8477767572 персонажаОтличный подход от Говарда . Нажмите на количество символов, чтобы попробовать это.
Спасибо Говарду за сохранение 3 символов!
Пояснение :
Это более или менее простой порт моего решения на Python . Взяв некоторые выразительные свободы (используя именованные переменные вместо отслеживания позиций стека, и
print
действительно хранит вещи в стеке, а не печатает):источник
'\\'n
ввода новой строки в строку (+/- 0 символов) теперь не нужно экранировать обратную косую черту (-1 символ).4*4+
это то же самое, что)4*
и'_-'[=]
может быть написано,'_-'1/=
что делает последнее+
устаревшим.Haml & Sass
37 + 277 = 314
Haml:
Sass:
* Sass позволяет управлять директивами, конкатенацией и разыменованием переменных. Все это полезно при моделировании, но многословно при игре в гольф.
генерируется в:
HTML:
CSS:
итоговая страница
источник
CJam , 62 байта
Попробуйте онлайн!
Как это работает
источник
GolfScript, 79 символов
Попробуйте код здесь . Обратите внимание, что разрывы строк не являются обязательными в этом коде
источник
Python,
148129126121 символовСпасибо Falko за сохранение 3 символов и flornquake за блестящее сохранение еще 5!
источник
'**'*j
для сохранения 3 символов. Помимо этого мое решение сходится к точно такому же коду. :)for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
.Bash,
236 19719310 байтов кода + 1-байтовое имя файла + 182-байтовый файл данных = всего 193 байта
объяснение
y
является файлом, содержащим Yggdrasil, без завершающей новой строки, сжатый с помощью алгоритма zopfli (вызывается какzopfli --i64
), а затем с последними удаленными 8 байтами. zopfli совместим с gzip, поэтому я могу распаковать файл с помощью стандартных утилит Bash, разработанных для gzip. Размер файла данных составляет 182 байта (229 байтов при использовании обычного gzip). Размер исходного Yggdrasil, без новой строки, составляет 5876 байт.Удаление последних 8 байтов вызывает сообщения об ошибках, которые подавляются отправкой стандартной ошибки в файл с именем
j
. Еслиj
существует, он будет перезаписан.Base64 из
y
(использоватьbase64 -d
для получения оригинального файла):И md5sum это:
источник
С 169
Не растянутый (и слегка распутанный):
источник
Рубин - 100
Помещает автоматически выравнивает, так что мы можем собрать все строки, даже во вложенных массивах. Требуется Ruby 1,9
Попробуйте на Ideone
источник
PowerShell
104101источник
C #
258234 байтаСпасибо некоторому раздражающему пользователю за предложенные правки, хорошо использующие метод String.PadLeft!
Код довольно прост, не так много осталось для гольфа.
Форматированный код:
источник
\r
здесь бессмысленно. Это код гольф.J
98 88 8475источник
Perl, 127
Ungolfed:
источник
Рубин -
139129126123121Hoisted "ставит" вне создания массива (предложение от bitpwner).
Ungolfed («ставит» без подков)
источник
PHP
223202181160156Редактировать Я понял, как создать псевдоним для функции с переменной, и смог отрубить еще несколько символов. Что
str_repeat
функция была действительно многословнаРедактировать 2: Спасибо всем за предложения!
Golfed:
Удобочитаемый:
Вывод: http://brobin.me/yggdrasil.php
источник
(39-$j)
,($j*2)
и($i==11)
. -2, заменяя\n
реальными символами новой строки (PHP позволяет это в литералах). -5 символов, заменив (оба)for($i=0;$i<12;$i++)
наfor($i=12;$i-->0;)
и$i==11
с$i==0
.$s(($i==0?'_':'-'),8)
на$s($i?'-':'_',8)
. (==> -5 символов)$s('*',$j*2)
на$s('**',$j)
. Я думаю, что это последнее улучшение, которое я могу найти.($j*2)
во внутреннем для($j++*2)
и удаление$j++
изfor()
аргументовfor($i=12;$i-->0;)
можно сократить доfor($i=12;$i--;)
- еще 2 символа.Delphi 429
Попробую улучшить позже.
Golfed
ungolfed
источник
Javascript,
288281Chrome скрывает дубликаты
console.log
s, используйте IE.Ungolfed:
источник
for(i=0;i++<39-w;)
вместоfor(i=0;i<39-w;++i)
и так далее. Кроме того,p=console.log
вместоc=console
иp
вместоc.log
(хотя я проверял только последний в Node.js, он не работает в Firefox). Это экономит 12 байтов.c=console.log
в Chrome тоже не работал, поэтому я его не использовал. Трюки цикла for экономят 7 байт.JavaScript (console.log),
168166(Пробелы только для удобства чтения)
источник
С (219)
Спасибо всем за советы по игре в гольф - удалось довести их до 219. Не думаю, что это будет намного ниже.
Обязательно включает в себя:
источник
32
вместо' '
и42
вместо'*'
:)Хаскелл,
153148Прямо вперед, никаких хитростей, просто игра в гольф:
%
Оператор рисует одну линии, ее первый аргумент будучиString
длиной 3 , содержащие границы и символы заполнения в этой строке (теперь предполагающей ровно 3Char
сек, экономя 5 байт), то во- вторыхи,Int
, определяет половину число заполнения символов. Сопоставление, сопоставление и добавление в шаблон используется в комбинации, чтобы сохранить байты, заботясь о «склеивании» междуChar
иString
. Во второй версии я также сделал#
бесконечным и представилtake 85
чтобы сделать его снова конечным (к сожалению, не было сохранено ни одного байта).#
Оператор создает последовательность дляn
аргумента ,%
необходимые для дерева:[0..3], [3..7], ...
сцеплены.&
это просто инфикс сокращение дляreplicate
, которое происходит три раза.Дерево собрано в последней строке, новые строки добавлены
unlines
.источник
Луа - 164
источник
Mathematica
191178Конечно, не лучшее решение:
Не считая новых строк. Mathematica искажает вывод, так как для пробела он не принимает ту же ширину, что и для «*» и «/». Но результат верный.
источник
Ява - 286
Мой первый гольф.
Golfed:
Ungolfed:
Тест здесь
источник
Python 2, 117
Другие версии, которые я пробовал, включают в себя:
источник
Pyth,
101100999081 байтПопробуйте онлайн!
Перевод Python 3:источник
a
функция, определенная в вашем Python, не эквивалентна+
спискам?<list>+<str>
это недопустимая операция, но я мог бы также легко использовать["-"]*11+["_"]
. Я решил определить свою собственную функцию, чтобы точнее перевести то, что фактически делает Пит.Powershell, 88 байт
источник
Groovy 118
источник
С, 194
Этот код - горячий беспорядок и определенно может быть больше в гольфе. Тем не менее, это была возможность опробовать пару вещей, которых я никогда не делал раньше: использование литерала для строки звездочек и использование спецификатора ширины
*
со строкой вprintf
.источник
Ракетка
223 220 211 204198Golfed:
Ungolfed:
источник
Сборка (MIPS, SPIM) ,
768671659655654 байтаПопробуйте онлайн!
Редактирование: Сохранение ~ 100 байт путем жесткого кодирования каждого символа в регистре и простой записи в стек, а затем злоупотребления тем фактом, что MIPS не имеет типов, поэтому допускается неявное слово в строку ascii.
Редактировать 2: удален дубликат стека. (
addi $sp -4
) Ой!Правка 3: при перезаписи случайно сделал пень 1 символ слишком коротким. (36 вместо 35). Исправлена.
Отредактируйте 4: -4 байта, используя $ 8 и $ 9 вместо $ t0 и $ t1. они означают одно и то же, но $ t0 легче читать. к сожалению, все другие t-регистры имеют одинаковую длину при правильном написании ($ t2 == $ 10, но оба по 3 символа), поэтому все остальные являются стиркой. Я мог (теоретически) использовать оставшиеся регистры 'a' (5-7. Print syscall использует 4), но на самом деле поведение не определяется при использовании syscall.
-1 байт, устанавливая t8 в 0 и переходя на меньшее, чем на равное. также потребовал, чтобы я переупорядочил операции добавления, что, к сожалению, привело к увеличению времени выполнения на 3 огромных кода операции.
Не самый лучший в MIPS, но после очищения моей совести от этого в мета-дискуссии я отправляю их. MIPS не предназначен для этого (нет вывода, нет для циклов), но довольно забавно сделать это, возможно, несмотря на это.
К сожалению, я не создал закомментированную версию для этого нового решения, но вы можете просмотреть старую версию с полной документацией здесь
Не стесняйтесь взять кредит и улучшить этот ответ, если вы можете победить его - я, вероятно, пропускаю несколько оптимизаций здесь и там.
источник
addi $sp -4
которая на самом делеaddi $sp $sp -4
от SPIM или MIPS в целом, так что если кто - либо другой, пожалуйста , дайте мне знать.Кобра - 166
228260источник