พิมพ์ 1 ถึง 15 โดยใช้เครื่องพิมพ์อื่น


22

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

ท้าทาย:

เขียนรหัสที่ส่งออกจำนวนเต็มเดียวNและรหัสที่ปฏิบัติการได้ รหัสต่อไปควรเอาท์พุทและรหัสที่สามารถเอาท์พุทN+1 ดำเนินการต่อเส้นทางนี้จนกว่าจะถึงN+2 N = 15(หมายเลขที่พิมพ์ล่าสุดควรเป็น 15)

กฎ:

  • ไม่มีอินพุต (ถือว่าอินพุตว่างเปล่า)
  • อนุญาตให้ใช้โปรแกรมหรือฟังก์ชั่นเต็มรูปแบบหรือรูปแบบอื่นที่สะดวกสบาย
  • 1รหัสแรกควรเอาท์พุท
  • คุณไม่สามารถส่งออกศูนย์นำหน้า คือคุณไม่สามารถพิมพ์สำหรับ011
  • N, Code_for_N+1การส่งออกจะต้องอยู่ในรูปแบบ โปรดทราบว่าการส่งออกจะถูกคั่นด้วยเครื่องหมายจุลภาคและช่องว่างเดียว รหัสสำหรับN+1ไม่มีเครื่องหมายคำพูดล้อมรอบ N , Code_for_N+1ไม่ได้รับการยอมรับ (ช่องว่างด้านหน้าของเครื่องหมายจุลภาค) การขึ้นบรรทัดใหม่จะตกลง
  • อักขระตัวแรกของเอาต์พุตต้องเป็นตัวเลข (ไม่มีช่องว่างนำหน้าหรือans = N)
  • หมายเลขที่พิมพ์ไม่ควรเป็นส่วนหนึ่งของรหัสถัดไป (รหัสสามารถมีหมายเลขนี้ได้ แต่คุณไม่สามารถใช้หมายเลขเอาท์พุทเป็นส่วนหนึ่งของรหัสได้)
    • ตัวอย่าง: การส่งออกสำหรับสามารถ:N=2 2, printer 2ในกรณีนี้เป็นรหัสสำหรับprinter 2 N=3คุณไม่สามารถใช้การส่งออกทั้งหมด: รหัสสำหรับ 2, printer 2N=3
  • สคริปต์อาจเป็นภาษาต่าง ๆ
  • ประเภทข้อมูลนั้นไม่เกี่ยวข้อง (จำนวนสามารถเป็นสตริง) แต่ไม่สามารถล้อมรอบด้วยสิ่งใด ๆ (เครื่องหมายอัญประกาศวงเล็บ ฯลฯ )
  • หากมีรหัสออกN=15มาก็จะต้องพิมพ์STOP!(ดูโบนัส) หรือไม่พิมพ์อะไรเลย (ไม่เว้นแม้แต่ช่องว่างหรือขึ้นบรรทัดใหม่)
    • รหัสสำหรับN=15ไม่สามารถผิดพลาดได้ (แต่การส่งออกไปยัง STDERR คือ OK)
    • คุณจะถูกตัดสิทธิ์หากรหัสผลลัพธ์สำหรับงานN=15พิมพ์16หรือสิ่งอื่น (ยกเว้นกรณีโบนัส)
  • ไม่อนุญาตให้ผู้ประกอบการควินสร้างขึ้น
  • ไม่อนุญาตให้เข้าถึงไฟล์ต้นฉบับผ่านระบบไฟล์

โบนัส:

-10 ไบต์หากรหัสที่พิมพ์ 15 ยังสร้างรหัสที่พิมพ์ " STOP!"

ตัวอย่างการใช้ Python syntax: (แน่นอนว่ามันจะใช้ได้กับจำนวนเต็มที่เลือกไม่ใช่ตั้งแต่ 1 ถึง 15)

N = 1
print "1, print 2"
1, print 2

---
N = 15
print 15
15

---
N = 15   (Qualifies for the -10 bytes bonus)
print "15, print 'STOP!'"
15, print 'STOP!'

print 'STOP!'
STOP!

----

N = 15   (Qualifies for the -10 bytes bonus)
print "15, disp('STOP!')"
15, disp('STOP!')        (disp('STOP!') outputs STOP! in MATLAB)

----
N = 15   (This one is not OK. The submission is disqualified)
print "15, print 16"
15, print 16

ใช้กฎมาตรฐานการเล่นกอล์ฟ! รหัสที่เล็กที่สุด (สำหรับ N = 1) หน่วยเป็นไบต์ชนะ!


ดังนั้นพูดว่าf=>f+""จะไม่ถูกต้อง? ( f+""ส่งคืนรหัสการก่อสร้างของฟังก์ชัน)
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴโดยไม่ได้ก็เป็นไปได้เพื่อให้บรรลุงาน ...
nicael

@nicael เสร็จเรียบร้อยแล้วอย่างน้อยก็ในคำตอบ js
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ ... ในทางที่ปฏิบัติได้: D
nicael

กฎมีความสับสนฉันสามารถส่งออกสิ่งที่ชอบ14, print(14+1)หรือไม่?
nyuszika7h

คำตอบ:


39

Pyth + ///, 15 ไบต์ - 10 = 5

pPt`S15", STOP!

สิ่งนี้พิมพ์1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, STOP!ใน Pyth โดยการถอดrange(1,15+1)และปิดวงเล็บเริ่มต้นและสิ้นสุดแล้วพิมพ์ตามด้วย ", STOP!" ทันที

สิบสี่โปรแกรมต่อไปอยู่ใน /// ที่โดยตรง outputs โปรแกรมทั้งหมดที่ไม่ได้มีหรือ/ \ดังนั้นโปรแกรมที่สอง

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15

ให้และโปรแกรมที่สาม2 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15โปรแกรมสุดท้าย15, STOP!พิมพ์เพื่อให้โปรแกรมที่ผ่านมาเป็นเพียง15, STOP!STOP!


3
หน้าด้าน ฉันชอบมัน. :)
Martin Ender

ไม่catนับเป็นภาษา?
253751

@immibis catไม่ทำการทดสอบเบื้องต้นดังนั้นไม่
user48538

1
โปรแกรม # 2 ขึ้นไปยังทำงานใน PHP :)
Ilmari Karonen

31

JavaScript, 131238 - 10 = 131228 ไบต์

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

แนวคิด: การหลบหนีและการเพิ่มซ้ำ ๆ N-1, ...

alert("14,alert(\"15, alert(\\\"STOP!\\\")\")")

7
ฉันคิดว่านี่เป็นแบ็กสแลชที่มากที่สุดในคำตอบ PPCG ใด ๆ
lirtosiast

1
ผมยอมรับว่ามีการใช้ NP ++ และสำหรับ regex = นี้)
flawr

19
ฮ่าฮ่า -10 นี้ช่วยได้มาก: D
nicael

2
ฉันได้สร้างเล็กน้อยไร้เดียงสาน้อยแก้ปัญหา 87573 ไบต์
LegionMammal978

คุณสามารถบันทึกบางไบต์โดยไม่มีโบนัส
Rɪᴋᴇʀ

8

CJam, 26 25 24 ไบต์

1{", "2$)@"_~"](_F<@*}_~

ลองออนไลน์

โปรแกรมที่ตามมาก็มีการเพิ่มจำนวนแรก โปรแกรมนี้รัน 16 ครั้ง


หรือด้วยโบนัสสำหรับคะแนนเดียวกัน:

1{", "\2$)_G<\@`+"_~"+"STOP!"`?}_~

ลองออนไลน์

โปรแกรมที่ตามมาก็มีการเพิ่มจำนวนแรก โปรแกรมนี้รัน 16 ครั้ง

ทางเลือกอื่นสำหรับโบนัส:

1{", "\2$)Gmd@`+"_~"+"STOP!"`\?}_~

2
@FryAmTheEggman cjam.tryitonline.net/…ใช้ Base64 เพื่อเข้ารหัสโปรแกรมซึ่งทำให้การโพสต์ Permalinks ในความคิดเห็นง่ายขึ้นเล็กน้อย </selfpromotion>
Dennis

@Dennis ขอบคุณนั่นเป็นอาการปวดหัวเล็กน้อย: P ดูเหมือนว่ามาร์ตินจะเขียนของเขาเองอยู่ดี
FryAmTheEggman

@FryAmTheEggman เฉพาะหลังจากที่ฉันเห็นลิงก์ของคุณแล้วดังนั้นขอบคุณสำหรับคำแนะนำ ;)
Martin Ender

7

JavaScript (ES6), 62 61 ไบต์ - 10 โบนัส = 51 คะแนน

_=>"1, "+(f=n=>`_=>"`+(n<16?n+`, "+(${f(n+1)})`:`STOP!"`))(2)

คำอธิบาย

วิธีแก้ปัญหาที่ไม่ได้อ่านคือซอร์สโค้ดของตัวเองและยังไม่ยาวนัก

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

_=>
  "1, "                // print the first number
  +(f=n=>`_=>"`+(      // f = recursive function for printing program N
    n<16?              // for programs 2 - 15:
      n+`, "+(${       // add N to the output of the nested function
        f(n+1)         // nest the code of program N + 1
      })`
    :`STOP!"`          // program 16 just outputs "STOP!" for the bonus
  ))(2)                // start from program 2

ทดสอบ


1
+1 สำหรับการไม่ใช้คุณสมบัติในตัวของ JavaScript ในการรับฟังก์ชั่นของตัวเครื่อง (พื้นที่สีเทาสำหรับการทดสอบ)
Aᴄʜᴇʀᴏɴғᴀɪʟ

2
@Callodacity วิธีการ"" + (n=>m)ไม่นับเป็นการรับเนื้อหาของฟังก์ชันn=>m?
Neil

@Neil จริงๆแล้วคุณถูกต้องมันนับ - ฉันมองข้ามเพราะฉันดูเฉพาะโปรแกรม 1 และไม่ได้ผ่านผลลัพธ์
Aᴄʜᴇʀᴏɴғᴀɪʟ

แบ็กสแลชทั้งหมดหายไปไหน!
ก๋วยเตี๋ยว

5

Matlab, 226 212 - 10 = 202 ไบต์

ขอบคุณ @StewieGriffin สองสามไบต์ =)

'awFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)

ส่วนแรกคือสตริงที่แสดงถึงบรรทัดที่สอง (ด้านล่าง), รหัสจริง (เพิ่งเลื่อนโดย 9) ใน Matlab สตริงเป็นเมทริกซ์ที่เต็มไปด้วยอักขระดังนั้นคุณสามารถทำการเลื่อนได้อย่างง่ายดายเพียงแค่เพิ่ม / ย่อสเกลาร์ ดังนั้นโปรแกรมจะพิมพ์สตริงเดียวกัน * อีกครั้งบวกกับสตริงเดียวกัน แต่เลื่อนซึ่งส่งผลให้รหัส

* ไม่มาก: ไบต์แรกคือตัวนับที่ต้องเพิ่มในการวนซ้ำแต่ละครั้ง

เคล็ดลับควินกับสายถูกขโมยอย่างไร้ยางอายจากที่นี่

'awFjw|Dro)w1:26B?G:>DwF0\}xy*0Dnu|nDwFdw~v;|}{1w1:26B?2505)05<B5w1:24:5w1;Cnwm25<B5>B5w1;Cnwm26B500fDnwmDmr|y1w2';
n=ans;if n(1)-96>15;n='Stop!';else;n=[num2str(n(1)-96),', ',39,n(1)+1,n(2:end),39,59,n(2:end)-9,''];end;disp(n)

ที่นี่บรรทัดสุดท้ายของลำดับที่คัดลอกมาจากคอนโซล:

>> 'mwFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
13, 'nwFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
>> 'nwFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
14, 'owFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
>> 'owFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
15, 'pwFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
>> 'pwFjw|DWFw1:2DVFw1;Cnwm2Dro)WG:::DwF0\]XY*0Dnu|nDwFdw~v;|}{1W6B?2505)05<B5W4:5V5<B5>B5V6B500fDnwmDmr|y1w2';n=ans;N=n(1);M=n(2:end);if N>111;n='STOP!';else;n=[num2str(N-96),', ',39,N+1,M,39,59,M-9,''];end;disp(n)
STOP!

5

JavaScript, 50 47 44 42 44 *ไบต์

a=_=>(x=1)+(x<15?", a="+a:"").replace(x,x+1)

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

a=_=>(x=1)+(x<15?", a="+a:"").replace(x,x+1);
alert(a());

ในกรณีที่ไม่สามารถทำงานได้อย่างถูกต้องมีการฝังตัว (เพราะสำหรับฉันมันไม่ได้) คุณสามารถดูตัวอย่างมี


* - ดูเหมือนว่าตัวอย่างสร้างผลลัพธ์ได้โดยไม่ต้องa=โทรออกไปอีก


1
"ฟีเจอร์ในตัวสำหรับรับฟังก์ชั่นตัวเครื่อง" ไม่เหมือนกับตัวดำเนินการ quine อย่างไร ฉันไม่ได้บอกว่ามันไม่ถูกต้องฉันแค่สงสัยว่าความแตกต่างคืออะไร?
Stewie Griffin

ฉันแค่ทำงานหนึ่ง o_o คุณทำ.replace(x++,x)ไม่ได้เหรอ
Conor O'Brien

3
@StewieGriffin คนที่ทำเพื่อ quining อื่น ๆ เป็นคุณสมบัติที่ถูกต้องตามกฎหมาย
Conor O'Brien

@Stewie แต่ "ผู้ดำเนินการควิน" ควรจะกลับโปรแกรมทั้งหมดในขณะที่ในตัวอย่างของฉันมันดึงฟังก์ชั่นโดยไม่มีวัตถุประสงค์ที่จะทำให้ควินิน (ไม่มีในตัวเพื่อกลับรหัสโปรแกรมทั้งหมด) ในขณะที่คุณอนุญาตฟังก์ชั่นมันอาจจะคล้ายกันดังนั้นฉันจึงสงสัย
nicael

ไม่a=_=>(x=1)+(x<15?`, ${a}`:"").replace(x,x+1)ทำงานหรือไม่
Conor O'Brien

5

Python 2.7.10, 196 92 - 10 = 82 ไบต์

Whee !!! มันสนุกมาก สั้นลงมาก : P

n=1;a='n=%d;a=%r;print n,a%%(n+1,a)if n!=15else"STOP!"';print n,a%(n+1,a)if n!=15else"STOP!"

คำอธิบาย:

ฉันเริ่มต้นด้วยสิ่งนี้:

a='a=%r;print a%%a';print a%a

นั่นเป็นเพียงเรื่องง่าย ๆ นี่คือการเพิ่มเคาน์เตอร์:

n=1;a='n=%d;a=%r;print n,a%%(n+1,a)';print n,a%(n+1,a)

nเป็นตัวแปรตัวนับที่พิมพ์ที่จุดเริ่มต้น จากนั้นเมื่อมันพิมพ์n=ส่วนทดแทนสำหรับn+1 %dดังนั้นจากตรงนี้มันจะนับไม่สิ้นสุด

และนี่คือรุ่นสุดท้าย มันเพิ่มถ้าประโยคที่จะหยุดที่ 15 และพิมพ์ "STOP!" เช่นกัน

n=1;a='n=%d;a=%r;print n,a%%(n+1,a)if n!=15else"STOP!"';print n,a%(n+1,a)if n!=15else"STOP!"

รหัสเก่า:

a= ['if num==15:print"STOP!!!";exit()','print num','print"a=",a','print"num=",num+1', 'for s in a:print s']
num= 1
print num
if num==15:print"STOP!!!";exit()
print"a=",a
print"num=",num+1
for s in a:print s

ไม่เคยชนะ แต่สนุก : Pสั้นกว่านี้มากแม้ว่าฉันจะยังไม่มีโอกาสก็ตาม : P


ว้าว. คุณช่วยเพิ่มคำอธิบายเพราะมันเจ๋ง แต่ฉันไม่รู้ว่าเกิดอะไรขึ้น: D
Sherlock9

@ Sherlock9 เสร็จแล้ว ขอบคุณสำหรับความชื่นชมของคุณ
Rɪᴋᴇʀ

ถ้าฉันตัดและวางสิ่งนี้ลงในเซสชัน python 2.7.6 แบบโต้ตอบมันจะบ่นว่าไม่มีช่องว่างก่อนหน้าelses
eric

@eric ฉันใช้ python 2.7.10 และมันใช้งานได้สำหรับฉัน ...
Rɪᴋᴇʀ

3

PowerShell, (215-10) = 205 197 167 106 104 103 ไบต์

$d='$c=(,1*{2}).count;$d={0}{1}{0};(("$c, $d"-f[char]39,$d,($c+1)),$c)[$c-eq15]';"1, $d"-f[char]39,$d,2

(หากเครื่องมือเดียวของคุณคือ PowerShell ปัญหาทุกอย่างดูเหมือนจะเป็นตะปูรอ ... )

โดยพื้นฐานแล้วเราเริ่มต้นด้วยการตั้งค่า$dเท่ากับสตริงใหญ่ OLE-ยาวของ almost- ควินของรหัสเดิม มันออก1แล้ว$dกับผู้ประกอบการรูปแบบ-fได้อย่างถูกต้องเติม{0}, {1}, {2}อินยืน, การเพิ่ม{2}จำนวนใน,1*{2}ส่วนโดยหนึ่งในแต่ละครั้ง

,x*yการดำเนินงานใน PowerShell สร้างอาร์เรย์ใหม่ของรายการซึ่งแต่ละเท่ากับy xยกตัวอย่างเช่นเทียบเท่ากับ,2*3@(2,2,2)

ซึ่งหมายความว่าเอาต์พุตแรกจะเป็น1, $c=(,1*2).length;$d=(etc...)เช่นนั้นดังนั้นเมื่อประมวลผลโค้ดที่สอง$cจะเท่ากับจำนวนของอาร์เรย์@(1,1)หรือ2อื่น ๆ โปรดทราบว่า$cจะไม่ใช้เป็นตัวแปรในโค้ดต้นฉบับ

หยุดเมื่อมันพิมพ์ 15 โดยเพียงแค่การคำนวณว่า$cเท่าเทียมกัน15และจากนั้นการจัดทำดัชนีเป็นอาร์เรย์องค์ประกอบ 0 เป็น$c, $dตามที่อธิบายไว้ข้างต้นอื่น ๆ 15ที่เป็นเพียงแค่ ดังนั้นเมื่อ$cเป็น 15 มันจะออก15และไม่มีอะไรอื่น ไม่มีสิทธิ์รับโบนัสเนื่องจาก"15, {0}STOP!{0}"มีอักขระยาวเกินไป 5 ตัวสำหรับ -10 ที่จะคุ้มค่า

ต้องการเทอร์มินัล PowerShell ที่มีความกว้าง> ~ 150 หรือสำหรับคุณที่จะลบ linebreak พิเศษด้วยตนเอง (ที่เครื่องจะแทรกลงใน wrapper เอาท์พุทได้อย่างเป็นประโยชน์ ) เมื่อคัดลอกโค้ด หรือให้คุณจับเอาท์พุทเป็นตัวแปรจากนั้นเรียกใช้ตัวแปรนั้นอีกครั้ง เป็นต้น

แก้ไข 1 - บันทึกบางไบต์ด้วยการลบ "STOP!" การใช้ถ้อยคำ
แก้ไข 2 - Durr ไม่ใช้. length แต่ละครั้งเพียงเรียกมันครั้งเดียว
แก้ไข 3 - ไม่จำเป็นต้องเป็นควินดังนั้นการเริ่มต้นอาจสั้นกว่ามาก
แก้ไข 4 - เปลี่ยนจากการใช้สตริงเป็น อาร์เรย์ในการคำนวณ$cซึ่งบันทึกสองไบต์ ฉันค่อนข้างมั่นใจว่านี่เกือบจะดีที่สุดสำหรับวิธีการนี้
แก้ไข 5 - บันทึกไบต์อื่นด้วยการนับความเท่าเทียมกันโดยตรงแทนที่จะแก้ไข


หน้าต่างคอนโซล Windows 10 จะไม่คัดลอก linebreak ที่ตัดออกอีกต่อไป
Neil

2

JavaScript, 79 - 10 = 69 ไบต์

s='STOP!';for(i=15;i;){s=i--+',alert("'+s.replace(/[\\"]/g,"\\$&")+'")'};alert(s)

โดยไม่ใช้ประโยชน์Function.prototype.toStringแต่อย่างใด


2

Befunge, 57 - 10 = 47 ไบต์

1:'!`'#*j:.',,1+:9`''*'0++,1#;:0g:48*`j@,1+;"!POTS",,,,,@

อันนี้ยอดเยี่ยม ลองมันนี่


ปลอกที่เหมาะสมสำหรับข้อความหยุดคือSTOP!
user48538

@zyabin101 แก้ไขแล้ว
MegaTom

2

รุ่นที่ 73 + 5 - 10 = 68 ไบต์

@set a=STOP!
@for /l %%a in (15,-1,1)do @set a=%%a, @echo !a!
@echo %a%

CMD /V:ONฉันต้องการเพิ่ม 5 ไบต์สำหรับสิ่งนั้น


2

Python 2.7, 107 ตัวอักษร

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

ฉันเริ่มต้นด้วยการสร้างสตริงสำหรับ N = 4 หนีออกมา\และ"ตัวละคร

print "1, print \"2, print \\\"3, print \\\\\\\"4, print \\\\\\\\\\\\\\\"STOP!\\\\\\\\\\\\\\\"\\\\\\\"\\\"\""

จากนั้นฉันสร้างฟังก์ชันแลมบ์ดาที่สร้างสตริงนี้ขึ้นอยู่กับดัชนีเริ่มต้นและดัชนีหยุดโดยใช้การสอบถามซ้ำ นี่ไง:

l=lambda n,m:str(n)+", print "+"\\"*(2**(n-1)-1)+"\""+l(n+1,m)+"\\"*(2**(n-1)-1)+"\"" if n<m else "STOP!"

ใช้มันแบบนี้:

print l(1,15)

ผลลัพธ์: [32902 ตัวอักษรยาวเกินกว่าจะจัดการ]

ดังนั้นดูเหมือนว่าวิธีการที่ซับซ้อนของฉัน kolmogorov นั้นไม่ประสบความสำเร็จ ;-)


2

SMBFขนาด 28 ไบต์

\x10แทนค่าตัวอักษร (ค่าทศนิยม 16) จำนวนเต็มจะถูกส่งออกเป็นจำนวนเต็ม (ไบต์) ดังนั้นก่อนที่ตัวละคร\x01เอาท์พุท โปรแกรมจะพิมพ์ "," เมื่อพิมพ์แหล่งที่มาของตัวเองมันจะพิมพ์ส่วนเกิน+ที่จุดเริ่มต้น

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

คำอธิบาย:

+.                                  Increment number and print
  <-                                Pre-decrement loop counter
    <<.>.>                          Print comma and space from own source
          [             ]           Only execute if loop counter != 0
           [<]>.                    Move to left of source, then print `+`
                [.>]                Print entire source.
                    <[-]            Zero out the loop counter so this program halts.
                         , \x10     The comma, space, and loop counter used earlier.
                                    Input is empty, so `,` doesn't do anything.

โปรดทราบว่าคุณไม่สามารถเรียกใช้สิ่งนี้ในล่ามมาตรฐานเพราะต้องใช้ตัวอักษรฐานสิบหกในอินพุต คุณต้องมีเทอร์มินัลพิเศษสำหรับเอาต์พุต hex เพื่อให้ทำงานได้อย่างถูกต้อง


1

Bash, 78 74 73 - 10 = 63 ไบต์ (ตัวอย่างไม่สามารถชนะ)

p='if(($((++a>15))));then unset a p;fi;echo ${a-STOP\!}${p+, $p}';eval $p

มาช้า แต่เห็นทุบตีไม่ได้ลองเลยไปเลย ความท้าทายครั้งแรกในอ่าวและปริศนาตัวต่อ พวกเขาสนุก!

คำอธิบาย:

งานนี้เพราะaขั้นตอน 1-15 และเป็นแล้วพร้อมกับunset pสคริปต์ (เก็บไว้ในp) พิมพ์ออกมาทั้งคู่หากพวกเขาsetและ "STOP!" มิฉะนั้น. เริ่มแรกunset aคือset0 เพราะจะปรากฏในการขยายเลขคณิต


1

ch, 30 ตัวอักษร / 47 ไบต์ (ไม่แข่งขัน)

⟮a=1)+(a<ḏ?⬬+ⒸⅩ222+ᶈ0:⬯)ē(a,⧺a

Try it here (Firefox only).

ในที่สุดก็พบว่าควินจริงที่ดีสำหรับ𝔼𝕊𝕄𝕚𝕟

คำอธิบาย

นี่คือควินจริงที่ฉันใช้: ⟮ⒸⅩ222+ᶈ0

คุณเห็นมันในคำตอบของฉัน? หวังว่าคุณจะสามารถขยายจากที่นั่นได้


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