Scroll Word的字体大小选择器


32

Word 和按钮会根据以下规则更改字体大小:A

  1. 起始字体大小为11。
  2. 如果在字体大小为1时按,则大小保持为1。
  3. 字体大小在1 – 12范围内变化1点。
  4. 字体大小在12 – 28范围内变化2点。
  5. 选择范围为28 – 80的28、36、48、72和80。
  6. 字体大小在80到1630范围内以10磅变化。
  7. 字体大小在1630 – 1638范围内变化8点。
  8. 如果在字体大小为1638时按,则大小保持为1638。A

任务

尽可能以最少的字节为单位,以任何合理的格式给定一组按钮按下时,确定最终的字体大小。

例子

[3,-1,2],意思是:结果是18。AAAAA

一些可能的格式是'^^^v^^'[1 1 1 -1 1 1][True,True,True,False,True,True]["+","+","+","-","+","+"]"‘‘‘’‘‘""⛄️⛄️⛄️🌴⛄️⛄️"111011"CaB",等...

[2]:14

[-1]:10

[13]:80

[-11,1]:2

[11,-1]:36

[170,-1]:1630

[2000,-2,100]:1638


3
我们是否必须采用完全相同的格式按一下按钮?例如,将部分或全部的这些罚款,以及:"^vvv^v^^^v"[-1, 1, 1, -1, 1, -1][0, 1, 0, 1, 1, 0, 1]
orlp

@orlp是的。最初我是用它们写的,但是我发现格式很愚蠢。我现在把它们放进去。
亚当

2
“😀😀😀😟😀😀”或“or️⛄️⛄️🌴⛄️⛄️”怎么样
Nick T

3
@NickT很好。
阿达姆(Adám)'17

Answers:


6

MATL49 47 45字节

11: 9:E10+'$*H'o8:163 10*1638v11ihl180h&Ys0))

输入格式为[1 1 -1 1 1 -1 -1 -1][2 -1 2 -3],并带有可选的逗号。

在线尝试!验证所有测试用例

说明

11:         % Push [1 2 ... 11]
9:          % Push [1 2 ... 9]
E10+        % Times 2, plus 10: gives [12 14 ... 28]
'$*H'       % Push this string
o           % Convert to double: gives ASCII codes, that is, [36 48 72]
8:163       % Push [8 9 ... 163]
10*         % Times 10: gives [80 90 ... 1630]
1638        % Push 1638
v           % Concatenate everything into a column vector
11          % Push 11
ih          % Input array and concatenate with 11
l180h       % Push [1 180]
&Ys         % Cumulative sum with limits 1 and 180
0)          % Get last value
)           % Index into column vector of font sizes. Implicitly display

最后是一种高尔夫语言。我开始怀疑......
亚当

2
@Adám我们需要APL的答案:)
orlp

@APL不是高尔夫语言。8×6 = 48,没有68
亚当

1
@APL不是可提及的用户,也不是任何用户。
马修·罗

43

字VBA,199 147 126 116 102 100 87 85个字节

为什么要在可以的时候效仿?!

ThisDocument模块中已声明的函数,其以n形式输入Array(true,true,false,true)输出到Word字体大小选择器 :P

打高尔夫球:

Sub a(n):Set f=Content.Font:For Each i In n
If i Then f.Grow Else f.Shrink
Next:End Sub

取消高尔夫:

Sub a(n)
    Set f=ThisDocument.Content.Font
    For Each i In n
        If i Then 
            f.Grow 
        Else 
            f.Shrink
    Next
    ''  Implicitly output font size to MS Word Font Size Selector 
End Sub

.GIF使用

我是.GIF!

谢谢

-21感谢@Adám(已删除Selection.WholeStory:通话)

-10感谢@Adám(假设环境清洁;删除f.size=11:通话)

-14感谢@Adám(厚脸皮的输出单词字体大小选择器)

-2感谢@Adám(bool ParamArray)

-13更改ParamArray n()n期望输入为布尔数组

-2用于从代码模块移动到ThisDocument模块

旧版本114字节

将输入n作为ParamArray并以true,true,false,truevbe立即数窗口的形式输出

Sub a(ParamArray n()):Set f=Selection.Font:For Each i In n
If i Then f.Grow Else f.Shrink
Next:Debug.?f.Size:End Sub

较旧的版本199字节

170,-4,6,-1(接受大于1的数值)形式输入

Sub a(ParamArray n()):Selection.WholeStory:Set f=Selection.Font:f.Size=12:For Each i In n
If i>1 Then
For j=i To 0 Step -1:f.Grow:Next
Else
For j=i To 0:f.Shrink:Next:End If:Next:Debug.?f.Size:End Sub

1
+1(如果可以的话,我会付出更多)。你为什么Set f=.Size = 12
亚当

1
另外,您是否需要选择整个故事?当前的选择还不够吗?
亚当

1
无需允许多次运行。您可以假设环境干净。
2015年

1
顺便说一句,我更改了OP标题,因此没有暗示必须进行实际的仿真。实际使用也可以!
亚当


11

的JavaScript(ES6),103个 101字节

将输入作为-1/ 的数组1

a=>a.map(k=>[1,12,28,36,48,72,80,1630,1638].map((v,i)=>n+=n>v&&k*[1,1,6,4,12,-16,2,-2,-8][i]),n=11)|n

测试

ETHproductions节省了2个字节


1
提示:只要有a&&(b=c),就可以使用保存一个字节a?b=c:0。虽然这里,我想你甚至可以保存两次与n+=n>v&&k*[...][i]
ETHproductions

9

Python 2中,111个 107字节

i=10;r=range
for d in input():i+=d*(0<i+d<179)
print(r(1,12)+r(12,29,2)+[36,48,72]+r(80,1631,10)+[1638])[i]

要求输入[-1, 1, 1, -1, ...]格式。它与示例结合使用,但需要额外提供一些字节:

for d in input():i=min(max(0,i+d),179)

如果在for循环内使用`if 0 <i <179:i + = d`,则可以节省3个字节。换行和空格缩进的成本为
5。– ElPedro

i+=[0,d][0<i<179]可能有效
NonlinearFruit

@NonlinearFruit起作用,但对我来说是相同的字节数(108)。看起来比if声明更凉爽和高尔夫。
ElPedro

1
两种建议都不正确。这意味着,如果我们命中0179永远被困在那里。
orlp

@orlp好点。错过了那一个。
ElPedro

6

八度音阶 93 89 87字节

输入数组可以具有大于1或小于-1的整数,以表示操作的多重性

L=11;for k=input(''),L=min(max(L+k,1),180);end;[1:11 [6:14 18 24 36 40:5:815 819]*2](L)

感谢Adám,将语言更改为Octave,以便能够使用直接索引到数组中。

由于rahnema1,节省了2个字节。

测试

Ideone上


1
通过删除第一个语句并将最后一个更改为,以节省3个字节[1:12,14:2:28,36,48,72,80:10:1630,1638](L)
亚当

@Adám好主意,但那只适用于Octave
Luis Mendo

@LuisMendo,谢谢,已修复它。
Mohsen Nosratinia

1
@LuisMendo那么?将语言更改为仅八度。
2015年

2
[1:11 [6:14 18 24 36 40:5:815 819]*2]可以保存一些字节!
rahnema1年

4

Ruby,106个字节

我设法从python解决方案中删除了几个字节(并且花了一些时间进行剃须)。

->n{[*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638][n.inject(11){|a,b|[0,179,a+b].sort[1]}]}

这是一个匿名函数,接受形式为的输入[1, -1, 1, 1, ...]。似乎也可以很好地处理表单中的输入[170,-12],但是我不能保证它会100%地起作用,所以我会放心地说它可以使用[1, -1, 1, 1, ...]

我使用的技巧:

  • [0,179,a+b].sort[1]:此范围限制a+b在0到179之间,这是font-size数组的有效索引。

  • 在范围上使用splat运算符会将其转换为数组,因此可用的字体大小从生成[*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638]。这是一个平面数组,其中包含每个扁平化元素的值:

    • 1..12的范围是1到12(含1和12)。splat运算符将其转换为值1, 2, 3, ..., 11, 12
    • (14..28).step(2)是给定范围的枚举数,其中每个步骤都增加2。splat运算符将其转换为值14, 16, 18, ..., 26, 28
    • 各个值(36, 48, 72, 1638)都在其位置上串联到大字体数组中。
  • 我使用了inject(/ reduce)方法,该方法使用输入数组的每个元素,同时将它们缩减为一个“ memo”变量(如ruby所说)。我将其初始化为11,并且每次注入迭代的主体都是将此备注变量设置为将输入的当前元素添加到当前备注值,然后将其限制在0到180之间的结果。

所有人都称赞摔跤操作员!


2

PHP,116字节

首先生成大小索引(从1到180,包括端点),
然后将其映射到点大小并打印结果。

for($s=11;$d=$argv[++$i];$s=min($s+$d,180)?:1);echo$s>12?$s>20?$s>23?$s*10-160-2*($s>179):24+(12<<$s-21):$s*2-12:$s;

+N-1从命令行参数。
-N也可以接受;请注意大小不要跳到零以下!)

用运行-nr


1

Perl 5、123字节

122个字节的代码+ 1个 -a

@a=1..12;push@a,map$_*2,7..14;push@a,map$_*($i=10),3.6,4.8,7.2,8..163,163.8;$i=($"=$i+$_)<0?0:$">179?179:$"for@F;say$a[$i]

在线尝试!

输入格式:

32 -32 12 4 -2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.