Word'ün yazı tipi boyutu seçicisini kaydırın


32

Word ve düğmeler yazı tipi boyutunu şu kurallara göre değiştirir:A

  1. Başlangıç ​​yazı tipi boyutu 11.
  2. Eğer yazı boyutu 1 olduğunda basıldığında, boyut 1 kalır.
  3. Yazı tipi boyutu 1 - 12 aralığında 1 punto ile değişir.
  4. Yazı tipi boyutu 12 - 28 aralığında 2 puanla değişir.
  5. Seçenekler 28 - 80 aralığında 28, 36, 48, 72 ve 80'dir.
  6. Yazı tipi boyutu 80 - 1630 aralığında 10 punto ile değişir.
  7. Yazı tipi boyutu, 1630 - 1638 aralığında 8 punto ile değişir.
  8. Eğer yazı tipi boyutu 1638 olduğunda basıldığında, boyut 1638 kalır.A

Görev

Mümkün olduğu kadar az bayt olarak, herhangi bir makul formatta bir dizi düğmeye basıldığında ortaya çıkan yazı tipi boyutunu belirleyin.

Örnekler

[3,-1,2], anlamı : Sonuç 18'dir.AAAAA

Bazı olası biçimleri '^^^v^^', [1 1 1 -1 1 1], [True,True,True,False,True,True], ["+","+","+","-","+","+"], "‘‘‘’‘‘", "⛄️⛄️⛄️🌴⛄️⛄️", 111011, "CaB", vb ...

[2]: 14

[-1]: 10

[13]: 80

[-11,1]: 2

[11,-1]: 36

[170,-1]: 1630

[2000,-2,100]: 1638


3
Bu düğme biçiminde bu şekilde basmak zorunda mıyız? Örneğin, bu bazılarını veya tümünü ince yanı olacaktır: "^vvv^v^^^v", [-1, 1, 1, -1, 1, -1], [0, 1, 0, 1, 1, 0, 1]?
orlp

@orlp Evet. Başlangıçta onları yazdım, ama formatları aptalca buldum. Onları şimdi yerleştireceğim.
Adám

2
"😀😀😀😟😀😀" veya "⛄️⛄️⛄️🌴⛄️⛄️" hakkında
Nick T

3
@NickT Bu iyi.
Adám

Yanıtlar:


6

MATL , 49 47 45 bayt

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

Giriş formatı isteğe bağlı virgüllerle [1 1 -1 1 1 -1 -1 -1]veya [2 -1 2 -3].

Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın .

açıklama

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

Sonunda bir golf dili. Merak etmeye başlamıştım ...
Adám

2
@ Adám APL :) 'da bir cevaba ihtiyacımız var
orlp

@ APL bir golf dili değil. 8 x 6 = 48, 68
ADAM

1
@APL kayda değer bir kullanıcı değil, hiçbir kullanıcı değil.
Matthew Roh

43

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

Yapabileceğin zaman neden öykünüyorsun?

Bildirilen işlev ThisDocumentgirdi alır modül nşeklinde Array(true,true,false,true)ve kelime yazı tipi boyutu seçici çıktılar :P

golfed:

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 kullanım

Ben bir .GIF'im!

Teşekkürler

-21 @ Adám sayesinde ( Selection.WholeStory:çağrı kaldırıldı )

-10 @ Adám sayesinde (temiz bir ortam varsayalım; f.size=11:aramayı kaldırın )

-14 @ Adám sayesinde (arsız çıktı kelimesi yazı tipi boyutu seçicisi)

-2 @ Adám sayesinde (ParamArray bool)

-13 değiştirme ParamArray n()için nBoole Array olarak girdi ve bekliyor

-2 bir kod modülü ile ilgili hareket ettirmek için ThisDocumentmodül

Eski Sürüm 114 Bayt

nParamArray olarak girdiyi alır , true,true,false,truevbe sözcük penceresini açar ve çıkarır

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

Eski sürüm, 199 Bayt

Şeklinde girdi alır 170,-4,6,-1(büyüklükte 1'den büyük sayıları kabul eder)

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 (Yapabilseydim daha fazlasını verirdim). Bunu neden Set f=.Size = 12?
Adám

1
Ayrıca hikayenin tamamını seçmeniz gerekiyor mu? mevcut seçim yeterli değil mi?
Adám

1
Birden fazla çalışmaya izin vermenize gerek yok. Temiz bir çevre varsayabilirsin.
Adám

1
Btw, OP başlığını değiştiriyorum, böylece gerçek emülasyonun yapılması gerektiği konusunda bir fikir yok. Gerçek kullanım da iyidir!
Adám


11

JavaScript (ES6), 103 101 bayt

Girdiyi -1/ dizisi olarak alır 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

Ölçek

ETHproductions sayesinde 2 bayt kurtardı


1
Bir ipucu: ne zaman sahipseniz a&&(b=c), bir byte ile kaydedebilirsiniz a?b=c:0. Burada olsa da, iki tane ile tasarruf edebileceğinizi düşünüyorumn+=n>v&&k*[...][i]
ETHproductions

9

Python 2, 111 107 bayt

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]

Giriş [-1, 1, 1, -1, ...]biçiminde olması gerekir . Bazı baytlar için ekstra örneklerle çalışır:

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

For döngüsünde `if 0 <i <179: i + = d` tuşlarını kullanarak 3 bayt kaydedebilirsiniz.
Aksine,

Ya i+=[0,d][0<i<179]da işe yarayabilir
NonlinearFruit

@ NononearFruit Çalışıyor ancak benim için aynı bayt sayısında geliyor (108). Bir ifaçıklamadan çok daha serin ve golfçü görünüyor .
ElPedro

1
Her iki öneri de yanlış. Bu isabet edersek 0ya da 179sonsuza dek oraya sıkışıp kaldığımız anlamına gelir .
orlp

@ orlp İyi nokta. Onu kaçırdım.
ElPedro

6

Oktav, 93 89 87 bayt

Giriş dizisi, işlemin çeşitliliğini temsil etmek için 1'den büyük veya -1'den küçük tam sayılara sahip olabilir.

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 sayesinde, sadece bir diziye doğrudan indeksleme kullanabilmek için, Octave dili değiştirildi.

Rahnema1 sayesinde 2 bayt kurtarıldı.

Ölçek

On Ideone


1
İlk ifadeyi kaldırarak ve sonuncusunu değiştirerek 3 bayt kazanın [1:12,14:2:28,36,48,72,80:10:1630,1638](L).
Adám

@ Adám İyi fikir, ama o zaman sadece Octave'da çalışıyor
Luis Mendo

@LuisMendo, teşekkürler, düzeltildi.
Mohsen Nosratinia

1
@LuisMendo Yani? Dili sadece Octave olarak değiştirin.
Adám

2
[1:11 [6:14 18 24 36 40:5:815 819]*2]bazı baytlar kaydedilebilir!
rahnema1

4

Ruby, 106 bayt

Piton çözeltisinden bir kaç bayt tıraş etmeyi başardım (ve bir süre tıraş oldu).

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

Giriş biçiminde alan adsız bir işlevdir [1, -1, 1, 1, ...]. Formdaki girdilerle de oldukça iyi başa çıkıyor gibi görünüyor [170,-12], ancak zamanın% 100'ünün çalışacağını garanti edemiyorum, bu yüzden güvenli oynayacağım ve çalıştığını söyleyeceğim [1, -1, 1, 1, ...].

Kullandığım püf noktaları:

  • [0,179,a+b].sort[1]: Bu kelepçeler a+b, yazı tipi boyutu dizisinin geçerli dizinleri olan 0 ile 179 arasındadır.

  • Splat operatörünü aralıklarda kullanmak onları dizilere dönüştürür, böylece mevcut font boyutları elde edilir [*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638]. Bu, düzleştirilmiş öğelerin her birinin değerlerini içeren düz bir dizidir:

    • 1..121 ile 12 arasındadır (dahil). Uyarlama operatörü bunu değerlere dönüştürür 1, 2, 3, ..., 11, 12.
    • (14..28).step(2)verilen adım için bir numaralandırıcı olup, her adım 2 ile artar. Splat operatörü bunu değerlere dönüştürür 14, 16, 18, ..., 26, 28.
    • Bireysel değerlerin ( 36, 48, 72, 1638) hepsi konumlarında büyük yazı tipi boyutu dizisine birleştirilir.
  • Kullandığım inject(/ reducegiriş dizisinin her bir elemanı kullanan) yöntemi, bir 'not' değişkene onları azaltırken (yakut koyar gibi). Bunu 11'e başlatıyorum ve her enjekte edilen yinelemenin gövdesi, bu not değişkenini girişin mevcut elemanını mevcut not değerine ekleyerek ve ardından 0 ile 180 arasında sıkıştırmanın sonucuna ayarlamaktır.

Hepiniz uyarıcı operatörü selamlayın!


2

PHP, 116 bayt

önce boyut indeksini oluşturur (1 - 180 dahil),
sonra bunu nokta boyutuna eşler ve sonucu yazdırır.

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;

komut satırı argümanlarını alır +Nve alır -1.
( -Nayrıca kabul edilir; sadece boyutun sıfıra düşmemesine dikkat edin!)

İle koş -nr.


1

Perl 5 , 123 bayt

İçin 122 baytlık kod + 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]

Çevrimiçi deneyin!

Giriş formatı:

32 -32 12 4 -2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.