Answers:
For(I,1,length(Ans
Ans+sub(sub(Ans,I,1)+"ABCDEFGHIJKLMNOPQRSTUVWXYZ",1+int(2rand)inString("abcdefghijklmnopqrstuvwxyz",sub(Ans,I,1)),1
End
sub(Ans,I,I-1
在中输入Ans
,如以下屏幕截图所示:
(如果屏幕截图看起来像是乱七八糟的(有时对我来说如此,请尝试在新标签页中打开它吗?)
TI-Basic(至少是TI-83版本...也许我应该涉足TI-89高尔夫运动)是一种可怕的语言,试图挑战这一挑战,因为:
结果是该程序的78个字节(超过一半)仅存储了两次字母表。
无论如何,我们的想法是循环遍历字符串,并有机会将小写字符转换为大写字符,并将结果添加到字符串的末尾,以便将输入和输出都存储在中Ans
。当我们离开For(
循环时,I
它比原始字符串的长度大一,因此I-1
从开始的字符I
给出输出。
感谢@ l4m2节省了一个字节!
f(char*s){for(;*s++-=(*s-97u<26&rand())*32;);}
如果可以假定{|}~
未出现在输入中,则将为42个字节:
f(char*s){for(;*s++-=(*s>96&rand())*32;);}
srand(1)
在程序开始时提供了隐式,因此在每次执行中,返回的值的顺序rand()
都将相同)。
'a'
为97u
有效,甚至不需要-funsigned-char
标志。
'a'
(这是signed int
不是unsigned char
)从*s
(这是unsigned char
),*s
提升为signed int
替代unsigned int
,因此负值是可能的,并且预期比较不工作。
s=>s.replace(/./g,x=>Math.random()<.5?x.toUpperCase():x)
如果不需要统一的随机性,则可以使用当前时间作为随机性的来源来节省6个字节:
s=>s.replace(/./g,x=>new Date&1?x.toUpperCase():x)
这趋向于大写或一次不理会所有字母。
AbC
因为时间变化不会那么快
该Randomize
调用总是使VBA中的随机输出代价高昂:(
匿名VBE立即窗口功能,该功能从范围获取输入[A1]
并输出到VBE立即窗口。产生50%(平均)的UCase
d输出。
For i=1To[Len(A1)]:a=Mid([A1],i,1):?IIf(Rnd>.5,a,UCase(a));:Next
Randomize:
,并改变Rnd
与[RAND()>.5]
。或者只是忽略它。:)
Randomize
呼叫并改为使用Rnd>.5
谢谢Adnan的-1个字节
uø€ΩJ
说明
uø€ΩJ
u Upper case of top of stack. Stack: ['zzzAA','ZZZAA']
ø Zip(a,b). Stack: ['zZ', 'zZ', 'zZ', 'AA', 'AA']
€ Following operator at each element of it's operand
Ω Random choice. Stack: ['z', 'Z', 'z', 'A', 'A']
J Join a by ''. Stack: 'zZzAA'
Implicit output
方法来自@totallyhuman的答案
ε„luΩ.V
是我的尝试,很好!
->s{s.gsub(/./){[$&,$&.upcase].sample}}
很大程度上受displayname的答案启发。(由于缺乏声誉,我无法评论建议此少字节的版本,对不起displayname)
s.map{let s="\($0)",u=s.uppercased();return u==s ? u:arc4random()%2==0 ? u:s}.joined()
此lambda是从IntStream
到IntStream
(代码点的流)。
s->s.map(c->c>96&c<'{'&Math.random()>0?c-32:c)
是否使用大写字母曾经是的相当明智的条件,Math.random()<.5
大约一半的时间可以满足。在当前条件下Math.random()>0
(节省一个字节),几乎每次都会出现大写,这使测试程序毫无意义。但是它确实满足了随机性要求。
z
。不过我可以带一个资格。
intToUtf8((s=utf8ToInt(scan(,"")))-32*rbinom(s,s%in%97:122,.5))
i.b*)..96>\123<*?2*>32*-o
唯一看中的部分是控制流程.b*)
。让我们先谈谈其余部分。
i.. Get a character of input, duplicate twice
96> Test if charcode greater than 96
\ Swap with copy #2
123< Test if charcode less than 123
* Multiply the two tests (logical AND): test if it is lowercase letter
? Random number between 0 and 1
2* Times 2
> Is lcase test greater? If test was 1 and rand*2 < 1, then 1, else 0
32*- Multiply by 32 and subtract from charcode to ucase lcase letter
o Output as character
然后,我们循环回到该行的开头。控制流程包括更改行尾的位置;如果将其移到IP的左侧,则执行终止。从而:
. Duplicate input charcode
b* Push 11 and multiply
) Move end of line that many characters to the right
当字符代码为正数时,)
它是空操作,因为该行的末尾尽可能远。但是当所有字符都读完后,i
给出-1
。然后,我们将代码-11
字符的结尾向右移动,即,向左移动11个字符。它需要进行几次迭代,但是最终IP超出了代码末尾,程序停止了。
感谢Leo节省2个字节。
/uRUwk
\i*&o.@/
/...
\...@/
这是完全以Ordinal模式运行的大部分线性程序的常用框架。
i Read all input as a string.
R Reverse the input.
&w Fold w over the characters of the string. w is nullary which means it
doesn't actually use the individual characters. So what this does is that
a) it just splits the string into individual characters and b) it invokes
w once for each character in the string. w itself stores the current
IP position on the return address stack to begin the main loop which
will then run N+1 times where N is the length of the string. The one
additional iteration at the end doesn't matter because it will just
output an empty string.
. Duplicate the current character.
u Convert it to upper case (does nothing for characters that aren't
lower case letters).
* Join the original character to the upper case variant.
U Choose a character at random (uniformly).
o Print the character.
k If the return address stack is not empty yet, pop an address from it
and jump back to the w.
@ Terminate the program.
我首先尝试完全在基数模式下执行此操作,但是仅根据字符代码确定某物是否为字母可能会占用更多字节。
StringReplace[c_/;Random[]<.5:>Capitalize@c]
使用以下运算符形式StringReplace
:提供一个规则(或规则列表),但没有字符串提供将该规则应用于您作为输入提供给它的任何字符串的功能。
RandomChoice@{#,Capitalize@#}&/@#&
如果我们决定将一个字符列表作为输入(并产生作为输出),我们可以做得更好(34个字节),在Mathematica中,人们有时认为这是可以的,因为这是其他语言中唯一的字符串。但这没意思。
-5个字节,感谢M. Stern
Capitalize
Random
不赞成使用已弃用的代码,则可以通过实现自己的命令来节省另外四个字节RandomChoice
:StringReplace[c_/;Random[]<.5:>Capitalize@c]
,
Random
一次上班,但是我忘记了这一点,/;
所以我试图If
发表一份声明。谢谢!
while($a=$argv[1][$i++])echo rand()%2?ucfirst($a):$a;
遵循Titus的建议,设法(部分地)将代码减少了10个字节。
$a
。尝试while(~$a=$argn[$i++])
而不是foreach
(作为管道运行)。
-join([char[]]"$args"|%{(("$_"|% *per),$_)[(Random)%2]})
-1字节感谢briantist
将输入作为字符串,将$args
数组显式转换为字符串,将其转换为char
-array,然后通过循环输入字符。每次迭代,我们50-50要么按原样输出字符,$_
要么将其转换为大写字母"$_".ToUpper()
(这就是("$_"|% *per)
垃圾)。这是通过获取一个Random
整数并将其取为mod来选择的2
。
这些字符留在管道上,然后-join
一起返回单个字符串,该字符串本身留在管道上,并且输出是隐式的。
"$_".ToUpper()
为("$_"|% *per)
:-/
u:func[t][n: random length? t t/(n): uppercase t/(n) print t]
测试:
>>c: "Test sTring"
>>u c
Test sTriNg
2ḶXø³L¤Ð¡ḊT
Œu¢¦
说明
2ḶXø³L¤Ð¡ḊT First Link
2Ḷ The list [0,1]
X Random element (1 is truthy, 0 is falsy)
ø Begin nilad
³L Length of first input (the string)
¤ End nilad
С Random([0,1]) for each character in the input string and collect.
Ḋ The list had an extra None at the beginning. Don't know why. This removes it (the first element of the list)
T Get indices of all truthy
Œu¢¦ Main Link
Œu Capitalize
¦ At the indices in the list:
¢ The first link as a nilad (list of indices)
我无法让它单行工作。我也不知道为什么,但2ḶXø³L¤Ð¡
给人的名单[None,1,0,..,1]
与0
S和1
S ^随机选择。这None
是Ḋ
第一个链接中的原因。