Я хочу одеяло, которое выглядит так. Каждая полоса переходит, под, над, под. Вы можете распечатать это?
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
\\\\////\\\\////\\\\////\\\\////\\\\////\\\\////
\\//// \\//// \\//// \\//// \\//// \\////
//// //// //// //// //// ////
////\\ ////\\ ////\\ ////\\ ////\\ ////\\
////\\\\////\\\\////\\\\////\\\\////\\\\////\\\\
\// \\\\// \\\\// \\\\// \\\\// \\\\// \\\
\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\
\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\\\\ //\
Конечные пробелы в конце каждой строки и конечные символы новой строки являются приемлемыми.
Помните, это код-гольф , поэтому выигрывает код с наименьшим количеством байтов.
Leaderboards
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш счет равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться в фрагменте списка лидеров:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
источник
Ответы:
Python 2, 84 байта
Благодаря Sp3000 за 6 байтов от превращения арифметических операций в побитовые.
источник
i+~j>>2&1^i+j>>1&2^i&4
возможно?Pyth, 36 байт
Попробуйте онлайн: демонстрация
Объяснение:
Мы можем определить символ, проверив 3 условия:
Если мы интерпретируем
[A,B,C]
как двоичное число, мы получаем следующее отображение:Мы также можем интерпретировать
[A,B,C]
как десятичное число и выполнить модульный индексированный поиск в строке. Это не имеет значения, потому что10 mod 8 = 2
.Теперь к коду:
V24
повторяетсяN
(row-idx)[0, 1, ..., 23]
.sm...48
сопоставляет числаd
(column-idx)[0, 1, ..., 47]
с символами и печатает объединенную строку.++BNd
генерирует список[N, N+d]
,+...t-Nd
добавляетN-d-1
. Итак, мы получили список[N, N+d, N-d-1]
.m<3%k8
проверяет каждое вычисленное числоk
, если3 < k % 8
, так что это дает список с условиями[A, B, C]
.i...T
объединяет это в десятичное число, а затем@" \// \/\\"
выполняет поиск в строке.Более или менее тот же код в Python2: 98 байт :
источник
Perl, 209 + 17 = 226 байт
Запуск с
-mList::Util=max -M5.010
(второй флаг свободен). Он не выигрывает соревнования по подсчету байтов, но вот мое решение.Удобочитаемый:
Процедурно генерирует каждый сегмент, затем повторяет шаблон 6 раз, а затем выводит общий результат 3 раза.
источник
Python 3,
174172138 байтНашел наименьший шаблон, который я смог найти в одеяле (шаблон «under» и «over»), вставил его в список и добавил некоторое понимание списка и манипуляции со строками, чтобы распаковать все это. Заменил все экранированные обратные слэши на «b» и заменил их позже, чтобы сэкономить несколько байтов.
Спасибо Оливеру за игру в 2 байта!
Сменив 34 байта, изменив шаблон - весь шаблон для одеяла теперь находится в одном списке, поэтому для развертывания шаблона нужен только один цикл for.
источник
0*6
иu*6
print((("\n".join(o*6 for o in("bb////"," b//// "," //// "," ////b ",""))+"\n".join(u*6 for u in("////bb","\\// b\\","b b","b\\ //\\","")))*3).replace("b","\\\\"))
Python 2,
171170168 байтНе красиво и не умно. Просто устанавливает переменные для наиболее часто используемых групп строк, затем объединяет их и печатает результат 3 раза. Возможно, попробую сыграть в гольф позже, если я не найду лучшего подхода.
1 байт сохранен с использованием необработанного ввода в назначении. Спасибо @ nedla2004
-2, назначив пару переменных, но все еще не серьезный конкурент
источник
*6
каждый элемент кортежа. Есть идеи?exec r"print'\n'.join(d);"*3
.СОМЛ , 106 байт
неконкурентная версия, использующая функцию, которую я только недавно добавил: (
836766 байт)объяснение:
источник
Рубин, 75 байтов
Лучше играть в гольф, используя одиночный 8-байтовый поиск строки, проиндексированный j & 4 в дополнение к другим параметрам, а не модифицируемую 4-байтовую строку.
Рубин, 81 байт
Печатает диагональные полосы символ за символом. Правильный символ выбирается из строки из 4 символов в зависимости от наличия / отсутствия каждой цепи. Символ перекрытия варьируется в зависимости от того, какая нить находится сверху.
комментарии
источник
Perl
132131113 байтовUngolfed:
источник
05AB1E , 37 байт
Использует кодировку CP-1252 .
Попробуйте онлайн!
объяснение
Использует трюк мод-8, мастерски объясненный в ответе Якуба .
источник
Python,
245236234233230216212198195 байтХорошо, дольше, чем мой последний (и любой другой) ответ, но был бы заинтересован в обратной связи о подходе.
редактировать
-9 из-за того, что @ nedla2004 больше, чем я
-2, взяв лямбду за пределы цикла и потеряв 2 отступа
-1 с помощью
in' '*3
вместо,in 0,1,2
так как я всеh
равно не использую . это просто счетчик.-3 Почему, почему, почему я оставил перевод строки и 2 отступа между вторым и для печати ??? Уже поздно. Вернусь завтра.
-14 На самом деле может полностью потерять лямбду и просто включить декодер base 3 сразу после оператора print. Выглядит грязно, но в конце концов, это код гольф :)
-4 Нет смысла устанавливать переменную для целочисленного списка. Просто используйте его непосредственно во втором цикле for.
-14 и нет смысла использовать внешний цикл. Просто умножьте целочисленный кортеж на 3 (бессовестно украденный у @ nedla2004, чтобы получить меньше 200 :))
-3 Сохранено 3, сделав \ = 0, / = 1 и пробел = 2. Это делает список целых чисел короче, так как три из трех основных чисел теперь имеют начальные 0
Как это работает (и это делает)
Поскольку используются только 3 символа:
l представляет собой список из 8 повторяющихся шаблонов как целочисленных эквивалентов их представления в виде базы 3, предполагая, что "" = 0, "\" = 1 и "/" = 2
ЛямбдаПервый код после оператора print представляет собой упрощенный преобразователь целочисленных значений в строку из 3 базовых чисел.Первый цикл повторяется 3 раза, а вторая печатает каждую строку с базовыми 3 символами, умноженными на 6 и замененными на /, \ или пробел.
Я уверен, что мог бы использовать регулярное выражение вместо вложенного replace (), но я слишком устал, чтобы пытаться прямо сейчас. Это был всего лишь эксперимент, и он длился дольше, чем мои предыдущие работы с Python, но он был опубликован только для комментариев по этому подходу (а также потому, что я никогда раньше не работал в базе 3 и мне очень понравилось работать с конвертером).
источник
Рубин, 135 байт
puts [3320,1212,720,2172,6520,4144,2920,3184].map{|e|(e.to_s(3).rjust(8,"0").gsub("0"," ").gsub("1","\\").gsub("2","/"))*6+"\n"}.join*3
Числовой массив соответствует каждому компоненту каждой строки, переведенный в основание 3:
= 0,
\
= 1,/
= 2, затем преобразованный в десятичную. Однако вызовы gsub () слишком велики.И только сейчас я увидел ответ @ ElPedro. :-( Просто совпадение.
источник
e.to_s(3).rjust(8,"0")
→("%8s"%e.to_s(3))
;gsub("0"," ").gsub("1","\\")..gsub("2","/")
→tr("013"," \\/")
;"\n"
→$/
;.join
→*""
. Вы также можете сохранить байт, разделив все числа в массиве на 4 и заменив ихe
на(e*4)
.tr("021"," /\\")
.PHP
157126 байтПринимая изменения @Titus списков в комментариях ... Я раздражен, я пропустил пункт 1, который я должен был поймать, но я не знал, что существует strtr (), где большинство сбережений приходит - хорошая работа Титус!
NEW:
OLD:
Поскольку все обратные косые черты необходимо экранировать, это экономит довольно много места, чтобы упаковать их в другой символ и заменить их для вывода, а затем, когда я вызываю str_replace (), имеет смысл использовать его как можно чаще.
источник
-r
. Используйте эти пять шагов для сохранения еще 30 байтов: ideone.com/wt4HGB 1) используйте$a[...]
непосредственно в качествеstr_replace
параметра вместо его назначения. 2)strtr
вместоstr_replace
. 3) Используйте цифры вместо букв. 4) Включите назначение в эхо. 5) Не назначайте$a
, просто используйте его.Python 2,
169161165160155154152Основано на ответе @ ElPedro, с небольшими улучшениями. Чтобы увидеть объяснение, посмотрите их ответ . Это Python 2, хотя рядом с ним есть круглые скобки
print
.Сохранено 8 байт с помощью переменной дляЭто работает только для строк, и использование функции для этого будет дольше.replace
.Сэкономили 4 байта, увидев, что @ElPedro понял, что им не нужен l, а я тоже нет.
Сохранено 5 байтов, не переворачивая
range(8)
, и вместо использования+=
для добавления к r, добавляя r в конец новой цифры. Попробуйте, используя repl.itСохранение 5 байтов путем кражи нового списка значений @ ElPedro.
Сохраняется 1 байт, удаляя пробел между
in
и(
.Сохранено 2 байта путем удаления переменной a.
источник
in
и(
в первом дляa=3**i
. Просто используйтеfor i in range(8):r=
x / 3 ** i% 3,+r
чтобы сохранить пару. Приоритет оператора позаботится обо всем остальном :)PHP, 184 байта
Выход:
источник
Пакетный, 152 байта
Обработка строк в пакетном отстой, так что это, вероятно, лучший подход. Вызов и падение очень немного короче, чем вложенная
for
петля. По крайней мере, мне не нужно цитировать мои обратные слеши!источник
APL, 110 байт
Я новичок в APL, так что это упрощенное решение.
Вот мой подход: обратите внимание, что после первых 8 строк одеяла шаблон повторяется. Поэтому мне нужно только определить первые 8 строк, а затем я могу повторить их 3 раза. Также обратите внимание, что каждая строка повторяется после первых 8 символов. Поэтому для определения одной строки мне нужно только определить первые 8 символов, а затем повторить их 8 раз.
Вот решение для безвкусицы:
Выше я отмечал, что D - обратная сторона B, E - обратная сторона A, а H - обратная сторона F. В моем фактическом коде я использую это преимущество, не определяя D, F или H и используя функцию реверса.
⊖
:24 48⍴A,B,C,(⊖B),(⊖A),F,G,⊖F
источник
Рубин, 132 байта
очень простой ответ.
источник
Haskell, 96 байт
источник