เสน่ห์ครั้งที่สาม


49

งานของคุณถ้าคุณต้องการที่จะยอมรับมันคือการเขียนโปรแกรมที่แสดงผลเป็นจำนวนเต็มบวก (สูงกว่า 0) หากซอร์สโค้ดซ้ำกันเอาต์พุตจะต้องยังคงเหมือนเดิม ส่วนที่ยุ่งยากคือถ้าพิมพ์รหัสต้นฉบับสามครั้ง(เพิ่มขึ้นสามเท่า?)ผลลัพธ์จะถูกคูณด้วย 3

กฎระเบียบ

  • คุณต้องสร้างโปรแกรมเต็มรูปแบบ นั่นคือผลลัพธ์ของคุณจะต้องพิมพ์ไปที่ STDOUT

  • แหล่งที่มาเริ่มต้นจะต้องมีความยาวอย่างน้อย 1 ไบต์

  • จำนวนเต็มทั้งสองต้องอยู่ในฐาน 10 (ห้ามส่งออกในฐานอื่นหรือด้วยเครื่องหมายทางวิทยาศาสตร์เป็นสิ่งต้องห้าม)

  • โปรแกรมของคุณจะต้องไม่รับอินพุต (หรือมีอินพุตที่ไม่ได้ใช้และว่างเปล่า)

  • อนุญาตให้แสดงเอาต์พุตจำนวนเต็มด้วยการเว้นวรรคต่อท้าย / นำหน้า

  • เลขศูนย์นำหน้าได้รับอนุญาตเฉพาะในกรณีที่ตัวเลขมีความสอดคล้องเช่น: 001 - 001 - 003 หรือ 004 - 004 - 012

  • คุณไม่สามารถรับบรรทัดใหม่ระหว่างสำเนาของแหล่งที่มาของคุณ

  • นี่คือดังนั้นรหัสที่สั้นที่สุด (ต้นฉบับ) ในแต่ละภาษาชนะ!

  • มีการใช้ช่องโหว่เริ่มต้น

ตัวอย่าง

สมมติว่ารหัสที่มาของคุณและผลผลิตที่สอดคล้องกันของมันคือAbc 4ถ้าผมเขียนแทนและเรียกใช้การส่งออกยังคงต้องAbcAbc 4แต่ถ้าผมเขียนและเรียกใช้การส่งออกจะต้องมีAbcAbcAbc12


ขโมยมาจากการท้าทายของ Mr. Xcoder อย่างไร้ยางอาย


รหัสของเราอนุญาตให้อ่านซอร์สโค้ดของตัวเองได้หรือไม่
AdmBorkBork

@AdmBorkBork ฉันถือว่าดังนั้นตั้งแต่นี้ไม่ได้ติดแท็กเป็นควิน
Erik the Outgolfer

@AdmBorkBork ใช่
เวิร์กโฟลว์

9
ฉันไม่คิดว่าจำเป็นต้องมีการ จำกัด ขนาด 1 ไบต์เนื่องจากมันเป็นไปไม่ได้ที่จะบอกความแตกต่างระหว่างไม่มีอะไรและไม่มีอะไรซ้ำ 3 ครั้ง
12Me21

1
@ r12 "Abc" เป็นตัวอย่างสำหรับโปรแกรมภาษาการเขียนโปรแกรมใด ๆ ให้พูดว่ารหัสของคุณคือ ( int i=1;print i;) ดังนั้นรหัสที่ซ้ำกันของ ( int i=1;print i;int i=1;print i;) จะต้องส่งออกหมายเลขเดียวกันกับรหัสเดิมและเมื่อรหัสถูกเพิ่มเป็นสามเท่าint i=1;print i;int i=1;print i;int i=1;print i;ต้องแสดง จำนวนคูณด้วย 3
เวิร์กโฟลว์

คำตอบ:


21

Wumpusขนาด 6 ไบต์

{~)
@O

ลองออนไลน์!
ลองสองเท่า!
ลองสามเท่า!

พิมพ์และ13

คำอธิบาย

ฉันพบโซลูชันขนาด 6 ไบต์จำนวนหนึ่งโดยการค้นหาแบบ brute force แต่ไม่มีทางเลือก 5 ไบต์ ไม่ได้แปลว่ามีขนาดไม่เกิน 5 ไบต์ แต่อาจใช้อักขระแปลก ๆ หรืออะไรทำนองนั้น

ฉันลงเอยเลือกโซลูชันนี้เพราะมันไม่พิมพ์เลขศูนย์นำหน้า (ส่วนใหญ่ทำ) และมีการควบคุมที่น่าสนใจ เริ่มจากโปรแกรมเดี่ยว:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นรหัสดำเนินการคือ:

{~)O@

{   Turn the IP left by 60°.
~   Swap two implicit zeros on the stack, does nothing.
)   Increment the top zero to 1.
O   Print it.
@   Terminate the program.

ง่ายพอสมควร ตอนนี้โปรแกรมเพิ่มเป็นสองเท่า เนื่องจากบรรทัดแรกได้ต่อท้ายบรรทัดที่สองตารางจึงขยายไปที่ความกว้าง 5 (และความสูง 3) ซึ่งเปลี่ยนการควบคุมการไหลอย่างมีนัยสำคัญ:

ป้อนคำอธิบายรูปภาพที่นี่

IP มีการวนรอบนั้นหนึ่งครั้งดังนั้นรหัสที่ดำเนินการคือ:

{~){~)){~O@

{~) As before, we end up with a 1 on top of the stack.
{   Turn left by 60° again.
~   Swap the 1 with the 0 underneath.
))  Increment the zero to 2.
{   Turn left by 60° again.
~   Swap the 2 with the 1 underneath.
O   Print the 1.
@   Terminate the program.

ในที่สุดโปรแกรมสามเท่านั้นค่อนข้างคล้ายกับโปรแกรมสองเท่า แต่เราได้รับคำสั่งที่สำคัญกว่ามาที่บรรทัดที่สาม:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นรหัสดำเนินการคือ:

{~){~)){~~)O@

{~){~)){~
    As before. We end up with a 1 on top of the stack and a 2 underneath.
~   Swap the 1 with the 2 underneath.
)   Increment the 2 to a 3.
O   Print the 3.
@   Terminate the program.

1
ฉันคิดว่าฉันรักภาษานี้
conquistador

11

Husk , 5 ไบต์

KΣK+1

ลองออนไลน์!

ซ้ำสองครั้ง!

ซ้ำสามครั้ง!

คำอธิบาย

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

  • Kซึ่งสร้างฟังก์ชั่นคงที่ เทียบเท่ากับK a ba
  • Σซึ่งใช้จำนวนเต็มnและส่งกลับตัวเลขสามเหลี่ยมที่n
  • +ซึ่งจะเพิ่มตัวเลขสองตัว
  • 1ซึ่งก็คือตัวอักษร 1

โปรแกรมต้นฉบับถูกตีความเช่นนี้:

   K Σ (K+) 1
== Σ 1
== 1

เป็นฟังก์ชั่นไร้สาระที่ได้รับการกินโดยครั้งแรก(K+)K

โปรแกรมซ้ำสองครั้งถูกตีความเช่นนี้

   K Σ (K+1KΣK+) 1
== Σ 1
== 1

Kฟังก์ชั่นในวงเล็บกินอีกครั้งโดยครั้งแรก

โปรแกรมซ้ำสามครั้งถูกตีความเช่นนี้

   K (Σ (K (+1) (KΣK+) 1)) (KΣK+1)
== Σ (K (+1) (KΣK+) 1)
== Σ ((+1) 1)
== Σ (+1 1)
== Σ 2
== 3

มันใช้เวลานานมากในการวิ่ง ...
Weijun Zhou

@ WeijunZhou หากคุณมีเหตุการณ์หลายอย่างKในโปรแกรมการอนุมานจะช้ามากเพราะแต่ละคนสามารถ "กิน" โทเค็นจำนวนเท่าใดก็ได้และล่ามจะลองชุดทั้งหมด ...
Zgarb

ฉันเห็นขอบคุณสำหรับคำอธิบายของคุณ
Weijun Zhou

2
@Zgarb +1 สำหรับ Kek 1
workoverflow

10

เยลลี่ , 7 5 ไบต์

»‘µ*Ḃ

ลองออนไลน์!

ลองสองเท่า!

ลองสามเท่า!

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

»‘µ*Ḃ            Main link. No arguments. Implicit argument: x = 0

 ‘               Increment; yield x + 1 = 1.
»                Take the maximum of x and 1. Yields 1.
  µ              Begin a new, monadic chain. Argument: y = 1
    Ḃ            Bit; yield 1 if y is odd, 0 if it is even. Yields 1.
   *             Power; yield y**1 = 1.
»‘µ*Ḃ»‘µ*Ḃ       Main link.

»‘µ*Ḃ            As before.
      ‘          Increment; yield y + 1 = 2.
     »           Take the maximum of 1 and 2. Yields 2.
       µ         Begin a new, monadic chain. Argument: z = 2
         Ḃ       Bit; yield 1 if z is odd, 0 if it is even. Yields 0.
        *        Power; yield z**0 = 1.
»‘µ*Ḃ»‘µ*Ḃ»‘µ*Ḃ  Main link.

»‘µ*Ḃ»‘µ*Ḃ       As before.
           ‘     Increment; yield z + 1 = 3.
          »      Take the maximum of 1 and 3. Yields 3.
            µ    Begin a new, monadic chain. Argument: w = 3
              Ḃ  Bit; yield 1 if w is odd, 0 if it is even. Yields 1.
             *   Power; yield w**1 = 3.


10

Cubix , 5 ไบต์

)<@OP

ลองมันออนไลน์: หนึ่งครั้ง , ครั้งที่สอง , สามครั้ง


คำอธิบาย

Cubix เป็นภาษาสแต็กที่มีคำแนะนำล้อมรอบด้านนอกของคิวบ์ สิ่งสำคัญที่ควรทราบคือในตอนแรกสแต็กจะเต็มไปด้วยศูนย์อนันต์ซึ่งช่วยให้เรา "ดึงค่าออกมาจากอากาศ" ด้วยตัวดำเนินการแทนที่จะผลักพวกเขาอย่างชัดเจน

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

โปรแกรมเดี่ยว

ดูมันทำงาน!

โปรแกรมดั้งเดิมเหมาะกับคิวบ์ยูนิต นี่คือสุทธิที่กางออก:

  )
< @ O P
  .

IP (ตัวชี้คำสั่ง) เริ่มต้นที่ใบหน้าซ้ายสุด (the <) มุ่งหน้าไปทางทิศตะวันออก ชี้ทันทีตะวันตกและล้อมรอบไป< คือการยกกำลังและเนื่องจากไม่มีอะไรบนสแต็คผู้แปลจะดึงสอง0วินาทีและคำนวณ0 0ซึ่งเป็น1ตามจาวาสคริปต์ จากนั้นพิมพ์ค่านี้และสิ้นสุดโปรแกรมPPO@

โปรแกรมคู่

ดูมันทำงาน!

)<@OP)<@OP

โปรแกรม 10 ไบต์ยาวเกินกว่าที่จะใส่ลงในคิวบ์ยูนิตได้ดังนั้นจึงขยายเป็นคิวบ์ขนาด 2:

    ) <
    @ O
P ) < @ O P . .
. . . . . . . .
    . .
    . .

เมื่อก่อนหน้านี้ IP จะเริ่มต้นที่ด้านบนซ้ายของใบหน้าซ้ายสุด คราวนี้คำสั่งแรกสุดคือPซึ่งจะผลัก1ให้เหมือนก่อนหน้านี้ ถัดไปคือ)ซึ่งเพิ่มรายการด้านบนเปลี่ยนมันเป็น2 จากนั้น<จะเปลี่ยน IP ที่อยู่รอบ ๆ และมันฮิต)อีกครั้งเปลี่ยน2เป็น3

นี่คือสิ่งที่มันน่าสนใจ Pยกรายการที่สองจากด้านบนถึงพลังของรายการแรกซึ่งจะช่วยให้0 3 = 0 จากนั้น IP จะวนไปทางขวาสุดและผ่านสองตัวเลือก.ก่อนที่จะกดอีกPครั้ง ที่นี่เราเห็นความแปลกใหม่ของ Cubix: ตัวดำเนินการไบนารี (เช่นP) ไม่ลบตัวถูกดำเนินการออกจากสแต็ก ดังนั้นเนื่องจาก stack ตอนนี้[3, 0]เราคำนวณ3 0 = 1ซึ่งOoutputs และ@ยุติโปรแกรม

โปรแกรมสาม

ดูมันทำงาน!

)<@OP)<@OP)<@OP

เช่นเดียวกับโปรแกรมคู่ทริปเปิลสามารถบรรจุลูกบาศก์ขนาด 2 ได้:

    ) <
    @ O
P ) < @ O P ) <
@ O P . . . . .
    . .
    . .

โปรแกรมนี้จะเริ่มออกมาในลักษณะเช่นเดียวกับก่อนหน้านี้: Pผลักดัน1 , )เพิ่มขึ้น, <จุด IP ตะวันตก)เพิ่มขึ้นอีกครั้งและPตอนนี้ดัน0 จากนั้น IP จะถูกพันไว้<ที่ด้านขวาสุดซึ่งไม่ได้ทำอะไรเลยเนื่องจาก IP นั้นหันไปทางตะวันตก

นี่คือความแตกต่างจากโปรแกรมคู่ที่: )เพิ่มขึ้น0อยู่ด้านบนของสแต็คไป1 เมื่อPดำเนินการมายากลของมันอีกครั้งคราวนี้ก็จะคำนวณ3 1 = 3 Oเอาท์พุทและ@สิ้นสุดและเราพิสูจน์ได้อย่างแน่นอนว่าครั้งที่สามเป็นเสน่ห์อย่างแท้จริง


1
ฉันชอบคำอธิบายของคุณจริงๆ +1
เวิร์กโฟลว์

7

Brain-Flakขนาด 10 ไบต์

<>([]{}())

ลองออนไลน์!

ลองสองเท่า!

ลองสามเท่า!

คำอธิบาย:

#Toggle stacks
<>

#Push
(
    #Stack-height (initially 0) + 
    []

    #The TOS (initially 0) + 
    {}

    #1
    ()
)

เมื่อเราเรียกใช้สิ่งนี้เพียงครั้งเดียวมันจะวาง(0 + 0 + 1) == 1ลงบนสแต็กสำรอง วิ่งเป็นครั้งที่สองมันจะวางลงบนสแต็กหลักเหมือนกัน เรียกใช้เป็นครั้งที่สามอย่างไรก็ตามมันจะประเมิน(1 + 1 + 1) == 3และผลักไปที่สแต็กสำรองและพิมพ์โดยปริยาย


7

SQL, 25 24 23 ไบต์

( -1 ไบต์ ลบอักขระที่พิมพ์ผิดที่ใส่ความคิดเห็นเสมอและไม่ทำอะไรเลย )
( -1 ไบต์ เปลี่ยนSELECTไปPRINTตามที่แนะนำโดย Razvan Socol )

PRINT 2/*
*2+1--*/-1
--

มันทำงานอย่างไร:
ใน SQL คุณสามารถคอมเม้นต์แท็กความคิดเห็นได้เช่น:

/*
'Comment'--*/

VS

--/*
'Not Comment'--*/

รหัสใน 1 บรรทัดที่มีการยกเว้นความคิดเห็น:
การวนซ้ำครั้งแรก: การSELECT 2-1ส่งออก: 1
การทำซ้ำครั้งที่สอง: การSELECT 2-1*2+1ส่งออก: 1
การทำซ้ำครั้งที่สาม: การSELECT 2-1*2+1*2+1ส่งออก:3


1
PRINTแทนที่จะSELECTบันทึกเป็นไบต์พิเศษ
Razvan Socol

6

SOGL V0.12 , 7 5 4 ไบต์

ē»«I

ลองที่นี่!

ลองสองเท่า!

ลองสามเท่า!

คำอธิบาย:

ē»«I
ē     push counter, then increment it.
      First time running this will push 0, then 1, then 2.
             TOS on each: 0  1  2
 »    floor divide by 2   0  0  1
  «   multiply by 2       0  0  2
   I  and increment       1  1  3

ฉันพยายามทำบางสิ่งบางอย่างตามแนวของē1|แต่เห็นได้ชัดว่าไม่มีคำสั่งสำหรับ bitwise หรือ ...
ETHproductions

@ETHproductions ใช่ฉันต้องการลองบางอย่างเช่นกันและสิ่งที่ดีที่สุดที่ฉันได้รับคือē:2\+: /
dzaima

5

05AB1E , 6 5 ไบต์

.gDÈ+

ลองออนไลน์! หรือลองเป็นสองเท่า! หรือลองสามเท่า!

คำอธิบาย

.g     # push length of stack
  D    # duplicate
   È   # check if even
    +  # add

โสด: 0 + (0 % 2 == 0) -> 1
สอง: 1 + (1 % 2 == 0) -> 1
สาม:2 + (2 % 2 == 0) -> 3


ควรจะ% 2อยู่ในคำอธิบายสาม?
LarsW

@ LarsW: ใช่แน่นอน :)
Emigna

@Emigna ฉันคิดว่า "ตรวจสอบว่าแม้" จริง2%_เหรอ?
Magic Octopus Urn

2 + (2 % 2 == 0) -> 2แต่2 + !(2 % 2 == 0) -> 3(สำหรับคำอธิบายของคุณ)
Magic Octopus Urn

@MagicOctopusUrn 2%_เหมือนกับÈใช่ ไม่แน่ใจว่าคุณหมายถึงอะไรเกี่ยวกับคำอธิบาย 2+(2%2==0) = 2+(0==0) = 2+1 = 3. มันอาจจะชัดเจนกว่านี้ถ้าฉันอธิบายการคำนวณ
Emigna

5

> <> , 9 ไบต์

\5 n;
\\1

ลองออนไลน์!

ลองสองเท่า!

ลองสามเท่า!

ฉันพบโชคเช่นนี้โดยใช้ปรัชญาที่ว่า "ถ้าคุณทำให้เส้นทางของปลาซับซ้อนพอแล้ว รุ่นดั้งเดิมและสองเท่าพิมพ์ 5 และรุ่นสามเท่าจะพิมพ์ 1 และ 5 เพื่อให้ 15 = 3 × 5 นี่คือรุ่นคูณสำหรับการตรวจของคุณ:

\5 n;
\\1\5 n;
\\1
\5 n;
\\1\5 n;
\\1\5 n;
\\1

5

Python 2 ,  46 45  39 ไบต์

แรงบันดาลใจจากคำตอบของ Halvard ฉันดีใจที่ความท้าทายของฉันเป็นแรงบันดาลใจใหม่ซึ่งฉันคิดว่าน่าสนใจยิ่งขึ้น ที่บันทึกไว้ 6 ไบต์ต้องขอบคุณเควิน Cruijssen

print open(__file__,"a").tell()/79*3|1#

ลองออนไลน์!

ลองสองเท่า!

ลองสามเท่า!

มันทำงานอย่างไร (ล้าสมัย)

k=open(__file__,"a").tell() # Read the source code in "append" mode and get its length.
                            # Assign it to a variable k.
;print k>>(k==90)#          # Print k, with the bits shifted to the right by 1 if k
                            # is equal to 90, or without being shifted at all overwise.
                            # By shifting the bits of a number to the right by 1 (>>1),
                            # we basically halve it.

เมื่อเพิ่มเป็นสองเท่าความยาวจะกลายเป็น90แต่โค้ดใหม่นั้นจะถูกละเว้นด้วยเครื่องหมาย#ดังนั้นจึงk==90ประเมินTrueว่า booleans เป็นคลาสย่อยของจำนวนเต็มในหลามเพื่อให้k>>Trueเทียบเท่ากับk>>1ซึ่งเป็นหลักk / 2 = 45 เมื่อเพิ่มเป็นสามเท่ารหัสใหม่จะถูกละเว้นอีกครั้งดังนั้นความยาวใหม่คือ135ซึ่งไม่ได้รับการเลื่อนเนื่องจากk==90ประเมินเป็นFalseดังนั้นk>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ kและkถูกพิมพ์ตามที่เป็น


Python 2 , 36 ไบต์

นี่เป็นข้อเสนอแนะโดย Aidan F. Pierce ที่ 38 ไบต์และฉันเล่นกอล์ฟด้วย 2 ไบต์ ฉันไม่ได้โพสต์สิ่งนี้เป็นโซลูชันหลักของฉันเพราะฉันไม่ได้มาด้วยตัวเอง

0and""
True+=1
print True>3and 3or 1

ลองออนไลน์! ลองสองเท่า! ลองสามเท่า!


ขอบคุณสำหรับแนวคิดของการใช้ความคิดเห็น - ช่วยฉันด้วยขนาด 6 ไบต์
AdmBorkBork

print open(__file__,"a").tell()/79*3|1#บางที?
Kevin Cruijssen

@KevinCruijssen เยี่ยมมากขอบคุณ!
Mr. Xcoder

น้อยกว่าหนึ่งไบต์ไม่มีการอ่านซอร์สโค้ด : tio.run/##K6gsycjPM/r/… พิมพ์ด้วยช่องว่างนำหน้าสำหรับการทำซ้ำสองและสามครั้ง แต่ดูเหมือนว่าจะได้รับอนุญาต
Aidan F. Pierce

@ AidanF.Pierce ขอบคุณมาก! ฉัน golfed มันอีกเล็กน้อยและโพสต์ไว้เป็นทางเลือกอื่น
Mr. Xcoder

5

R , 37 31 28 ไบต์

ขอบคุณGiuseppeสำหรับการตี 3 ไบท์สุดท้าย

length(readLines())%/%2*2+1

(ขึ้นบรรทัดใหม่ต่อท้าย)

ลองครั้งเดียว!

ลองสองครั้ง!

ลองสามครั้ง!

วิธีนี้ใช้readLines()เคล็ดลับจากคำตอบของจูเซปเป้ต่อการแข่งขัน 8 ลูกซึ่งstdinจะเปลี่ยนเส้นทางไปยังไฟล์ต้นฉบับ รหัสนี้โดยทั่วไปจะนับจำนวนบรรทัดที่มีอยู่ใต้บรรทัดแรกและส่งออก1ถ้ามี 1 หรือ 3 บรรทัด (เช่นรหัสเป็นรหัสเดียวหรือสองเท่า) หรือ3ถ้ามี 5 บรรทัด (เช่นรหัสคือสามเท่า)


โอ้เรียบร้อย +1! ไม่แน่ใจว่าจะทำอย่างไรในอาร์ฉันคิดว่าคุณต้องขึ้นบรรทัดใหม่หลังจากsนี้เพื่อให้ทำงานได้อย่างถูกต้อง แต่คุณควรเล่นกอล์ฟได้ถึง28 ไบต์โดยการคำนวณใหม่อีกครั้ง
จูเซปเป้

@Giuseppe ขอบคุณสำหรับการชี้ปัญหา newline! ฉันไม่สามารถให้รุ่นของคุณใช้งานได้เมื่อรหัสเป็นสามเท่า - ฉันขาดอะไรไปหรือเปล่า
rturnbull

โอ้แปลกฉันต้องมีบรรทัดใหม่ต่อท้าย แต่ถ้าคุณทำ%/%2มันควรจะทำงาน
Giuseppe

5

แพ้ 38 ไบต์

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

ลองออนไลน์!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

ลองออนไลน์!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

ลองออนไลน์!

คำอธิบาย

Lost เป็นภาษาที่น่าสนใจสำหรับความท้าทายนี้ เทคนิค Lost ปกติคือการสร้าง "กับดัก" แทร็บคือส่วนของโปรแกรมที่ออกแบบมาเพื่อจับไอพีทั้งหมดในที่เดียวเพื่อให้สแต็คสามารถถูกเคลียร์ได้และสามารถควบคุมได้ในทิศทางที่กำหนด ทำให้การเขียนโปรแกรมใน Lost สามารถจัดการได้มากขึ้น อย่างไรก็ตามเนื่องจากโปรแกรมซ้ำเราจำเป็นต้องหลีกเลี่ยงการทำสำเนากับดักด้วย สิ่งนี้ต้องการให้เราออกแบบกับดักใหม่ที่ทำงานได้อย่างถูกต้อง แต่เมื่อทำสำเนากับดักเพียงอันเดียวทำงานได้ แนวคิดพื้นฐานของฉันที่นี่มีดังต่อไปนี้

v<<<<>
>%?!^^

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

v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^

หมายความว่าไม่ว่าคุณจะเข้ามาคุณจะออกจากที่เดียวกันเสมอ

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

\\<<<<<v<<<<>
2>((1+@>?!^%^

กระดูกสันหลังของโปรแกรมของเราคือด้านซ้ายมีด้านซึ่งมีจำนวน2s ทุกครั้งที่เราเพิ่มสำเนาของโปรแกรมอื่น2จะถูกเพิ่มเข้าไปในกระดูกสันหลังของโปรแกรมซึ่งหมายความว่าจะมีการเพิ่ม 2 เข้าไปในสแต็ก เมื่อมันดับลงด้านล่างมันจะกระเด้งผ่าน\\>และรันโค้ด

((1+@

สิ่งนี้จะลบ 2 รายการสแต็กแรกเพิ่มหนึ่งรายการในสิ่งที่เหลืออยู่และออก เมื่อกระดูกสันหลังของเรามี 3 2 วินาทีเราจะบวก 1 และได้ 3 ถ้าเรามีน้อยกว่า 3 รายการเราก็จะทิ้งสแต็คทั้งหมดแล้วส่งคืน 1

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

\\<<<<</<<<<>
2>((1+@>?!^%^
.........^

นี่เป็นปัญหาเล็กน้อยในการใส่เครื่องหมายทับระหว่างเรา^กับดัก อย่างไรก็ตามค่อนข้างน่าอัศจรรย์ทุกอย่างทำงานออกมา IPS ของเราเด้งไปมาอย่างถูกต้องเพื่อที่จะไม่สร้างความแตกต่าง



@ ล้อเล่นน่าเสียดายที่ฉันติดอยู่บนมือถือในขณะนี้ คุณช่วยโพสต์ไว้เป็นคำตอบพร้อมคำอธิบายได้ไหม?
ตัวช่วยสร้างข้าวสาลี



4

C (gcc) , 95 91 85 ไบต์

#ifndef a
#define a-1
main(){puts(3
#include __FILE__
?"1":"3");}
#define a
#endif
a

ลองออนไลน์!


จากนั้นฉันขอแนะนำให้คุณแก้ไขลิงก์ TIO ที่ถูกต้อง
Erik the Outgolfer

บางครั้งฉันไม่สามารถเชื่อมต่อกับ TIO ฉันไม่รู้ว่าทำไม
l4m2

4

Japt , 8 6 5 ไบต์

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

°U-v

คำอธิบาย:

°U-v
 U     # variable U=0                # U=0
°U     # ++U                         # U=1
  -    # minus:
   v   #   1 if U is divisible by 2  
       #     else
       #   0                         # U=1

สิ่งนี้ประเมินว่า 1-0 = 1

สองเท่าประเมินว่า 2-1 = 1

ประเมินสามเท่าเป็น 3-0 = 3


1
การจัดเรียงเล็ก ๆ น้อย ๆ ผมคิดว่าคุณสามารถทำ°U-v(บวกขึ้นบรรทัดใหม่) Uที่จะบันทึกในครั้งที่สอง
ETHproductions

@ ETHproductions ขอบคุณ! vสมบูรณ์แบบสำหรับความท้าทายนี้ :-)
โอลิเวอร์



4

> <> , 10 9 8 ไบต์

562gn|

ลองออนไลน์!

ลองสองเท่า!

ลองสามเท่า!

ฉันแน่ใจว่ามีโซลูชัน 8 ไบต์อยู่ที่ไหนสักแห่งที่นั่น

unprintable ในตอนท้ายมีค่า ASCII 1 และถูกดึงข้อมูลโดยgคำสั่ง et ในการทำซ้ำครั้งที่สามเท่านั้น สำหรับครั้งแรกที่สองพิมพ์มันและจากนั้นพิมพ์0515


โซลูชัน 8 ไบต์พิสูจน์ได้ยาก แต่นี่เป็นอีกสองสามไบต์ในกรณีที่พวกเขาสร้างแรงบันดาลใจให้คุณ: TIO , TIO
ไม่ใช่ต้นไม้

1
@Notatree มี 8 ไบต์ด้วย unprintable
Jo King



3

JavaScript, 81 77 74 70 ไบต์

บันทึกแล้ว 4 ไบต์ขอบคุณShaggy

var t,i=(i||[3,1,1]),a=i.pop()
clearTimeout(t)
t=setTimeout(alert,9,a)

วิธีแก้ปัญหา JS ค่อนข้างอ่อนแอ กินค่าจาก[3,1,1]อาร์เรย์จากด้านขวา ( pop()) ลงทะเบียนการหมดเวลาเพื่อแสดงค่าปัจจุบันในอนาคต หากการหมดเวลาลงทะเบียนแล้วให้ยกเลิก อาศัยธรรมชาติที่สกปรกของvarซึ่งมีการประกาศตัวแปร

สองครั้ง:

สามครั้ง:


ต้องมีเซมิโคลอนท้ายหรือบรรทัดใหม่เพื่อทำงาน แต่คุณสามารถบันทึกได้ 4 ไบต์โดยผ่านaเป็นอาร์กิวเมนต์ที่ 3 ของsetTimeout:setTimeout(alert,9,a)
Shaggy

@Shaggy ขอบคุณ! มันทำงานได้ดีแม้ไม่มีเซมิโคลอนพิเศษ
Cristian Lupascu


2

ถ่าน 12 ไบต์

⎚≔⁺ι¹ιI⁻ι⁼ι²

ลองออนไลน์! ลิงค์คือรหัส verbose

ลองสองเท่า!

ลองสามเท่า!

คำอธิบาย

⎚             Clear
 ≔⁺ι¹ι        Assign plus(i, 1) to i
       I      Cast (and implicitly print)
         ⁻ ⁼ι² Subtract equals(i, 2) from
          ι    i

MapAssignRight(Plus, 1, i)ช่วยคุณประหยัดไบต์ซึ่งจะทำให้คุณมีความยาวเท่ากับพอร์ตของคำตอบของฉันที่ @Mr ความท้าทายของ XCoder:PI∨›³L⊞Oυω³
Neil

PI⊕⊗÷L⊞Oυω³เป็นคำตอบอีกเวอร์ชันของฉัน แต่ยังมี 11 bytes ...
24911 Neil

พบ 10-byter!
Neil

: / ฉันควรแก้ไขจริง ๆMapAssign(Incremented, i)
ASCII- เท่านั้น

2

JavaScript, 43 40 ไบต์

var t=t?--t:~!setTimeout`t=alert(1|~t)`;

2x:

3x:


ป.ล. โซลูชั่นนี้ไม่ทำลายสภาพแวดล้อม
l4m2

2

PowerShell , 54 48 45 44 ไบต์

if(99-gt(gc $PSCOMMANDPATH|wc -c)){1;exit}3#

ลองออนไลน์!

ลองสองเท่า!

ลองสามเท่า!

Gets เส้นทางการภาวนาของตัวเองด้วย$PSCOMMANDPATHและดำเนินการgET- content ที่ไฟล์ Ifจำนวนตัวอักษรของไฟล์นั้นน้อยกว่า99(ตรวจสอบผ่านwc -cจาก coreutils) จากนั้นเราก็ส่งออก1และexit(เช่นหยุดการทำงาน) นั่นคือรหัสเดิมและรหัสสองเท่า มิฉะนั้นเราจะเอาท์พุท3และออก รหัสจริงที่อยู่ในส่วนที่สองเท่าสามเท่าหรือเป็นความหมายตั้งแต่อย่างใดอย่างหนึ่งเราจะก่อนที่เราจะได้รับมันหรือมันที่อยู่เบื้องหลังความคิดเห็นexit#

บันทึก 6 ไบต์ขอบคุณ Mr. Xcoder
บันทึก3 4 ไบต์ขอบคุณ Pavel


@Pavel Aha ใช่ ฉันต้องสลับไปมา-lt99เพื่อ99-gtให้การคัดเลือกทำงานได้อย่างถูกต้อง แต่นั่นสั้นกว่าหนึ่งไบต์ ขอบคุณ!
AdmBorkBork

2

C # (178 ไบต์)

Console.WriteLine(1+2*4%int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]=(int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]??"0"))+1+""));

วิธีแก้ปัญหา C # บ้า แต่ฉันมีความสุขเป็นไปได้ในหนึ่งบรรทัดใน C # เลย :)

สำหรับฉันส่วนที่ยากที่สุดคือการมี C # ที่ถูกต้องซึ่งอาจทำให้การเพิ่มหรือลดความแปรปรวนของตัวแปรเดียวกันดังนั้นฉันจึงลงเอยด้วยการใช้ ConfigurationManager เนื่องจากฉันต้องการ NameValueCollection แบบคงที่ทั่วโลกและ ConfigurationManager เดียวที่ฉันคิดว่า EnvironmentVariables เป็นอีกตัวเลือกหนึ่งที่ฉันเคยดู แต่ไม่มีตัวทำดัชนีดังนั้นฉันไม่แน่ใจว่าจะทำอย่างไรในหนึ่งบรรทัดที่สามารถคัดลอกวางเพื่อสร้างผลลัพธ์ที่ต้องการตามข้อกำหนด


2

ร่ายมนต์เสน่ห์ , 35 ไบต์

^w3'\
    f
    1
/1@
/
 '54\w
/yyy

ลองออนไลน์!

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

ฟังก์ชั่นอันเนื่องมาจากความจริงที่ว่าบรรทัดสุดท้ายไม่มีการขึ้นบรรทัดใหม่ (หรือสำหรับเรื่องนั้นการเว้นวรรคต่อท้าย) ทำให้ IP ที่ซ้ำกันสามารถวางไข่ในที่อื่นได้ ด้านซ้ายบนหนึ่งจบลงทำให้ห่วงขนาดใหญ่รอบ ๆ ตารางขณะที่สอง IP ทำการดำเนินการสะท้อนให้แทนที่\ในบรรทัดที่ 6 ด้วย IP นี้จะวนซ้ำตลอดไปและไม่ทำอะไรเลย

IP ตัวที่สามทำการทดแทนแบบเดียวกันนี้ในเวลาเดียวกัน แต่เนื่องจากมันตั้งอยู่บนบรรทัดที่13สำเนาของตัวสะท้อนสัญญาณจึงส่งมันขึ้นด้านบนและดำเนินการ1f'3wตามลำดับที่มุมขวาบนซึ่งจะแทนที่1ด้วยตัว3ที่ 14 บรรทัดก่อน IP เดิมรันมันทำให้โปรแกรมเท่าตัวเพื่อการส่งออก3แทน1(ค่ายังอาจเป็น2และ6, 3และ9, 4และ12หรือ5และ15เนื่องจากความพร้อมของa-fค่าคงที่เชิงตัวเลข1และ3ได้รับการแต่งตั้งโดยพล) จากนั้นมันจะวนซ้ำไปเรื่อย ๆ เพื่อแสดงคำสั่งการสะท้อนที่ไม่ทำอะไรเลย

ลองเป็นสามเท่า!


29 bytesแม้ว่าฉันคิดว่าฉันจะลดลงได้ถ้าฉันเข้าใจจริงๆ: P
Jo King

@ โจกิ้งไม่แปลกใจจริงๆที่ช่องว่างมากมายนั้นออกมาได้ ที่ทำงานนี้และเนื่องจากมีปัญหากับล่ามฉันมีความสุขที่ได้รับบางสิ่งบางอย่างที่ทำงานได้ (ต้นฉบับของฉันคือ 52 ไบต์และหลังจากได้รับการแก้ไขล่ามฉันก็สามารถลบอันดีได้)
Draco18s

1

Perl 5, 28 25 ไบต์

-3 ไบต์ต้องขอบคุณ @neil!

print"\e[D$a"if(++$a!=2);

เลื่อนเคอร์เซอร์ไปด้านหลัง (ไม่ทำอะไรเลยเมื่อเริ่มต้นบรรทัด) และพิมพ์ค่าของ$aครั้งแรกและครั้งที่สาม (เช่นครั้งที่สามที่พิมพ์ 1 เคอร์เซอร์ย้ายและ 3 ถูกพิมพ์ที่ตำแหน่ง 1)


1
print"\e[D$a"if(++$a!=2);บางที?
Neil

1

QBasic ขนาด 19 ไบต์

CLS
x=2^x
?x-1OR 1

แหล่งที่มาควรมีบรรทัดขึ้นบรรทัดใหม่

คำอธิบาย

เราต้องการให้การส่งออกของ1, ,1 3สังเกตว่าตัวเลขเหล่านี้มีค่าน้อยกว่าพลังของ 2 ดังนั้น:

CLS      ' CLear Screen of any output from previous copies of the code

x        ' Numeric variables are preset to 0...
 =2^x    ' so as this statement is repeated, the value of x goes 1, 2, 4

 x-1     ' Therefore x-1 goes 0, 1, 3...
    OR 1 ' and we bitwise OR it with 1 to change the 0 to 1...
?        ' and print.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.