ใช่ แต่ไม่ใช่ แต่ใช่


46

เพื่อนร่วมงานของฉันเพิ่งส่ง JavaScript ชิ้นต่อไปนี้ให้ฉันเป็นเรื่องตลก:

let butScript = (nrOfButs) => {
    for(var i = 0; i < nrOfButs; i++){
        if(i % 3 == 0){
            console.log("Yeah")
        }
        if(i % 2 == 0){
            console.log("But")
        }
        if(i % 3 == 1){
            console.log("No")
        }
    }
}

เนื่องจากรหัสถูกเขียนขึ้นในช่วงเวลาทำงานจึงเป็นทรัพยากรของ บริษัท ที่สูญเสียไปอย่างมาก เพื่อป้องกันไม่ให้เกิดเหตุการณ์ที่คล้ายกันขึ้นอีกในอนาคตเราต้องลดเวลาการทำงานให้น้อยที่สุด และเนื่องจากเป็นความรู้ทั่วไปว่าโปรแกรมที่สั้นกว่าเขียนได้เร็วกว่าเราจะต้องเขียนรหัสนี้ให้สั้นที่สุด!

อินพุต

เลขจำนวนเต็มที่ไม่เป็นลบเดี่ยว คุณต้องไม่จัดการกับอินพุตที่ผิดพลาด

เอาท์พุต

โปรแกรมของคุณจะต้องสร้างผลลัพธ์ที่เหมือนกับสคริปต์ด้านบน คุณควรส่งออกหนึ่งคำต่อบรรทัดและจำนวนคำควรสอดคล้องกับสคริปต์ต้นฉบับ

อนุญาตให้รวมอักขระช่องว่างที่ไม่ใช่บรรทัดใหม่ที่ท้ายบรรทัดแต่ละบรรทัด (แต่ไม่ใช่ที่จุดเริ่มต้น) เนื่องจากไม่สามารถมองเห็นได้ อักขระบรรทัดใหม่เพิ่มเติมหนึ่งตัวอนุญาตได้ที่ส่วนท้ายสุดของเอาต์พุต

ตัวอย่าง

Input: 0
Output:


Input: 1
Output:
Yeah
But

Input: 2
Output:
Yeah
But
No

Input: 10
Output:
Yeah
But
No
But
Yeah
But
No
Yeah
But
No
But
Yeah

3
เราสามารถส่งคืนรายการบรรทัดได้หรือไม่?
Jo King

10
มันจะต้องให้ความบันเทิงในการทำงานกับบทตลก! : s ในบันทึกที่ร้ายแรงกว่านี้เล็กน้อย: nrOfButsตัวแปรค่อนข้างมีชื่อไม่ดีและทำให้เข้าใจผิด ความท้าทายที่ดีง่ายต่อไป
Arnauld

10
เราจะได้รับโบนัสไหมถ้าบรรทัดสุดท้ายคือ "พระเจ้าไม่สามารถเชื่อได้ว่าคุณเพิ่งพูดแบบนั้น!"
Ciaran_McCarthy

3
@EriktheOutgolfer ifs fall trough และดำเนินการต่อในลูปปัจจุบันหากเงื่อนไขของพวกเขาพอใจ
dzaima

4
codegolf ออสเตรเลียมากที่สุดหรือยัง ยกเว้นควรเป็น "nah"
Nacht - Reinstate Monica

คำตอบ:


48

Excel, 78 ไบต์

ถือว่าอินพุตในเซลล์ A1 และเปิดใช้งานการจัดรูปแบบ Wordwrap สำหรับเซลล์ ใช้ Alt + Enter เพื่อเพิ่มการป้อนบรรทัดภายในสตริงและจดบันทึกช่องว่าง รองรับการป้อนข้อมูลสูงสุด 3570 เนื่องจากข้อ จำกัด ของฟังก์ชั่น REPT (ขอให้โชคดีที่เซลล์จะสูงขนาดนั้น)

=LEFT(REPT("Yeah
But
No      
But     
Yeah    
But
No           
",595),A1*9)

พิมพ์ซ้ำพร้อมช่วงเวลาสำหรับช่องว่าง

=LEFT(REPT("Yeah
But
No......
But.....
Yeah....
But
No...........
",595),A1*9)

มันทำงานอย่างไร: แพทเทิร์นซ้ำทุก ๆ 6 หมายเลข:

0 = Yeah and But      Yeah + linefeed + But + linefeed
1 = No                No + 6 whitespace + line feed
2 = But               But + 5 whitespace + linefeed
3 = Yeah              Yeah + 4 whitespace + linefeed
4 = But and No        But + linefeed + No + 3 whitespace
5 = Blank             8 whitespace + linefeed

แต่ละเหล่านี้สามารถแสดงด้วย 9 ตัวอักษรดังนั้นสตริงที่ทำจาก 54 ตัวอักษร (9 * 6) จากนั้นทำซ้ำขนาดใหญ่เท่าที่จะอนุญาตให้ Excel จากนั้นจะใช้อักขระซ้าย 9 * (จำนวนอินพุต) เป็นเอาต์พุต

Linefeed สำหรับ "แต่ไม่มี" วางอยู่หลังช่องว่างเพื่อให้ใช่สำหรับ # 6, # 12, (ฯลฯ ) มีการจัดรูปแบบทางด้านซ้ายมากกว่าด้านขวาและไม่มีการป้อนบรรทัดว่างทุกบรรทัดที่ 6 สำหรับรายการนั้น

เอาท์พุต


1
ฉันไม่มีวิธีตรวจสอบความถูกต้องนี้ แต่คำอธิบายของคุณทำให้ถูกต้อง คุณสามารถเพิ่มตัวอย่างอินพุต / เอาท์พุตบางคู่ได้หรือไม่? หนึ่งในภาษาที่ไร้สาระมากขึ้น แต่คำตอบที่ดียังคง
maxb

16
@maxb ไม่สามารถพูดจาไร้สาระได้ทุกเมื่อที่พูดภาษาอื่น
Keeta

1
คำอธิบายที่ดีและเทคนิคที่ยอดเยี่ยม ทำงานใน Lotus Symphony Spreadsheets ได้เช่นกัน แต่อาจต้องเล่นกับการจัดรูปแบบ +1
ElPedro

20

JavaScript (ES6), 59 57 ไบต์

f=n=>n?f(n-1)+[s=n&1?`But
`:'',`Yeah
`+s,s+`No
`][n%3]:''

ลองออนไลน์!

อย่างไร?

เราใช้ฟังก์ชันเวียนที่ไปจากไปมากกว่าจากไปn-11 0 n - 1n10n1

ดังนั้นการทดสอบจะถูกปิดเมื่อเทียบกับรหัสอ้างอิง:1

  • ถ้า , เอาท์พุท"ใช่"n1(mod3)
  • ถ้า , เอาท์พุท"แต่"n1(mod2)
  • ถ้า , เอาท์พุท"ไม่"n2(mod3)

สิ่งนี้ช่วยให้เราสามารถเก็บกรณีที่ง่ายกว่าเป็นรายการแรกของอาร์เรย์การค้นหาของเราซึ่งเราสามารถกำหนด : ตัวแปรที่ถืออย่างใดอย่างหนึ่งหรือสตริงว่างsn0(mod3)s"But\n"

อีกสองรายการถูกกำหนดเป็น"Yeah\n" + sและs + "No\n"ตามลำดับ

หมายเหตุ:โดยการวนซ้ำจากถึงเราสามารถกำหนดในรายการแรกได้เช่นกัน แต่นั่นจะมีค่าใช้จ่ายสองวงเล็บเพิ่มเติม0 sn10s

แสดงความคิดเห็น

f = n =>            // n = input
  n ?               // if n is not equal to 0:
    f(n - 1) +      //   prepend the result of a recursive call with n - 1
    [               //   define our lookup array:
      s = n & 1 ?   //     1st entry: if n is odd:
        `But\n`     //       set s to "But"
      :             //     else:
        '',         //       set s to an empty string
      `Yeah\n` + s, //     2nd entry: "Yeah" followed by s
      s + `No\n`    //     3rd entry: s followed by "No"
    ][n % 3]        //   append the correct entry for this iteration
  :                 // else:
    ''              //   return an empty string and stop recursion

16

LOLCODEขนาด 257 ไบต์

HAI 1.2
I HAS A B
GIMMEH B
B IS NOW A NUMBR
I HAS A C ITZ 0
IM IN YR L UPPIN YR C TIL BOTH SAEM B AN C
I HAS A D ITZ MOD OF C AN 3
D
WTF?
OMG 0
VISIBLE "Yeah"
OIC
MOD OF C AN 2
WTF?
OMG 0
VISIBLE "But"
OIC
D
WTF?
OMG 1
VISIBLE "No"
OIC
IM OUTTA YR L
KTHXBYE

ลองออนไลน์!


2
มันดูยอดเยี่ยม (ฉันจะเกลียดที่จะเขียนโค้ดนี้!) แต่ในกรณีทดสอบที่ 10 "ไม่" และที่ 3 "แต่" ได้รับการพลิก ... ดังนั้นใช่ แต่ไม่ใช่: D
seadoggie01

2
อ๊ะคิดว่าฉันสามารถปรับให้เหมาะสมที่นั่น นี่คือรูปแบบที่ยุ่งยาก ฉันแก้ไขมันตอนนี้
JosiahRyanW

1
ฉันชอบวิธีการอ่าน
LocustHorde

4
ไม่VISIBLE "But"อ้างถึงการขาดของโปรแกรมของกางเกง?
JDL

12

พื้นที่ว่าง , 315 304 300 277 276 ไบต์

ขอบคุณ@JoKingสำหรับ -11 ไบต์ (ลดจำนวนฉลากที่ใช้จาก 8 เป็น 7) และอีก -24 ไบต์ (เปลี่ยนการไหลทั่วไปของโปรแกรมและลดจำนวนฉลากที่ใช้จาก 7 เป็น 5 ในกระบวนการ)

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve][N
T   S S N
_If_negative_jump_to_Label_PRINT][S S S N
_Push_0][T  T   T   _Retrieve][S S S T  T   N
_Push_3][T  S T T   _Modulo][S S S T    S N
_Push_2][T  S S T   _Subtract][N
T   T   T   N
_If_negative_jump_to_Label_SKIP_NO][S S T   T   S T T   T   T   S N
_Push_-94_\n][S S S T   T   T   N
_Push_7_o][S S T    T   T   S T S N
_Push_-26_N][N
S S T   N
_Create_Label_SKIP_NO][S S S N
_Push_0][T  T   T   _Retrieve][S S S T  S N
_Push_2][T  S T T   _Modulo][N
T   S S S N
_If_0_jump_to_Label_SKIP_BUT][S S T T   S T T   T   T   S N
_Push_-94_\n][S S S T   T   S S N
_Push_12_t][S S S T T   S T N
_Push_13_u][S S T   T   S S T   T   S N
_Push_-38_B][N
S S S S N
_Create_Label_RETURN_FROM_BUT][S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   T   T   _Retrieve][S S S T  N
_Push_1][T  S S T   _Subtract][T    T   S _Store][T T   T   _Retrieve][S S S T  T   N
_Push_3][T  S T T   _Modulo][N
T   S S T   N
_If_0_jump_to_Label_YEAH][N
S N
N
_Jump_to_Label_LOOP][N
S S S T N
_Create_Label_YEAH][S S T   T   S T T   T   T   S N
_Push_-94_\n][S S S N
_Push_0_h][S S T    T   T   T   N
_Push_-7_a][S S T   T   T   N
_Push_-3_e][S S T   T   T   T   T   N
_Push_-15_Y][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    T   S T S S S N
_Push_104][T    S S S _Add][T   N
S S _Print_as_character][N
S N
N
_Jump_to_Label_LOOP]

เพิ่มตัวอักษรS(ช่องว่าง), T(แท็บ) และN(บรรทัดใหม่) เป็นการเน้นเท่านั้น
[..._some_action]เพิ่มเป็นคำอธิบายเท่านั้น

ลองใช้ออนไลน์ (ด้วยพื้นที่ว่างเปล่าแท็บและบรรทัดใหม่เท่านั้น)

ช่องว่างไม่ใช่ภาษาที่เหมาะสมสำหรับความท้าทายนี้ .. ในช่องว่างทั้งลูปและ if-statement ถูกสร้างขึ้นด้วยเลเบลและข้ามไปยังเลเบลและเนื่องจากไม่ใช่กรณีอื่น - หากมีกรณีอื่น - แต่หมายถึงฉันหลายกรณีจะต้องย้อนกลับไปทุกครั้งถ้าทำได้นานมากหมายความว่าฉันจะต้องแก้ไขเช็คเล็กน้อยเพื่อข้ามงานพิมพ์บางอย่าง (ขอบคุณ@JoKing )

คำอธิบายในรหัสเทียม:

Read STDIN as integer, and store it in the heap
Start LOOP:
  Integer i = retrieve integer from heap
  If(i is negative):
    Call function PRINT
  If(i modulo-3 is NOT 2):
    Jump to Label SKIP_NO
  Push "\noN" to the stack
  Label: SKIP_NO
  If(i modulo-2 is 0):
    Jump to Label SKIP_BUT
  Push "\ntuB" to the stack
  Label: SKIP_BUT
  i = i - 1
  Replace i in the heap with this updated value
  If(i modulo-3 is 0):
    Call function YEAH
  Go to next iteration of LOOP

function YEAH:
  Push "\nhaeY" to the stack
  Go to next iteration of LOOP

function PRINT:
  Print top of the stack as character to STDOUT
  Go to next iteration of LOOP (which will enter the if and then
                                comes back to this PRINT again)

คำอธิบายเพิ่มเติม:

โดยทั่วไปแล้วมันจะวนจากอินพุตไปที่ 0 ผลัก newline และคำที่ตรงกันข้าม (ดังนั้นตามลำดับ "\ noN", "\ ntuB", "\ nhaeY" แทนที่จะเป็น "ใช่ \ n", "แต่ \ n "," ไม่ \ n ") และหลังจากที่อินพุตได้วนไปที่ 0 และอักขระทั้งหมดอยู่ในสแต็กมันจะพิมพ์อักขระเหล่านั้นในสิ่งที่ตรงกันข้าม (ดังนั้นลำดับเอาต์พุตที่ถูกต้อง)

ในเชิงลึกยิ่งขึ้น: ถึงแม้ว่าเราจะต้องพิมพ์คำในช่วง(input, 0]แต่มันจะวนซ้ำในช่วง[input, 0)แทน ด้วยเหตุนี้เราจึงสามารถใช้การตรวจสอบif(i%3 == 2)สำหรับ "\ noN" (หรือที่จริงแล้วif(i%3 != 2)ข้ามการกด "\ noN") และเราใช้การตรวจสอบif(i%2 != 1)สำหรับ "\ ntuB" (หรือที่จริงแล้วif(i%2 == 0)ข้ามการกด "\ ntuB" ) หลังจากการตรวจสอบสองครั้งนี้เราลดการวนซ้ำiลง 1 และทำเครื่องหมายif(i%3 == 0)เพื่อผลัก "\ nhaeY" ซึ่งคล้ายกับในตัวอย่างโค้ด JS ในคำอธิบายการท้าทาย ข้ามกับการตรวจสอบ if-not แทนที่จะไปที่ป้ายกำกับและส่งคืนจากป้ายกำกับด้วย if-checks ที่บันทึก 23 ไบต์

นอกจากนี้ในค่าอักขระช่องว่างจะถูกเก็บไว้ในสแต็กเป็นค่ายูนิโค้ด (เช่น10สำหรับบรรทัดใหม่65สำหรับ 'A' 97สำหรับ 'a' ฯลฯ ) เนื่องจากฉันต้องการวนรอบสแต็คเพื่อพิมพ์อักขระฉันจึงสามารถใช้เคล็ดลับช่องว่างของฉันเพื่อลดจำนวนไบต์ด้วยการเพิ่มค่าคงที่ให้กับค่าตัวเลขก่อนที่จะพิมพ์เป็นอักขระ
ค่าคงนี้อยู่104ในกรณีนี้ซึ่งสร้างขึ้นด้วยโปรแกรม Java นี้ที่ฉันเคยคุ้นเคยกับคำตอบของ Whitespace ของฉันก่อนหน้านี้ นี่เป็นเหตุผลว่าทำไมส่วนนี้ของรหัส:

[S S T  T   S T T   T   T   S N
_Push_-94_\n][S S S T   T   T   N
_Push_7_o][S S T    T   T   S T S N
_Push_-26_N]

มีค่า-94สำหรับการขึ้นบรรทัดใหม่7สำหรับ 'o' และ-26สำหรับ 'N' เพราะการเพิ่มอย่างต่อเนื่องของ104น้ำพระทัยอย่างถูกต้องให้ค่า Unicode ของเรา10, 111และ78สำหรับตัวละครเหล่านี้ตามลำดับ


1
แน่นอนที่สุดฉันไม่ได้คาดหวังคำตอบของช่องว่าง เยี่ยมมาก!
maxb

@ max ขอบคุณ น่าเสียดายที่มันต้องใช้เวลานานกว่าที่คาดไว้เนื่องจากต้องใช้ 8 ป้าย แต่ฉันก็ดีใจที่มันใช้งานได้ :)
Kevin Cruijssen

คุณไม่สามารถลดเลเบลลงครึ่งหนึ่งโดยข้ามไปยังคำสั่งถัดไปหากคำสั่งหากเงื่อนไขเป็นเท็จ? เช่นif i modulo-3 != 1 jump to next if else push NO
Jo King

1
@ โจกิ้งอารอฉันเข้าใจผิดบางส่วนของรหัสหลอกของคุณ ปัญหาแรกของฉันเกี่ยวกับการไม่ดึงข้อมูลiก่อนที่if(i is 0) call PRINTจะเป็นจริง แต่ปัญหาอื่น ๆ ของคุณกำลังตรวจสอบiก่อนที่จะลบออกและข้ามการพิมพ์ สมาร์ทสวยจริง ๆ จะดำเนินการต่อไป
Kevin Cruijssen

1
ถ้าคุณข้ามไปที่จุดเริ่มต้นของลูปก็จะเรียกใช้คำสั่ง if อีกครั้งและกระโดดกลับไปที่ฟังก์ชั่นการพิมพ์ บางทีนี่อาจช่วยประหยัดไบต์ถ้าคุณเปลี่ยนเลเบลวนเป็นป้ายว่าง
โจคิง


11

Perl 6 , 63 50 ไบต์

{<<"Yeah But"No But Yeah"But No">>[^$_ X%6].words}

ลองออนไลน์!

บล็อกโค้ดแบบไม่ระบุชื่อที่รับหมายเลขและส่งคืนรายการบรรทัด

คำอธิบาย:

{                                                }   # Anonymous code block
 <<"Yeah But"No But Yeah"But No">>  # Create the list of strings:
                                     # Yeah But
                                     # No
                                     # But
                                     # Yeah
                                     # But No
                                  [       ]  # Index into this list
                                   ^$_  # The range from 0 to n-1
                                       X%6  # All modulo 6
                                           .words  # Convert the list to a string 
                                                   # Which joins by spaces
                                                   # And split by whitespace


8

05AB1E (ดั้งเดิม) , 27 25 24 ไบต์

ที่บันทึกไว้ 1 ขอบคุณไบต์เควิน Cruijssen

F”¥æ€³€¸”#N3ÖNÈN3%‚‚˜Ï`»

ลองออนไลน์!

คำอธิบาย

F                          # for N in [0 ... input] do:
 ”¥æ€³€¸”#                 # push ['Yeah', 'But', 'No']
          N3Ö              # push N % 3 == 0
             NÈ            # push N % 2 == 0
               N3%         # push N % 3
                  ‚‚˜      # add the 3 numbers to a list
                     Ï     # keep only the strings whose corresponding value  
                           # in the int list is true (1)
                      `»   # push strings separately to stack and join stack on newlines

แดงคุณเอาชนะฉันไปแล้ว .. กำลังจะโพสต์คำตอบ ของคุณสั้นกว่าอยู่แล้วดังนั้น +1 จากฉัน .. ใช้งาน×ได้ดีไม่เคยคิดเลย!
Kevin Cruijssen

ว้าวฉันชอบคำอธิบายเกี่ยวกับอันนี้ ส่วนตัวที่ดีที่สุดของฉันคือ 44 ไบต์ใน CJam
maxb

@ max: แน่นอนฉันจะเพิ่มคำอธิบาย ฉันแค่ตรวจสอบเพื่อดูว่าฉันสามารถเล่นกอล์ฟลงก่อนอื่นได้
ไหม

คุณสามารถลบΘตอนนี้ที่คุณไม่ได้ใช้อีกต่อไป×เนื่องจากÏจะดู1เฉพาะของเท่านั้นดังนั้นมันจะไม่สนใจ2(และ0แน่นอน)
Kevin Cruijssen

@KevinCruijssen: ขอบคุณ! ไม่แน่ใจว่าฉันพลาดได้อย่างไร: P
Emigna


6

Python 2 , 97 95 92 90 83 81 ไบต์

lambda n:[w for i in range(n)for w in'Yeah','But','No'if('N'in w)==i%(3-(w<'N'))]

ลองออนไลน์!

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


Python 3 , 92 90 85 83 ไบต์

lambda n:[w for i in range(n)for w in['Yeah','But','No']if('N'in w)==i%(3-(w<'N'))]

ลองออนไลน์!

-4 ไบต์ขอบคุณ ovs

-4 ไบต์ขอบคุณ Jo King


86 ไบต์โดยรวมทั้งสองและกลับมาเป็นรายการของเส้น
โจคิง

@ โจกิ้งขอบคุณไม่รู้ว่าฉันจะกลับมาแทนการพิมพ์เมื่อเขียน
TFeld

82 ไบต์ : len(w)<3-> 'N'in w, 81 ไบต์ : len(w)%2->(w<'N')
ovs


6

Groovy (ฟังก์ชัน), 79 ไบต์

ตั้งแต่เริ่มส่งคำตอบของฉันฉันได้ดูการสนทนาประวัติศาสตร์ที่นี่เกี่ยวกับสิ่งที่ถือเป็นคำตอบที่เหมาะสม เนื่องจากดูเหมือนว่าเป็นที่ยอมรับกันโดยทั่วไปว่าจะให้วิธีการใน Java (รวมถึงชนิดส่งคืนและการประกาศพารามิเตอร์) นี่คือวิธี Groovy ที่สั้นกว่าซึ่งมีวิธีการส่งคืนค่าเป็นคำตอบ การใช้defวิธีการที่ประเภทผลตอบแทนถูกอนุมาน

def a(int n){n?a(--n)+(n%3?'':'Yeah\n')+(n%2?'':'But\n')+(n%3==1?'No\n':''):''}

ต่างจากคำตอบดั้งเดิมด้านล่างซึ่งวนจาก 0 ถึง n-1 อันนี้เรียกตัวเองจาก n ลงไป 1 แต่ลดอินพุตสำหรับส่วนที่เหลือของบรรทัดในการเรียกซ้ำ

ลองออนไลน์!

Groovy (โปรแกรม), 87 ไบต์

สคริปต์ Groovy ไม่จำเป็นต้องมีการนำเข้าบางส่วนร่วมกันดังนั้นนี้จะมีโปรแกรมการพิมพ์คำตอบของ Java STDOUT โดยไม่ต้องมีการประกาศก่อนSystem.out. printนอกจากนี้ยังมีวิธีการยูทิลิตี้ทั่วไปบางอย่างเช่นนี้toLong()ซึ่งช่วยให้เราสามารถวิเคราะห์อาร์กิวเมนต์อินพุตอย่างสมเหตุสมผล

เป็นหลักของ Java 10 คำตอบ แต่ใช้ประโยชน์จากไวยากรณ์วนรอบที่สั้นกว่าของ Groovy และความสามารถในการประเมินข้อความจริง

args[0].toLong().times{print((it%3?'':'Yeah\n')+(it%2?'':'But\n')+(it%3==1?'No\n':''))}

ลองออนไลน์!


ยินดีต้อนรับสู่ PPCG! คำตอบแรกที่ดี! ฉันไม่ได้เขียนโปรแกรม Groovy ด้วยตัวเอง แต่ฉันขอแนะนำให้ใช้รหัสของคุณบนTIOหรือไม่ ด้วยวิธีนี้สามารถตรวจสอบได้โดยผู้อื่นและทุกคนมีความสุข
maxb

1
@ max ขอบคุณ ฉันได้เพิ่ม :) :)
archangel.mjj

คำตอบแรกที่ดีและยินดีต้อนรับสู่ PPCG
ElPedro

5

เรติน่า 0.8.2 , 45 ไบต์

.+
$*
1
$`Yeah¶$`But¶$`11No¶
+`11B
B
111

A`1

ลองออนไลน์! คำอธิบาย:

.+
$*

แปลงอินพุตเป็น unary

1
$`Yeah¶$`But¶$`11No¶

สำหรับแต่ละจำนวนเต็ม0...n-1สร้างสามบรรทัดของข้อความหนึ่งสำหรับแต่ละคำแต่ละคนมีi 1s ก่อนที่มันจะยกเว้นNoซึ่งมีสองพิเศษ1s เพื่อให้เราคำนวณซึ่งเทียบเท่ากับ(i+2)%3==0i%3==1

+`11B
B

ลบคู่ของ1s ก่อนBs

111

ลบ1กลุ่มทั้งหมดสามแห่งออกจากที่อื่น

A`1

1ลบทุกสายที่ยังคงมี


โอ้ตอนนี้ที่ฉันเห็น11No¶การคำนวณ(i+2)%3==0(ดังนั้นทั้งสามคือการตรวจสอบถ้าสำหรับ==0) มันดูเหมือนชัดเจน แต่ฉันไม่คิดว่าตัวเองดังนั้นจึงเป็นความคิดสร้างสรรค์จริงๆ +1 จากฉันคำตอบที่ดี!
Kevin Cruijssen

5

Java 10, 100 99 ไบต์

n->{for(int i=0;i<n;)System.out.print((i%3<1?"Yeah\n":"")+(i%2<1?"But\n":"")+(++i%3>1?"No\n":""));}

-1 ขอบคุณไบต์@ OlivierGrégoire

ลองออนไลน์

คำอธิบาย:

n->{                   // Method with integer parameter and no return-type
  for(int i=0;i<n;)    //  Loop `i` in the range [0, `n`)
    System.out.print(  //   Print to STDOUT:
      (i%3<1?          //    If `i` is divisible by 3:
        "Yeah\n"       //     Print "Yeah" with newline
      :"")+(i%2<1?     //    If `i` is even:
        "But\n"        //     Print "But" with newline
      :"")+(++i%3>1?   //    If `i` modulo-3 is 1:
        "No\n"         //     Print "No" with newline
      :                //    If none of the above three if's applied to the current `i`:
       ""));}          //     Print nothing for the current `i`

1
++i%3>1มีแนวโน้มที่จะช่วยคุณประหยัด byte
Olivier Grégoire

@ OlivierGrégoireอ่าแน่นอน ขอบคุณ!
Kevin Cruijssen

5

Powershell, 75 74 72 67 66 ไบต์

-1 ไบต์ขอบคุณTessellatingHeckler

param($n)(" Yeah
But No But Yeah But
No "*$n-split' ')[1..$n]-ne''

สคริปต์ทดสอบและคำอธิบาย:

$f = {

param($n)(" Yeah
But No But Yeah But
No "*$n-split' ')[1..$n]-ne''

# 1. repeat the string $n times
# 2. split by space
# 3. get elements from 1 to $n
# some elements are multiline strings, some elements are $null:
# ($null,"Yeah`nBut","But","No","But","Yeah","But`nNo",$null,...)
# 4. remove $null elements from result array

}

# Output results
@(
    0,1,2,10
) | % {
    &$f $_
    "======"
}

# Advanced test
@(
    ,(0,'')
    ,(1,'Yeah But')
    ,(2,'Yeah But No')
    ,(3,'Yeah But No But')
    ,(4,'Yeah But No But Yeah')
    ,(5,'Yeah But No But Yeah But No')
    ,(6,'Yeah But No But Yeah But No')
    ,(7,'Yeah But No But Yeah But No Yeah But')
    ,(8,'Yeah But No But Yeah But No Yeah But No')
    ,(9,'Yeah But No But Yeah But No Yeah But No But')
    ,(10,'Yeah But No But Yeah But No Yeah But No But Yeah')
    ,(20,'Yeah But No But Yeah But No Yeah But No But Yeah But No Yeah But No But Yeah But No Yeah But No')
) | % {
    $n,$e = $_
    $r = &$f $n
    $r = $r-split"`n"       # simplify test string
    "$($e-eq$r): $n : $r"
}

เอาท์พุท:

======
Yeah
But
======
Yeah
But
No
======
Yeah
But
No
But
Yeah
But
No
Yeah
But
No
But
Yeah
======
True: 0 :
True: 1 : Yeah But
True: 2 : Yeah But No
True: 3 : Yeah But No But
True: 4 : Yeah But No But Yeah
True: 5 : Yeah But No But Yeah But No
True: 6 : Yeah But No But Yeah But No
True: 7 : Yeah But No But Yeah But No Yeah But
True: 8 : Yeah But No But Yeah But No Yeah But No
True: 9 : Yeah But No But Yeah But No Yeah But No But
True: 10 : Yeah But No But Yeah But No Yeah But No But Yeah
True: 20 : Yeah But No But Yeah But No Yeah But No But Yeah But No Yeah But No But Yeah But No Yeah But No

สคริปต์ที่ตรงไปตรงมา 72 ไบต์:

$args|?{$_}|%{0..--$_|%{@('Yeah')[$_%3]
@('But')[$_%2]
@{1='No'}[$_%3]}}

1
คำตอบที่ดี! เป็นไปได้ไหมที่จะเพิ่มเอาต์พุตบางส่วนลงในคำตอบเนื่องจากไม่ได้มีล่ามออนไลน์?
maxb

คำตอบ scriptblock ======ไม่ได้กลับ มันสร้างYeah,But,Noสตริงเท่านั้น สคริปต์ทดสอบแสดงตัวคั่นเพื่อให้อ่านผลลัพธ์ได้ง่ายขึ้นเท่านั้น
mazzy

การใช้ hashtable นั้นฉลาด ฉันจะต้องจำไว้
AdmBorkBork


1
@mazzy ฉันสามารถจัดระเบียบใหม่ของคุณ แต่ก็ยังไม่สามารถเอาชนะ 67 (แทนที่ทั้งสอง \ n ด้วยการขึ้นบรรทัดใหม่จริง)(" Yeah\nBut No But Yeah But\nNo "*($j="$args")|% s*t 32)[1..$j]-ne''
TessellatingHeckler

4

Haskell , 71 ไบต์

f n=[1..n]>>=(3?1)"Yeah"<>(2?1)"But"<>(3?2)"No"
(a?b)c n=[c|n`mod`a==b]

ลองออนไลน์!

คำอธิบาย

[1..n]ค่อนข้างง่ายบันทึกสองไบต์โดยใช้แทน[0..n-1]และปรับส่วนที่เหลือ: การ(?)ทดสอบตัวดำเนินการใช้เวลาสี่ข้อโต้แย้งส่งกลับรายการที่ว่างเปล่าหรือสตริงที่ให้เป็นซิงเกิลถ้าผลถูกต้อง

โดยการปิดกั้นการโต้แย้งครั้งที่สี่ของ(?)เราสามารถใช้(<>)เพื่อเชื่อมผลลัพธ์ของแต่ละฟังก์ชันเช่น:

(3?1)"Yeah" <> (2?1)"But" <> (3?2)"No"  \i-> (3?1)"Yeah" i ++ (2?1)"But" i ++ (3?2)"No" i

4

C # (Visual C # Interactive Compiler) , 105 99 94 96 89 ไบต์

i=>{for(int x=0;x<i;)Write((x%3<1?"Yeah\n":"")+(x%2<1?"But\n":"")+(x++%3==1?"No\n":""));}

ลองออนไลน์!


4
การลบการแก้ไขเช่นนี้ช่วยประหยัด 7 ไบต์
Emigna

@Emigna ขอบคุณสำหรับเคล็ดลับเปลี่ยนคำตอบ
auhmaan

1
x++%3==1?++x%3>1?สามารถ มีคนอื่นให้ทิปสำหรับคำตอบ Java ของฉัน แต่คำตอบนั้นใช้ได้กับคำตอบ C # ของคุณ :)
Kevin Cruijssen

4

Pip , 37 35 33 ไบต์

"But 
Yeah
No
"<>5@:^[t2io02x]@<a

(สังเกตช่องว่างหลังBut) ใช้อินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ลองออนไลน์!

คำอธิบาย

คำอธิบายนี้สำหรับรุ่นก่อนหน้า - ดูด้านล่างสำหรับการเปลี่ยนแปลง

แรงบันดาลใจจากโจคิงส์ Perl 6 คำตอบ เราสร้างรายการนี้:

[
 "Yeah
 But
 ";
 "No
 ";
 "But
 ";
 "Yeah
 ";
 "But
 No
 ";
 ""
]

และส่งออกaองค์ประกอบแรกของมันโดยใช้การจัดทำดัชนีแบบวงกลม

[t2io02x]R,3["But""Yeah""No"].n@<:a
                                     i is 0; o is 1; t is 10; x is ""; n is newline;
                                     a is 1st cmdline arg (implicit)
[       ]                            Construct this list of scalars:
 t                                    10
  2                                   2
   i                                  0
    o                                 1
     02                               02
       x                              <empty string>
         R                           Treating each of these as a string, we're going to
                                     replace:
          ,3                          0, 1, and 2 (respectively)
                                     with the corresponding values from this list:
            ["But""Yeah""No"].n       These strings, each with a newline appended
                                     We now have constructed the list shown above
                               @<:a  Take the first a elements from this list, with
                                     cyclical indexing (the : is for parsing reasons)
                                     Concatenate them together and print (implicit)

อัปเดต:ฉันรู้ว่าฉันไม่จำเป็นต้องใช้แทนที่เพื่อเปลี่ยน 0/1/2 เป็นสตริง - ฉันสามารถใช้ตัวเลขเหล่านี้เพื่อจัดทำดัชนีลงในรายการได้โดยตรง ในการทำเช่นนี้เราต้องทำให้แน่ใจว่าตัวเลขหลายหลักถูกแบ่งออกเป็นรายการของตัวเลขของพวกเขา (มิฉะนั้นเราจะเลือกดัชนี 10 แทนดัชนี 1 และ 0) โชคดีที่ใช้รายการแบบซ้อนโดยพลการเป็นดัชนีใน Pip ทำงานได้ตามที่คาดหวังให้รายการผลลัพธ์ (ซ้อน) สำหรับการป้อนข้อมูล 3 เราจะได้รับความก้าวหน้าของข้อมูลนี้ (โดยที่_แสดงถึงบรรทัดใหม่):

"But _Yeah_No_"<>5                       ["But _"; "Yeah_"; "No_"]
                     [t2io02x]           [10; 2; 0; 1; 02; ""]
                              @<a        [10; 2; 0]
                    ^                    [[1; 0]; [2]; [0]]
                  @:                     [["Yeah_"; "But _"]; ["No_"]; ["But _"]]

เมื่อก่อนหน้านี้ผลลัพธ์สุดท้ายจะถูกรวมเข้าด้วยกันและพิมพ์อัตโนมัติ


4

ทูต 48 ไบต์

Flat##{Mask[_%3'2'3=0'0'1,$Yeah'$But'$No]}=>Iota

ลองออนไลน์!

คำอธิบาย

Flat##{Mask[_%3'2'3=0'0'1,$Yeah'$But'$No]}=>Iota   input: an integer
      {                                  }=>Iota   over each number from 0 to that integer exclusive
       Mask[             ,$Yeah'$But'$No]          select values from that array according to:
            _%3'2'3                                    whether or not the input mod 3, 2, 3
                   =0'0'1                              is 0, 0, 1
Flat##                                             flatten the intermediate results

4

C (gcc) , 77 71 74 72 69 ไบต์

มีคำตอบC ที่ดีกว่าอยู่ที่นี่แล้ว แต่คำตอบนี้ซ้ำแล้วซ้ำอีกและฉันต้องใช้เวลาพอสมควรที่จะตอบคำถามดังนั้นฉันจึงโพสต์ข้อความไว้

ลดลงถึง 69 ไบต์ด้วย @ceilingcat และ @JonathanFrech

(ฉันไม่เคยคิดว่าจะใช้ n- ~ -i แทน n-i + 1)

i;f(n){i=n&&n-i>=~n/6&&f(n,i++,puts(i%7%4?i%7%2?"But":"No":"Yeah"));}

ลองออนไลน์!


@JonathanFrech ดี แต่ไม่ได้ผลกับศูนย์หรือ 5
cleblanc

@cleblanc โอ้ขอโทษ ไม่ได้ตระหนักถึง ... อย่างน้อยการลบjคุณสองไบต์ที่บันทึกไว้
Jonathan Frech

1
70 bytes - การรวมไบต์ที่บันทึกไว้ของ @ ceilingcat
Jonathan Frech

1
n-~-iเทียบเท่ากับn-i+1- ไม่i<n+1- และดังนั้นจึงไม่ได้บันทึกไบต์ใด ๆ จริง ๆ ...
Jonathan Frech

3

ทับทิม, 69 72 74 ไบต์

->y{puts *(1..y).map{|i|[i%3==1&&:Yeah,i%2>0&&:But,i%3>1&&:No]-[!0]}}

คำตอบที่ตรงไปตรงมากตรวจสอบหาวิธีที่สั้นกว่าและเรียกซ้ำ

บันทึกสองไบต์ด้วย @BWO :)

บันทึกอีกสามไบต์โดยใช้สัญลักษณ์แทนสตริง


3

Python 3, 93 ไบต์

[print("Yeah\n"*(i%3<1)+"But\n"*(i%2<1)+"No\n"*(i%3==1),end="")for i in range(int(input()))]

นี่ไม่ใช่ทางออกที่ดีที่สุด แต่เป็นสิ่งที่ฉันต้องทำ

ลองออนไลน์!


1
หากคุณมีนิพจน์อยู่แล้วคุณสามารถใช้ในรายการความเข้าใจ แต่รายการความเข้าใจของคุณนั้นมีอยู่เพียงเพื่อทำให้เกิดผลข้างเคียงของนิพจน์นั้นธรรมดาสำหรับลูปต้องใช้ไบต์น้อยลง
Jonathan Frech

3

R, 65 ไบต์

cat(c("yeah","but","no")[c(3,1:3,2,1,2)][1:scan()%%7+1],sep="\n")

เนื่องจากความจริงที่ว่าเรากำลังทำซ้ำโปรแกรมที่มีข้อบกพร่องเล็กน้อย (มันพลาดไปทุก ๆ สี่ "แต่" - มันควรจะมีการใช้%4 == 1และ%4 == 3มากกว่า%3เงื่อนไข) เราต้องใช้การเรียกที่น่าอึดอัดใจcและทำงานในฐานเจ็ด ยังคงสั้นกว่า LOLCODE ...

(ฉันหวังว่า (3,1,2,3,2,1,2) หรือการเรียงสับเปลี่ยนที่คล้ายกันอาจปรากฏในlhชุดข้อมูลบางแห่ง แต่ดูเหมือนจะไม่เหมือนกัน)


3

sed -E ,179 150 ไบต์

/^0/!s:$:g:
:l;y:abcdefg:bcdefga:
/[ae]/iYeah
/[bdf]/iBut
/[cg]/iNo
s:.$:-&:;:s;s:0-:-9:;ts;h
y:123456789:012345678:;G
s:.*(.)-.*\n(.*).-:\2\1:;tl;c\ 

ส่วนที่ยากที่สุดคือการไม่สร้างรายการ แต่เพื่อแยกวิเคราะห์เลขทศนิยม

2 ไบต์อาจถูกบันทึกไว้ถ้าขึ้นบรรทัดใหม่ในตอนท้ายจะไม่จำเป็นต้องใช้: →c\ d

ยังต้องการการเพิ่มประสิทธิภาพ

ลองมันออนไลน์

คำอธิบาย

/^0/!                            | if the input number doesn`t begin with a '0'…
     s:$:g:                      | …then append a 'g' to it and proceed
                                 |
:l;                              | loop label 'l':
   y:abcdefg:bcdefga:            | shift all occurences of [abcdef] 1 letter forward, and all 'g'-s to 'a'-s
                                 |
/[ae]/                           | if there`s an 'a' or 'e' in the input…
      iYeah                      | …output 'Yeah'
                                 |
/[bdf]/                          | if there`s a 'b' or 'd' or 'f' in the input…
       iBut                      | …output 'But'
                                 |
/[cg]/                           | if there`s a 'c' or 'g' in the input…
      iNo                        | …output 'No' 
                                 |
s:.$:-&:;                        | insert '-' before the last character
         :s;                     | loop label 's':
            s:0-:-9:;            | transform the next consecutive '0' in the end of the number to '9', if any
                     ts;         | loop to 's' if more consecutive zeroes are available
                        h        | copy the result to the temporary buffer
                                 |
y:123456789:012345678:;          | decrement all digits except '0' (N.B.: digits, not numbers)
                       G         | append the temporary buffer to the result
                                 |
s:.*(.)-.*\n(.*).-:\2\1:;        | cut and replace the digit left to the last consecutive 0 in the original
                                 | number pasted from the temporary buffer, then discard all other digits decremented
                         tl;     | …then loop to 'l' if the number is ≥0
                            c\   | insert a carriage return and exit

คุณสามารถเพิ่มคำอธิบายได้ไหม?
user285259

1
@ user285259 เรียบร้อยแล้ว
hidefromkgb


2

F #, 108 106 ไบต์

let v p=seq{for i=1 to p do
 if i%3=1 then yield"Yeah"
 if i%2=1 then yield"But"
 if i%3=2 then yield"No"}

ลองออนไลน์!

-2 ไบต์เปลี่ยนจากi=0 to p-1เป็นi=1 to pและปรับ modulos นอกจากนั้นตรงไปตรงมาสวย


1
ฉันได้รับข้อผิดพลาดในการสร้างสำหรับลิงก์ TIO หรืออาจเป็นข้อผิดพลาดทางไวยากรณ์ในรหัสการทดสอบ
สูงสุด

ขอบคุณสำหรับสิ่งนั้น โซลูชันดั้งเดิมของฉันพิมพ์โดยตรงไปยังคอนโซล แต่จากนั้นฉันพยายามส่งคืนลำดับและกลายเป็นว่าสั้นลงประมาณ 2 ไบต์ ดังนั้นฉันจึงเปลี่ยนรหัสใน TIO แต่ลืมอัปเดตส่วนท้าย - ซึ่งยังคงคาดว่าvฟังก์ชันจะพิมพ์ทุกอย่างออก
Ciaran_McCarthy

2
โกนหนวด 2 ไบต์ด้วยi=1 to p(และปรับโมดูลัสตามธรรมชาติ) ช่วงย้อนกลับว่างเปล่า :)

ดี! ฉันได้เพิ่มที่ ขอบคุณ! :)
Ciaran_McCarthy

2

PHP, 65 68 ไบต์

while($i<$argn)echo["Yeah
"][$i%3],["But
"][$i%2],["No
"][~-$i++%3];

ทำงานเป็นท่อที่มี-nRหรือลองออนไลน์


มันดูดี แต่มันสร้างบรรทัดใหม่พิเศษตรงกลางสำหรับ n = 10
maxb

@maxb ขอบคุณสำหรับคำใบ้ ฉันสามารถแก้ไขด้วย 9 ไบต์พิเศษ; แต่วิธีการอื่นนั้นสั้นกว่า
ติตัส

2

VBA (Excel), 105, 101, 99 ไบต์

แก้ไข: -4 ไบต์จาก Keeta! ขอบคุณ!

แก้ไข 2: -2 ไบต์จาก Chronocidal! Woot! (รับรู้ว่ากรณีทดสอบใช้งานได้เพียง 10 ข้อเท่านั้น)

ใช่ Excel ชนะ VBA ในครั้งนี้ อะไรก็ตาม (เราจะมาเพื่อคุณ)

d=vbCr:For i=1To[a1]:a=i Mod 3:?IIf(a=1,"Yeah"+d,"")IIf(i/2=i\2,"","But"+d)IIf(a=2,"No"+d,"");:Next

^ สิ่งนี้ถูกวางลงในหน้าต่างทันทีและส่งออกไปยังหน้าต่างแก้ไขข้อบกพร่อง

Ungolfed

d = vbCr
'For 1 to the value in A1 (using 0 gave extra values, and VBA skips the for loop if 0)
For i = 1 To [a1]    'aka: Range("A1").value
    a = i mod 3
    '? is the same as Print (Debug.Print when not in the Immediate Window)
    Print IIf(a = 1, "Yeah" + d, "") _ '<-- Just a line continuation
          'Keeta taught me that the \ operator is division with truncation,
          '     so if they are equal then there is no remainder!
          IIf(i / 2 = i \ 2, "", "But" + d) _
          IIf(a = 2, "No" + d, "");
    'Print usually prints a newline, but it still outputs if the string is blank...
    '   So we append a newline -if true- and use a semi-colon to kill the newline
Next

@Keeta เป็นความคิดที่ดี แต่ไม่ ... ถ้าคุณดูรหัสแรกของฉันฉันใช้ [a1] ซึ่งหมายถึง Range / cell .value :) ฉันควรทำให้ชัดเจนยิ่งขึ้นนั่นคือคำอธิบายขออภัย: /
seadoggie01

1
ใช่ฉันเห็นแล้วพยายามลบความคิดเห็น วิธีใช้ i / 3 = i \ 3 แทน i mod 3 = 0 (และเหมือนกันสำหรับ mod 2 = 0) ยังไม่ได้ลอง แต่ใช้งานได้หรือไม่
Keeta

@Keeta ฉันไม่เคยเห็น \ โอเปอเรเตอร์มาก่อน ... ฉันไม่คิดอย่างนั้นมันจะคืนค่าของการหารโดยไม่เหลือ ... เหมือนสิ่งที่ตรงกันข้ามกับ Mod ที่ฉันคิด
seadoggie01

หนึ่งคือการหารจำนวนเต็มและหนึ่งคือจุดลอย 7/3 = 2.3333 โดยที่ 7 \ 3 = 2 (การตัดทอนส่วน) 6/3 ควรเป็น 2 และ 6 \ 3 ควรเป็น 2 ดังนั้นจึงควรทำงานทุกครั้งที่เหลือเป็นศูนย์ (ฉันคิดว่า)
Keeta

1
VBA จะทำการเชื่อมต่อฟังก์ชั่นเอาท์พุทโดยอัตโนมัติดังนั้นคุณสามารถวาง&แต่ละอันIIf(..)ไว้เพื่อเพิ่ม 2 ไบต์
Chronocidal

2

เยลลี่ , 22 ไบต์

5Rż7FṚṁị“'⁴\ÆẓNƇ»ḲŒP¤Ẏ

ลิงก์ monadic ที่ให้รายชื่อบรรทัด (ซึ่งดูเหมือนว่าจะได้รับอนุญาตในความคิดเห็น)

ลองออนไลน์! (ส่วนท้ายเรียกการเชื่อมโยงโดยใช้Çและรวมกับการขึ้นบรรทัดใหม่โดยใช้Yเนื่องจากการพิมพ์โดยนัยใน Jelly จะทำให้ทุกอย่างเข้าด้วยกันถ้าทำได้)

อย่างไร?

2×3=6เนื่องจากคำนิยามโมดูโล

ตอนนี้ให้สังเกตว่าค่าหกค่าแรกคือ:

["Yeah", "But"]
["No"]
["But"]
["Yeah"]
["But", "No"]
[]

ดังนั้นรายการผลลัพธ์ของบรรทัดควรเป็นค่าเหล่านี้ซ้ำ (หรือตัดให้ยาว) เป็นความยาว nต่อกันเข้าด้วยกัน

ตอนนี้ทราบว่าชุดพลังงานของ"Yeah", "But", "No"คือ:

[]
["Yeah"]
["But"]
["No"]
["Yeah", "But"]
["Yeah", "No"]
["But", "No"]
["Yeah", "But", "No"]

ดังนั้นแต่ละช่วงเวลาจะมีค่า 1 ดัชนีเหล่านี้ของชุดกำลังของ"Yeah", "But", "No":

5, 4, 3, 2, 7, 1

รหัสทำให้รายการนี้เชื่อมโยงกับความยาวnจัดทำดัชนีในชุดกำลังไฟแล้วลบรายการภายใน (ซึ่งจะลบสตริงว่างเนื่องจากสตริงเป็นรายการใน Jelly) ...

5Rż7FṚṁị“'⁴\ÆẓNƇ»ḲŒP¤Ẏ - Link: integer, n   e.g. 10
5                      - literal five            5
 R                     - range                   [1,2,3,4,5]
   7                   - literal seven           7
  ż                    - zip together            [[1,7],[2],[3],[4],[5]]
    F                  - flatten                 [1,7,2,3,4,5]
     Ṛ                 - reverse                 [5,4,3,2,7,1]
      ṁ                - mould like (n)          [5,4,3,2,7,1,5,4,3,2]
                    ¤  - nilad followed by link(s) as a nilad:
        “'⁴\ÆẓNƇ»      -   compressed string     "Yeah But No"
                 Ḳ     -   split at spaces       ["Yeah","But","No"]
                  ŒP   -   power-set             [[],["Yeah"],["But"],["No"],["Yeah","But"],["Yeah","No"],["But","No"],["Yeah","But","No"]]
       ị               - index into              [["Yeah","But"],["No"],["But"],["Yeah"],["But","No"],[],["Yeah","But"],["No"],["But"],["Yeah"]]
                     Ẏ - tighten                 ["Yeah","But","No","But","Yeah","But","No","Yeah","But","No","But","Yeah"]

ฉันสงสัยว่ามันจะสั้นกว่านี้ไหม คำตอบที่ยอดเยี่ยมและคำอธิบายที่ดีทำได้ดีมาก!
สูงสุด

2

Python 2 , 93 92 83 ไบต์

lambda i:''.join('Yeah\n'*(x%3<1)+'But\n'*(x%2<1)+'No\n'*(x%3==1)for x in range(i))

ลองออนไลน์!

บันทึกขนาดใหญ่ 9 ไบต์ด้วย @Jonathan Frech


คุณสามารถใช้ซ้ำสตริงแทนการจัดทำดัชนี tuple - เทียบเท่ากับ('','Yeah\n')[x%3<1] "Yeah\n"*(x%3<1)
Jonathan Frech

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