Gulir pemilih ukuran font Word

32

Word dan tombol mengubah ukuran font sesuai dengan aturan ini:A

  1. Ukuran font awal adalah 11.
  2. Jika ditekan ketika ukuran font adalah 1, ukurannya tetap 1.
  3. Ukuran font berubah dengan 1 poin di kisaran 1 - 12.
  4. Ukuran font berubah dengan 2 poin di kisaran 12 - 28.
  5. Pilihannya adalah 28, 36, 48, 72, dan 80 di kisaran 28 - 80.
  6. Ukuran font berubah dengan 10 poin di kisaran 80 - 1630.
  7. Ukuran font berubah dengan 8 poin di kisaran 1630 - 1638.
  8. Jika ditekan ketika ukuran font 1638, ukurannya tetap 1638.A

Tugas

Dalam sesedikit mungkin byte, tentukan ukuran font yang dihasilkan ketika diberikan satu set tombol yang ditekan dalam format yang masuk akal.

Contohnya

[3,-1,2], artinya : Hasilnya adalah 18.AAAAA

Beberapa format yang mungkin adalah '^^^v^^', [1 1 1 -1 1 1], [True,True,True,False,True,True], ["+","+","+","-","+","+"], "‘‘‘’‘‘", "⛄️⛄️⛄️🌴⛄️⛄️", 111011, "CaB", dll ...

[2]: 14

[-1]: 10

[13]: 80

[-11,1]: 2

[11,-1]: 36

[170,-1]: 1630

[2000,-2,100]: 1638

Adm
sumber
3
Apakah kita harus mengambil set penekanan tombol dalam format yang tepat? Sebagai contoh, akan beberapa atau semua ini baik-baik saja juga: "^vvv^v^^^v", [-1, 1, 1, -1, 1, -1], [0, 1, 0, 1, 1, 0, 1]?
orlp
@ Atau Ya. Awalnya saya menulisnya, tapi ternyata formatnya konyol. Saya akan menempatkan mereka sekarang.
Adám
2
Bagaimana dengan "😀😀😀😟😀😀" atau "⛄️⛄️⛄️🌴⛄️⛄️"
Nick T
3
@NickT Tidak apa-apa.
Adám

Jawaban:

6

MATL , 49 47 45 byte

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

Format input adalah [1 1 -1 1 1 -1 -1 -1]atau [2 -1 2 -3], dengan koma opsional.

Cobalah online! Atau verifikasi semua kasus uji .

Penjelasan

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
sumber
Akhirnya bahasa golf. Saya mulai bertanya-tanya ...
Adám
2
@ Adám Kami membutuhkan jawaban dalam APL :)
orlp
@APL bukan bahasa golf. 8 × 6 = 48, bukan 68
Adám
1
@APL bukan pengguna yang bisa disebut, bukan pengguna sama sekali.
Matius Roh
43

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

Mengapa meniru ketika Anda bisa melakukannya ?!

Deklarasi fungsi dalam ThisDocumentmodul yang mengambil input ndalam bentuk Array(true,true,false,true)dan output ke pemilih ukuran font 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

Tidak Disatukan:

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 penggunaan

Saya seorang .GIF!

Terima kasih

-21 terima kasih kepada @ Adám ( Selection.WholeStory:panggilan dihapus )

-10 terima kasih kepada @ Adám (anggap lingkungan bersih; hapus f.size=11:panggilan)

-14 Terima kasih kepada @ Adám (pemilih ukuran font kata keluaran yang tidak sopan)

-2 terima kasih kepada @ Adám (bool ParamArray)

-13 untuk mengubah ParamArray n()ke ndan mengharapkan masukan sebagai Boolean Array

-2 untuk pindah dari modul kode ke ThisDocumentmodul

Versi Lama 114 Bytes

Mengambil input nsebagai ParamArray, dalam bentuk true,true,false,truedan output kata vbe jendela langsung

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

Versi lebih lama, 199 Bytes

Mengambil input dalam bentuk 170,-4,6,-1(menerima angka yang lebih besar dari 1 dalam 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
sumber
1
+1 (Saya akan memberi lebih banyak jika saya bisa). Mengapa Anda Set f=.Size = 12?
Adám
1
Juga, apakah Anda perlu memilih keseluruhan cerita? apakah pilihan saat ini tidak cukup?
Adám
1
Tidak perlu mengizinkan beberapa kali proses. Anda mungkin menganggap lingkungan yang bersih.
Adám
1
Btw, saya mengubah judul OP sehingga tidak ada implikasi bahwa persaingan yang sebenarnya harus dilakukan. Penggunaan nyata juga baik-baik saja!
Adám
11

JavaScript (ES6), 103 101 byte

Mengambil input sebagai array dari -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

Uji

Disimpan 2 byte berkat produk ETH

Arnauld
sumber
1
Kiat: kapan pun Anda miliki a&&(b=c), Anda dapat menyimpan satu byte a?b=c:0. Namun di sini, saya pikir Anda bahkan dapat menyimpan dua dengann+=n>v&&k*[...][i]
ETHproduksi
9

Python 2, 111 107 byte

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]

Membutuhkan input dalam [-1, 1, 1, -1, ...]format. Ini bekerja dengan contoh untuk beberapa byte tambahan:

for d in input():i=min(max(0,i+d),179)
orlp
sumber
Anda dapat menyimpan 3 byte dengan menggunakan `jika 0 <i <179: i + = d` di dalam for loop. Biaya Anda untuk linefeed dan indentasi ruang akan menjadi 5.
ElPedro
Atau i+=[0,d][0<i<179]mungkin berhasil
NonlinearFruit
@NonlinearFruit Bekerja tetapi masuk dengan byte yang sama untuk saya (108). Terlihat jauh lebih keren dan lebih golf dari pada ifpernyataan.
ElPedro
1
Kedua saran itu salah. Itu berarti bahwa jika kita memukul 0atau 179kita terjebak di sana selamanya.
orlp
@ Atau titik bagus. Merindukan yang itu.
ElPedro
6

Oktaf, 93 89 87 byte

Array input dapat memiliki bilangan bulat yang lebih besar dari 1 atau lebih kecil dari -1 untuk mewakili banyaknya aksi

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)

Berkat Adám, Bahasa yang diubah menjadi Oktaf hanya untuk dapat menggunakan pengindeksan langsung ke dalam array.

Disimpan 2 byte berkat rahnema1.

Uji

Di Ideone

Mohsen Nosratinia
sumber
1
Simpan 3 byte dengan menghapus pernyataan pertama, dan mengubah yang terakhir ke [1:12,14:2:28,36,48,72,80:10:1630,1638](L).
Adám
@ Adám Ide bagus, tapi kemudian hanya berfungsi di Octave
Luis Mendo
@LuisMendo, terima kasih, perbaiki.
Mohsen Nosratinia
1
@LuisMendo Jadi? Ubah bahasa menjadi Oktaf saja.
Adám
2
[1:11 [6:14 18 24 36 40:5:815 819]*2]beberapa byte bisa disimpan!
rahnema1
4

Ruby, 106 byte

Saya berhasil mencukur beberapa byte dari solusi python (dan butuh beberapa saat untuk mencukur).

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

Ini adalah fungsi anonim yang mengambil input dalam bentuk [1, -1, 1, 1, ...]. Tampaknya berurusan dengan input dalam formulir [170,-12]juga, tetapi saya tidak dapat menjamin itu akan bekerja 100% dari waktu, jadi saya akan bermain aman dan mengatakan itu bekerja dengan baik [1, -1, 1, 1, ...].

Trik yang saya gunakan:

  • [0,179,a+b].sort[1]: Klem ini a+bberada di antara 0 dan 179, yang merupakan indeks valid dari array ukuran font.

  • Menggunakan operator percikan pada rentang mengubahnya menjadi array, sehingga ukuran font yang tersedia dihasilkan [*1..12,*(14..28).step(2),36,48,72,*(80..1630).step(10),1638]. Yang merupakan array datar yang berisi nilai-nilai dari masing-masing elemen yang diratakan:

    • 1..12berkisar dari 1 hingga 12 (inklusif). Operator percikan mengubahnya menjadi nilai 1, 2, 3, ..., 11, 12.
    • (14..28).step(2)adalah enumerator untuk rentang yang diberikan, di mana setiap langkah naik 2. Operator percikan mengubahnya menjadi nilai 14, 16, 18, ..., 26, 28.
    • Nilai individual ( 36, 48, 72, 1638) semuanya digabungkan dalam posisinya ke dalam array ukuran font yang hebat.
  • Saya menggunakan metode inject(/ reduce), yang menggunakan setiap elemen dari array input, sambil menguranginya menjadi variabel 'memo' (seperti kata ruby). Saya menginisialisasi ini menjadi 11, dan tubuh setiap injeksi iterasi adalah untuk mengatur variabel memo ini ke hasil menambahkan elemen input saat ini ke nilai memo saat ini, dan kemudian menjepitnya antara 0 dan 180.

Semua memuji operator percikan!

IMP1
sumber
2

PHP, 116 byte

pertama menghasilkan indeks ukuran (dari 1 hingga 180 inklusif),
kemudian memetakannya ke ukuran titik dan mencetak hasilnya.

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;

mengambil +Ndan -1dari argumen baris perintah.
( -Njuga diterima; hanya berhati-hatilah agar ukurannya tidak melompat di bawah nol!)

Jalankan dengan -nr.

Titus
sumber
1

Perl 5 , 123 byte

122 byte kode +1 untuk -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]

Cobalah online!

Masukkan format:

32 -32 12 4 -2
Xcali
sumber