Вызов
Используя целое число n
(где 4<=n<=10**6
) в качестве входных данных, создайте художественную «тюрьму» ASCII *, измеряющую n-1
ширину и n
высоту символов, используя символы из примера ниже.
пример
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Используемые символы:
┌───────────────┬─────────┬───────┐
│ Position │ Symbol │ Char │
├───────────────┼─────────┼───────┤
│ Top Left │ ╔ │ 9556 │
├───────────────┼─────────┼───────┤
│ Top │ ╦ │ 9574 │
├───────────────┼─────────┼───────┤
│ Top Right │ ╗ │ 9559 │
├───────────────┼─────────┼───────┤
│ Right │ ╣ │ 9571 │
├───────────────┼─────────┼───────┤
│ Bottom Right │ ╝ │ 9565 │
├───────────────┼─────────┼───────┤
│ Bottom │ ╩ │ 9577 │
├───────────────┼─────────┼───────┤
│ Bottom Left │ ╚ │ 9562 │
├───────────────┼─────────┼───────┤
│ Left │ ╠ │ 9568 │
├───────────────┼─────────┼───────┤
│ Inner │ ╬ │ 9580 │
└───────────────┴─────────┴───────┘
правила
- Вы можете принять ввод любым разумным и удобным способом, если это разрешено стандартными правилами ввода / вывода .
- Для выполнения этой задачи на языках, где символы, используемые для построения «двери», являются многобайтовыми символами, они могут быть засчитаны в ваш счет в виде одного байта каждый.
- Все остальные символы (одно- или многобайтовые) должны учитываться как нормальные.
- Вывод может не содержать завершающих пробелов, но завершающий перевод строки разрешается, если это абсолютно необходимо.
- Это код-гольф, поэтому выигрывает меньшее количество байт.
Тестовые случаи
Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝
Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝
* Да, я знаю, что чем больше он становится, тем меньше он выглядит как тюремная дверь! : D
╬
даже корыто╬
не в своей кодовой странице? Если нет, то"'Z“ζ
разрешается ли стоимость одного байта (или 2)? (нажмите 9580, конвертировать в юникод)?"'Z“ζ
равное одному байту будет как в javascript"╬"
стоимостью 1 байтОтветы:
Ява 8,
156151148118 байт-30 байт, создав порт ответа @raznagul C # (.NET Core) , после того, как я набрал 5 байтов.
Попробуйте онлайн.
Старый 148-байтовый ответ:
-5 байт благодаря @raznagul .
Объяснение:
Попробуй это здесь.
источник
-->
оператора go ( ).i-->3
,i-->2
аj-->3´ you can save 5 bytes by removing the
n- = 3` иn+1
.Древесный уголь , 34 - 5 = 29 байт
Попробуйте онлайн! Ссылка на подробную версию кода. 5-байтовое сокращение предназначено для символов рисования прямоугольников.
ReflectOverlapOverlap(0)
должен быть эквивалентен,ReflectMirror()
но вместо этого Charcoal просто делаетReflectTransform()
вместо этого, в противном случае это решение также будет работатьn=3
. Вот обходной путь, который показывает, что произойдетn=3
для 38 - 5 = 33 байта:Еще лучше, если бы
ReflectOverlapOverlap(0)
работал, но я не потрудился поддержатьn=3
, тогда я мог бы сделать это для 31 - 4 = 27 байт:источник
╠
в╣
и такие. « Счетчик байтов Charcoal по какой-то причине не работает. » Может быть, счетчик байтов Charcoal не работает, потому что эти символы не являются частью его кодовой страницы? Вы можете считать их как 1 байт каждый в соответствии с правилами вызова, так что это действительно 27.Древесный уголь ,
4442 байтаВычеркнуто 44 все еще регулярно 44
Попробуйте онлайн!
источник
Haskell, 75 байт
Попробуйте онлайн!
Функция
w
принимает целое числоi
и список, гдеa
находится первый,b
второй элемент иc
остальная часть списка, и создает новый списокa
, за которым следуютi-3
копииb
, а затемc
. Подать заявлениеw
Сначала к каждому элементу списка,["╔╦╗\n","╠╬╣\n","╚╩╝"]
а затем снова (сi
увеличением на1
) в результирующем списке. Объединить в один список.источник
<$
родом изData.Functor
и был введен вPrelude
. Это почти так же, как>>
.a <$ b
заменяет каждый элемент наb
witha
, тогда какb >> a
ожидаетa
быть списком и объединяет длинуb
копийa
.[1,2] >> "aa"
->"aaaa"
,"aa" <$ [1,2]
->["aa","aa"]
. Примечание:'x' <$ [1,2]
равно[1,2] >> "x"
.Vim, 29 байт
Поскольку есть управляющие символы, вот дамп xxd:
Попробуйте онлайн!(У интерпретатора V, похоже, есть проблемы с экзотическими символами, поэтому в ссылке используются более приземленные символы.)
объяснение
источник
GNU sed, 74 + 1 = 75 байт
+1 байт за
-r
флаг. Вводит в виде одинарного числа.Попробуйте онлайн!
объяснение
Это довольно просто. Предположим, что ввод 6 (унарный 111111). Первая строка сбрасывает четыре
1
с и преобразует оставшиеся входные данные в это:Третья строка в цикле заменяет каждую
1
на символ, предшествующий ей. Это создает наши столбцы:Обратите внимание, что это также дублирует
;
характер. Наконец, пятая строка в цикле заменяет каждый;
символ копией следующей строки:источник
Желе , 33 байта
... это 33? - преобразование однобайтовых строковых литералов (индексов кодовых страниц) в символы Юникода стоит 5.
Полная программа печати результата.
Попробуйте онлайн!
Как?
источник
Y
в конце,+⁽"7Ọ
добавляет 9556 к ним, а затем приводит к символам. Они (5) бесплатно? Я чувствую, что это было бы так же, как если бы я мог использовать символы Unicode напрямую. (Я мог бы также использовать реальные символы, а не индексы кодовой страницы и использовать отображение для большего количества байтов).Python 3 , 75 байт
Попробуйте онлайн!
источник
n-3
n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
n+1
эквивалентно-~n
.Дьялог АПЛ, 71 байт
Попробуйте онлайн!
источник
(some expr)f Y
наY f⍨ some expr
.Japt ,
60 52 49 4836 байтПопробуйте онлайн!
Другая версия (47 байт +
-R
флаг)Нужен
-R
флаг (добавлен в поле ввода). Попробуйте онлайн!Как это работает?
Поскольку я изначально предполагал, что «дверные символы» стоят больше, чем один байт, я решил, что смогу сэкономить немало байтов, кодируя их. Затем я вычел 9500 из кодов символов, которые оставили меня с символами
8J; DPG >MA
, которые стоят только один байт каждый. Тогда я мог бы просто добавить 9500 к каждому символьному коду, и все было бы хорошо.источник
05AB1E , 29 байт
Попробуйте онлайн!
источник
Swift, 161 байт
Un-golfed:
Вы можете попробовать этот ответ здесь
источник
QBIC , 78 байт
К счастью, все символы, используемые в нашей камере, находятся на кодовой странице QBasic.
объяснение
Пример вывода
источник
PHP , 131 байт, 113 символов
Попробуйте онлайн!
PHP , 133 байта, 115 символов
Попробуйте онлайн!
источник
JavaScript (ES6), 86 байт
Это значительно длиннее, чем в другом ответе JS , но я хотел попробовать его альтернативным методом.
Как?
Мы назначаем вес каждому краю сетки: 1 справа, 2 слева, 3 снизу и 6 сверху. Сумма весов дает индекс используемого персонажа.
демонстрация
Показать фрагмент кода
источник
JavaScript (ES6),
8074 байтаисточник
Руби,
5452 байта-2 байта благодаря ymbirtt.
Попробуйте онлайн!
Ungolfed
Это супер скучно
источник
(n+1)
немного сократить это, написав-~n
- приоритет оператора также сэкономит вам скобки.Java 8, 102 + 101 байт
Это еще один строковой повторитель той же длины:
Попробуйте онлайн!
источник
BiFunction
:n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}
иString r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);}
попробуйте это онлайн. И второй метод также может быть изменен наString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
(63 байта), так что в итоге он становится 141n->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"
иString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
попробуйте это онлайн.C # (.NET Core) ,
оценка 123 (141 байт)Оценка 118 (136 байт)Попробуйте онлайн!
-5 байт благодаря @KevinCruijssen
Объяснение:
источник
b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};
вfor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}
Попробовать онлайн.Stax , 23 байта
Запустите и отладьте его
Вот версия без присмотра. Забавно, но на самом деле для stax меньше не использовать литеральные символы, потому что включение их в качестве литерала предотвратит упаковку исходного кода.
Запустите этот
источник
Mathematica, 106 байт
источник
ОК, 38 символов
Попробуйте онлайн.
Кажется, k не хочет хорошо обрабатывать Unicode, поэтому я пошел с OK.
источник
Пакет, 126 байт
Работает в CP437 или CP850. Похоже на эти кодовые страницы:
источник
Сетчатка ,
5650 байтПопробуйте онлайн! Работает путем построения квадрата ╬s, а затем исправления краев (в частности, три столбца удаляются при добавлении сторон).
источник
PowerShell , 67 байт
Принимает
$args[0]
, вычитает3
, сохраняет это в$x
, использует его в конструкции верхней части двери для вывода соответствующего количества средних секций. Затем мы выводим средние строки, из которых мы имеем$x+1
. Наконец, нижний ряд похож на верхний ряд. Все они остаются на конвейере, и неявноеWrite-Output
вставляет новую строку между элементами бесплатно.Попробуйте онлайн!
источник
Perl 5 , 61
60 символов кода (90, включая символы многобайтовой двери) + 1 для
-p
Попробуйте онлайн!
источник
C # (.NET Core), 130 байт
Порт ответа Java 8 от @RobertoGraham , после того, как я набрал около 70 байтов.
Попробуйте онлайн.
источник
J ,
4137 байтПопробуйте онлайн!
Рисование по умолчанию занимает 13 байт , к сожалению, лучший способ замены символов, который я нашел, стоит 28.
источник