พิมพ์อักขระ N ตัวแรกของรหัสของคุณ


21

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

การอ่านซอร์สโค้ดของคุณไม่ว่าในทางใดและการอ่านจากไฟล์ stdio ฯลฯ ไม่ได้รับอนุญาต

ตัวอย่าง

(สมมติว่ารหัสของคุณคือyourcode)

อินพุต => เอาท์พุท:

5=> yourc
10=> yourcodeyo
22=>yourcodeyourcodeyour

การอธิบาย

โปรแกรมของคุณควรมีความยาวอย่างน้อย 1 ไบต์


15
ขอแสดงความยินดีกับการโพสต์การแข่งขันกอล์ฟรหัสปีที่ 2000! :)
Martin Ender

3
Douglas Hofstadterจะรักสิ่งนี้!
Luis Mendo

1
@ MartinBüttnerที่จริงแล้วมีคำถาม [code-golf] ที่ถูกลบมากกว่า 300 รายการ แต่ใกล้พอ;)
Doorknob

11
@ MartinBüttnerขอบคุณ เพียง 48 ไปจนกว่าจะถึงจำนวนรอบ!
randomra

5
อาจถึงเวลาที่คุณพูดอย่างชัดเจนว่าโปรแกรมที่ว่างเปล่านั้นไม่ถูกต้อง
Martin Ender

คำตอบ:



10

> <> , 49 ไบต์

'3d*}r0ff+0i:&0(?.~~a*&"0"-+60.&~:?!;1-&:o}&" "0.

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

'3d*}ri:?!;1-&:o}&60.

คำอธิบาย

ฉันจะใช้โปรแกรมที่สองสำหรับคำอธิบาย

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

แต่> <> เป็นภาษา 2D แบบ toroidal ดังนั้นหลังจากที่บรรทัดอยู่เหนือตัวชี้คำแนะนำจะย้อนกลับไปที่จุดเริ่มต้นกดปุ่ม'อีกครั้งและหยุดการแยกสตริง ผลที่ได้คือเราได้ผลักทุกอย่างที่จำเป็นยกเว้นการเสนอราคาครั้งแรกคือ

3d*}ri:0=?;1-&:o}&60.

'เป็น ASCII 39 3d* = 3*13 = 39ดังนั้นเราจึงผลักดันอ้างเริ่มต้นโดยการผลักดัน จากนั้นเราเลื่อนสแต็กขวา ( }) และ reverse ( r) โดยให้:

.06&}o:&-1;?=0:ir}*d3'

ตอนนี้เราพร้อมที่จะเริ่มพิมพ์แล้ว iอ่านในอินพุตจำนวนมาก แต่> <> ตัวอักษรนั้นเป็นจำนวนเต็ม ในโปรแกรมแรกiจะถูกแทนที่ด้วยการวนซ้ำที่แปลงสตริงหลักจาก STDIN เป็นจำนวนเต็ม

จากนั้นเราจะดำเนินการวนรอบต่อไปนี้เพื่อพิมพ์ตัวอักษร N ตัวแรก:

:?!;               If the top of the stack (N) is 0, then terminate
                   Otherwise...
1-                 Subtract 1 from N
&                  Move N to the register temporarily
:o                 Output the next char in the program
}                  Shift the stack right
&                  Put N back on the stack
60.                Repeat loop by jumping back to the first :

9

CJam, 34 17 16 ไบต์

นี่สามารถเล่นกอล์ฟได้มาก ..

{`"_~"+ri_@*<}_~

การขยายรหัส :

{`"_~"+ri_@*<}_~
{            }_~      "Put this code block on stack, take a copy and execute the copy";
 `                    "When executed, this block will the top element on stack to a string";
  "_~"                "Then put this string on stack";
      +               "Concat it to the the previous string on stack which ` created";
       ri             "Read an integer from STDIN";
         _@           "Copy the integer and put the concatinated string on top of stack";
           *          "Repeat the string input number of times";
            <         "Take the first input number of characters from the repeated string";

ในที่สุดสิ่งใดก็ตามบนสแต็กจะถูกพิมพ์ไปยัง STDOUT โดยอัตโนมัติ

ลองออนไลน์ได้ที่นี่


5

Python 2, 117 ไบต์

b=input();a=lambda x:(b*(2*(x+chr(34))+')'))[:b];print a("b=input();a=lambda x:(b*(2*(x+chr(34))+')'))[:b];print a(")

protip ชีวิต: list(itertools.cycle(x))ไม่ได้ดำเนินการ ด้วยเหตุผลบางอย่างฉันไม่สามารถจินตนาการได้ว่าทำไมจึงเกิดปัญหากับล่าม


1
itertools.cycle()เป็นเครื่องกำเนิดไฟฟ้าที่ไม่มีที่สิ้นสุดดังนั้นถ้าคอมพิวเตอร์ของคุณมีหน่วยความจำไม่มีที่สิ้นสุดที่คุณกำลังจะมีปัญหา :)
SP3000

5

JavaScript (ES6), 65 52 50 47 41 39

q=n=>('q='+q).repeat(n/39+1).slice(0,n)

ใช้ ES6 repeat()เพื่อโคลนรหัสจากนั้นลดขนาด ใช้ความยาวฮาร์ดโค้ด


รุ่นเก่า (50):

q=n=>n>(l=(t='q='+q).length)?t+q(n-l):t.slice(0,n)

สร้างฟังก์ชั่นqโดยใช้พารามิเตอร์เดียว

มันทำให้ข้อความของฟังก์ชันเป็นสตริงและเรียกใช้ฟังก์ชันซ้ำถ้าnมากกว่าความยาวของข้อความ มิฉะนั้นจะส่งคืนสตริงย่อยของข้อความ

ไม่ใช่รุ่น ES6 (65):

function q(n){return t=q+'',l=t.length,n>l?t+q(n-l):t.slice(0,n)}

1
ใช้การเรียกซ้ำมากกว่าของ ES6 .repeatสำหรับความต้องการของวงจรเป็นอัจฉริยะอย่างแท้จริง
จาค็อบ

1
ที่จริงแล้วดูเหมือนว่าการใช้repeat()ช่วยให้ฉันสามารถตัดมันลงเป็นพวงได้ดังนั้นฉันจึงใช้มันแทน
Scimonster

ไม่เห็นว่า ต่อไป - นี่เป็นคำตอบที่ดีมาก
Jacob

ทำไม/39+1? ทำไมไม่ปล่อยให้สายยาวพอ?
l4m2

1
q=n=>('q='+q).repeat(n).slice(0,n)ทำงานได้ดีกับ firefox
l4m2

5

J - 24 ตัวอักษร

รับอาร์กิวเมนต์จำนวนเต็มบวกเดียวและแยกสตริงออกมา

($],quote)&'($],quote)&'

J ไม่มีกลอุบายการอ้างอิงตนเองดังนั้นเราแค่ทำมันด้วยวิธี quine อธิบายโดยการระเบิด:

  ],quote                 NB. right arg prepended to quotation of right arg (quine)
 $                        NB. cyclically take left-arg characters from that
(        )&'($],quote)&'  NB. preload right arg with  ($],quote)&

ตัว$ดำเนินการdyadic ใน J cyclically นำไอเท็มจากอาร์กิวเมนต์ขวาเพื่อให้พอดีกับมิติที่ระบุทางด้านซ้าย เมื่อส่วนข้อมูลเป็นตัวเลขเดียวนี่คือรายการอักขระ 1D แบบง่ายดังนั้นเราจึงทำสิ่งที่คำถามถาม

ลองด้วยตัวคุณเองที่tryj.tk


วัตถุประสงค์ทั่วไปของquoteคำกริยาคืออะไร?
randomra

@randomra คำจำกัดความในไลบรารีมาตรฐานคือ''''&,@(,&'''')@(#~ >:@(=&''''))หรือเป็นภาษาอังกฤษ "เพิ่ม'อักขระเป็นสองเท่าจากนั้นเพิ่มหนึ่งตัวเพื่อเริ่มต้นและสิ้นสุด" J ใช้ตัวอักษรสตริงที่เหมือนกับ Ada ดังนั้นนี่จึงหนีจากสตริง
algorithmshark

4

k2 - 7 ตัวอักษร

{x#$_f}

ในภาษาอังกฤษนี่คือฟังก์ชั่นที่มีอาร์กิวเมนต์xที่มีความหมายว่า " xtake string self"

  • Self (คำนาม_f) เป็นฟังก์ชันที่อยู่ภายในสุดในปัจจุบัน {x#$_f}นี่มันเป็นฟังก์ชั่น
  • String (monadic $) แปลงอาร์กิวเมนต์เป็นสตริง ในกรณีของฟังก์ชั่นมันจะสร้างสตริงที่มีความหมายดั้งเดิมของฟังก์ชั่น
  • ใช้ (dyadic #) เตะซ้ายหาเรื่องรายการรูปแบบรายการในขวาหาเรื่อง ในกรณีของสตริงรายการนั้นเป็นตัวละครดังนั้นนี่คือสิ่งที่เราต้องการ

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

ใน Q นี้เป็น{x#string .z.s}และใน {x#2_$.z.s}k4 เราต้องใช้2_เพื่อลดอักขระสองตัวเริ่มต้นใน k4 ด้วยเหตุผลที่แม่สามารถรักได้เท่านั้น


3

Ruby, 66 64 63 ไบต์

eval s=%q(puts"eval s=%q(#{s})".chars.cycle.take(gets.to_i)*'')

การใช้ฟังก์ชั่นเดียวกันเพื่อหลีกเลี่ยงการโทรgetsนั้นใช้เวลานานกว่า (81 ไบต์):

def f(i);eval s=%q(puts"def f(i);eval s=%q(#{s});end".chars.cycle.take(i)*'');end

แลมบ์ดารุ่นเดียวกันมีขนาด 69 และ 65 ไบต์:

l=->i{eval s=%q(puts"l=->i{eval s=%q(#{s})}".chars.cycle.take(i)*'')}
->i{eval s=%q(puts"->i{eval s=%q(#{s})}".chars.cycle.take(i)*'')}

1
.cycleเรียบร้อยฉันต้องจำไว้ว่า :) คุณอาจจะสั้นลงไป.join *''
Martin Ender

คุณสามารถบันทึกสองสามตัวอักษรโดยใช้String#formatแทนการแก้ไข:eval s="$><<('eval s=%p'%s).chars.cycle.take(gets.to_i)*''"
Ventero

3

Mathematica, 65 ไบต์

Print[StringTake[StringJoin @@ Table[ToString[#0], {#1}], #1]] & 

ช่องว่างทั้งหมดจำเป็นต้องทำให้เป็นแบบ quine ที่เหมาะสมรวมถึงส่วนต่อท้าย นี่คือฟังก์ชั่นแท้ซึ่งคุณสามารถใช้ดังนี้:

Print[StringTake[StringJoin @@ Table[ToString[#0], {#1}], #1]] & [75]

ซึ่งพิมพ์

Print[StringTake[StringJoin @@ Table[ToString[#0], {#1}], #1]] & Print[Stri

แต่น่าเสียดายที่การใช้ToStringฟังก์ชั่นไม่ได้ผลว่าวิธีที่คุณเข้ามาทำงานดังนั้นฉันไม่สามารถร่นนี้โดยการลบช่องว่างสั้นลง#1ไป#หรือใช้คำนำหน้าสัญกรณ์สำหรับการโทรฟังก์ชั่น


"ย่อ#เป็น#1" หรือไม่
undergroundmonorail

@undergroundmonorail อีกทางหนึ่งขอบคุณ
Martin Ender

3

MATLAB, 319 141 ตัวอักษร

ฉันจัดการเพื่อบีบไม่กี่ไบต์จากเดิม:

function d=g(n);d='gvodujpo!e>h)o*<e>(<e>\e)2;2:*.2-e-e)2:;foe*.2^<e>e)2,npe)1;o.2-252**<';d=[d(1:19)-1,d,d(19:end)-1];d=d(1+mod(0:n-1,141));

คำตอบที่ดี ... ! ไม่มีความคิดวิธีการทำงาน :-)
Luis Mendo

3

จาวาสคริปต์, 34 ไบต์

f=n=>n&&('f='+f+f(n-1)).slice(0,n)

ฟังก์ชั่นวนซ้ำที่ทำซ้ำรหัสnเวลาจากนั้นแบ่งส่วนผลลัพธ์


3

Japtap , 2 ไบต์

îî

ลองออนไลน์!

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

transpiles นี้ไปที่:

n.î("î")-> ทำซ้ำ"î"จนกว่าจะถึงความยาวn

8 ไบต์แก้ปัญหา

îQi"îQi"

ลองออนไลน์!

îQi"îQi" transpiles เป็น n.î(Qi"îQi")

n.î(Qi"îQi")
      "îQi"    // String "îQi"          -> îQi
    Qi         // Insert "              -> îQi"
n.î            // Repeated to length n  -> îQi"îQi"îQi"  (n=12)

1
สวยในความเรียบง่าย!
Shaggy

2

R, 203 ไบต์

เมื่อ N = 203 รหัสจะพิมพ์เองอย่างสมบูรณ์

(f <- function(N){
str <- paste0("(f <- function(N)", paste0(as.character(body(f)), collapse = "\n"), ")}(", N, ")")
cat(rep(str, floor(N/nchar(str))), sep = "")
cat(substr(str, 1, N%%nchar(str)))})(203)

เมื่อ N = 50 รหัสจะย่อตัวเอง

(f <- function(N){
str <- paste0("(f <- function(N

เมื่อ N = 300 รหัสซ้ำได้บางส่วน

(f <- function(N){
str <- paste0("(f <- function(N)", paste0(as.character(body(f)), collapse = "\n"), ")}(", N, ")")
cat(rep(str, floor(N/nchar(str))), sep = "")
cat(substr(str, 1, N%%nchar(str))))}(300)(f <- function(N){
str <- paste0("(f <- function(N)", paste0(as.character(body(f)), collapse = "\

ลองดูสิ:(f=function(N){s=paste0("(f=",paste0(capture.output(f),collapse=""),")");cat(rep(s,N%/%nchar(s)),substr(s,1,N%%nchar(s)),sep="")})(200)
โธมัส

2

Matlab (57)

function s=f(n);s=evalc('type f');s=s(mod(1:n,nnz(s))+1);

1ดัชนีเริ่มต้น(แทน0) ในบรรทัดสุดท้ายเป็นเพราะฟังก์ชั่นของ Matlab typeแนะนำการป้อนบรรทัดเริ่มต้นซึ่งควรจะลบออก ขอบคุณเดนนิสสำหรับการแก้ไขของเขา (ดัชนีล่าสุด) และสำหรับคำแนะนำของเขา ( nnzสั้นกว่าnumel)


ฉันกลัวว่านี่จะไม่ทำสิ่งที่ฉันคาดหวัง (f (4) ส่งคืน 'ความสนุก') ข่าวดีก็คือคุณสามารถแก้ไขได้โดยการบันทึก 2 ตัวอักษร (ลบ-1) - ฉันคิดว่าคุณยังสามารถลบขึ้นบรรทัดใหม่สองและสลับออกสำหรับnumel nnz
Dennis Jaheruddin

@Dennis ขอขอบคุณสำหรับความคิดสองข้อนี้! ฉันแก้ไขเพื่อรวมทั้งสอง
หลุยส์เมนโด

อืมฉันไม่ต้องการเป็น buzzkill แต่ไม่มีtype fส่วนที่ขัดแย้งกับข้อกำหนดในการอ่านซอร์สโค้ดของคุณในทางใดทางหนึ่งและอ่านจากไฟล์ stdio ฯลฯ ไม่ได้รับอนุญาตหรือไม่
knedlsepp

@ knedlsepp ฉันคิดว่าคุณพูดถูก ฉันก็สงสัยเช่นกัน typeอาจเข้าถึงฮาร์ดดิสก์ คุณคิดว่าฉันควรลบคำตอบหรือไม่?
Luis Mendo

@ LuisMendo: ฉันไม่คิดว่าใครจะสนใจ :-) ฉันแค่อยากจะให้ปัญหานี้ไปเมื่อวานนี้เพราะฉันล้มเหลวในการผลิตควินคล้ายคลึงกับเรื่องนี้ไม่กี่ครั้งก่อน และแน่นอนฉันต้องตรวจสอบว่ามีโซลูชัน Matlab อยู่แล้ว :-) ในท้ายที่สุดสิ่งนี้ทำให้ฉันมีแรงบันดาลใจมากพอที่จะขุดลึกลงไปในสิ่งนี้เพื่อสร้างทางออกในที่สุด (ฉันขโมยmodความคิดในการค้นหาของคุณตามวิธี)
knedlsepp

2

เอกนารี (รุ่น 1-8) , 23855 ไบต์

รับอินพุตเป็น unary ของ '1 และรหัสคือ 23855' 1 ( ,[.,])


1
นี่แปลว่า brainfuck อะไรด้วย?
DJMcMayhem

@DJMcMayhem มันเป็นแมว
l4m2

ตอนนี้หาภาษาที่อินพุต unary เข้าท่าและโปรแกรม 1 char บางตัวทำแมว
l4m2

2

Japt , 40 28 ไบต์


"îR+Q+V+Q+R+V"
îR+Q+V+Q+R+V

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

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

โกนมหันต์ 12 ไบต์ขอบคุณที่โอลิเวอร์

ลองออนไลน์!


ดี :) คุณสามารถแทนที่tTUด้วย¯Uและคุณสามารถใช้îแทนpโดยย้ายไปที่ด้านหน้า: ลองออนไลน์
โอลิเวอร์

ในความคิดที่สองฉันไม่คิดว่าคุณจะต้องฝานมันเลย îR+Q+V+Q+R+Vควรทำงานได้ดี
โอลิเวอร์

@Oliver โอ้ช่างฉลาดฉันไม่รู้เรื่องîนั่นมันช่างมีประโยชน์มาก ขอบคุณมาก!
นิด

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

1

C ++, 305

int L=305;string s="int main(){string t=\"string s=\";int n;cin>>n;t+=s;t+=\"\";\";t+=s;while(n>0){if(n>L){cout<<t;n-=L;}else{cout<<t.substr(0,n);}return 0;}";
int main(){string t="int L=305;string s=\"";int n;cin>>n;t+=s;t+="\";";t+=s;while(n>0){if(n>L){cout<<t;}else{cout<<t.substr(0,n);}n-=L;}return 0;}

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


1

Pyth, 15 13 14 ไบต์

<jN*Q]"<jN*Q]"

ลองออนไลน์!

ฉบับแก้ไขของมาตรฐาน Pyth ควิน


@ l4m2 เป็นอย่างไร โปรดอธิบายฉันไม่เห็นอะไรผิดปกติ ...
hakr14

29 ควรจะ<jN*Q]"<jN*Q]<jN*Q]"<jN*Q]<jNผิดหรือเปล่า?
l4m2

@ l4m2 อ่าใช่แล้ว ฉันแก้ไขมันแล้ว
hakr14

<jN*Q]"<jN*Q]"ดูเหมือนว่าจะทำงานอย่างไร
l4m2

ใช่ฉันรู้ว่า ขอบคุณสำหรับความช่วยเหลือ btw!
hakr14

1

ฮุน , 185 ไบต์

=/(f "=/(f k |=(n=@ =+((trim 5 f) `tape`(scag n `tape`(zing (reap n :(weld p <f> (slag 1 q))))))))" |=(n=@ =+((trim 5 f) `tape`(scag n `tape`(zing (reap n :(weld p <f> (slag 1 q))))))))

ตั้งfรหัสของโปรแกรมเป็นเทป แต่ด้วย "k" สำหรับตัวเอง แยกเทปที่ตัวละครที่ 5 [p=left q=right]การตั้งค่าตัวแปร เชื่อมกันสตริงpสตริงเดิมและทุกอย่างหลังจากที่ตัวละครที่f 1 qทำซ้ำสตริงnนั้นแล้วส่งคืนnอักขระตัวแรกของสตริงนั้น

การทำเช่นนี้ถูกขัดขวางเล็กน้อยโดย stdlib ของ Hoon ที่ไม่มีฟังก์ชั่นการจัดรูปแบบหรือค้นหาและแทนที่ ... นอกจากนี้ฉันไม่แน่ใจว่าทำไมเราถึงต้องการนักแสดงคนอื่นหลังจากscagนั้นเนื่องจากควรเก็บข้อมูลประเภทไว้ ดังนั้นมันจะไป




1

Gol> <> , 12 ไบต์

"r2ssIFLko|;

ลองออนไลน์!

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

"r2ssIFLko|;

"..."   Push the chars in reverse order
r2ss    Reverse the stack, then push `"`
IF...|  Input n, and repeat the following n times...
  L     Push the loop counter (0 to n-1)
   k    Pop x and copy x-th from the top
    o   Pop and print as char
;       Halt

k สามารถตัดจำนวนครั้งใด ๆ ดังนั้นเราจึงไม่จำเป็นต้องทำซ้ำทั้งกองขึ้นอยู่กับอินพุต



0

KSFTgolf - 4 ตัวอักษร 6 ไบต์

KSFTgolf ถ้าภาษาที่ฉันพยายามออกแบบสำหรับกอล์ฟรหัส ฉันเปลี่ยนมันเยอะมากดังนั้นนี่คงไม่ควรนับ

☃\@2

นี่คือภาษาอะไร ? ลิงก์ใด ๆ สเป็ค? คำอธิบาย ..
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer Ah ใช่ ฉันลืมเรื่องนั้นไป มันเป็นภาษาที่ฉันออกแบบมาสำหรับการเล่นกอล์ฟ ในที่สุดนี่คือความท้าทายที่ (ถ้าฉันแก้ไขข้อบกพร่องทั้งหมด) มันสามารถชนะได้จริง
KSFT

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

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

4
คุณต้องการที่จะสร้างมนุษย์หิมะหรือไม่?
ข้อบกพร่อง


0

J, 41 ไบต์

ตอนนี้มันเป็นเกมพัฒนาสมอง!

((,quote,')$~'"_)'((,quote,'')$~''"_)')$~

คำอธิบาย:

((,quote,')$~'"_)'((,quote,'')$~''"_)')$~  | Expression taking 1 argument
                                       $~  | Reshape left argument to fit right, taking cyclically.
(                                     )    | One large expression that evaluates to a string
                 '((,quote,'')$~''"_)'     | String literal containing the code to the left of it
 (,quote,'$)~'"_)                          | A 4-Hook:
         '$)~'"_                           | The string '$)~'
   quote,                                  | Appended to the quoted version of the string
  ,                                        | Appended to the raw string

ตัวอย่าง:

   ((,quote,')$~'"_)'((,quote,'')$~''"_)')$~ 10
((,quote,'

   ((,quote,')$~'"_)'((,quote,'')$~''"_)')$~ 20
((,quote,')$~'"_)'((

   ((,quote,')$~'"_)'((,quote,'')$~''"_)')$~ 30
((,quote,')$~'"_)'((,quote,'')

   ((,quote,')$~'"_)'((,quote,'')$~''"_)')$~ 41
((,quote,')$~'"_)'((,quote,'')$~''"_)')$~

   ((,quote,')$~'"_)'((,quote,'')$~''"_)')$~ 50
((,quote,')$~'"_)'((,quote,'')$~''"_)')$~((,quote,


0

Java 10, 193 176 ไบต์

n->{var s="n->{var s=%c%s%1$c;s=s.format(s,34,s);for(int i=n;i>0;i/=176)s+=s;return s.substring(0,n);}";s=s.format(s,34,s);for(int i=n;i>0;i/=176)s+=s;return s.substring(0,n);}

คำอธิบาย:

ลองออนไลน์

n->{                       // Method with integer parameter and String return-type
  var s="n->{var s=%c%s%1$c;s=s.format(s,34,s);for(int i=n;i>0;i/=176)s+=s;return s.substring(0,n);}";
                           //  Unformatted source code
  s=s.format(s,34,s);      //  Create the formatted quine
  for(int i=n;i>0;         //  Loop `i` as long as it's not 0
      ;                    //    After every iteration:
       i/=176)             //     int-divide `i` by the hardcoded length of the source code
    s+=s;                  //   Exponentially enlarge the source code
  return s.substring(0,n);}//  Return the first `n` characters of the source code

:

  • var sมีรหัสที่มาที่ยังไม่ฟอร์แมต
  • %sจะใช้ในการป้อนข้อมูล String s.format(...)นี้ลงในตัวเองด้วย
  • %c, %1$cและ34จะใช้ในการจัดรูปแบบราคาสองครั้ง
  • s.format(s,34,s) ทำให้มันเข้าด้วยกัน

ส่วนที่ท้าทาย:

  • for(int i=n;i>n;i/=176)วนซ้ำceil(n/176)ซึ่ง176ความยาวของซอร์สโค้ดอยู่ที่ใด
  • s+=s;ชี้แจงเพิ่มขนาดของสตริงรหัสต้นฉบับ ( abกลายเป็นabab; ababกลายabababab; ababababกลายabababababababab; ฯลฯ )
  • s.subtring(0,n);ใช้nอักขระตัวแรกของสตริง


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