Мы , кажется , никогда и не получить устал алфавит связанных проблем ...
Рецепт
Данный
- последовательность букв
S
и - два положительных целых чисел
M
,N
,
создайте алфавитный суп с буквами, S
занимающими случайные позиции в прямоугольной чаше размером M
× N
, обрамленной неалфавитным, не пробельным символом для обозначения края чаши.
Позиции, не используемые буквами, должны отображаться в виде пробелов. Смотрите примеры ниже .
Дополнительные правила
- Размер
M
×N
относится к внутренней части чаши. Размер, включая обод, равенM+2
×N+2
. - Каждый персонаж из
S
должен появиться один раз в чаше, в другой позиции ; то есть один символ не может перезаписать другой. S
может содержать дубликаты . Например, еслиS
это строка'abcc'
, суп должен содержать одинa
, одинb
и дваc
(все в разных позициях).- Входы будут удовлетворять ограничения
M >= 1
,N >= 1
,1 <= length(S) <= M*N
. - Ободок чаши может быть любым не алфавитным, не пробелом , одинаковым для всех прогонов программы и входных значений.
- Позиции букв в чаше случайны, поэтому результат может отличаться при каждом запуске программы с одними и теми же входами.
- Учитывая ввод, каждый возможный набор буквенных позиций должен иметь ненулевую вероятность . Поскольку это невозможно проверить из нескольких реализаций программы, пожалуйста, объясните, как ваш код выполняет это.
- Разрешается использование начальных или конечных пробелов по ободу.
S
будут содержать только заглавные буквы. Если вы хотите, вы можете выбрать только строчные буквы.- Ввод и вывод являются гибкими, как обычно. Например, выходные данные могут быть строкой с символами новой строки, двумерным массивом символов или списком строк.
- Программы или функции разрешены на любом языке программирования . Стандартные лазейки запрещены.
- Самый короткий код в байтах побеждает.
Примеры
Входные данные отображаются как S, [M N]
, где M
количество строк и N
количество столбцов. Персонаж #
используется для оправы.
'O', [1 1]:
###
#O#
###
'HEY', [1 3]:
#####
#YHE#
#####
'HELLO', [4 11]:
#############
# O #
# H #
# LE #
# L #
#############
'ADVNJSGHETILMVXERTYIOJKCVNCSF', [8 12]:
##############
#K V L S #
# A V X H #
#T M C #
# I O N#
# YC #
# G I R SE#
# J F #
#JT D V EN #
##############
'OOOOOOOOOOXXXXX', [13 31]:
#################################
# X #
# O #
# #
# X #
# O #
# X O #
# O #
# X #
# O #
# X #
# O #
# O O O #
# O #
#################################
'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ', [11 41]
###########################################
# JU#
# Q C M G R T U Y H #
# KI E H M YO #
# V BW I JC #
# SV D P B U #
# A F RF J KP E #
# E N TH Z #
# N BM O Q I AS N WX #
# S O K G L P Q #
#Z L T R L A F DD#
# V Y WX C G XZ #
###########################################
|+-
?Ответы:
05AB1E ,
2018161514 байтовПринимает три входа в порядке: высота, ширина, строка. Вывод в виде 2D списка символов.
Используется в
8
качестве границы, но может быть любой цифрой.-1 байт благодаря @Grimy .
Попробуйте онлайн или проверьте все контрольные примеры . (TIO содержится
}}J»
в нижнем колонтитуле, чтобы красиво распечатать результат; смело удаляйте его, чтобы вместо этого увидеть фактический выводной 2D-список символов.)Объяснение:
источник
*j
! Вот 13 для устаревших или ужасные 14 для современных (выводит двумерный массив символов).1,1,"O"
, поэтому я думаю, что он должен быть и 14-байтовым для наследства. Спасибо за -1, хотя.APL (Dyalog Unicode) , 25 байтов SBCS
Попробуйте онлайн!
-22 благодаря @ngn, -7 благодаря @ngn и @ Adám
Объяснение:
APL (Dyalog Extended) , 21 байт SBCSУглы обода разные персонажи
Попробуйте онлайн!
Использование dfn для отображения окна.
источник
'#',∘⌽∘⍉⍣4⊢⍴∘(?⍨∘≢⊃¨⊂)↑⍨∘(×/)
попробуйте это онлайн!{'#',∘⌽∘⍉⍣4⊢⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
(или≥
вместо>
если⎕io=1
)'#',∘⌽∘⍉⍣4{⍵⍴⍺\⍨(≢⍺)>?⍨×/⍵}
'#',∘⌽∘⍉⍣4{⍵⍴⊃¨↓∘⍺¨?⍨×/⍵}
Python 3 , 110 байт
Попробуйте онлайн!
Рандомизирует с использованием
set
понимания и возвращает двумерный массив символов.источник
f'{s:{m*n}}'
часть? Потому что это синтаксис для форматированной строки, который, по совпадению, также начинается сf
.Bash + coreutils,
139125 символовОбразец прогона:
Попробуйте онлайн!
Bash + coreutils + коробки, 97 символов
Образец прогона:
Попробуйте онлайн! (Частично, так как
boxes
не установлен на TIO.)источник
J ,
3029 байт-1 байт благодаря Ионе
Попробуйте онлайн!
источник
9!:1]6!:9''
исправляет это{.
. Небольшая настройка для 29'#'|.@|:@,^:4[$*/@[(?~@[{{.)]
: попробуйте онлайн!PowerShell ,
16311193 байтаПопробуйте онлайн!
Принимает ввод как
$w
idth,$h
восемь,$s
tring.Создает строку
#
соответствующего$w
idth, присоединяет строку с некоторыми вычислениями, а затем#
снова эту же строку. Вычисление начинается с взятия входной$s
строки и выполнения .padRig сht
точностью до$w
восьмого на$h
восемь (т.е. сделать строку достаточно длинной, чтобы полностью занять прямоугольное пространство. Затем мы преобразуем эту строкуt
oCharArray
, иsort
этоRandom
ly. Это дает мы перепутали среднюю часть. Наконец, мы разбиваем-replace
ее на куски одинакового$w
числа и окружаем эти куски символом#
s.-52 благодаря вдохновению от AZTECCO
-18 байт благодаря мази
источник
-replace
вместо того, чтобы разделять и присоединяться.JavaScript (ES7), 125 байт
Возвращает строку. Используется
0
как символ кадра.Попробуйте онлайн!
комментарии
источник
APL (Dyalog Extended) , 23 байта SBCS
Анонимная негласная инфиксная функция. Принимает
[M,N]
как левый аргумент иS
как правый аргумент.Попробуйте онлайн!
×/⍛(
…)
Примените следующую функцию между аргументами, заменив левый аргумент его произведением:↑
взятьM
×N
символов изS
, отступы с пробелами справа⊇
измените порядок в следующем порядке:?⍨⍤
перетасованные индексы с 1 по…⊣
левый аргумент (M
×N
)⍴
г eshape , что к следующей форме:⊣
левый аргумент (то естьM
строки иN
столбцы)'#'
…⍣4
Применить следующую функцию четыре раза, каждый раз с символом хеш-функции в качестве левого аргумента:∘⍉
транспонировать правый аргумент,∘⌽
отражать правый аргумент,,
объединять столбец хэшей с левой стороны этогоисточник
PHP 7.4,
1079994 символовБлагодаря:
join()
(-8 символов)chunk_split()
«s$end
параметр (-5 символов)Попробуйте онлайн!
PHP 7.3,
117112108 символовБлагодаря:
join()
(-5 символов)chunk_split()
«s$end
параметр (-4 символов)Образец прогона:
Попробуйте онлайн!
источник
fn($s,$r,$c)=>($b=str_repeat(9,$c+2))."\n9".join("9\n9".str_split(str_shuffle(str_pad($s,$r*$c)),$c))."9\n$b";
должно работать в PHP 7.4 ( wiki.php.net/rfc/arrow_functions_v2 ), и был выпущен релиз-кандидат ( wiki.php.net/todo/php74 ), так что это доступный «компилятор», который пришел до этого вызова, и любой может его использовать.join()
, но не смог уменьшить размер. Manchunk_split
: 94 байта. Я также удалил последнюю точку с запятой, так как считаю, что она не нужна, вы написали функцию, поэтому код, который собирается назначить ее переменной, не должен учитываться.MATL ,
2219 байтПопробуйте онлайн!
Спасибо @LuisMendo за сохранение 3 байтов, так что теперь у него такой же байтовый счет, что и у ответа @ flawr , но в любом случае он достаточно отличается для размещения. Общий обзор агоризма:
источник
Z}&O
путемZ"
, и что также позволяет удалить окончательныйc
1$O
.Рубин , 121 байт
Создает чашу, запрашивает индексы всех пробелов внутри чаши, выбирает количество пробелов, равное размеру строки, и заполняет их.
sample
Не возвращает отсортированный список, поэтому нет необходимости перемешивать. Поиск индексов до9*m*n
(который почти наверняка выходит за пределы диапазона) будет по-прежнему получать все пробелы и будет на 1 байт короче, чемr.size
.Попробуйте онлайн!
источник
красный ,
120116114112 байт-2 байта благодаря @Kevin Cruijssen!
Попробуйте онлайн!
источник
+ 1
и используяto"""00"0 n
вместо этого.copy
на тот же счетчик байтов.t
линию в качестве ведущего / конечного элемента перед циклом, чтобы сэкономить на двух свободныхprint t
? Я сомневаюсь в этом, но так как я не знаю, как добавить элементы в список, я не уверен.Perl 6 ,
7467 байт-5 байт благодаря Джо Кингу
Попробуйте онлайн!
объяснение
источник
Perl 5
-lF
,9997 байт-2 байта любезно предоставлены @NahuelFouilleul
Попробуйте онлайн!
источник
($i++%$n==0)
может быть изменено!($i++%$n)
k4,
3228 байтредактировать: -4 спасибо Галену Иванову!
называется как
объяснение:
источник
#
в конце каждой строки и транспонируете / переворачиваете 4 раза, что-то вроде этого .Ява (JDK) ,
180178 байтНи одного лишнего импорта:
Попробуйте онлайн!
Это была настоящая борьба за то, чтобы получить этот гольф. В частности, импорт, связанный с методами Collections.shuffle () / Arrays, был слишком сложным для принятия, поэтому мне пришлось создать собственный алгоритм перестановки строк (вероятно, ни эффективный, ни равномерно распределенный). Огромное спасибо Стивену за доказательство того, что может быть создан любой набор позиций. из алгоритма.
Отформатировано (с пояснениями):
источник
.replaceAll("(.{"+n+"})","\n#$1#")
может стать.replaceAll(".{"+n+"}","\n#$0#")
Древесный уголь , 27 байт
Попробуйте онлайн!Ссылка на подробную версию кода. Принимает ввод в порядке ширины, высоты, строки. Объяснение:
Введите ширину и высоту.
Рама чаши.
Цикл по символам в строке.
Прыгайте в случайную позицию в чаше, пока не найдете пустое место.
Распечатать текущий символ без перемещения курсора.
источник
Move(:UpLeft)
необходимо? Без него все работает, но, может быть, вы добавили его по причине, о которой я не думаю?Japt
-R
,2118 байтПопытайся
источник
MATL ,
29 2719 байтовПопробуйте онлайн!
Спасибо @LuisMendo за -8 байт!
Объяснение:
p
вычисляет количество суппикселей. ЗатемZ@
производит случайную перестановку размера числа суповых пикселей. Мы будем использовать это как индексы, кiy~h
которым относится входная строка с достаточным количеством пробелов.w)
меняет местами два и индексирует один с другим. Затем мы изменим1Ge
форму в нужный прямоугольник и#
добавим его, используяTT35&Ya
.источник
T-SQL 2017, 232 байта
Тестирование этого онлайн - старая версия sql-сервера, которая стоит другого персонажа. Я выложил более короткую версию.
Golfed:
Попробуйте онлайн
Ungolfed:
источник
С (лязг) ,
169164162160 байтПопробуйте онлайн!
-2 положить a = o в time () вызов // for (srand (time (a = o)); ...
Сохранено 7 предложений @ceilingcat для использования - ~ переменная и автоматическое хранение строки o плюс множество улучшений.
Дегольф:
источник
*a=--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(;
вместо--i;)*a++=i%m?-~i%m<3|i<m|i>m*n?35:32:10;for(*a=0;
Icon ,
136133131118 байтПопробуйте онлайн!
источник
Желе , 16 байт
Диадическая ссылка, принимающая список целых чисел
[M, N]
, слева и список символовS
, справа, который выдает список списков символов, строк. Использует тильду~
, как границу.Попробуйте онлайн!
У всех возможных выходов есть ненулевой шанс быть полученным, так как мы shuffle (
Ẋ
) список символовS
вместе с соответствующим количеством пробелов.Код
Ṿ€«”~ZƊ⁺
сохраняет байт, который, как я полагаю, должен был бы присоединиться к символам новой строки, которые должны использовать полные программы, использующие целое число, например ноль (например,P⁶ẋaẊs⁸Ṫ;€0ZUƊ4¡Y
илиP⁶ẋaẊs⁸Ṫj@€Ø0Z$⁺Y
). Может быть, есть способ сэкономить больше ...?источник