Искусство Формирования Слова
Если задана двоичная матрица и строка букв, замените все 1 в матрице слева направо на буквы строки. Как только буквы сформированы в форму матрицы, выведите матрицу, заменив 0 пробелами. Вероятно, проще просто привести пример или два.
Дело: Базовый случай ...
Введите один:
[0,0,1,0,0]
[0,1,0,1,0]
[1,0,0,0,1]
[0,1,0,1,0]
[0,0,1,0,0]
"PPCGPPCG"
Выход один:
P
P C
G P
P C
G
Случай: если длина входной строки превышает количество единиц ...
Вход второй:
[1,0,0]
[0,1,0]
[1,0,1]
lambda
Выход второй:
l
a
m b
Случай: если входная строка короче, чем количество единиц ...
Третий вход:
[1,1,1]
[1,0,1]
[1,1,1]
PPCG
Выход Три:
PPC
G P
PCG
Доступные предположения
- Вы можете предположить, что входная строка никогда не бывает пустой.
- Вы можете предположить, что матрица никогда не будет пустой.
- Вы не можете предполагать, что двоичная матрица никогда не будет иметь все нули.
правила
- Если строка короче, чем количество единиц, повторите строку; все должны быть заменены.
- Если строка длиннее, чем количество единиц, используйте только то, что нужно.
- Вы можете использовать True / False вместо целых чисел / битов для ввода.
- ТРЕБУЮТСЯ пробелы, все нули должны быть заменены пробелами.
- Один завершающий перевод строки является приемлемым.
- Это код-гольф, выигрывает меньшее количество байт.
Ответы:
MATL , 11 байт
Входные данные представляют собой числовую матрицу (с
;
разделителем строк) и строку.Попробуйте онлайн! Или проверьте контрольные примеры: 1 , 2 , 3 .
источник
Vim,
4442 байтаСохранено 2 байта благодаря @DjMcMoylex !
Здесь,
^M
дословный перевод строки, и^V
являетсяCTRL-VПринимает входные данные в этом формате:
Отказ от ответственности: Если длина строки превышает ~ 40 символов, на вашем компьютере может не хватить памяти.
Объяснение:
Вот гифка "запуска" программы ":
источник
{
вместо того,gg
чтобы снять пару.Retina ,
4133 байтаПопробуйте онлайн!
Строка ввода задается в первой строке ввода, за которой следует матрица. Поскольку Retina не имеет понятия списков (или чего-то еще, кроме строк), в двоичной матрице нет разделителей, за исключением перевода строки для разделения строк.
объяснение
Превращает нули в пробелы.
Повторно заменяйте первый
1
на первый символ входной строки, одновременно поворачивая этот символ до конца входной строки. Это учитывает случаи, когда1
во входной строке больше s, чем символов.Откажитесь от первой строки, т.е. входной строки.
источник
(.)(.*)
- Teehee ...JavaScript ES6,
67535049 байтСохранено 3 байта благодаря @ETHproductions Сохранено еще 1 благодаря @Neil
Старый код, прежде чем я знал, что строковые матрицы являются допустимым форматом ввода:
Показать фрагмент кода
источник
c=>' '[c]||b[i++%b.length]
, но, к сожалению, это на байт длиннее ...(a,b,i)=>a.replace(/\d/g,c=>+c?b[++i]||b[i=0]:' ')
i
этоundefined
, так++i
возвращаетсяNaN
. Так какb
не имеетNaN
собственности,b[++i]
возвращаетсяundefined
, и||
оператор запускает его правой стороне аргумент, установив ,i
чтобы0
и возвращает первый символ вb
.\d
? Конечно,.
достаточно, так как вам нужно иметь дело только с0
s и1
s (.
не соответствует переводу строки).Perl, 40 байт
36 байт кода +
-i -p
флаги.(обратите внимание на последний пробел и отсутствие окончательного перевода строки).
Чтобы запустить его, напишите входную строку после
-i
флага и укажите матрицу во входных данных:Если ваш Perl немного стар, вам может понадобиться добавить последнюю точку с запятой (после пробела).
источник
Python 2,
11471 байтОказывается, я заново изобретал колесо, простая двойная замена многострочной струны работает довольно хорошо. Строка имеет дополнительное преимущество, заключающееся в возможности прямого подсчета нулей, вместо того, чтобы делать действительно уродливый
s*len(L)*len(L[0])
для вложенного спискаСтарое решение:
Сначала мы преобразуем все + 32 с
chr
(все нули становятся пространства), то мы заменим все из!
с ,{}
чтобы с помощьюformat
функции.ЕслиЕсли я решил использовать чит и использоватьNULL
можно считать пробелом.NULL
вместо пробела, я могу пропустить добавление 32, чтобы сэкономить 12 байтов. (print
отображается'\x00'
как пробел)источник
.replace('\x00',' ')
в конце добавляет 20 байтовAPL, 18 байт
Это функция, которая принимает логическую матрицу в качестве левого аргумента и строку в качестве правого аргумента.
Объяснение:
APL имеет встроенную функцию, которая делает что-то вроде этого
\
(разверните). Однако он работает только с векторами и требует, чтобы каждый символ фактически использовался.X←,⍺
: выровнять матрицу и сохранить результат в X.⍵⍴⍨+/X
: измените вектор символов так, чтобы он имел необходимое количество элементов (это также заботится о удлинении строки путем повторения символов при необходимости).X\
: взять один из символов для каждого1
и пробел для каждого0
вX
.(⍴⍺)⍴
: изменить результат так, чтобы он имел форму исходной матрицы.источник
PHP,
11091978882818075 байтсэкономлено 6 байт благодаря @ user59178
Беги с
-r
. Ожидается матрица как многострочная строка в первом аргументе, строка во втором аргументе.источник
foreach(str_split($argv[1])as$c)echo$c<1?$c?:" ":($s=$argv[2])[$k++%strlen($s)];
я поменял местами порядок двух троичных и таким образом снял скобки со второй, используя<1
вместо>0
for(;""!=$c=$argv[1][$i++];)
вместоforeach(...)
PowerShell v2 +, 70 байт
Принимает входное слово как
$a
и матрицу как массив массивов$b
(см. Примеры ниже). Циклы$b
, затем петли через элементы каждого ряда$_|%{...}
. Внутренний цикл является условиемif
/else
, где мы либо выводим$a[$n++]
и принимаем mod-равный длине строки, либо выводим пробел' '
. Они-join
объединены обратно в строку. Каждая из строк остается в конвейере, и неявный вывод с переводами строки происходит черезWrite-Output
при завершении программы.источник
Groovy, 63
источник
Python 3, 104 (или 83) байта
Есть более короткий вариант (83 байта), но он потерпит неудачу, если строка более чем в 999 раз короче, чем необходимо:
источник
next
список. Если вы делаете, тоs=iter(list(s)*999)
это делает (89 байт)s.pop(0)
. Кажется, я скопировал неправильную версию, исправил это.s[i++%s.length()]
хорошая методология, хотя я не знаю Python.i++
в Python такого понятия не существуетPyth, 12 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
ES6, 78 байт
Я старался
источник
Common Lisp, 152 байта
Использование:
Эта функция проходит через каждый элемент каждой строки сетки.
format
Строка управления либо печатает пространство , если элемент является 0 или потребляет аргумент символьного , если элемент равен 1. Символ новой строки печатается после каждой строки сетки. Если строка слишком короткая, она повторяется с начала; если он слишком длинный, выводится только соответствующая часть.источник
зернышко , 18 байт
17 байт кода, +1 для
-l
флаг.Принимает массив в качестве первого аргумента командной строки следующим образом:
100 010 101
(необходимо заключить в кавычки в оболочке), а строку - в качестве второго аргумента командной строки. Попробуйте онлайн!объяснение
источник
Ява,
237233 байтаИзменить: сохранено 4 байта благодаря Мукул Кумар
Golfed:
Ungolfed:
Тестирование:
источник
Пайк, 12 байт
Попробуй это здесь!
Выводит матрицу символов
Или 9 байтов, неконкурентоспособных.
Попробуй это здесь!
Еще более неконкурентоспособен, 8 байт
Попробуй это здесь!
print_grid
теперь выравнивает пустые строки правильноdeep_for
теперь делает угадайку на ложностях, отличных от истинных
источник
Java, 122 байта
источник
Mathematica, 76 байт
Безымянная функция двух аргументов, первый из которых (
#
) является массивомTrue
s иFalse
s, а второй из которых (s
) является списком символов. Вспомогательная функцияопределяется, который помещает ходы первого символа
s
в конец, а затем возвращает этот только что перемещенный символ. Вызовf
несколько раз будет циклически возвращать символыs
в порядке.Основная функция
который вызывает
f
каждоеTrue
значение во входном массиве и возвращает пробел для каждого ложного ввода. ({2}
УказываетMap
работать с элементами списков компонентов массива, а не с самими этими списками.)Эти 60 байтов возвращают массив символов
s
и пробелов. Оберткапомещает новые строки между списками этого массива, а затем объединяет все.
источник
C ++, 61 байт
источник