Задание
Ваша задача - создать программу или функцию, которая при вводе выводит вводимый текст случайными буквами с заглавными буквами, сохраняя при этом уже заглавные буквы.
Любая комбинация заглавных букв строчных букв должна быть возможной. Например, если входной сигнал был abc
, не должна быть ненулевой вероятностью вывода любых из следующих комбинаций: abc
, Abc
, aBc
, abC
, ABc
, AbC
, aBC
или ABC
.
вход
Ваш ввод - это строка, содержащая, например, любое количество печатаемых символов ASCII Hello World
. Выходы для этого входа включают в себя HeLLo WoRlD
, HElLO WOrld
и т.д.
счет
Это код-гольф, поэтому выигрывает самый короткий ответ на каждом языке!
Japt , 6 байт
Проверьте это онлайн!
объяснение
источник
Python 2 ,
6665 байтПопробуйте онлайн!
источник
C,
4746 байтовСпасибо @ l4m2 за сохранение байта!
Попробуйте онлайн!
Было бы 42 байта, если можно было бы предположить, что
{|}~
не появляется на входе:Попробуйте онлайн!
источник
srand(1)
в начале программы, поэтому при каждом выполнении последовательность значений, возвращаемых с помощью,rand()
будет одинаковой).f(char*s){for(;*s++-=(*s-'a'<26&rand())*32;);}
для некоторого компилятора (опр.-funsigned-char
) работы'a'
на97u
работу и даже не требует-funsigned-char
флаг.'a'
(которыйsigned int
неunsigned char
) из*s
(чтоunsigned char
),*s
получает званиеsigned int
вместоunsigned int
, поэтому отрицательные значения причем и сравнение не работает должным образом .Желе , 5 байт
Еще один байт пыли благодаря Dylnan.
Попробуйте онлайн!
объяснение
источник
ŒṘ
чаще, чтобы увидеть, как вещи представлены под капотомPerl 5 , 23 байта
Код 22 байта + 1 для
-p
.Попробуйте онлайн!
источник
JavaScript (ES6), 56 байт
Если равномерная случайность не требуется, мы можем сохранить 6 байтов, используя текущее время в качестве источника случайности:
Это имеет тенденцию или в верхнем регистре или оставить в покое все буквы сразу.
источник
AbC
потому что время не будет меняться так быстроR , 66 байт
Попробуйте онлайн!
Еще один R ответ.
источник
for
-loop! Хороший.Excel VBA,
747164 байтаRandomize
Вызов всегда делает случайный выход дорогостоящим в VBA :(Функция анонимного непосредственного окна VBE, которая берет входные данные из диапазона
[A1]
и выводит в непосредственное окно VBE. Производит 50% (в среднем)UCase
d продукции.источник
Randomize:
и изменивRnd
с помощью[RAND()>.5]
. Или просто проигнорируй это. :)[Rand()]
вызов только псевдослучайный и имеет длину периода примерно 10 ^ 13, что делает его функционально идентичным вызову unRandomize
dRnd
, на самом деле оба используют одно и то же семя (котороеRandomize
вызов устанавливает с помощьюtimer
функции выход).Randomize
вызов и вместо этого использоватьRnd>.5
Древесный уголь ,
87 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Рубин, 40 байт
Лямбда-функция, которая принимает строку. Сохранено 1 байт благодаря Арно. Сохранено 5 байтов благодаря Snack.
источник
<1
вместо==1
?<s>
тега, например « Ruby, <s> 46 </ s> 40 байт ». Конечно это не обязательно.APL + WIN, 37 байт
Запрашивает ввод с экрана, идентифицирует строчные буквы и случайным образом преобразует их в прописные.
источник
R ,
8988 байтпревзойденный джурио!
Попробуйте онлайн!
Эта программа берет каждый символ и с вероятностью 1/2 преобразует его в верхний регистр или оставляет его в покое. Эту вероятность можно настроить, играя с разными значениями
df
и0
.rt
рисует из t-распределения Стьюдента, который имеет медиану 0 с любой степенью свободы (я выбрал,1
так как это наименьшее возможное число).источник
05AB1E ,
65 байтСпасибо Аднану за -1 байт
Попробуйте онлайн!
объяснение
Метод взят из ответа @ totallyhuman
источник
ε„luΩ.V
была моя попытка, милая!Рубин, 39 байт
->s{s.gsub(/./){[$&,$&.upcase].sample}}
Во многом вдохновлен ответом displayname . (Я не мог прокомментировать, чтобы предложить эту однобайтовую версию из-за отсутствия репутации, извините, отображаемое имя )
источник
Swift 4, 86 байт
источник
Java 8, 46 байт
Эта лямбда от
IntStream
кIntStream
(потоки кодов).Попробуйте онлайн
Распределение капитализации
Использовать ли заглавную букву раньше было вполне разумным условием
Math.random()<.5
, которое выполнялось примерно в половине случаев. С текущим состояниемMath.random()>0
(которое сохраняет байт) капитализация происходит практически каждый раз, что делает тестовую программу бессмысленной. Но это удовлетворяет требованию случайности.Подтверждения
источник
z
. Я мог бы добавить это с оговоркой, хотя.Фанки , 55 байт
Попробуйте онлайн!
Благодаря дополнительным запятым, это на один байт короче, чтобы сделать
0s.upper
в определении таблицы, что означает, чтоmath.random
случайный выбор будет или,1
или2
, чем делатьmath.random(0,1)
в случайном порядке и не иметь0
.источник
R ,
60 59 58 57 5663 байтаПопробуйте онлайн!
Отличный подход от двух других ответов R здесь и здесь . Улучшено и исправлено благодаря Джузеппе!
источник
90
как указано выше, нравятся[
, но это исправляет это для +7 байт, что все еще сложнее, чем ответ ДжуриоУроборос , 25 байт
Попробуй здесь
Единственная причудливая часть - это поток управления
.b*)
. Давайте сначала поговорим об отдыхе.Затем мы возвращаемся к началу строки. Поток управления включает в себя изменение того, где находится конец линии; если он перемещен влево от IP-адреса, выполнение прекращается. Таким образом:
Если код положительный,
)
это запрет , так как конец строки находится настолько далеко, насколько это возможно. Но когда все символы были прочитаны,i
дает-1
. Затем мы перемещаем конец-11
символов кода вправо, то есть 11 символов влево. Это занимает пару итераций, но в конце концов IP заканчивается концом кода, и программа останавливается.источник
MATL ,
1211 байтПопробуйте онлайн!
Сохранено 1 байт благодаря @LuisMendo
источник
Брахилог , 5 байт
Попробуйте онлайн!
объяснение
источник
Алиса ,
1715 байтСпасибо Лео за сохранение 2 байта.
Попробуйте онлайн!
объяснение
Это обычная структура для в основном линейных программ, работающих полностью в обычном режиме.
Сначала я попытался сделать это полностью в режиме Cardinal, но определение того, является ли что-либо буквой, основанной только на символьном коде, вероятно, заняло бы больше байтов.
источник
Wolfram Language (Mathematica) ,
524944 байтаПопробуйте онлайн!
Использует форму оператора
StringReplace
: предоставление ему правила (или списка правил), но ни одна строка не дает функцию, которая применяет это правило к любой строке, которую вы задаете в качестве входных данных.Мы могли бы сделать намного лучше (
RandomChoice@{#,Capitalize@#}&/@#&
это 34 байта), если бы мы решили взять в качестве входных данных (и вывести в качестве выходных) список символов, который иногда утверждают, что в Mathematica все в порядке, потому что это единственная строка в других языках. Но это не весело.-5 байт благодаря М. Стерну
источник
Capitalize
Random
осуждается вы могли бы сэкономить еще четыре байта, реализовав свой собственныйRandomChoice
:StringReplace[c_/;Random[]<.5:>Capitalize@c]
,Random
к работе, но забыл об этом,/;
поэтому попытался сделатьIf
заявление. Благодарность!Pyth,
1076 байтовСохранено 3 байта благодаря ovs и 1 благодаря Steven H.
Попробуйте онлайн
объяснение
источник
r1d
=rd1
, позволяя вам неявно вводить в гольф еще один байт.PHP,
6353 байтаУдалось уменьшить код на 10 байтов (частично) по предложению Тита.
источник
$a
. Попробуйтеwhile(~$a=$argn[$i++])
вместоforeach
(запустить как труба).PowerShell ,
5756 байтПопробуйте онлайн!
-1 байт благодаря бриантисту
Принимает ввод как строку, явно преобразует
$args
массив в строку,char
преобразует его как -array, а затем передает символы через цикл. На каждой итерации мы 50-50 либо выводим символ как есть,$_
либо конвертируем его в верхний регистр"$_".ToUpper()
(это("$_"|% *per)
мусор). Это выбирается, получаяRandom
целое число и принимая его мод2
.Эти символы остаются в конвейере, а затем
-join
снова объединяются в одну строку, которая сама остается в конвейере и вывод неявен.источник
"$_".ToUpper()
на("$_"|% *per)
: - /Юлия , 35 байт
Попробуйте онлайн!
Все еще довольно легко читается как человек. У Юлии Рэнд (A) возвращает случайный элемент из A.
источник
Ребол , 61 байт
Тест:
источник
Желе , 16 байт
Попробуйте онлайн!
объяснение
Я не мог заставить это работать в одной строке. Я также не знаю почему, но
2ḶXø³L¤Ð¡
дает список[None,1,0,..,1]
с0
s и1
s, выбранных случайным образом.None
Является причиной дляḊ
в первом звене.источник