เลื่อนตัวเลือกขนาดตัวอักษรของ 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 ขนาดจะคงที่ 1638A

งาน

ในไม่กี่ไบต์ให้มากที่สุดกำหนดขนาดตัวอักษรที่ได้เมื่อกำหนดชุดของปุ่มกดในรูปแบบที่เหมาะสม

ตัวอย่าง

[3,-1,2]ความหมาย: ผลลัพธ์คือ 18AAAAA

บางรูปแบบที่เป็นไปได้'^^^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

@ หรือไม่ใช่ ตอนแรกฉันเขียนมัน แต่ฉันพบว่ารูปแบบโง่ ฉันจะใส่พวกเขาในตอนนี้
Adám

2
วิธีการเกี่ยวกับ "😀😀😀😟😀😀" หรือ "⛄️⛄️⛄️🌴⛄️⛄️"
นิค T

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

ในที่สุดภาษากอล์ฟ ฉันเริ่มสงสัย ...
Adám

2
@ Adámเราต้องการคำตอบใน APL :)
orlp

@APL ไม่ใช่ภาษากอล์ฟ 8 × 6 = 48, ไม่ใช่ 68
Adám

1
@APL ไม่ใช่ผู้ใช้ที่กล่าวถึงได้
Matthew Roh

43

Word 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

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 ของการใช้งาน

ฉันเป็น. 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 หน้าต่างทันที

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?
Adám

1
นอกจากนี้คุณต้องเลือกเรื่องราวทั้งหมดหรือไม่ ตัวเลือกปัจจุบันไม่เพียงพอหรือไม่
Adám

1
ไม่จำเป็นต้องอนุญาตให้ทำงานหลายครั้ง คุณอาจถือว่าสภาพแวดล้อมที่สะอาด
Adám

1
Btw ฉันเปลี่ยนชื่อ OP เพื่อไม่ให้มีความหมายว่าการจำลองที่แท้จริงจะต้องทำ การใช้งานจริงก็ดีเช่นกัน!
Adám


11

JavaScript (ES6), 103 101 ไบต์

จะเข้าเป็นอาร์เรย์ของ/-11

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

Python 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 ไบต์โดยใช้ `ถ้า 0 <i <179: i + = d` ภายในวง for ทำให้คุณต้องเสียค่าใช้จ่ายการป้อนบรรทัดและการเว้นวรรคเว้นวรรคเป็นอย่างอื่น 5
ElPedro

หรือi+=[0,d][0<i<179]อาจทำงานได้
NonlinearFruit

@NonlinearFruit ใช้งานได้ แต่มาในจำนวนไบต์เดียวกันสำหรับฉัน (108) ดูเท่ห์กว่าและดูเป็นนักกอล์ฟมากกว่าifคำพูดนี้
ElPedro

1
คำแนะนำทั้งสองไม่ถูกต้อง มันจะหมายความว่าถ้าเราตี0หรือ179เราติดอยู่ที่นั่นตลอดไป
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ภาษาที่เปลี่ยนไปเป็นระดับคู่เท่านั้นที่จะสามารถใช้การจัดทำดัชนีโดยตรงในอาร์เรย์

บันทึก 2 ไบต์ขอบคุณ rahnema1

ทดสอบ

บนIdeone


1
บันทึก 3 [1:12,14:2:28,36,48,72,80:10:1630,1638](L)ไบต์โดยการเอาคำสั่งแรกและการเปลี่ยนแปลงที่จะผ่านมา
Adám

@ Adámความคิดที่ดี แต่แล้วก็ใช้ได้เฉพาะในระดับแปดเสียง
Luis Mendo

@ LuisMendo ขอขอบคุณแก้ไข
Mohsen Nosratinia

1
@ LuisMendo งั้นเหรอ? เปลี่ยนภาษาเป็นระดับคู่เท่านั้น
Adám

2
[1:11 [6:14 18 24 36 40:5:815 819]*2]สามารถบันทึกบางไบต์!
rahnema1

4

Ruby, 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 ซึ่งเป็นดัชนีที่ถูกต้องของอาร์เรย์ขนาดตัวอักษร

  • [*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 ตัวดำเนินการเครื่องหมายจะแปลงเป็นค่า 14, 16, 18, ..., 26, 28เครื่องหมายเปลี่ยนมันเป็นค่า
    • ค่าแต่ละค่า ( 36, 48, 72, 1638) จะถูกรวมเข้าด้วยกันในตำแหน่งของมันลงในอาร์เรย์ขนาดอักษรที่ยอดเยี่ยม
  • ฉันใช้เมธอดinject(/ reduce) ซึ่งใช้องค์ประกอบของอาร์เรย์อินพุตแต่ละตัวในขณะที่ลดลงให้เป็นตัวแปร 'บันทึก' (เนื่องจากทับทิมใส่ไว้) ฉันเริ่มต้นนี้ถึง 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ทำงานด้วย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.