Вот соленый крекер ASCII :
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Вот два сложенных крекера:
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Напишите самую короткую возможную программу, которая принимает положительное целое число и рисует стек из множества соленых крекеров ASCII.
Входные данные могут поступать из стандартного ввода, командной строки, или вы можете просто написать функцию. Ввод всегда будет действительным. Вывод должен идти в стандартный вывод или ближайшую альтернативу.
Каждый сложенный взломщик всегда сдвигается на 2 символа вниз и на 7 символов справа от взломщика под ним. Там не должно быть никаких пробелов или посторонних символов новой строки.
Самая короткая программа в байтах побеждает.
Примеры
Если вход является 1
выходом
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Если вход является 2
выходом
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Если вход является 3
выходом
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . __________|______
| . | . | . . . |
|______| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
И так далее.
code-golf
ascii-art
kolmogorov-complexity
Кальвин Хобби
источник
источник
___|___
вместо_______
. Я предполагаю, что это было бы странно, если бы это было последнееОтветы:
CJam,
140125119116 байтПопробуйте онлайн.
Один солевой
Фрагмент кода
оставляет в стеке следующее:
Сложенные соли
Предположим, что солевой раствор сверху сохраняется в Z.
источник
JavaScript (E6) 249
259 289 304 345Не очень уверен насчет сжатия строк.Нашел хорошее сжатие для струн.Простой случай с 1 взломщиком кажется сложным в управлении. Там может быть лучший способ ...Неуправляемый более или менее
Это основной код, прежде чем я начал играть в гольф. Это не совсем то же самое и работает только для n> 2
Тест в консоли FireFox / FireBug
Выход
источник
Python,
252241 символовСпасибо FryAmTheEggman и Винсенту за то, что они украли 11 персонажей.
Преобладание крекеров:
Этот код кажется действительно неэффективным, но другие ответы скажут. Он просто копирует и вставляет солевой взломщик в массив в нужном месте, считая, что самый нижний взломщик отключен на 1 символ, а затем печатает все это.
Я могу уменьшить его до 230 символов, если использую внешний файл (202 кода + 38 размера файла + 1 имя файла).
источник
n=1 upto 2^10
чтобы мы могли быть уверены, что ваша программа действительно работает правильно.list(' '*(7*N+12))
может быть[' ']*(7*N+12)
.G=[list(' '*(7*N+12))for _ in R(2*N+5)]
сG=map(list,[' '*(7*N+12)]*(2*N+5))
Perl 189
Похищая некоторые идеи сжатия строк у Чороба, я понял:
Для более удобного просмотра в вашем браузере:
Для контекста, мой лучший до этого:
Perl 207
Добавление новых строк и отступов для удобства чтения в вашем браузере:
Вы можете заменить «pop» на «<>», чтобы считать счетчик из STDIN вместо параметра командной строки и получить 206 байт. Переход к STDERR уменьшит его до 204 байтов.
Если бы я мог включить функцию «сказать» без байтового штрафа, то я мог бы получить 202.
вызывается как:
источник
say
без штрафа, потому что это то же самое, что запуск в командной строке с-E
вместо-e
.perl -E''
не учитывается в общем количестве ваших персонажей._|_
.Perl 201
(удалить символы новой строки, кроме первой, чтобы получить #)
say
+<>
= 198.источник
Haskell, 215 байт
Этот пример создает стек взломщика индуктивно, вытягивая части взломщика и делая интервалы из пары циклических списков:
Поток управления довольно прост; большая часть хитрости заключается в повторном использовании как можно большего количества частей взломщика.
Ungolfed:
источник
Питон, 299
Я думал, что был умен, но решение оказалось слишком сложным и дольше, чем любой прямой подход, но я не удержался, чтобы опубликовать его. Программа явно рассчитывает, какой символ должен быть нанесен в различных положениях выходной строки, без зацикливания на отдельных крекерах.
И последняя строка расширилась, чтобы увидеть, что происходит:
источник
С, 284
Для функции
f
и#define
с, исключая ненужные пробелы иmain
. В соответствии с комментарием edc65, я включил 128-битный целочисленный тип (который я собирался сделать в любом случае), но я снова просчитался и могу сделать только 29 взломщиков, прежде чем вершины начнут пропадать.Завершите функцию и программу тестирования ниже. Прокомментирую это позже.
В выводе только четыре разных символа. Они декодируются из двоичных чисел 0-3
" _.|"
. Массивs[]
содержит целое число для каждого столбца выходных данных, 2 бита на символ, который инициализируется для того, чтобы содержать самый правый взломщик.Первый
for
цикл копирует предыдущий взломщик, сдвигает его, чтобы переместить вверх, удаляет нижний правый угол с помощью&
и ИЛИ с предыдущим взломщиком, на 7 шагов влево.Второй
for
цикл декодирует 2-битное представление каждого символа в фактический символ и печатает символ. Здесь много кода, чтобы просто исключить ненужные пробелы в выводе. Я разочарован тем, что мой счет вырос, а не снизился по сравнению с моей предыдущей ревизией.Выход
Это 29 взломщиков. Я заменил пробел
-
на другой, чтобы показать, что в выводе нет пробелов или посторонних символов новой строки.источник
JavaScript (ES6) HTML5 - 233
236байтВероятно, не правильный ответ, но я просто не мог удержаться от публикации, извините :-P
Тест в Firefox с
F(1)
,F(2)
,F(3)
и т.д.Пример: http://jsfiddle.net/Lvmg9fe8/7/
источник
F(1)
или любое другое число, после того, как я ввел этот код в консоль JS в Firefox ...