Przewiń selektor rozmiaru czcionki Worda

32

Słowa i przyciski zmieniają rozmiar czcionki zgodnie z następującymi zasadami:A

  1. Początkowy rozmiar czcionki to 11.
  2. Jeśli zostanie naciśnięty, gdy rozmiar czcionki wynosi 1, rozmiar pozostanie 1.
  3. Rozmiar czcionki zmienia się o 1 punkt w zakresie 1–12.
  4. Rozmiar czcionki zmienia się o 2 punkty w zakresie 12–28.
  5. Dostępne opcje to 28, 36, 48, 72 i 80 w zakresie 28 - 80.
  6. Rozmiar czcionki zmienia się o 10 punktów w zakresie 80-1630.
  7. Rozmiar czcionki zmienia się o 8 punktów w zakresie 1630-1638.
  8. Jeśli zostanie naciśnięty, gdy czcionka ma rozmiar 1638, rozmiar pozostanie 1638.A

Zadanie

W jak najmniejszej liczbie bajtów określ wynikowy rozmiar czcionki, gdy otrzymasz zestaw naciśnięć przycisków w dowolnym rozsądnym formacie.

Przykłady

[3,-1,2], co oznacza : wynik to 18.AAAAA

Niektóre z możliwych formatów '^^^v^^', [1 1 1 -1 1 1], [True,True,True,False,True,True], ["+","+","+","-","+","+"], "‘‘‘’‘‘", "⛄️⛄️⛄️🌴⛄️⛄️", 111011, "CaB", itd ...

[2]: 14

[-1]: 10

[13]: 80

[-11,1]: 2

[11,-1]: 36

[170,-1]: 1630

[2000,-2,100]: 1638

Adám
źródło
3
Czy musimy wziąć zestaw naciśnięć przycisków w dokładnie takim formacie? Na przykład, że niektóre lub wszystkie z nich będzie w porządku, a także: "^vvv^v^^^v", [-1, 1, 1, -1, 1, -1], [0, 1, 0, 1, 1, 0, 1]?
orlp
@orlp Tak. Początkowo je napisałem, ale uważałem, że formaty są głupie. Włożę je teraz.
Adám
2
Co powiesz na „😀😀😀😟😀😀” lub „⛄️⛄️⛄️🌴⛄️⛄️”
Nick T
3
@NickT W porządku.
Adám

Odpowiedzi:

6

MATL , 49 47 45 bajtów

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

Format wejściowy to [1 1 -1 1 1 -1 -1 -1]lub [2 -1 2 -3], z opcjonalnymi przecinkami.

Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie

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
źródło
Wreszcie język golfa.
Zaczynałem
2
@ Adám Potrzebujemy odpowiedzi w APL :)
orlp
@APL nie jest językiem golfowym. 8 × 6 = 48, a nie 68
Adám
1
@APL nie jest wymienialnym użytkownikiem, ani żadnym użytkownikiem.
Matthew Roh
43

Słowo VBA, 199 147 126 116 102 100 87 85 bajtów

Po co naśladować, kiedy możesz ?!

Zadeklarowana funkcja w ThisDocumentmodule, która pobiera dane wejściowe nw postaci Array(true,true,false,true)i wyprowadza do selektora rozmiaru czcionki Word :P

Gra w golfa:

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

Nie golfowany:

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 użytkowania

Jestem .GIF!

Dzięki

-21 dzięki @ Adám (usunięte Selection.WholeStory:połączenie)

-10 dzięki @ Adám (załóż czyste środowisko; usuń f.size=11:połączenie)

-14 dzięki @ Adám (bezczelny selektor rozmiaru czcionki tekstu wyjściowego)

-2 dzięki @ Adám (bool ParamArray)

-13 do zmieniających ParamArray n()się ni oczekując wejścia jako Boolean Array

-2 do przejścia z modułu kodu do ThisDocumentmodułu

Stara wersja 114 bajtów

Pobiera dane wejściowe njako ParamArray, w postaci true,true,false,truei wypisuje słowo vbe, co powoduje natychmiastowe otwarcie okna

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

Starsza wersja, 199 bajtów

Pobiera dane wejściowe w postaci 170,-4,6,-1(przyjmuje wartości większe niż 1 pod względem wielkości)

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
źródło
1
+1 (dałbym więcej, gdybym mógł). Dlaczego Set f=.Size = 12?
Adám
1
Czy musisz też wybrać całą historię? aktualny wybór nie jest wystarczający?
Adám
1
Nie trzeba zezwalać na wiele przebiegów. Możesz założyć czyste środowisko.
Adám
1
Przy okazji, zmieniam tytuł OP, aby nie miało to wpływu na faktyczną emulację. Rzeczywiste wykorzystanie też jest w porządku!
Adám
11

JavaScript (ES6), 103 101 bajtów

Pobiera dane wejściowe jako tablicę -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

Test

Zaoszczędzono 2 bajty dzięki produktom ETH

Arnauld
źródło
1
Wskazówka: za każdym razem możesz a&&(b=c)zapisać bajt za pomocą a?b=c:0. Tutaj jednak myślę, że możesz nawet uratować dwa dziękin+=n>v&&k*[...][i]
ETHproductions
9

Python 2, 111 107 bajtów

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]

Wymaga wejścia w [-1, 1, 1, -1, ...]formacie. Działa z przykładami niektórych dodatkowych bajtów:

for d in input():i=min(max(0,i+d),179)
orlp
źródło
Możesz zapisać 3 bajty, używając `if 0 <i <179: i + = d` wewnątrz pętli for. Kosztuje Cię wysuwem linii, a wcięcie spacji w przeciwnym razie wynosi 5.
ElPedro
Lub i+=[0,d][0<i<179]może działać
NonlinearFruit
@NonlinearFruit Działa, ale przychodzi dla mnie z tą samą liczbą bajtów (108). Wygląda znacznie fajniej i bardziej golfowo niż ifoświadczenie.
ElPedro
1
Obie sugestie są niepoprawne. Oznaczałoby to, że gdybyśmy uderzyli0 lub 179utkniemy tam na zawsze.
orlp
@orlp Dobra uwaga. Nie trafiłem tego.
ElPedro
6

Oktawa, 93 89 87 bajtów

Tablica wejściowa może mieć liczby całkowite większe niż 1 lub mniejsze niż -1, co reprezentuje wielość akcji

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)

Dzięki Adámowi zmieniono język na Octave, aby móc korzystać z bezpośredniego indeksowania w tablicy.

Zaoszczędzono 2 bajty dzięki rahnema1.

Test

Na Ideone

Mohsen Nosratinia
źródło
1
Zaoszczędź 3 bajty, usuwając pierwszą instrukcję i zmieniając ostatnią na [1:12,14:2:28,36,48,72,80:10:1630,1638](L).
Adám
@ Adám Dobry pomysł, ale potem działa tylko w Octave
Luis Mendo
@LuisMendo, dzięki, naprawiłem to.
Mohsen Nosratinia,
1
@LuisMendo So? Zmień język tylko na Octave.
Adám
2
[1:11 [6:14 18 24 36 40:5:815 819]*2]niektóre bajty można zapisać!
rahnema1
4

Rubinowy, 106 bajtów

Udało mi się ogolić kilka bajtów z rozwiązania python (i zajęło mi to trochę czasu).

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

Jest to anonimowa funkcja, która przyjmuje dane wejściowe w postaci [1, -1, 1, 1, ...]. Wydaje się, że całkiem dobrze radzi sobie z danymi wejściowymi w formularzu[170,-12] , ale nie mogę zagwarantować, że będzie działać przez 100% czasu, więc zagram to bezpiecznie i powiem, że działa [1, -1, 1, 1, ...].

Sztuczki, których użyłem:

  • [0,179,a+b].sort[1]: To się zaciska a+b wynosi od 0 do 179, które są prawidłowymi indeksami tablicy rozmiarów czcionek.

  • Użycie operatora splat na zakresach przekształca je w tablice, dzięki czemu generowane są dostępne rozmiary czcionek [*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638] . Który jest płaską tablicą zawierającą wartości z każdego ze spłaszczonych elementów:

    • 1..12jest w zakresie od 1 do 12 (włącznie). Operator ikony zamienia go w wartości1, 2, 3, ..., 11, 12 .
    • (14..28).step(2) to moduł wyliczający dla danego zakresu, w którym każdy krok rośnie o 2. Operator splat przekształca go w wartości 14, 16, 18, ..., 26, 28 .
    • Poszczególne wartości ( 36, 48, 72, 1638) są konkatenowane na swojej pozycji w wielkiej tablicy rozmiarów czcionek.
  • Użyłem metody inject(/ reduce), która wykorzystuje każdy element tablicy wejściowej, jednocześnie redukując je do zmiennej „memo” (jak to określa Ruby). Inicjuję to na 11, a treść każdej iteracji wtrysku polega na ustawieniu tej zmiennej notatki w wyniku dodania bieżącego elementu wejścia do bieżącej wartości notatki, a następnie zaciśnięcia jej między 0 a 180.

Chwała operatorowi splat!

IMP1
źródło
2

PHP, 116 bajtów

najpierw generuje indeks wielkości (od 1 do 180 włącznie),
a następnie mapuje go do rozmiaru punktu i drukuje wynik.

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;

pobiera +Ni -1z argumentów wiersza poleceń.
( -Njest również akceptowane; uważaj, aby rozmiar nie przeskakiwał poniżej zera!)

Uruchom z -nr.

Tytus
źródło
1

Perl 5 , 123 bajtów

122 bajty kodu + 1 dla -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]

Wypróbuj online!

Format wejściowy:

32 -32 12 4 -2
Xcali
źródło