สำนวน“ ทำในสิ่งที่ผิด”


47

ทำในขณะที่เป็นเท็จ

ที่ทำงานวันนี้เพื่อนร่วมงานคนหนึ่งของฉันอธิบายถึงกรณีใช้งานให้ทำในขณะที่ (เป็นเท็จ) คนที่เขาคุยด้วยคิดว่านี่มันช่างงี่เง่าและเรียบง่ายถ้าข้อความจะดีกว่ามาก จากนั้นเราก็เสียเวลาครึ่งวันเพื่อพูดคุยถึงวิธีที่ดีที่สุดในการเขียนสิ่งที่เทียบเท่ากับ:

do
{
   //some code that should always execute...

   if ( condition )
   {
      //do some stuff
      break;
   }

   //some code that should execute if condition is not true

   if ( condition2 )
   {
       //do some more stuff
       break;
   }

   //further code that should not execute if condition or condition2 are true

}
while(false);

นี่เป็นสำนวนที่พบในคค่อนข้างบ่อย โปรแกรมของคุณควรสร้างผลลัพธ์เดียวกันกับโค้ดหลอกด้านล่างขึ้นอยู่กับเงื่อนไข

do
{
   result += "A";

   if ( C1)
   {
      result += "B";
      break;
   }

   result += "C"

   if ( C2 )
   {
       result += "D";
       break;
   }

   result += "E";

}
while(false);

print(result);

ดังนั้นอินพุตอาจเป็น:

1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false

และผลลัพธ์ควรเป็น:

1. "AB"
2. "AB"
3. "ACD"
4. "ACE"

นี่คือ code-golf ดังนั้นคำตอบจะถูกตัดสินเป็นไบต์ ช่องโหว่มาตรฐานถูกแบน

ใช่นี่เป็นคำถามง่ายๆ แต่หวังว่าเราจะเห็นคำตอบที่สร้างสรรค์บางอย่างฉันหวังว่าความเรียบง่ายจะกระตุ้นให้ผู้คนใช้ภาษาที่พวกเขามั่นใจน้อยลง


เอาต์พุตต้องเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กอนุญาตด้วยหรือไม่
Adnan

7
เช่นกันสำหรับการอภิปรายกับเพื่อนร่วมงานของคุณก็ดูเหมือนว่าฉันคุณจะประสบความสำเร็จในสิ่งเดียวกันโดยใช้วิธีการที่มีในสถานที่ของreturn result breakจากนั้นคุณจะได้รับโบนัสการใช้งานอีกครั้งและทำให้รหัสการโทรง่ายขึ้นเช่นกัน แต่บางทีฉันก็ขาดอะไรไป
jpmc26

3
ผมไม่ทราบว่านี่เป็นสำนวนใน C ...
Mehrdad

5
@Mehrdad คนบางคนทำเช่นนี้แทนgotoเพราะใช้gotoเป็นรูปแบบที่ไม่ดี :)
เซท

2
ครั้งเดียวที่ฉันเคยใช้do{}while(false)คือมาโครภายใน ง่ายifไม่พอเพียงเพราะมันมีปฏิสัมพันธ์ไม่ดีกับelseรอบที่อาจมีอยู่ โดยไม่ต้องแมโครอาจรวมทั้งลบและdo while
nwp

คำตอบ:


19

Python 3, 31

บันทึก 1 ไบต์ต้องขอบคุณ xnor

ห่างจาก ES6 เพียงหนึ่งไบต์ : / Stupid Python และไวยากรณ์ของฟังก์ชันที่ไม่ระบุตัวตนแบบยาว

ไชโยสำหรับหนึ่งสมุทร!

lambda x,y:x*"AB"or"AC"+"ED"[y]

กรณีทดสอบ:

assert f(1, 1) == "AB"
assert f(1, 0) == "AB"
assert f(0, 1) == "ACD"
assert f(0, 0) == "ACE"

7
หากคุณสั่งซื้อx*"AB"ใหม่คุณสามารถประหยัดพื้นที่ได้หลังจาก
xnor

2
ขออภัยไวยากรณ์ฟังก์ชั่นที่ไม่ระบุชื่อของคุณจะเป็นการตายของ python: P
Conor O'Brien

5
@ CᴏɴᴏʀO'Bʀɪᴇɴฉันรู้ว่ามีบางสิ่งที่ต้องถือ Python ไว้ก่อน ฉันจะส่ง PEP โดยเร็ว
Morgan Thrapp

2
คุณทำอย่างนั้นและฉันจะสั่งกับดักงู
Conor O'Brien

9
กำลังใจที่จะทำให้λเป็นไวพจน์ของlambdaจะดี :)
โรเบิร์ตแกรนท์

13

JavaScript ES6, 30 26 25 ไบต์

ฟังก์ชั่นที่ไม่ระบุชื่ออย่างง่ายรับสองอินพุต กำหนดให้กับตัวแปรที่จะเรียก อัปเดต : Let's ข้ามไปที่ bandwagon ดัชนี มันช่วยประหยัด 4 ไบต์ ฉันมีความปลอดภัยนำของฉันมากกว่างูหลาม บันทึกไบต์ด้วยการปิดฟังก์ชัน (...)(a)(b)โทรเช่น ขอบคุณ Patrick Roberts!

a=>b=>a?"AB":"AC"+"ED"[b]

รุ่นเก่าดั้งเดิมขนาด 30 ไบต์ (รวมอยู่ในคำตอบที่ไม่ละลายลงในไพ ธ อน(;):

(a,b)=>"A"+(a?"B":b?"CD":"CE")

นี่มันช่างฉลาด
เหลือเกิน

15
@theonlygusti นี่เป็นรหัสกอล์ฟไม่ใช่การประกวดความนิยม นอกจากนี้ทำไมไบต์เสียจึงฉลาดถ้ามีวิธีแก้ปัญหาที่กระชับกว่า
Conor O'Brien

ผมชอบทางเลือกของจมูก:b?
J Atkin

@JAtkin แน่นอน!
Conor O'Brien

4
คุณสามารถบันทึกไบต์ด้วยการแกง
Patrick Roberts


9

Haskell, 28 ไบต์

x#y|x="AB"|y="ACD"|1<2="ACE"

ตัวอย่างการใช้งาน: ->False # True"ACD"

การใช้ค่าอินพุตโดยตรงเป็นการ์ด


9

MATL , 15 17ไบต์

?'AB'}'AC'69i-h

อินพุต0หรือ1บนบรรทัดแยกกัน หรือมิฉะนั้น0จะถูกแทนที่ด้วยF(MATL ของfalse) และ1โดยT(MATL ของtrue)

ลองออนไลน์!

?           % if C1 (implicit input)
  'AB'      %   push 'AB'
}           % else
  'AC'      %   push 'AC'
  69        %   push 69 ('E')
  i-        %   subtract input. If 1 gives 'D', if 0 leaves 'E'
  h         %   concatenate horizontally
            % end if (implicit)

8

Brainfuck, 65 ไบต์

สมมติว่า C1 และ C2 เป็นอินพุตเป็น raw 0 หรือ 1 ไบต์ เช่น

echo -en '\x00\x01' | bf foo.bf

แข็งแรงเล่นกอล์ฟ:

++++++++[>++++++++<-]>+.+>+>,[<-<.>>-]<[<+.+>>,[<-<.>>-]<[<+.>-]]

Ungolfed:

                                      Tape
                                      _0
++++++++[>++++++++<-]>+.+  print A    0 _B
>+>,                       read C1    0 B 1 _0  or  0 B 1 _1
[<-<.>>-]<                 print B    0 B _0 0  or  0 B _1 0
[<+.+>>                    print C    0 D 1 _0
    ,                      read C2    0 D 1 _0  or  0 D 1 _1
    [<-<.>>-]<             print D    0 D _0 0  or  0 D _1 0
    [<+.>-]                print E    0 D _0    or  0 E _0
]

ฉันเชื่อว่ามันควรค่าแก่การสังเกตว่าวิธีการแก้ปัญหานี้แท้จริงแล้วขึ้นอยู่กับการแยกจากกันในขณะที่ลูป



7

NTFJ , 110 ไบต์

##~~~~~#@|########@|~#~~~~~#@*(~#~~~~#~@*########@^)~#~~~~##@*##~~~~~#@|########@|(~#~~~#~~@*):~||(~#~~~#~#@*)

อ่านเพิ่มเติมได้:

##~~~~~#@|########@|~#~~~~~#@*(~#~~~~#~@*########@^)~#~~~~##@*##~~~~~#@|########@|(~#~~~#~~@*
):~||(~#~~~#~#@*)

นั่นคือความบันเทิงอย่างแน่นอน ลองใช้ที่นี่โดยใช้อักขระสองตัว ( 0หรือ1) เป็นอินพุต

การใช้วิธีการของ ETHProduction ในการแปลงเป็น 0, 1 (ตัวอักษร) เป็นบิตทำให้ง่ายขึ้น

##~~~~~#@|########@|

นี่คือวิธีการดังกล่าว กด 193 ( ##~~~~~#@), NANDing it ( |) ด้วยค่าอินพุตสูงสุด (ในกรณีนี้รหัสถ่านตัวแรกคือ 48 หรือ 49) สิ่งนี้ให้ผล 254 สำหรับ 1 และ 255 สำหรับ 0 NANDing กับ 255 ( ########@) ให้ผลเป็น 0 หรือ 1 บิตตามอินพุต

~#~~~~~#@*

นี้พิมพ์ตั้งแต่การป้อนข้อมูลทั้งหมดเริ่มต้นด้วยA ป็อปเมื่อพิมพ์ดังนั้นสแต็กจะไม่เปลี่ยนแปลงจากสถานะก่อนหน้าA*A

(~#~~~~#~@*########@^)

กรณีที่ 1 บิตแรกคือ1และ(เปิดใช้งานรหัสภายใน ~#~~~~#~@*พิมพ์Bและ########@^กด 255 และข้ามไปยังตำแหน่งนั้นในรหัส นี่เป็นจุดสิ้นสุดของโปรแกรมมันสิ้นสุดลง

กรณีที่ 2: 0บิตแรกคือ (ข้ามไปที่)และรหัสดำเนินการต่อ

~#~~~~##@*

นี่พิมพ์ a Cเพราะนั่นคือตัวละครถัดไป

##~~~~~#@|########@|

นี่เป็นการแปลงอินพุตที่สองของเราเป็นบิต

(~#~~~#~~@*)

ถ้าบิตที่สองของเราเป็นที่ 1 Eที่เราจะดำเนินการพิมพ์

:~||

นี้เป็นตัวแทนของ NAND A NAND (0 NAND A) = NOT Aปฏิเสธบูลบิตของเรา:

(~#~~~#~#@*)

ตอนนี้เปิดใช้งานถ้าบิตเป็นและภาพพิมพ์0E


5

Pyth, 16 ไบต์

+\A?Q\B+\C?E\D\E

ชุดทดสอบ

Ternaries!

คำอธิบาย:

+\A              Start with an A
?Q\B             If the first variable is true, add a B and break.
+\C              Otherwise, add a C and
?E\D             If the second variable is true, add a D and break.
\E               Otherwise, add a E and finish.

ป้อนข้อมูลสองบรรทัดติดต่อกัน


3
โอ้ pythmaster ทำให้เรารู้ถึงวิธีการของโปรแกรมนี้ ;)
Conor O'Brien

5

CJam, 15 16 17ไบต์

'Ali'B'C'Eli-+?

ลองออนไลน์!

ปิดหนึ่งไบต์ด้วย @randomra และขอขอบคุณอีกหนึ่งไบต์ที่ @Dennis

คำอธิบาย:

'A                  e# push "A"
  li                e# read first input as an integer
    'B              e# push "B" 
      'C            e# push "C"
        'E          e# push "E"
          li-       e# leave "E" or change to "D" according to second input
             +      e# concatenate "C" with "E" or "D"
              ?     e# select "B" or "C..." according to first input

รุ่นเก่า (16 ไบต์):

'Ali'B{'C'Eli-}?

คำอธิบาย:

'A                  e# push character "A"
               ?    e# if-then-else
  li                e# read first input as an integer. Condition for if
    'B              e# push character "B" if first input is true
      {       }     e# execute this if first input is false
       'C           e# push character "C"
         'E         e# push character "E"
           li       e# read second input as an integer
             -      e# subtract: transform "E" to "D" if second input is true
                    e# implicitly display stack contents

5
เพื่อนที่ดีของเรา Ali และ Eli!
Conor O'Brien

5

Pyth, 13 ตัวอักษร, 19 ไบต์

.HC@"૎્««"iQ2

รับอินพุตในรูปแบบ [a, b]

คำอธิบาย

               - autoassign Q = eval(input())
           iQ2 -    from_base(Q, 2) - convert to an int
   @"૎્««"    -   "૎્««"[^]
  C            -  ord(^)
.H             - hex(^)

ลองที่นี่

หรือใช้ชุดทดสอบ


2
อย่างน้อยใน UTF-8 สิ่งนี้มีน้ำหนัก 19 ไบต์
เดนนิส

1
bytesizematters ใช้วิธีนับขึ้นอย่างสมบูรณ์ซึ่งไม่ได้ (และไม่สามารถ ) สอดคล้องกับการเข้ารหัสที่เกิดขึ้นจริง มันนับสิ่งที่สแควร์เป็น 2 ไบต์แต่ละ (3 ไบต์ใน UTF-8) และ«เป็น 1 ไบต์แต่ละ (2 ไบต์ใน UTF-8) ทั้งคู่wcและสิ่งนี้ตกลงกันว่ามีขนาด 19 ไบต์
เดนนิส

4

C, 76 ไบต์

ฉันเปลี่ยนc1ไปc, c2ไปCและจะresult rโปรแกรมเมอร์ C gotoไปสุดขั้วที่จะหลีกเลี่ยง หากคุณเคยมี problum มีไวยากรณ์ที่ไร้สาระใน C gotoก็มีแนวโน้มที่จะเป็นเพราะคุณไม่ได้ใช้

char r[4]="A";if(c){r[1]=66;goto e;}r[1]=67;if(C){r[2]=68;goto e;}r[2]=69;e:

Ungolfed

char r[4] = "A";
if(c1){
    r[1] = 'B';
    goto end;
}
r[1] = 'C';
if(c2){
    r[2] = 'D';
    goto end;
}
r[2] = 'E';
end:

คุณสามารถเริ่มต้นด้วยchar r[4]="A";? My C เป็นสนิม
LarsH

นั่นเป็นวิธีที่ไร้สาระจริงๆในการประกาศตัวอักษรสตริงหรือไม่?
Tamoghna Chowdhury

@TamoghnaChowdhury เรียงจาก ตัวอักษรสตริงไม่สามารถเขียนได้ มันคืออาร์เรย์ที่เริ่มต้นแล้วโดยสตริงตัวอักษร "A" เนื่องจาก "A" ตั้งค่าสองไบต์แรกเท่านั้นส่วนที่เหลือจะถูกเตรียมใช้งานตามกฎสำหรับวัตถุที่มีระยะเวลาคงที่ (ดังนั้น 0 ในกรณีนี้) [C99 6.7.8 / 22]
เรย์

1
คุณสามารถบันทึก 22 ไบต์โดยการเปลี่ยนรายการเริ่มต้นไป"AC"และแทนที่ทุกอย่างจากr[1]=67การr[2]=69;ที่มีr[2]=c2?68:69;
เรย์

4

C, 41 ไบต์

ฉันไม่แน่ใจว่าคำถามนั้นต้องการโปรแกรมฟังก์ชั่นหรือข้อมูลโค้ด
นี่คือฟังก์ชั่น:

f(a,b){a=a?16961:4473665|b<<16;puts(&a);}

ได้รับอินพุตในสองพารามิเตอร์ซึ่งต้องเป็น 0 หรือ 1 (ดีbต้อง) และพิมพ์ไปที่ stdout

ชุดaที่หนึ่งของ0x4241, หรือ0x454341 0x444341เมื่อพิมพ์เป็นสตริงบนระบบ ASCII แบบ end-endian ขนาดเล็กจะให้เอาต์พุตที่ต้องการ


4

R , 41 39 37 ไบต์

pryr::f(c("ACD","ACE","AB")[1+a+a^b])

ลองออนไลน์!

ใน R TRUEและFALSEถูกบังคับ1และ0ตามลำดับเมื่อคุณพยายามใช้เป็นตัวเลข เราสามารถแปลงตัวเลขเหล่านี้ดัชนี1, 2และผ่านสูตร31+a+a^b

  a  |   b  | 1+a+a^b
TRUE | TRUE | 1+1+1^1 = 3
TRUE | FALSE| 1+1+1^0 = 3
FALSE| TRUE | 1+0+0^1 = 1
FALSE| FALSE| 1+0+0^0 = 2

ค่าเหล่านี้ถูกนำมาใช้เพื่อสร้างดัชนีรายการACD, ACE, ABให้ผลผลิตผลลัพธ์ที่ถูกต้อง

บันทึกสองไบต์ด้วย JayCe

หากคุณต้องการเวอร์ชันที่มีifคำสั่งแทนจะมี 41 ไบต์ต่อไปนี้:

pryr::f(`if`(a,"AB",`if`(b,"ACD","ACE")))

ลองออนไลน์!



@ JayCe ขอบคุณฉันได้อัปเดตคำตอบแล้ว!
rturnbull


3

เรติน่า 22 ไบต์

1.+
AB
.+1
ACD
.+0
ACE

ลองออนไลน์


1
retina.tryitonline.net/... นำหน้า^ด้วยm`เพื่อให้ทำงานได้กับอินพุตหลายบรรทัดซึ่งไม่จำเป็นสำหรับคำถาม แต่ทำให้การทดสอบง่ายขึ้น
Digital Trauma

ฉันคิดว่าคุณสามารถบันทึกได้ 3 ไบต์โดยการลบช่องว่างระหว่างอินพุตทั้งสอง
CalculatorFeline

3

JavaScript ขนาด 38 ไบต์

ใช้ไม่มีตัวคั่น0หรือ1แทนfalse/true

_=>"ACE ACD AB AB".split` `[+('0b'+_)]

1
คุณสามารถใช้split` ` แทนsplit(" ")
andlrc

คุณสามารถใช้+('0b'+prompt())แทนparseInt(prompt(),2)
andlrc


3

ArnoldC , 423 ไบต์

IT'S SHOWTIME
HEY CHRISTMAS TREE a
YOU SET US UP 0
HEY CHRISTMAS TREE b
YOU SET US UP 0
BECAUSE I'M GOING TO SAY PLEASE a
BECAUSE I'M GOING TO SAY PLEASE b
TALK TO THE HAND "ABD"
BULLSHIT
TALK TO THE HAND "ABE"
YOU HAVE NO RESPECT FOR LOGIC
BULLSHIT
BECAUSE I'M GOING TO SAY PLEASE b
TALK TO THE HAND "ACD"
BULLSHIT
TALK TO THE HAND "ACE"
YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE BEEN TERMINATED

เนื่องจาก ArnoldC ดูเหมือนจะไม่มีอินพุตอย่างเป็นทางการเพียงแค่เปลี่ยน 2 YOU SET US UPค่าแรกเป็น 0 หรือ 1 แทน

คำอธิบาย

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


เอ่อเอาท์พุทควรเป็น "AB" ถ้า a เป็นจริงไม่ใช่ "ABD" / "ABE" นั่นควรทำให้โค้ดของคุณสั้นลง!
Toby Speight

3

Java, 28 ไบต์

สำเร็จรูปเหมือนกันกับคำตอบมากมาย BiFunction<Boolean,Boolean, String>ประเภทคือ

(c,d)->c?"AB":d?"ACD":"ACE"

ฉันรู้ว่ามันเป็นเวลาเกือบสองปี แต่(c,d)->สามารถแข็งแรงเล่นกอล์ฟโดย 1 ไบต์เมื่อคุณใช้c->d-> java.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
Kevin Cruijssen

2

Pyth, 21 ไบต์

@c"ACE ACD AB AB"diz2

ลองที่นี่!

อินพุตถูกนำมาเป็น 0 หรือ 1 แทนจริง / เท็จในขณะที่ C1 มาก่อน

คำอธิบาย

เพียงใช้ความจริงที่ว่ามีเพียง 4 ผลลัพธ์ที่เป็นไปได้ ทำงานโดยการตีความอินพุตเป็นไบนารีแปลงเป็นฐาน 10 และใช้สิ่งนี้เพื่อเลือกผลลัพธ์ที่ถูกต้องจากสตริงการค้นหา

@c "ACE ACD AB AB" diz2 # z = อินพุต

                  iz2 # แปลงอินพุตไบนารีเป็นฐาน 10
 c "ACE ACD AB AB" d # แยกสตริงที่ช่องว่าง
@ # รับองค์ประกอบที่ดัชนี

2

Y , 20 ไบต์

ในกรณีที่อินพุตแรกมีเพียงหนึ่งอินพุตเท่านั้น ฉันคิดว่าพฤติกรรมนี้ได้รับอนุญาต ลองที่นี่!

'B'AjhMr$'C'E@j-#rCp

Ungolfed:

'B'A jh M
   r$ 'C 'E@ j - # r
 C p

อธิบาย:

'B'A

สิ่งนี้จะผลักดันอักขระBจากนั้นAไปที่สแต็ก

jh M

สิ่งนี้จะใช้เวลาหนึ่งอินพุตเพิ่มขึ้นปรากฏและย้ายไปตามจำนวนของส่วนที่

กรณีที่ j1 = 01: นี่คือสิ่งที่น่าสนใจกว่านี้ r$กลับสแต็คและปรากฏค่า'C'Eผลักดันให้ตัวละครและC แปลงเป็นคู่ที่เป็นตัวเลขของมันลบอินพุตที่สองจากมันและแปลงกลับเป็นอักขระ ยกเลิกการคืนค่าสแต็ก จากนั้นโปรแกรมจะเห็น C-link และเลื่อนไปที่ลิงค์ถัดไปและพิมพ์สแต็คE@Erp

กรณีที่ 2: โปรแกรมย้ายไปยังลิงก์สุดท้ายpซึ่งพิมพ์เฉพาะสแต็กทั้งหมด


2

PowerShell ขนาด 40 ไบต์

param($x,$y)(("ACE","ACD")[$y],"AB")[$x]

อาร์เรย์ที่ซ้อนกันทำดัชนีโดยอินพุต ใน PowerShell $true/ 1และ$false/ 0มีค่าเท่ากัน (ต้องขอบคุณการพิมพ์ที่หลวมมาก) ดังนั้นดัชนีจึงเข้าสู่อาร์เรย์สององค์ประกอบ นี่เป็นเรื่องที่ใกล้เคียงกับไตรภาคมากพอ ๆ กับ PowerShell และฉันก็ใช้มันหลายครั้งในการตีกอล์ฟ

ตัวอย่าง

PS C:\Tools\Scripts\golfing> .\do-while-false.ps1 1 1
AB

PS C:\Tools\Scripts\golfing> .\do-while-false.ps1 1 0
AB

PS C:\Tools\Scripts\golfing> .\do-while-false.ps1 0 1
ACD

PS C:\Tools\Scripts\golfing> .\do-while-false.ps1 0 0
ACE


2

Vitsyขนาด 26 ไบต์

คาดว่าอินพุตเป็น 1s หรือ 0s ผ่าน STDIN พร้อมกับการขึ้นบรรทัดใหม่

W([1m;]'DCA'W(Zr1+rZ
'BA'Z

จริง ๆ แล้วฉันค้นพบปัญหาร้ายแรงหากงบระหว่างการท้าทายนี้ D: โพสต์นี้มีเวอร์ชันที่ใช้งานไม่ได้ แต่ใช้งานได้ดี (ฉันจะอัปเดตสิ่งนี้หลังจากที่ฉันแก้ไขปัญหา)โปรดทราบว่าฉันได้อัปเดต Vitsy ด้วยการแก้ไข if / ifnot การเปลี่ยนแปลงนี้ไม่ได้ให้ประโยชน์ใด ๆ แก่ฉันเพียงการชี้แจง

คำอธิบาย:

W([1m;]'DCA'W(Zr1+rZ
W                      Get one line from STDIN (evaluate it, if possible)
 ([1m;]                If not zero, go to the first index of lines of code (next line)
                       and then end execution.
       'DCA'           Push character literals "ACD" to the stack.
            W          Get another (the second) line from STDIN.
             (         If not zero, 
do the next instruction.
              Z        Output all of the stack.
               r1+r    Reverse the stack, add one (will error out on input 0, 1), reverse.
                   Z   Output everything in the stack.

'BA'Z
'BA'                   Push character literals "AB" to the stack.
    Z                  Output everything in the stack.

ลองออนไลน์!


2

ขี้ผึ้ง 26 ไบต์

การตีความ0ว่าเป็นเท็จ1เป็นจริง

E`<
D`d"`C`~<
_T~T~`A`"b`B

เอาท์พุท:

julia> beeswax("codegolfdowhile.bswx",0,0.0,Int(20000))
i1
i1
AB
Program finished!

julia> beeswax("codegolfdowhile.bswx",0,0.0,Int(20000))
i1
i0
AB
Program finished!

julia> beeswax("codegolfdowhile.bswx",0,0.0,Int(20000))
i0
i1
ACD
Program finished!

julia> beeswax("codegolfdowhile.bswx",0,0.0,Int(20000))
i0
i0
ACE
Program finished!

โคลนล่ามขี้ผึ้งของฉันจากพื้นที่เก็บข้อมูล Github ของฉัน


ฉันค่อนข้างมั่นใจว่าคุณไม่ต้องการคำพูด
undergroundmonorail

@undergroundmonorail: โอเคฉันจะอัปเดตโซลูชันของฉัน ขอบคุณ
ML

2

C, 47 45 ไบต์

เนื่องจากมีผลลัพธ์ที่แตกต่างกันเพียง 3 รายการเราสามารถเลือกหนึ่งในสามสตริงดังนี้:

char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}

ขอบคุณHerman L เป็นเวลา 2 ไบต์

การสาธิต

#include<stdio.h>
int main()
{
    printf("%s\n%s\n%s\n%s\n",
           f(1,1),
           f(1,0),
           f(0,1),
           f(0,0));
}

1
-2 bytes:char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
เฮอร์แมน L

ลิงก์ไปยัง TIO กรุณา
ASCII เท่านั้น

1

Perl, 23 ไบต์

say<>>0?AB:<>>0?ACD:ACE

ต้องการ-E| -M5.010ตั้งค่าสถานะและรับอินพุตเป็น 1 และ 0:

$ perl -E'say<>>0?AB:<>>0?ACD:ACE' <<< $'0\n0'
ACE
$ perl -E'say<>>0?AB:<>>0?ACD:ACE' <<< $'0\n1'
ACD
$ perl -E'say<>>0?AB:<>>0?ACD:ACE' <<< $'1\n0'
AB

โซลูชันทางเลือกที่ต้องการ-pและเป็น 22 + 1 = 23 ไบต์:

$_=/^1/?AB:/1/?ACD:ACE
perl -pe'$_=/^1/?AB:/1/?ACD:ACE' <<< '0 1'

say-<>?AB:-<>?ACD:ACEสั้นกว่าสองไบต์
nwellnhof

1

05AB1E , 23 20 ไบต์

รหัส:

Ii"AB"?q}"AC"?69I-ç?

ลองออนไลน์!


1
นี่อาจจะเป็นรุ่นโบราณของ 05AB1E แต่ก็สามารถเป็น 14 ไบต์ขณะนี้: i„ABë„AC69I-çJ ลองออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด
Kevin Cruijssen

1
@KevinCruijssen ดีมาก! นี่เป็นรุ่นเก่าแก่ของ 05AB1E ภาษานั้นมีอายุประมาณสามเดือนที่นี่ (มันไม่มีการป้อนข้อมูลโดยนัย)
Adnan

1
Iใช่ฉันถูกแน่นอนสับสนแล้วเกี่ยวกับชั้นนำ ; p
Kevin Cruijssen

1

Japt, 19 ไบต์

"A{U?'B:'C+(V?'D:'E

ทดสอบออนไลน์!

ความจริงแล้วสนุก: นี่น่าจะเป็น 16 ไบต์ถ้าไม่ใช่เพราะบั๊ก:

"A{U?"B:C{V?"D:E

ข้อบกพร่องที่เลวร้ายที่สุด: |
Conor O'Brien

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ Lemme ดูว่าฉันสามารถขุดรุ่นเก่าที่ไม่มีบั๊กนี้ได้ไหม จากนั้น 16 ไบต์จะถูกต้อง
ETHproductions

1
บั๊กคืออะไร
CalculatorFeline

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