Это Кэлвин . Просто пытаюсь получить 20 повторений, чтобы этот пользователь мог общаться в чате в чате PPCG Minecraft Server .
Напишите программу или функцию, которая принимает положительное целое число.
Если целое число четное (2, 4, 6, ...), выведите или верните эту точную художественную строку ASCII:
__ __ __ __ ___
/\ /\ | |\ | | / | | /\ | |
/ \/ \ | | \ | |-- | |--\ /__\ |-- |
/ \ | | \| |__ \__ | \ / \ | |
Если целое число нечетное (1, 3, 5, ...), выведите или верните эту точную строку ASCII:
__ __
\ / | | /| | / | / \ __ / | |
\ /\ / | | / | |-- | |--/ \ / |-- |
\/ \/ | |/ | |__ \__ |__| \/ |__ _|_
Вы можете предположить, что ввод всегда является положительным целым числом.
В обоих выходных случаях при желании может быть любое количество конечных пробелов до правого края буквы «Т» в каждой строке и / или один завершающий символ новой строки. Обратите внимание, что между каждой буквой есть два столбца пробелов.
Самый короткий код в байтах побеждает.
code-golf
ascii-art
kolmogorov-complexity
Старый чат эстафета
источник
источник
Ответы:
JavaScript (ES6),
343336289267265260 байтПросто для удовольствия ... :) (Спасибо Xufox за то, что он обрезал 46 байт, и побудил меня самостоятельно обрезать еще 37 байт.)
Называется как
a(4)
или похожий. Попробуйте это здесь:Показать фрагмент кода
Я сконцентрировал пробел в цепочках цифр от
2
до8
(например,887
= 23 пробела). Затем каждая цифра заменяется соответствующим количеством пробелов.0
представляет| |
и1
представляет__
. В общем, эта программа на 170 байт короче, чем две строки вместе (203 + 227 = 430), так что я счастлив. :)Изменить: Почему-то, это точно такая же длина, как единственная другая запись в этой точке .... o_o
Изменить 2: Сохраненный некоторое пространство, изменяя
n%2<1?
дляn%2?
и замены строк. Также использовался тот факт, что начала двух строк одинаковы, чтобы уменьшить еще 5 байтов.Правка 3:
|2|
казалось, выглядела ужасно много, поэтому каждый раз упрощалсяx
, экономя 7 байт. Предложения Xufox отрезали еще 40 байтов.Редактировать 4: Предложение Xufox заменить
\n
действительными переносами строк окупилось, удалив 6 байтов из общего количества. Изменениеx
к0
и__
к1
(вставить злой смех здесь), а затем объединив все (вставка множественного числа Regex здесь), так как он сделал в своей записи, сохраненные дополнительные 16 байт.Редактировать 5: Поскольку я решил использовать стандарты ES6, я использовал пользовательскую интерполяцию строк шаблона, чтобы сбрить 2 последних байта.
источник
.replace(/\d/g,d=>' '.repeat(d))
?\n
сохранения одного байта на разрыв строки?Матлаб,
343341Номер ввода предоставляется из стандартного ввода.
Образец прогона:
источник
CJam,
158149145138 байтВыше используется символ каретки, так как код содержит непечатаемые символы.
Попробуйте онлайн в интерпретаторе CJam .
Если постоянная ссылка не работает в вашем браузере, вы можете скопировать код из этой вставки .
Пример запуска
идея
Вместо непосредственного кодирования строки MINECRAFT (дополненной для достижения постоянной длины строки), мы закодируем ее «сжатую» версию, в которой строки и столбцы были транспонированы.
После архивирования и удаления перевода строки, эта строка (назовем ее R ) должна быть закодирована:
Существует много пробелов пробелов, поэтому мы заменим каждое вхождение пространственной тройки переводом строки.
Это оставляет нам семь различных символов (
\n -/\_|
), поэтому мы присваиваем каждому из них число от 0 до 6 и рассматриваем получающиеся в результате цифры массива из базового числа 7, которые мы затем кодируем как байтовую строку.Декодирование работает путем изменения шагов сверху.
Зеркальная строка может быть построена из оригинальной.
Если мы изменим порядок четырех строк и поменяем местами солидусы, мы получим следующее:
Как-то похоже, но нам явно придется вращать ряды, чтобы вывести нижний ряд на верхний:
Это было бы так, если бы не эти противные подчеркивания.
Если мы читаем исходную строку сверху вниз и игнорируем перевод строки (получая, таким образом, R ) и заменяем каждое подчеркивание, а затем пробел пробелом с последующим подчеркиванием перед смещением строк, это результат:
Намного лучше! Все , что осталось сделать , это удаление первого пространства первого ряда (перемещение всех символов подчеркивания в первой строке одного символа слева), перемещение неуместны подчеркивания в Е и С на одну строку вверх и отбрасывания подчеркивание над T .
Код
источник
Pyth - 182 байта
Использует базовый подход кодирования. Поскольку индексирование в Pyth является модульным, мне даже не нужно ничего делать для четного нечетного, просто расположить его в правильном порядке и использовать
@Q
. В качестве бонуса это также работает с отрицательными числами.У меня были попытки только кодировать первый, затем переключать и переключать слэши, но первая и последняя строки были слишком сложными.
Я мог бы сэкономить 6 байтов, вставив в код реальные нулевые байты, но это слишком много проблем.
Попробуйте это онлайн здесь .
Он выглядит очень плохо в Интернете, потому что выходной блок слишком мал и заворачивается. Я рекомендую возиться с dev-console и изменить его
col-md-5
на acol-md-7
.источник
JavaScript (ES6),
312,285,281,272,270,263,262260Для предыдущих изменений смотрите историю редактирования .
Редактировать 5: В преобразовании я переключил число, связанное с
-
(теперь 0) и пробел (теперь 1). В полученном блоке числа 1, 2 и 3 больше не использовались. Это позволило мне использовать массив с пропущенными числами.Редактировать 6: Улучшен литерал массива. Я попробовал это ранее, но использовал
777
и77
как строки вместо чисел и заметил только сейчас, что я пропустил это.Изменить 7: «Гольф-код» является функцией, как указано в вопросе, и нет необходимости для
f=
удовлетворения этой спецификации. Таким образом, удалив его, сохранив два байта.Работает в Firefox 39:
Он основан на базовой системе счисления 6, и каждый символ ASCII обозначает число:
Затем я объединил числовое представление каждой строки ASCII. Например: когда первая строка ASCII содержит a
/
в одной позиции, а другая содержит a\
в той же позиции , эта позиция становится32
базой 6 (20
в десятичной форме). Если вы конвертируете это в базу 36 (чтобы получить один номер базы 36 на каждые два номера базы 6), вы получитеk
.Все это было сделано заранее, и функция в основном отменяет этот процесс.
Теперь оба ответа JavaScript имеют по одному другому ответу, который имеет одинаковое количество байтов…PS: В качестве примечания для себя и ссылки на других, это код, который я использовал:
источник
~NaN == -1
?![…][x]+77
,77
не нужно быть строкой больше), но дополнительная реверсивным в golfed коды не стоило того ...isNaN
с1+
, и~~(i/6)
сi/6|0
.f=
в начале, но у меня есть. Я также прочитал, что его можно удалить, поэтому я сделаю это сам, и теперь у меня есть 260 байтов. ;)CJam, 136 байтов
Выше используется символ каретки, так как код содержит непечатаемые символы.
Перевод строки предназначен исключительно для «читабельности». Попробуйте онлайн в интерпретаторе CJam .
Если постоянная ссылка не работает в вашем браузере, вы можете скопировать код из этой вставки .
Пример запуска
идея
Этот подход имеет некоторые сходства с тем, что был в моем другом ответе , но он намного проще и (что неутешительно) немного короче.
Мы ищем способ кодировать следующую строку:
После заполнения каждой строки (для достижения постоянной длины строки), архивирования (транспонирования строк и столбцов) и удаления перевода строки, эта строка должна быть закодирована:
Мы заменим каждую подстроку
" |||"
на 0 , каждую подстроку" "
на 1 и символы"/-_\| "
с 2 до 7 , образуя массив базы 8 цифр, которые могут быть закодированы в виде строки байтов.Декодирование работает путем изменения шагов сверху.
Код
источник
Ракетка,
443434386 байтПросто для удовольствия.
Примечание: вам может понадобиться
#lang racket
линия для запуска в DrRacket.источник
05AB1E ,
179177176 байтПопробуйте онлайн.
Объяснение:
это сжатое число :
Попробуйте онлайн.
7в
преобразует его в Base-7 в виде списка, поэтому мы получаем список цифр:Попробуйте онлайн.
è
индексирует каждую цифру в строке"\n-/\_|"
, аJ
затем объединяет весь список вместе, что дает нам следующее:Попробуйте онлайн.
2ä
разбивает строку на две части.Iè
взять входные данные и проиндексировать их (с автоматическим переносом), чтобы получить одну из двух частей, которая затем выводится неявно.Огромное спасибо ASCII-компрессору @MagicOctopusUrn, который использовался для генерации сжатого числа и транслитерации Base-7. Попробуйте онлайн. (После этого транслитерация была введена в игру путем изменения строки и числа в стеке, используя
в
вместо того,B
чтобы составить список цифр, и индексировать в строку с помощьюè
.источник
C 251 байт
Это функция,
k
которая получает параметр и печатает сообщениеstdout
.Более читаемая версия:
Сначала готовится пустое сообщение (заполненное пробелами). Для каждого символа (например,
|
или-
) у него есть список позиций для размещения этого символа.Для каждой позиции, если должна быть напечатана перевернутая версия, позиция переворачивается. То есть его вертикальная координата
y
заменяется на4-y
или3-y
(в зависимости от того, является ли символ подчеркиванием). Кроме того , направления слеш перевернуты - это осуществитсяXOR
с115
.Эта управляющая структура также используется для размещения символов новой строки - кажется, более эффективно добавить еще 4 координаты в список, чем писать явный цикл.
Есть несколько незначительных глюков с этой системой. Прежде всего, последняя буква T выглядит несколько иначе в перевернутой версии:
Для правильного вывода код должен размещать
|
символы после_
символов.Кроме того, чтобы строка управления содержала только символы ASCII, я ее кодировал:
37
добавлены к ним, чтобы сдвинуть их в диапазон ASCII 32 ... 127. Я мог бы добавить меньшее число, но37
избегал таких символов, как"
и\
, которые должны быть экранированы внутри строковых литералов.-
символ появляется в позиции 137. Чтобы учесть это, я добавил искусственный-
символ в другой позиции (79), который позже перезаписывается - символ|
также появляется в позиции 79.Еще одна забавная вещь заключалась в том, что я не мог использовать
puts
для вывода строки - это привело бы к дополнительному завершающему переводу строки. Так что я использовалprintf
вместо этого.Кроме того, число
57
появляется в коде гольфа 4 раза - казалось бы, многословное выражение(w%2?4-i/6-p/57:p/57)*57+p%57
позволяет исключить переменнуюy
, делая код короче.источник
Perl,
292259246 байтОн использует тот факт, что две строки в основном похожи (например, весь IE и C) и делает строку из символов, которые отображаются по-разному, в зависимости от того, какая версия отображается. например, m означает «прямая косая черта для строки, идущей вправо, обратная косая черта в перевернутой». Это делает замену транслитерации для отображения правильного символа. Пробелы также кодируются по длине прогона с использованием подстановок строк.
многострочный:
Идея:
Поскольку в выходных данных имеется только 22 уникальных столбца, его можно сохранить как 22 * 4 = 88 символов с диапазоном 0-17 (все возможные символы "двойного значения") вместе с поиском в 56 символов. таблица с одной записью в диапазоне 0-21 на столбец. Теоретически это может быть закодировано с <100 байтами, однако трудно сделать это чистым выигрышем из-за более сложного кода для его декодирования.
источник
CJAM, 206
Два изображения ascii имеют кодировку base-216, один байт = 3 символа.
Проверьте это здесь
источник
Powershell,
275253248 байтТестовый скрипт:
Выход:
Основные идеи
Метод сжатия является расширенным методом CJam Дениса ♦:
Скрипт для сжатия:
Строка сжатия перед:
источник
SAS, 442 байта
Non-golfed:
тесты:
Возможно, можно сэкономить немного кода, поместив их во входные блоки, но это добавляет ограничение, что макрос может быть только один раз для шага данных, который, я чувствую, нарушает дух написания его как макроса. (И я подозреваю, что добавление подсказки для получения ввода в шаге данных добавляет больше символов).
источник
Баш, 247 байт
Строки сцеплены и сжаты.
источник
PHP, 225 байт
Уродливое, грубое решение.
Я сжал, затем base64 закодировал сцепленные строки для отображения. Код декодирует, распаковывает и разбивает его на части по 224 символа. Первая строка состоит из 224 символов без завершающей строки, вторая - из 201 символа (также после нее нет новой строки). Четность аргумента командной строки (
$argv[1]%2
) используется в качестве индекса в массиве, сгенерированномstr_split()
.источник
Haskell, 138 байт
Это немного взломать. Я перебираю хэш SHA256 для объединения двух текстов майнкрафта, а затем разделяю их и выбираю соответствующий текст на основе параметра x. Это, конечно, очень непрактично и не может быть вычислено в режиме реального времени, и на этом пути могут быть даже столкновения, насколько я знаю.
Поскольку Haskell не может иметь ASCII-представление этого хэша в строке, я читаю его из файла с именем «a» и поэтому добавил к моему счету 32 байта.
Explaination:
Создает список каждой комбинации букв "/ \ | _-" на 425 букв (длина обоих текстов Minecraft вместе взятых)
Выберите первый, который соответствует хешу
Первый текст состоит из 225 букв, другой - ровно 200.
источник
Javascript (ES6),
403296 байт(Перенесено из моего предыдущего ответа ) Опробуем новый метод:
Обратите внимание, что есть несколько непечатаемых символов; они были заменены, например, на
\x83
.Само кодирование примерно на 40 байт короче, чем другое, но процесс декодирования более сложный. Я использовал систему base-216, которую другие использовали для кодирования текста. Для справки вот код, который я использовал:
Это в основном берет текст ASCII (предварительно преобразованный в базу 6) и утраивает его сам, изменяя его на базу 216. Затем добавляется 53 для удаления большинства непечатных символов.
Предложения приветствуются!
Вот оригинальный 403-байтовый код:
Использование
for
цикла,while
цикла, четырех переменных, которые использовались только один раз, и тонна длинных алгоритмов для простых вещей. Мальчик, я улучшился ...источник
y=[' ','/','|','\\','_','-'],
и вместоy[x]
записи' /|\\_-'[x]
. =)Python, 312 байт
Функция печатает вывод данных с использованием int
источник
C, 321 байт
Закодировал повторение и индекс символа в строку.
источник
Питон 3, 486
533612источник
PHP , 263 байта
Попробуйте онлайн!
источник
Рубин, 290 байт
Вероятно, слабая и поддающаяся изменению запись. По сути, это очень простое (созданное вручную) сжатие, где строчные буквы означают, что многие пробелы (на самом деле ord (ch) - пробелы «A») и прописные буквы - это лишь некоторые общие термины, которые сохранили несколько байтов.
источник
SOGL V0.12 ,
7271 байтПопробуй здесь!
Вертикальное зеркалирование SOGL отлично сработало для этого.
источник
Холст , 70 байт
Попробуй это здесь!
источник