Пьяное путешествие домой
В этом задании вы должны написать программу, которая имитирует пьяницу, спотыкающегося по дороге домой из бара.
Входные данные:
Входными данными будет матрица смежности (представляющая ориентированный граф), которая представляет пути, по которым пьяница может идти. В каждой локации пьяница выберет один путь случайным образом (каждый вариант имеет примерно равные шансы и не зависит от предыдущих вариантов выбора).
Предположим, что пьяница всегда начинается с бара (первая строка в матрице смежности).
Если пьяница заходит в тупик, можно предположить, что он либо добрался домой, либо был арестован за общественное опьянение, и программа должна вернуться на свой путь.
Можно предположить, что график всегда будет содержать хотя бы один тупик.
Можно также предположить, что пьяница всегда сможет выйти из бара (в первом ряду не все нули) и что если пьяница застрянет в каком-либо месте, то этот ряд будет представлен всеми нулями.
Выход:
Результатом будет путь, по которому пьяница пошел, пытаясь добраться домой. Значения для местоположений могут быть либо нулевыми, либо индексированными.
Примеры:
Input
[1,0,1,1]
[0,0,0,0]
[1,0,0,0]
[1,1,1,1]
Possible Outputs
[0,2,0,3,2,0,0,3,1]
[0,3,0,3,1]
Input
[0,1,1,1,0,1]
[1,0,1,0,1,1]
[0,0,0,0,0,0]
[0,0,0,0,0,1]
[1,0,0,0,0,0]
[0,0,0,0,0,0]
Possible outputs
[0,1,5]
[0,5]
[0,1,4,0,2]
[0,3,5]
[0,3,0,1,4,0,5]
Deterministic path:
Input
[0,0,1,0]
[0,0,0,1]
[0,1,0,0]
[0,0,0,0]
Output
[0,2,1,3]
источник
[ '1011', '0000', '1000', '1111' ]
?i
со всеми нулями, кроме столбцаi
?0
1,2,3,5
0
4
Ответы:
Mathematica, 72 байта
Эта функция принимает матрицу в качестве аргумента и возвращает список, и она использует 1-индексирование.
Основная идея состоит в том, чтобы начать с
который неоднократно применяет правило, следующее за списком,
{1}
пока не перестанет меняться. Правило соответствует шаблонучто означает «список с нулем или более вызываемыми элементами,
r
за которыми следует элемент с именемx
». Это даетx
в качестве последнего элемента в текущем списке, и мы заменяем список накоторый является исходным списком с
<stuff>
добавлением. Материал, о котором идет речькоторый принимает
#[[x]]
(x
th-й элемент входной матрицы) в качестве списка весов и сопоставляет их сn++&/@#
сокращениемRange@Length@#
(то есть{1,2,3,...}
с соответствующей длиной). Это приведет к ошибке, если все веса равны нулю, поэтому он обернут вкоторый вернется,
##&[]
если будет сгенерировано сообщение об ошибке. Это просто причудливый способ записиSequence[]
, который действует как элемент «ничего» ({1,2,Sequence[],3}
оценивает{1,2,3}
) и, следовательно, оставляет список неизменным, что приводит//.
к прекращению замены.источник
R ,
726966 байтПопробуйте онлайн!
Принимает ввод в виде
logical
матрицы и выводит индексы на основе 1 на консоль.источник
Perl 5
-a0
,5351 байтДайте входную матрицу в виде отдельных жестких строк на STDIN
Попробуйте онлайн!
Повреждения
@F
во время цикла тела, но это отремонтированоredo
источник
MATL , 15 байт
Выход основан на 1.
Попробуйте онлайн! Первый вход . Второй вход . Третий вход .
объяснение
источник
Perl 6 , 38 байт
Попробуйте онлайн!
источник
Python, 136 байт
Используя нулевое индексирование, предполагая, что randrange был импортирован. Принимает вход m в качестве матрицы смежности.
113 нет импорта
s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],randrange(len(m)))or s(m,c,p,randrange(len(m))))or p
136 с импортом
import random as r;s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],r.randrange(len(m)))or s(m,c,p,r.randrange(len(m))))or p
источник
Рубин ,
70 6765 байтСпасибо benj2240 за сохранение 2 байта!
Попробуйте онлайн!
источник
m[i].sum<1?:[]
.sum
был введен в 2.4. Я имел обыкновение делать.reduce(0, :+)
...JavaScript (ES6), 87 байт
Попробуйте онлайн!
Альтернативная версия, 81 байт
Принимает ввод как массив двоичных строк. Максимальный поддерживаемый размер 16x16.
Попробуйте онлайн!
источник
Java 10, 135 байт
0 индексированные
Объяснение:
Попробуйте онлайн.
источник
Haskell ,
123118 байтПопробуйте онлайн!
источник
APL (Dyalog Unicode) , 32
34байтаПопробуйте онлайн!
Принимает вложенный двоичный массив в качестве входных данных. Выводит каждую итерацию в отдельных строках.
источник
Python ,
9794 байтаПопробуйте онлайн!
Смотрите этот ответ для более подробного объяснения о генераторе случайных чисел:
источник