การทดสอบหลายหลาก


21

ใช้ภาษาการเขียนโปรแกรมใด ๆ เพื่อแสดงตัวเลขระหว่าง 1 ถึง 99 (รวมทั้งคู่) ในลักษณะดังกล่าวเพื่อที่:

  • ตัวเลขถูกคั่นด้วยช่องว่างเดียว
  • ถ้าจำนวนหารด้วย 3 ก็ควรอยู่ในวงเล็บ
  • ถ้าจำนวนหารด้วย 4 ก็ควรอยู่ในวงเล็บเหลี่ยม
  • หากตัวเลขหารด้วย 3 และ 4 ทั้งสองควรเป็นทั้งในวงเล็บและวงเล็บเหลี่ยม

โปรแกรมของคุณควรแสดงอย่างถูกต้อง:

1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)


3
เราสามารถเอาท์พุทแต่ละรายการในบรรทัดใหม่หรือไม่
ETHproductions

4
สามารถส่งออกจบลงด้วยช่องว่าง ดูเหมือนคำตอบสองสามข้อจะถือว่าเป็นเช่นนั้น
Dennis

คำตอบ:


7

05AB1E , 23 ไบต์

-1 ไบต์ต้องขอบคุณ Kevin Cruijssen

тGND4Öi…[ÿ]}N3Öi…(ÿ)]ðý

ลองออนไลน์!


1
-1 ไบต์โดยการเปลี่ยน}?ð?ไป]ðý(ปิดทั้งถ้าและห่วงและเข้าร่วมทั้งกองด้วยช่องว่าง)
เควิน Cruijssen

@KevinCruijssen ขอบคุณนั่นคือสิ่งที่ฉันกำลังมองหา!
Okx




4

เยลลี่ , 21 20 ไบต์

³Ṗµ3,4ṚƬḍד([“])”j)K

ลองออนไลน์!

มันทำงานอย่างไร

³Ṗµ3,4ṚƬḍד([“])”j)K  Main link. No arguments.

³                     Set the return value to 100.
 Ṗ                    Pop; yield [1, ..., 99].
  µ               )   Map the chain in between over [1, ..., 9]; for each integer k:
   3,4                    Set the return value to [3, 4].
      ṚƬ                  Reverse until a loop is reached. Yields [[3, 4], [4, 3]].
        ḍ                 Test k for divisibility by [[3, 4], [4, 3]], yielding a
                          matrix of Booleans.
         ד([“])”         Repeat the characters of [['(', '['], [']', ')']] as many
                          times as the Booleans indicate.
                 j        Join the resulting pair of strings, separated by k.
                   K  Join the resulting array of strings, separated by spaces.


3

ถ่าน 30 ไบต์

⪫EEE⁹⁹I⊕ι⎇﹪⊕κ⁴ι⪫[]ι⎇﹪⊕κ³ι⪫()ι 

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

    ⁹⁹                          Literal 99
   E                            Map over implicit range
        ι                       Current value
       ⊕                        Incrementd
      I                         Cast to string
  E                             Map over list of strings
            κ                   Current index
           ⊕                    Incremented
             ⁴                  Literal 4
          ﹪                     Modulo
              ι                 Current value
                []              Literal string `[]`
                  ι             Current value
               ⪫                Join i.e wrap value in `[]`
         ⎇                      Ternary
 E                              Map over list of strings
                      κ         Current index
                     ⊕          Incremented
                       ³        Literal 3
                    ﹪           Modulo
                        ι       Current value
                          ()    Literal string `()`
                            ι   Current value
                         ⪫      Join i.e wrap value in `()`
                   ⎇            Ternary
                                Literal space
⪫                               Join list
                                Implicitly print

3

J , 54 53 ไบต์

น้อยกว่า 1 ไบต์ขอบคุณ @Jonah

(*stdout(3|.0=4 3 1 3 4&|,1=":)#3|.']) ([',":)@>i.100

ลองออนไลน์!


ขอบคุณที่ทำสิ่งนี้ นอกจากนี้ทำไมคุณต้องทำstdoutที่นี่ ... ฉันไม่เคยเห็นมาก่อน @FrownyFrog
Jonah

@ Jonah ฉันไม่สามารถส่งออกเป็นสตริงที่สมบูรณ์ได้มันถูกตัดออก (...) stdout ไม่ทำอย่างนั้นและมันไม่ได้พิมพ์บรรทัดใหม่เช่นกันดังนั้นฉันจึงสามารถพิมพ์แต่ละหมายเลขแยกกันได้ ด้วยเหตุแม้ว่ามันจะทำให้ช่องว่างต่อท้ายปรากฏบางคน (มี 4 และมีเพียง 1 เป็นเจตนาที่นั่น)
FrownyFrog

#วิธีนี้เป็นวิธีที่ฉลาดจริงๆทั้งหมุนและเลือกที่จะใช้งาน ฉันได้นำกริยาช่วยมาล้อม()และ[]: g=. {.@[ , ":@] , {:@[. อืมฟุ่มเฟื่อย!
Jonah

อีกหนึ่งคำถาม: ด้วยเหตุผลใดก็ตามที่คุณใช้แทนLF _หลังดูเหมือนว่าจะทำงานด้วย
Jonah

3

C, C ++, 136 133 131 129 128 124 ไบต์

-5 ไบต์ขอบคุณZacharýและแรงบันดาลใจจากการเขียน () ฟังก์ชั่นในภาษา D (ดูคำตอบZacharý)

-2 ไบต์ขอบคุณ mriklojn

-12 ไบต์สำหรับรุ่น C ขอบคุณ mriklojn

-4 ไบต์ขอบคุณที่แมวเพดาน

#include<cstdio>
void f(){for(int i=0;i++<99;)printf("(%s%d%s%s%s"+!!(i%3),i%4?"":"[",i,i%4?"":"]",i%3?"":")",i%99?" ":"");}

การเพิ่มประสิทธิภาพเฉพาะ C: 115 ไบต์

#include<stdio.h>
i;f(){for(;i++<99;)printf("(%s%d%s%s%s"+!!(i%3),i%4?"":"[",i,i%4?"":"]",i%3?"":")",i%99?" ":"");}

MSVC อนุญาตให้คุณทำinf f()สิ่งนั้นหรือไม่? ขออภัย 'ลบความคิดเห็นของฉันคิดว่าฉันมีบางสิ่งบางอย่างที่สั้นกว่า (ฉันไม่ได้)
Zacharý

@ Zacharýไม่ฉันคิดว่าฟังก์ชั่นนั้นง่ายเกินไปและมันสร้าง "f ต้องคืนค่า int" BTW โซลูชันของคุณสั้นลง 3 ไบต์ (รวมถึงการบีบอัดที่จับคู่กับการเคลื่อนไหวที่เพิ่มขึ้นของ i)
HatsuPointerKun

1
แดงลืมprintfสิ่งที่เป็นจุด คุณใช้ C stdio ไม่ได้เหรอ?
Zacharý

2
อีกสิ่งหนึ่งที่คุณสามารถใช้ / ใช้ประโยชน์ได้คือความจริงที่ว่าอย่างน้อยกับ gcc 5.3.1 คุณไม่จำเป็นต้องมี #include และคุณสามารถลบประเภทการคืนค่าฟังก์ชันได้ นอกจากนี้ถ้าคุณประกาศint iนอกฟังก์ชั่น (ในขอบเขตทั่วโลก) แล้วค่าเริ่มต้นของความคุ้มค่าเป็น 0 intและค่าเริ่มต้นประเภทข้อมูลไปยัง สิ่งนี้จะส่งผลให้ลูปของคุณเริ่มต้นที่ 0 และเพื่อแก้ไขปัญหานี้คุณสามารถย้ายส่วนเพิ่มลงในนิพจน์เงื่อนไขในลูปของคุณทำให้มันดูเหมือนi;f(){for(;++i<=99;)
mriklojn

1
แนะนำแทน")\0"+i%3 i%3?"":")"นอกจากนี้ฉันคิดว่าคุณต้องเพิ่มi=0ที่จุดเริ่มต้นของวง
เพดานแมว

3

Powershell ขนาด 60 ไบต์

"$(1..99|%{($_,"($_)","[$_]","([$_])")[!($_%3)+2*!($_%4)]})"

คำอธิบาย:

  • อาร์เรย์ที่มี 4 องค์ประกอบ: $_, "($_)", "[$_]", "([$_])"
  • และดัชนี: [!($_%3)+2*!($_%4)]
  • ทำซ้ำสำหรับแต่ละหมายเลข
  • แปลงผลลัพธ์เป็นสตริง

สคริปต์ทดสอบที่ตีกอล์ฟน้อย:

$f = {

$r = 1..99|%{
    ($_, "($_)", "[$_]", "([$_])") [!($_%3)+2*!($_%4)]
}
"$($r)"

}

$expected = '1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)'
$result = &$f
$result-eq$expected
$result

เอาท์พุท:

True
1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)

3

MathGolf , 41 40 34 29 ไบต์

♀({îû)(î+╫îa_'(\')ßyΓî34α÷ä§ 

หมายเหตุ: มันมีพื้นที่ต่อท้าย

เพียงคำตอบ MathGolf ที่สองของฉัน ..
-5 ไบต์ขอบคุณที่@JoKing

ลองออนไลน์

คำอธิบาย:

♀(             # Push 99 (100 decreased by 1)
  {            # Start a loop, which implicitly loops down to (and excluding) 0
   û)(         #  Push string ")("
      î+       #  Append the 1-indexed index
              #  Rotate the string once towards the right
   îa          #  Push the 1-indexed index of the loop, wrap in a list
   _           #  Duplicate it
    '(        '#  Push string "("
      \        #  Swap the top two items of the stack
       ')     '#  Push string ")"
         ßy    #  Wrap all three into a list, and join them
   Γ           #  Wrap all four into a list
               #  (We now have a list [N, "(N)", "[N]", "([N])"], where N is the index)
   î           #  Push the 1-indexed index of the loop
    34         #  Push 3 and 4 to the stack
      α        #  Wrap all three into a list
       ÷       #  Check for each if the index is divisible by it
               #  (resulting in either [0,0], [0,1], [1,0], or [1,1]
        ä      #  Convert from binary to integer
               #  (resulting in either 0, 1, 2, or 3
         §     #  Push the string at that index from the array
               #  Push a space
               # (After the loop, output the entire stack joined together implicitly)

@ โจกิ้งขอบคุณ! ไม่ทราบว่าqสามารถละเว้นได้และมันทำโดยอ้อมในลูป ยังไม่รู้ด้วยซ้ำว่ามี 2/3/4-string builtin น่าเสียดายที่เคล็ดลับการหมุนไม่ทำงานกับอาเรย์ที่ถูกห่อ
Kevin Cruijssen

มันมากกว่าที่ฉันได้ทำการแลกเปลี่ยนเอาท์พุทที่ชัดเจนในแต่ละการวนซ้ำสำหรับผลลัพธ์โดยปริยายในตอนท้ายของโปรแกรมแทน
Jo King

@ โจกิ้งใช่ แต่ฉันไม่รู้ว่ามันจะเอาท์พุทสแต็กทั้งหมดมารวมกันแทนที่จะเป็นแค่ส่วนบน :)
Kevin Cruijssen

โซลูชันของฉันใกล้ถึง 40 ไบต์แม้ว่าฉันจะอ่านผิดและคิดว่าควรใช้วงเล็บปีกกาแทนการใช้วงเล็บเหลี่ยม ทำได้ดีมากในการแก้ปัญหา!
maxb

2

Haskell , 77 ไบต์

unwords[f"()"3$f"[]"4$show n|n<-[1..99],let f(x:r)m s|mod n m<1=x:s++r|1<3=s]

ลองออนไลน์!

ฉันสงสัยว่าshow[n]สามารถนำมาใช้เพื่อตัดสิ่งขึ้นเพื่อให้ห่างไกลจะไม่มีประโยชน์




2

C (gcc) , 84 ไบต์

main(i){while(99/i++)printf("%s%s%d%s%s ","("+i%3,"["+i%4,i-1,"]"+i%4,")"+i%3);}

มีค่า null ที่จุดเริ่มต้นของแต่ละ "วงเล็บสตริง"

ลองออนไลน์!


และใน "(" + i% 3 คุณจะรู้ที่อยู่ของ i = 2 ได้อย่างไรที่ชี้ไปที่ค่าถ่านที่เป็นศูนย์เหมือนกันกับ "[" + i% 4 สำหรับ i ใน {2,3}?
RosLuP

มันทำงานร่วมกับ gcc ซึ่งดีพอที่ PPCG กำหนดภาษาโดยการใช้งานของพวกเขา
Dennis

ฉันคิดว่าคุณไม่สามารถพูดได้รหัสว่ามัน ok รวบรวมในการดำเนินงานของคอมไพเลอร์ gcc ทุกอาจเพียงหนึ่งทำงานในเครื่องคอมพิวเตอร์ของคุณ ( แต่ไปได้ไม่มากเกินไป)
RosLuP

@RosLuP GCC จะทำงานในลักษณะเดียวกันในคอมพิวเตอร์มากที่สุด แต่อย่างน้อยในสิ่งที่มีสถาปัตยกรรมเดียวกัน
ASCII เท่านั้น

@ ASCII เป็นไปได้เท่านั้นหากคอมไพล์แล้วปรับให้เหมาะกับพื้นที่ว่างหรือเพื่อความเร็วผลที่ได้จะแตกต่างออกไป ... ฉันไม่รู้ว่ามาตรฐาน ...
RosLuP

2

PowerShell , 67 62 ไบต์

"$(1..99|%{'('*!($x=$_%3)+'['*!($y=$_%4)+$_+']'*!$y+')'*!$x})"

ลองออนไลน์!

โดยทั่วไปFizzBuzz จะใช้การคูณสตริงด้วยตัวแปรบูลีน (โดยทั่วไปจะใช้ 1 หรือ 0) สตริงเหล่านั้นจะถูกทิ้งไว้ที่ไพพ์ไลน์และรวบรวมไว้ในบล็อกสคริปต์ภายในเครื่องหมายคำพูด เนื่องจากค่าเริ่มต้น$OutputFieldSeparatorสำหรับอาเรย์เป็นช่องว่างสิ่งนี้จะให้องค์ประกอบอาเรย์ที่คั่นด้วยปริภูมิโดยปริยาย


2

C #, 124 117 123 ไบต์

-5 ไบต์ขอบคุณ Kevin Cruijssen

x=>{for(int i=0;i++<99;)System.Console.Write((i%3<1?"(":"")+(i%4<1?"[":"")+i+(i%4<1?"]":"")+(i%3<1?")":"")+(i>98?"":" "));}

ทดสอบกับ:

Action<int> t = x=>{for(int i=0;i++<99;)System.Console.Write((i%3<1?"(":"")+(i%4<1?"[":"")+i+(i%4<1?"]":"")+(i%3<1?")":"")+(i>98?"":" "));}
t.Invoke(0);
Console.ReadKey();

ในการโจมตีของ C # ฉันเห็น C # อนุญาตให้จำนวนเต็มเป็นอาร์กิวเมนต์ด้านซ้ายให้กับผู้ประกอบการที่ประกอบไปด้วยหรือไม่หรือต้องเป็นบูลีนหรือไม่?
Zacharý

ฉันไม่ค่อยรู้อะไรเกี่ยวกับ C # แต่คุณสามารถใช้xแทนiได้ดังนั้นไม่ต้องกังวลกับเรื่องนี้int หรือ (คุณต้องตั้งค่าแน่นอน)
Zacharý

@ Zacharýไม่มันสร้างข้อผิดพลาด CS0029 "ไม่สามารถแปลง int เป็นบูลีนโดยปริยาย" และใช่ฉันสามารถใช้iและความจริงที่ว่าฉันจะเริ่มต้นมันที่ 0 Invokeเมื่อฉัน แต่นั่นไม่ได้หมายความว่าฉันจะต้องรวมการประกาศของ t ( Action<int>) และการโทร ( t.Invoke(0)) ใน bytecount?
HatsuPointerKun

ฉันถามว่าสิ่งที่ต้องการ x=>{for(x=0;x++<99;)Console.Write((x%3==0?"(":"")+(x%4==0?"[":"")+x+(x%4==0?"]":"")+(x%3==0?")":"")+(x%99==0?"":" "));};จะทำงาน
Zacharý

1
ทั้งห้าสามารถ==0 <1
Kevin Cruijssen


2

Ruby , 72 66 ไบต์

p [*1..99].map{|x|a=x
a="[#{x}]"if x%4<1
a="(#{a})"if x%3<1
a}*' '

ขอบคุณ @ jonathan-frech และ @ conor-obrien สำหรับการตัดแต่งเพิ่มเติม


สวัสดีและยินดีต้อนรับสู่ PPCG! 70 ไบต์
Jonathan Frech

ยินดีต้อนรับสู่ PPCG! นี่คืออีก 4 ไบต์จากข้อเสนอแนะของ @JonathanFrench สำหรับ66 ไบต์เนื่องจากa.join bสำหรับอาร์เรย์aและสตริงbเท่ากับa*b
Conor O'Brien

2

PowerShell, 98 82 74 67 63 62 ไบต์

มหันต์ -31 ไบต์ขอบคุณ @Veskah -5 ไบต์ขอบคุณ @ ASCII- เท่านั้น

(1..99|%{(($a=($_,"[$_]")[!($_%4)]),"($a)")[!($_%3)]})-join' '

ลองออนไลน์!

ฉันยังไม่แน่ใจว่าสิ่งที่ฉันทำที่นี่


เพียงบางส่วนการเล่นกอล์ฟอย่างรวดเร็วสำหรับ70 ไบต์ คุณไม่จำเป็นต้องแปลง $ a เป็นสตริงและ"$a"จะยังคงใช้แทนค่าได้ (หมายเหตุ: เครื่องหมายคำพูดเดี่ยวไม่ได้แทนที่$fooเพียงเครื่องหมายคำพูดคู่) เคล็ดลับก็คือถ้าเพียงสนใจเกี่ยวกับ 0 หรือ 1 เพื่อให้คุณสามารถใช้ตรรกะบูลีนเพื่อบันทึกไบต์
Veskah

67 ไบต์ถ้าคุณใช้การจัดทำดัชนีรายการเช่นกัน
Veskah




1

perl -E, 60 ไบต์

$,=$";say map$_%12?$_%3?$_%4?$_:"[$_]":"($_)":"([$_])",1..99

บางไบต์สามารถบันทึกได้หากเราสามารถใช้การขึ้นบรรทัดใหม่ระหว่างตัวเลข: ในกรณีนี้เราสามารถลบ$,=$";, เปลี่ยนmapเป็นforลูป, ในขณะที่ย้ายsayเข้าไปในลูป


1
คุณเป็น Abigail หรือไม่? ผู้ประดิษฐ์ของ/^1$|^(11+?)\1+$/?
msh210

1
ว้าว. ช่างเป็นเกียรติอย่างยิ่งที่มีคุณอยู่ที่นี่!
msh210

1

Perl 6 , 51 48 ไบต์

put {$_%3??$^a!!"($a)"}(++$_%4??$_!!"[$_]")xx 99

ลองออนไลน์!


ฉันจะละเมิดความแตกต่างระหว่างรายการและการเป็นตัวแทนอาร์เรย์เช่นนี้แต่ฉันไม่แน่ใจว่าจะกำจัดวงเล็บปิดล้อมรอบรายการทั้งหมดได้อย่างไร
Jo King

@ โจกิ้งฉันก็คิดเช่นนั้นเหมือนกัน แต่ฉันมากับ51 ไบต์เท่านั้น
nwellnhof

1

แบตช์ 145 ไบต์

@set s=
@for /l %%i in (1,1,99)do @set/an=%%i,b=n%%4,p=n%%3&call:c
@echo%s%
:c
@if %b%==0 set n=[%n%]
@if %p%==0 set n=(%n%)
@set s=%s% %n%

รหัสผ่านเข้าไปในรูทีนย่อย แต่สตริงได้ถูกพิมพ์โดยจุดนี้ดังนั้นโค้ดจะทำงานโดยไม่เป็นอันตราย





1

Bash, 61 ไบต์

-14 ไบต์ขอบคุณเดนนิส

seq 99|awk '{ORS=" ";x=$1%4?$1:"["$1"]";print$1%3?x:"("x")"}'

คำอธิบาย

ตรงไปตรงมาสวย:

  • seq ผลิต 1..99
  • เราไปป์ที่awkด้วยตัวคั่นเร็กคอร์ดผลลัพธ์ ( ORS) ตั้งค่าเป็นพื้นที่ดังนั้นเอาท์พุทเป็นบรรทัดเดียว
  • ร่างกาย awk หลักเพียงแค่เพิ่ม "[]" เมื่อจำนวนหารด้วย 4 แล้วเพิ่มบนนั้น "()" เมื่อหารด้วย 3

ลองออนไลน์!


1

JavaScript (Node.js) , 57 ไบต์

f=(n=99)=>n&&f(n-1)+(s=n%4?n:`[${n}]`,n%3?s:`(${s})`)+' '

ลองออนไลน์!

เปลี่ยนเป็นชุมชนเพราะการเพิ่มประสิทธิภาพนั้นขึ้นอยู่กับมันมากเกินไป


คุณสามารถย่อให้สั้นลงอย่างมีนัยสำคัญโดยการทำ${n%4?n:`[${n}]`}
ETHproductions

66 bytes (พร้อมข้อเสนอแนะของ ETH)
Alion



1

PHP, 65 ไบต์

while($i++<99)echo$i%4?$i%3?$i:"($i)":($i%3?"[$i]":"([$i])")," ";

หรือ

while($i++<99)echo"("[$i%3],"["[$i%4],$i,"]"[$i%4],")"[$i%3]," ";

(ต้องการ PHP 5.5 หรือใหม่กว่า)

ทำงานด้วย-nrหรือลองพวกเขาออนไลน์


1

Python 2 , 78 ไบต์

i=0
exec"i+=1;u=i%3/-2*(i%4/-3-1);print'([%0d])'[u:7-u:1+(i%3<1<=i%4)]%i,;"*99

ลองออนไลน์!

ฉันจินตนาการว่าวิธีการที่เจ๋ง ๆ นี้หลุด'([%0d])'แต่ฉันไม่สามารถทำให้การแสดงออกสั้นลงได้


1

Java 8, 92 91 ไบต์

-1 ไบต์ขอบคุณ @Dana

i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}

ลองออนไลน์!

ทางเลือกทางเลือก 82 ไบต์ (ด้วยพื้นที่ต่อท้ายในเอาต์พุต - ไม่แน่ใจว่าได้รับอนุญาตหรือไม่):

i->{for(;i++<99;)out.printf((i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)+" ",i);}

คำอธิบาย:

for(;i++<99;)- a สำหรับลูปที่เปลี่ยนจากค่าของi(นำกลับมาใช้ใหม่เป็นอินพุตนำมาเป็น 0 ในกรณีนี้) ถึง 99

out.printf(<part1>+<part2>,i); - จัดรูปแบบสตริงก่อนที่จะพิมพ์ทันทีเพื่อ stdout ด้วยค่าของ i

ที่<part1>เป็น(i>1?" ":"")- พิมพ์พื้นที่ก่อนที่จะพิมพ์จำนวนเว้นแต่ตัวเลขที่เป็น 1 ในกรณีที่มันละเว้นพื้นที่

และ<part2>เป็น(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)- ถ้าiหารด้วยทั้ง 3 และ 4 iมีทั้งตารางและวงเล็บรอบรอบ; มิฉะนั้นถ้าiหารด้วย 3 iได้จะได้เครื่องหมายวงเล็บ; มิฉะนั้นถ้าiหารด้วย 4 iจะได้วงเล็บเหลี่ยม อื่นiไม่มีวงเล็บ


บันทึกไบต์ด้วยการย้ายช่องว่างไปยังจุดเริ่มต้นของการวนซ้ำแต่ละครั้ง(i>1:" ":"")
dana

ที่จะทำงานเฉพาะถ้าฉันพิมพ์ผลลัพธ์ในสิ่งที่ตรงกันข้าม (ดูนี้ ) แต่จริง ๆ แล้วจะประหยัด 2 ไบต์แทน 1
NotBaal

น่าเสียดายที่ไม่เหมือนกับผลลัพธ์ที่คาดหวังตามคำถาม แต่ขอขอบคุณสำหรับคำแนะนำ!
NotBaal

1
ดูเหมือนว่าลิงก์ "ลองออนไลน์" จะเสียหาย ฉันคิดi->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}?
dana

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