Rolar o seletor de tamanho de fonte do Word

32

Os botões do Word e alteram o tamanho da fonte de acordo com estas regras:A

  1. O tamanho da fonte inicial é 11.
  2. Se for pressionado quando o tamanho da fonte for 1, o tamanho permanecerá 1.
  3. O tamanho da fonte muda com 1 ponto no intervalo de 1 a 12.
  4. O tamanho da fonte muda com 2 pontos no intervalo de 12 a 28.
  5. As opções são 28, 36, 48, 72 e 80 no intervalo de 28 a 80.
  6. O tamanho da fonte muda com 10 pontos no intervalo de 80 a 1630.
  7. O tamanho da fonte muda com 8 pontos no intervalo de 1630 a 1638.
  8. Se for pressionado quando o tamanho da fonte for 1638, o tamanho permanecerá em 1638.A

Tarefa

No menor número de bytes possível, determine o tamanho da fonte resultante quando pressionar um conjunto de botões em qualquer formato razoável.

Exemplos

[3,-1,2], o que significa : O resultado é 18.AAAAA

Alguns formatos possíveis são '^^^v^^', [1 1 1 -1 1 1], [True,True,True,False,True,True], ["+","+","+","-","+","+"], "‘‘‘’‘‘", "⛄️⛄️⛄️🌴⛄️⛄️", 111011, "CaB", etc ...

[2]: 14

[-1]: 10

[13]: 80

[-11,1]: 2

[11,-1]: 36

[170,-1]: 1630

[2000,-2,100]: 1638

Adão
fonte
3
Temos que pressionar o conjunto de botões nesse formato exato? Por exemplo, se alguns ou todos estes ficar bem assim: "^vvv^v^^^v", [-1, 1, 1, -1, 1, -1], [0, 1, 0, 1, 1, 0, 1]?
orlp
@orlp Sim. Originalmente, eu os escrevi, mas achei os formatos tolos. Vou colocá-los agora.
Adám 4/17/17
2
Que tal "😀😀😀😟😀😀" ou "⛄️⛄️⛄️🌴⛄️⛄️"
Nick T
3
@ NickT Tudo bem.
Adám 5/17/17

Respostas:

6

MATL , 49 47 45 bytes

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

O formato de entrada é [1 1 -1 1 1 -1 -1 -1]ou [2 -1 2 -3], com vírgulas opcionais.

Experimente online! Ou verifique todos os casos de teste .

Explicação

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
Luis Mendo
fonte
Finalmente uma linguagem de golfe. Eu estava começando a pensar ...
Adám
2
@ Adám Precisamos de uma resposta no APL :)
orlp 4/17/17
@APL não é uma linguagem de golfe. 8 × 6 = 48, não 68
Adám
11
O @APL não é um usuário que possa ser mencionado, nem um usuário.
Matthew Roh 28/03
43

Word VBA, 199 147 126 116 102 100 87 85 Bytes

Por que imitar quando você pode fazer ?!

Função declarada no ThisDocumentmódulo que recebe entrada nna forma Array(true,true,false,true)e saída para o seletor de tamanho de fonte do Word :P

Golfe:

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

Ungolfed:

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 de uso

Eu sou um .GIF!

obrigado

-21 graças a @ Adám ( Selection.WholeStory:chamada removida )

-10 graças a @ Adám (assuma o ambiente limpo; remova a f.size=11:chamada)

-14 graças a @ Adám (seletor de tamanho de fonte da palavra de saída atrevido)

-2 graças a @ Adám (bool ParamArray)

-13 para mudar ParamArray n()para ne esperando a entrada como booleana matriz

-2 para mover de um módulo de código para o ThisDocumentmódulo

Versão antiga 114 bytes

Recebe entrada ncomo um ParamArray, na forma de true,true,false,truee gera a palavra vbe imediatamente janela

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

Versão antiga, 199 bytes

Recebe entrada na forma de 170,-4,6,-1(aceita números maiores que 1 em magnitude)

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
Taylor Scott
fonte
11
+1 (eu daria mais se pudesse). Por que você Set f=.Size = 12?
Adám 4/17/17
11
Além disso, você precisa selecionar a história toda? a seleção atual não é suficiente?
Adám 4/17/17
11
Não há necessidade de permitir várias execuções. Você pode assumir um ambiente limpo.
Adám 4/17/17
11
Aliás, eu mudo o título do OP para que não haja implicações de que a emulação real deva ser feita. O uso real também é bom!
Adám 4/17/17
11

JavaScript (ES6), 103 101 bytes

Recebe a entrada como uma matriz de -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

Teste

Economizou 2 bytes graças a ETHproductions

Arnauld
fonte
11
Uma dica: sempre que tiver a&&(b=c), você pode salvar um byte a?b=c:0. Aqui, porém, acho que você pode até salvar dois comn+=n>v&&k*[...][i]
ETHproductions
9

Python 2, 111 107 bytes

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]

Requer entrada para estar no [-1, 1, 1, -1, ...]formato. Ele funciona com os exemplos de alguns bytes extras:

for d in input():i=min(max(0,i+d),179)
orlp
fonte
Você pode salvar 3 bytes usando `se 0 <i <179: i + = d` dentro do loop for. Custa-lhe um avanço de linha e um travessão espaço de outra forma seria 5.
ElPedro
Ou i+=[0,d][0<i<179]pode funcionar #
NonlinearFruit
@NonlinearFruit Funciona, mas chega na mesma contagem de bytes para mim (108). Parece muito mais legal e mais golfe do que uma ifafirmação.
ElPedro 4/17/17
11
Ambas as sugestões estão incorretas. Isso significaria que se batermos 0ou 179ficarmos presos lá para sempre.
orlp
@ orlp Bom ponto. Perdeu esse.
ElPedro
6

Oitava, 93 89 87 bytes

A matriz de entrada pode ter números inteiros maiores que 1 ou menores que -1 para representar a multiplicidade de ações

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)

Graças a Adám, o idioma mudou para o Octave apenas para poder usar a indexação direta em uma matriz.

Economizou 2 bytes graças a rahnema1.

Teste

Em Ideone

Mohsen Nosratinia
fonte
11
Salve 3 bytes removendo a primeira instrução e alterando a última para [1:12,14:2:28,36,48,72,80:10:1630,1638](L).
Adám 4/17/17
@ Adám Boa idéia, mas então ele só funciona em Octave
Luis Mendo
@LuisMendo, obrigado, corrigiu.
Mohsen Nosratinia
11
@LuisMendo So? Mude o idioma para Octave apenas.
Adám 4/17/17
2
[1:11 [6:14 18 24 36 40:5:815 819]*2]alguns bytes podem ser salvos!
precisa saber é o seguinte
4

Ruby, 106 bytes

Consegui raspar alguns bytes da solução python (e demorou um pouco para raspar).

->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]}]}

É uma função anônima que recebe a entrada na forma de [1, -1, 1, 1, ...]. Parece lidar muito bem com a entrada no formulário [170,-12], mas não posso garantir que funcione 100% do tempo, por isso vou jogar pelo seguro e dizer que funciona [1, -1, 1, 1, ...].

Truques que usei:

  • [0,179,a+b].sort[1]: Isso fixa a+bentre 0 e 179, que são os índices válidos da matriz de tamanho de fonte.

  • O uso do operador splat em intervalos os converte em matrizes, para que os tamanhos de fonte disponíveis sejam gerados [*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638]. Qual é uma matriz plana que contém os valores de cada um dos elementos nivelados:

    • 1..12é um intervalo de 1 a 12 (inclusive). O operador splat transforma nos valores 1, 2, 3, ..., 11, 12.
    • (14..28).step(2)é um enumerador para o intervalo especificado, em que cada passo sobe 2. O operador splat o transforma nos valores 14, 16, 18, ..., 26, 28.
    • Os valores individuais ( 36, 48, 72, 1638) são concatenados em sua posição na grande matriz de tamanho de fonte.
  • Eu usei o método inject(/ reduce), que usa cada elemento da matriz de entrada, enquanto os reduzia para uma variável 'memorando' (como o ruby ​​coloca). Eu inicializo isso para 11, e o corpo de cada iteração de injeção é definir essa variável de memorando para o resultado da adição do elemento atual da entrada ao valor atual de memorando e, em seguida, fixando-o entre 0 e 180.

Todos saudam o operador splat!

IMP1
fonte
2

PHP, 116 bytes

primeiro gera o índice de tamanho (de 1 a 180 inclusive), em
seguida , mapeia para o tamanho do ponto e imprime o resultado.

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;

leva +Ne -1de argumentos de linha de comando.
( -Ntambém é aceito; apenas tome cuidado para que o tamanho não fique abaixo de zero!)

Corra com -nr.

Titus
fonte
1

Perl 5 , 123 bytes

122 bytes de código + 1 para -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]

Experimente online!

Formato de entrada:

32 -32 12 4 -2
Xcali
fonte