Прокрутіть селектор розміру шрифту Word


32

Word та кнопки змінюють розмір шрифту відповідно до цих правил:A

  1. Початковий розмір шрифту - 11.
  2. Якщо натиснути, коли розмір шрифту дорівнює 1, розмір залишається 1.
  3. Розмір шрифту змінюється на 1 бал в діапазоні 1 - 12.
  4. Розмір шрифту змінюється на 2 бали в діапазоні 12 - 28.
  5. Вибір - 28, 36, 48, 72 та 80 у діапазоні 28 - 80.
  6. Розмір шрифту змінюється на 10 балів у діапазоні 80 - 1630.
  7. Розмір шрифту змінюється на 8 балів у діапазоні 1630 - 1638.
  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 Так. Спочатку я писав їх, але формати я вважав дурними. Я зараз покладу їх.
Adám

2
Як щодо "😀😀😀😟😀😀" чи "⛄️⛄️⛄️🌴⛄️⛄️"
Нік Т

3
@NickT Це добре.
Adám

Відповіді:


6

MATL , 49 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,trueі видає слово vbe neposredtes 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

Старіша версія, 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
Також вам потрібно вибрати всю історію? чи недостатньо поточний вибір?
Adám

1
Не потрібно дозволяти кілька запусків. Ви можете припустити чисте середовище.
Adám

1
До речі, я змінюю назву OP, щоб не було наслідків, що потрібно робити фактичну емуляцію. Реальне використання теж чудово!
Adám


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

Тест

Збережено 2 байти завдяки ETHproductions


1
Порада: коли ви маєте a&&(b=c), ви можете зберегти байт за допомогою a?b=c:0. Тут, однак, я думаю, ви навіть можете врятувати дваn+=n>v&&k*[...][i]
ETHproductions

9

Пітон 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)

Ви можете зберегти 3 байти, використовуючи `if 0 <i <179: i + = d` всередині циклу for. Кошти
коштують, коли ви будете подавати лінійку,

Або i+=[0,d][0<i<179]може спрацювати
нелінійний

@NonlinearFruit Works, але приходить для мене стільки ж байтів (108). Виглядає набагато крутіше і гольфіст, ніж ifзаява Тхо.
ElPedro

1
Обидві пропозиції є невірними. Це означало б, що якщо ми вдаримо 0або 179ми затримаємося там назавжди.
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 лише для того, щоб мати можливість використовувати пряме індексування в масив.

Збережено 2 байти завдяки rahnema1.

Тест

На Ideone


1
Збережіть 3 байти, видаливши перше твердження та змінивши останнє на [1:12,14:2:28,36,48,72,80:10:1630,1638](L).
Adám

@ Adám Гарна ідея, але тоді вона працює лише в Октаві
Луїс Мендо

@LuisMendo, спасибі, виправив це.
Mohsen Nosratinia

1
@LuisMendo Отже? Змініть мову лише на Octave.
Adám

2
[1:11 [6:14 18 24 36 40:5:815 819]*2]деякі байти можна зберегти!
rahnema1

4

Рубін, 106 байт

Мені вдалося відголити пару байтів від розчину пітона (і для гоління знадобився певний час).

->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, що є дійсними показниками масиву розміру шрифту.

  • Використання оператора splat у діапазонах перетворює їх у масиви, тому наявні розміри шрифту генеруються з [*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638]. Який являє собою плоский масив, що містить значення кожного з сплющених елементів:

    • 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.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.