Faites défiler le sélecteur de taille de police de Word

32

Les mots et les boutons modifient la taille de la police selon ces règles:A

  1. La taille de police de départ est 11.
  2. Si est enfoncé lorsque la taille de police est 1, la taille reste 1.
  3. La taille de la police change avec 1 point dans la plage 1 - 12.
  4. La taille de la police change avec 2 points dans la plage 12 - 28.
  5. Les choix sont 28, 36, 48, 72 et 80 dans la plage 28 - 80.
  6. La taille de police change avec 10 points dans la plage 80 - 1630.
  7. La taille de la police change avec 8 points dans la plage 1630 - 1638.
  8. Si est enfoncé lorsque la taille de police est 1638, la taille reste 1638.A

Tâche

En aussi peu d'octets que possible, déterminez la taille de police résultante lorsque vous disposez d'un ensemble de pressions de bouton dans un format raisonnable.

Exemples

[3,-1,2], ce qui signifie : Le résultat est 18.AAAAA

Certains formats possibles sont '^^^v^^', [1 1 1 -1 1 1], [True,True,True,False,True,True], ["+","+","+","-","+","+"], "‘‘‘’‘‘", "⛄️⛄️⛄️🌴⛄️⛄️", 111011, "CaB", etc ...

[2]: 14

[-1]:dix

[13]: 80

[-11,1]: 2

[11,-1]: 36

[170,-1]: 1630

[2000,-2,100]: 1638

Adam
la source
3
Faut-il prendre le jeu de pressions de bouton dans ce format exact? Par exemple, serait une partie ou l' ensemble de ces être bien aussi: "^vvv^v^^^v", [-1, 1, 1, -1, 1, -1], [0, 1, 0, 1, 1, 0, 1]?
orlp
@orlp Oui. À l'origine, je les ai écrits, mais j'ai trouvé les formats idiots. Je vais les mettre tout de suite.
Adám
2
Que diriez-vous de "😀😀😀😟😀😀" ou "⛄️⛄️⛄️🌴⛄️⛄️"
Nick T
3
@NickT C'est bien.
Adám

Réponses:

6

MATL , 49 47 45 octets

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

Le format d'entrée est [1 1 -1 1 1 -1 -1 -1]ou [2 -1 2 -3], avec des virgules facultatives.

Essayez-le en ligne! Ou vérifiez tous les cas de test .

Explication

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
la source
Enfin une langue de golf. Je commençais à me demander ...
Adám
2
@ Adám Nous avons besoin d'une réponse en APL :)
orlp
@APL n'est pas une langue de golf. 8 × 6 = 48, pas 68
Adám
1
@APL n'est pas un utilisateur mentionnable, ni un utilisateur du tout.
Matthew Roh
43

Mot VBA, 199 147 126 116 102 100 87 85 Octets

Pourquoi émuler quand vous pouvez le faire?!

Fonction déclarée dans le ThisDocumentmodule qui prend les entrées nsous la forme Array(true,true,false,true)et les sorties vers le sélecteur de taille de police Word :P

Golfé:

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 d'utilisation

I'm a .GIF!

Merci

-21 grâce à @ Adám ( Selection.WholeStory:appel supprimé )

-10 grâce à @ Adám (supposez un environnement propre; supprimez l' f.size=11:appel)

-14 grâce à @ Adám (sélecteur de taille de police de mots effrontés)

-2 merci à @ Adám (bool ParamArray)

-13 pour passer ParamArray n()àn et attend l' entrée comme matrice booléenne

-2 pour passer d'un module de code au ThisDocument module

Ancienne version 114 octets

Prend l'entrée en ntant que ParamArray, sous la forme true,true,false,trueet affiche le mot vbe immediates window

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

Version plus ancienne, 199 octets

Prend l'entrée sous la forme de 170,-4,6,-1(accepte les nombres supérieurs à 1 en 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
la source
1
+1 (je donnerais plus si je pouvais). Pourquoi est - ce que vous Set f=.Size = 12?
Adám
1
De plus, devez-vous sélectionner toute l'histoire? la sélection actuelle n'est-elle pas suffisante?
Adám
1
Pas besoin d'autoriser plusieurs exécutions. Vous pouvez supposer un environnement propre.
Adám
1
Btw, je modifie le titre OP afin qu'il n'y ait aucune implication que l'émulation réelle doit être effectuée. La vraie utilisation est très bien aussi!
Adám
2
En fait, utilisez
Adám
11

JavaScript (ES6), 103 101 octets

Prend l'entrée comme un tableau 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

Tester

Sauvegardé 2 octets grâce à ETHproductions

Arnauld
la source
1
Un conseil: chaque fois que vous en avez a&&(b=c), vous pouvez enregistrer un octet avec a?b=c:0. Ici cependant, je pense que vous pouvez même en sauver deux avecn+=n>v&&k*[...][i]
ETHproductions
9

Python 2, 111 107 octets

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]

Nécessite que l'entrée soit au [-1, 1, 1, -1, ...]format. Il fonctionne avec les exemples de quelques octets supplémentaires:

for d in input():i=min(max(0,i+d),179)
orlp
la source
Vous pouvez enregistrer 3 octets en utilisant `if 0 <i <179: i + = d` à l'intérieur de la boucle for. Sinon, cela vous
coûtera
Ou i+=[0,d][0<i<179]pourrait fonctionner
NonlinearFruit
@NonlinearFruit Works mais vient au même nombre d'octets pour moi (108). Il a l'air beaucoup plus cool et plus golfique qu'une ifdéclaration.
ElPedro
1
Les deux suggestions sont incorrectes. Cela signifierait que si nous frappions 0ou que 179nous y restions pour toujours.
orlp
@orlp Bon point. Manqué celui-là.
ElPedro
6

Octave, 93 89 87 octets

Le tableau d'entrée peut avoir des entiers supérieurs à 1 ou inférieurs à -1 pour représenter la multiplicité d'actions

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)

Merci à Adám, Changé la langue en Octave uniquement pour pouvoir utiliser l'indexation directe dans un tableau.

Enregistré 2 octets grâce à rahnema1.

Tester

Sur Ideone

Mohsen Nosratinia
la source
1
Économisez 3 octets en supprimant la première instruction et en remplaçant la dernière par [1:12,14:2:28,36,48,72,80:10:1630,1638](L).
Adám
@ Adám Bonne idée, mais cela ne fonctionne que dans Octave
Luis Mendo
@LuisMendo, merci, l'a corrigé.
Mohsen Nosratinia
1
@LuisMendo Alors? Changez la langue en Octave uniquement.
Adám
2
[1:11 [6:14 18 24 36 40:5:815 819]*2]certains octets peuvent être enregistrés!
rahnema1
4

Rubis, 106 octets

J'ai réussi à raser quelques octets de la solution python (et cela a pris du temps à se raser).

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

C'est une fonction anonyme qui prend l'entrée sous la forme de [1, -1, 1, 1, ...]. Il semble également très bien gérer les entrées dans le formulaire [170,-12], mais je ne peux pas garantir que cela fonctionnera à 100% du temps, donc je vais jouer prudemment et dire que cela fonctionne avec[1, -1, 1, 1, ...] .

Astuces que j'ai utilisées:

  • [0,179,a+b].sort[1]: Cette valeur a+bdoit être comprise entre 0 et 179, qui sont les index valides du tableau de taille de police.

  • L'utilisation de l'opérateur splat sur des plages les convertit en tableaux, de sorte que les tailles de police disponibles sont générées à partir de [*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638]. Qui est un tableau plat contenant les valeurs de chacun des éléments aplatis:

    • 1..12est une plage de 1 à 12 (inclus). L'opérateur splat le transforme en valeurs 1, 2, 3, ..., 11, 12.
    • (14..28).step(2)est un énumérateur pour la plage donnée, où chaque étape monte de 2. L'opérateur splat la transforme en valeurs 14, 16, 18, ..., 26, 28.
    • Les valeurs individuelles ( 36, 48, 72, 1638) sont toutes concaténées dans leur position dans le grand tableau de taille de police.
  • J'ai utilisé la méthode inject(/ reduce), qui utilise chaque élément du tableau d'entrée, tout en les réduisant en une variable «mémo» (comme le dit ruby). J'initialise cela à 11, et le corps de chaque itération d'injection consiste à définir cette variable de mémo au résultat de l'ajout de l'élément actuel de l'entrée à la valeur de mémo actuelle, puis de la bloquer entre 0 et 180.

Salut à tous l'opérateur splat!

IMP1
la source
2

PHP, 116 octets

génère d'abord l'index de taille (de 1 à 180 inclus),
puis le mappe à la taille en points et imprime le résultat.

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;

prend +Net -1des arguments de ligne de commande.
( -Nest également accepté; faites juste attention à ce que la taille ne saute pas en dessous de zéro!)

Courez avec -nr.

Titus
la source
1

Perl 5 , 123 octets

122 octets de code + 1 pour -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]

Essayez-le en ligne!

Format d'entrée:

32 -32 12 4 -2
Xcali
la source