Цель
Напишите программу или функцию, которая принимает положительное целое число n
и случайным образом генерирует допустимый ряд шагов (далее называемый строкой высоты звука) длины n
.
вход
Ненулевое, положительное целое число n
<= 100
Выход
Возвращает случайную строку или список символов, которые представляют возможную, допустимую строку основного тона длины n
. Используемые символы будут:
- Б - мяч. Если вы накопите 4 из них, жидкое тесто пройдено и закончено ватин.
- S - Страйк. Если вы накопите 3 из них, жидкое тесто закончится и закончите ватин.
- F - Фол. Также увеличит количество ударов, но не сможет вытащить тесто. То есть, вы не можете иметь Фол, чтобы быть последним шагом в допустимой строке. Любые фолы после двух ударов / фолов не будут увеличивать количество ударов (у бьющего уже есть 2 удара в этот момент, и 3-й получит его).
- H - Хит. Бьющий выбил мяч в игру и закончил бить.
(Это немного упрощено, но не беспокойтесь об этом)
Допустимые строки высоты тона - те, которые заканчиваются зачеркнутым, прогулкой или ударом.
Т.е. неверная строка основного тона имеет
- дополнительные шаги после 4-го шара, 3-го удара или удара
- прекращается до создания 4-го шара, 3-го удара или удара.
правила
- Ваша программа должна быть в состоянии произвести все возможные результаты для данного входа.
- Ваша программа не обязательно должна быть случайной, но все же должна следовать предыдущему правилу.
- Это код-гольф .
Примеры
Input => Possible Outputs
1 => [H] #Can only end with a hit
2 => [S,H], [B,H], [F,H] #Can only end with a hit
3 => [S,S,S], [F,F,S], [B,B,H], ... #Can now strike-out, otherwise must end with a hit
4 => [B,B,B,B], [S,B,S,S], [B,F,S,S], [B,B,B,H], ... #Can now be walked, struck-out, or get a hit
6 => [S,B,S,B,B,H], [F,F,F,F,F,S], ... #Can now have a full-count (3 balls, 2 strikes) before finishing
Input => Invalid Outputs
1 => [S], [B] #Not enough for a strike-out/walk
2 => [S,S] #Not enough for a strike-out/walk
2 => [H,H] #Batter has already scored a hit
3 => [S,S,F] #Fouls will not cause a strike-out
4 => [S,S,S,H] #Batter has already struck out
5 => [B,B,B,B,B] #Batter has already walked
F
с и аS
- ударОтветы:
Python 2 , 128 байт
Попробуйте онлайн!
Произвольно генерируйте строку высоты тона до тех пор, пока тесто не будет сделано, выведите его, если получится правильная длина, и в противном случае попробуйте снова с нуля.
Python 2 , 136 байт
Попробуйте онлайн!
источник
n=8
может генерировать цепочкуF
s в концеS/3
чтобы(S>2)
исправить это.05AB1E ,
445044 байтаВычеркнуто
44
уже не 44 :)Порт ответа @xnor на Python 2 , поэтому обязательно поставьте ему оценку, если вам нравится этот ответ!
+6 байт из-за исправления ошибки, и после этого -6 байт снова благодаря @xnor, перенеся его более эффективное исправление по сравнению с моим временным обходным решением, как я и ожидал. ;)
Попробуйте онлайн или проверьте еще несколько случайных выводов .
Объяснение:
источник
X/3
наX>2
.R , 148 байт
Попробуйте онлайн!
Создает строку, используя условное включение в наборы данных выборки, чтобы гарантировать, что результатом является возможная последовательность основного тона.
Возможно, выборка отклонения (как это делает ответ xnor на python ) короче.
Случайные ссылки "F and S", которые продолжали играть в моей голове каждый раз, когда я набирал одну из этих букв ...
источник
JavaScript (SpiderMonkey) , 137 байт
Попробуйте онлайн!
источник
Pyth, 53 байта
Попробуйте это онлайн здесь .
Это слишком долго, я думаю, что может потребоваться другой подход.
источник
JavaScript (ES6),
107 10699 байтПопробуйте онлайн!
комментарии
источник
Чернила ,
120119116117 байтПопробуйте онлайн!
Вероятно, все еще играем в гольф.
Ungolfed (слегка переформатированный)
Правки
->->
вместо->END
.n
ранее.источник
APL (Dyalog Unicode) , 77 байтов SBCS
Попробуйте онлайн!
источник
Древесный уголь , 57 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Начните с 0 шаров и 0 ударов.
Переберите все поставки, кроме последней.
Если было меньше трех шаров, генерируйте случайное число от 0 до 2, в противном случае просто поменяйте местами от 0 до 1.
Случайное значение 2 - это шар, иначе он увеличивает количество ударов.
Значения от 0 до 2 отображаются для удара, фола и мяча, за исключением того, что если будет три удара, вместо этого будет напечатан фол. (Четыре шара исключены выше.)
Определите, ударит ли удар или мяч, и выберите один из них или удар в зависимости от ситуации.
источник
Perl 5 , 122 байта
Попробуйте онлайн!
источник
C (GCC)
164145142 байтаПотолок -3 байта
Попробуйте онлайн
источник
&n
вместоtime(0)