Вызов
Работники завода обычно очень трудолюбивы. Однако их работа в настоящее время обычно заменяется машинами.
Вы должны написать программу, которая принимает число в качестве входных данных. Он будет распечатывать фабрику из 10 рабочих 10 раз. Каждый раз каждый работник может 1/input
быть «уволен» и заменен машиной.
вход
Целое число, поступающее из STDIN или вызова функции.
Выход
10 случаев фабрики, в каждом из которых, как правило, было уволено больше рабочих.
Формат вывода - как распечатать фабрику
Фабрика выглядит так:
|0000000000|
или |0000011001|
Труба представляет стены, 0 представляет работника, а 1 представляет машину, поэтому всегда будет первый отпечаток фабрики |0000000000|
.
пример
Вход: 10
Выход:
|0000000000| //always start off with this
|0000000010| //a 1/10 chance means that this worker lost his job
|0000010010|
|0010010010|
|1010010010|
|1010110010|
|1010110011|
|1010111011|
|1010111111|
|1110111111|
Вход: 5
Выход:
|0000000000| //always start here
|0000001001| //a 1/5 chance means that 2 workers got fired
|1000101001|
|1000101111|
|1101101111|
|1111111111| //after achieving all machinery, the machines continue to be printed
|1111111111|
|1111111111|
|1111111111|
|1111111111|
НОТА
Количество уволенных работников - СЛУЧАЙНОЕ - в моих примерах 1/5 chance
всегда было уволено 2 работника, но ваша программа должна делать это случайным образом - иногда 1, а иногда 3 - у них только 1/5 шансов быть уволенным.
Ответы:
Japt
-R
,2221201918 байтПопытайся
объяснение
источник
R ,
9289 байтПопробуйте онлайн!
Ungolfed:
источник
replicate
иfor
циклы без успеха, однако, с вашими советамиDo-while loops
, я наконец-то только что понял, насколько это{
может быть оскорбительным . Я распространил это злоупотребление на пример сfor()
решением для 92 байтов. Возможно, вы уже осознали последствия{
злоупотреблений, когда писали этот пост, но я понял только сейчас. tio.run/##K/r/…"for"
почти всегда не лучшеfor
, а иногда и хуже !pmax
можно использовать. Вот мой предыдущий пункт об{
операторе. tio.run/##PZDBasNADETv@xVDfKhNjcGHXAKl5OJTT2l/…JavaScript (ES6), 84 байта
Попробуйте онлайн!
Рекурсивная версия, 88 байт
Попробуйте онлайн!
Как?
Начнем с k = s = '5000000000' .
На каждой итерации:
Мы приводим каждый символ i из s к числу, вычисляем i по модулю 5, чтобы ведущий 5 обрабатывался как 0, и случайным образом выполняем побитовое ИЛИ с 1 с ожидаемой вероятностью 1 / n , за исключением первой итерации. ,
Счетчик k смещен вправо на 3 бита. Мы прекращаем рекурсию, как только k = 0 , что дает 10 итераций.
Важно отметить, что 5000000000 немного больше, чем 32-разрядное целое число, поэтому оно неявно преобразуется в 5000000000 & 0xFFFFFFFF = 705032704 непосредственно перед тем, как произойдет первое побитовое смещение. Отсюда следующие шаги:
источник
APL (Dyalog) , 37 байт
Попробуйте онлайн!
Как?
10⍴0
- начать с 10 нулей.⎕←' '~⍨⍕'|'⍵'|'
- каждый раз печатать отформатированный массив,?10⍴⍺
- генерировать случайный массив со значениями, начиная1
с ввода,⍺=
- поэлементное сравнение с вводом. должен отмечать1
/ вводить элементы, давая каждый а1
/ вход каждый раз,⍵+
- добавить в массив,×
- подпись. ноль остается нулем, все, что больше единицы, возвращается к одному.⍣10
- повторить 10 раз.источник
Сетчатка , 30 байт
Попробуйте онлайн!
Мне очень весело со случайностью в Retina ^^
объяснение
Первый этап устанавливает строку, с которой мы будем работать:
Он заменяет весь входной
|
символ новой строкой, а затем 10 строками, содержащими столько0
s, сколько указано во входных данных. Первый символ в каждой строке будет представлять работника фабрики.Следующий этап означает:
Первая строка рабочей строки содержит только a
|
, который будет первым символом, напечатанным на каждой итерации цикла (являющимся первым символом первой строки), и будет также напечатан в конце каждой итерации (будучи первым характер всей строки). Замена никогда не повлияет на эту строку, потому что она не содержит цифр.Каждая вторая строка содержит
n
цифры, поэтому естьn
шанс 1 превратить первый символ строки (который является единственным значащим) в a1
.источник
PowerShell ,
828069 байтПопробуйте онлайн!
Принимает участие
$x
. Создает массив всех нулей, сохраняет это в$a
и затем циклически повторяет это много раз. Удобно, что фабрика так же широка, как и стоимость итераций. На каждой итерации мы выводим нашу текущую фабрику"|$(-join$a)|"
, а затем перебираем каждый элемент$a
.Внутри мы выбираем текущий элемент
$_
, который был-b
начатor
с любым1
из них на основеRandom
шанса, основанного на вводе$x
. Например, для ввода10
,Get-Random -max 10
будет в диапазоне от0
и9
и будет0
примерно 1/10 времени. Таким образом, с!(...)
упаковкойRandom
мы получим1
примерно1/input
количество времени, а другое1-1/input
количество времени мы получим$_
. Да, это иногда означает, что мы перезаписываем один1
другим1
, но это нормально.Этот результирующий массив затем сохраняется в
$a
следующем раунде. Все полученные строки остаются в конвейере, и неявноеWrite-Output
завершение программы дает нам новые строки бесплатно.-2 байта благодаря Вескам.
-11 байт благодаря ASCII-только.
источник
$a
когда уже проходим цикл? LOL И это умный трюк с-bor
. Благодарность!Perl 6 , 58 байт
Попробуйте онлайн!
+(1 > $_ * rand)
генерирует один бит с требуемой частотой1
s.xx 10
Дублирует это выражение десять раз для создания одного экземпляра фабрики в виде списка битов и[~]
объединяет этот список в одну строку.xx 9
реплицирует это выражение, генерирующее фабричные строки, девять раз, а затем[\~|]
выполняет треугольное сокращение (которое некоторые другие языки называют «сканированием») с помощью оператора stringwise или~|
так, чтобы рабочий, запущенный на более ранней итерации, оставался запущенным на более поздних.источник
for
. Превосходит числовое решение, над которым{say "|{.join}|"for [\<<+|>>] (?$++X*!<<^$_).roll(10)xx 10}
я работал, на два байта. При[\Z+|]
этом было бы 56 байт, но по какой-то причине это не работает.$_*rand
на.rand
. То, как я интерпретирую правила, возвращает список «фабричных» строк, тоже должно быть в порядке.Python 2 ,
104103 байтаПопробуйте онлайн!
источник
Желе , 22 байта
Полная программа, принимающая целое число в качестве ввода командной строки и распечатывающая вывод в STDOUT.
(В качестве монадической ссылки возвращается список символов и целых чисел.)
Попробуйте онлайн!
Как?
Эффективно решает на каждом этапе, если каждый работник (включая любые машины) потеряет свою работу (с вероятностью один в N), однако машины будут заменены машинами (используя логическое ИЛИ).
источник
MATL , 26 байт
Попробуйте онлайн!
(Длинное) объяснение
Пример содержимого стека показаны по пути. На каждом шаге содержимое стека отображается снизу вверх.
источник
JavaScript (Node.js) ,
1059390 байтПопробуйте онлайн!
+2 байта за размещение массива внутри функции, спасибо @Shaggy за указание на это
Попробуйте онлайн!
источник
w
они должны быть объявлены внутри вашей функции.C (gcc) ,
110106 байтов-4 байта от @ceilingcat
Попробуйте онлайн!
Перебирает список символов для каждого раунда замен.
Ungolfed:
источник
SmileBASIC, 75 байтов
источник
Perl 5 , 44 байта
Попробуйте онлайн!
источник
05AB1E , 22 байта
Попробуйте онлайн!
Там должно быть больше места для игры в гольф.
TÅ0
- Нажмите список из 10 нулей.TF...
- Сделайте это 10 раз:DJ
- Дублируйте текущий элемент и присоединитесь к нему.'|.ø=
- Окружите его двумя|
секундами и напечатайте STDOUT.ITи
- Повторите ввод 10 раз.€L€Ω
- И для каждого случая получите случайный элемент [1 ... N] . (Для этого может быть встроенный модуль, которого я еще не видел)Θ
- Нажми 05AB1E trueified ™. Для каждого проверьте, равен ли он 1 .s...~
- Логическое ИЛИ результат по текущему элементу.источник
JavaScript, 83 байта
Показать фрагмент кода
источник
Java 10,
153152131 байт-18 байт благодаря @ OlivierGrégoire и -3 байт за счет преобразования Java 8 в Java 10.
Объяснение:
Попробуйте онлайн.
источник
var
наString
для Java 9 и ниже , и в течение дополнительных 3 байта. Я в основном слил две петли, которые у вас есть.Древесный уголь ,
302927 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нажмите строку 10
0
с в пустой списокu
.Повторите следующую команду 10 раз.
Для каждого символа последней строки повторите это
n-1
раз, добавьте a1
и выберите случайный символ из строки. Это дает1/n
возможность изменить характер на1
. Результат подталкивается кu
.Сопоставьте список строк, окружив каждую из них
|
, затем неявно напечатайте каждую в отдельной строке.источник
Python 3 , 132 байта
Попробуйте онлайн!
источник
APL + WIN,
30 4035 байтПропущенный бит про отсутствие пробелов; (- исправлено и спасибо Уриэлю за -3 байта
Подсказки для экранного ввода номера
Объяснение, похожее на объяснение Уриэля:
источник
9 10⍴?90⍴5
→?9 10⍴5
. Вы также должны устранить пробелыVBA, 144 байта
Отступы для удобства чтения:
Использует преимущество 2 баллов: VBA Arrays по умолчанию будет иметь базовую 0 (
w(9)
то же самое, что иw(0 to 9)
), а создание массива как Long автоматически инициализирует его равным 0.(К сожалению, 20 байтов автоматически форматируются, что VBA добавляет, но фактически не требуется - 19 пробелов и одна точка с запятой)
источник
Я не вижу ответа для Ruby, поэтому:
Рубин , 92 байта
Попробуйте онлайн!
источник
rand(n)<1
вместоrand(n)==0
, и сохраните несколько, используя{..}
вместоdo..end
, например,x.times{puts'|'+z...}
Рубин, 67 байт
Я думаю, что я обманул несколько вещей здесь. Прежде всего, эта функция печатает вывод с кавычками вокруг каждой строки, например:
Если это неприемлемо (учитывая, что это ascii-art , что, вероятно, имеет место), вот решение, которое печатает без кавычек для 70 байтов :
Объяснение:
источник
PHP,
7170 байтобъединенные циклы сохранили 5 байтов (снова):
Запустите как трубу с
-nR
или попробуйте онлайн .edit 1: фиксированный формат и первый вывод (без изменения количества байтов благодаря дополнительной игре в гольф)
edit 2: игра в гольф еще один байт: после последней печати больше не нужно никого увольнять.
источник
C # (интерактивный компилятор Visual C #) , 131 байт
Эй, по крайней мере, я связан с Java.
Попробуйте онлайн!
источник