ควาย“ โกง”


56

โปสเตอร์แฝงตัวเป็นเวลานานเป็นครั้งแรก ดังนั้นที่นี่ไป

ในหน้าวิกิพีเดียสำหรับquineมันบอกว่า "ควินินถือว่าเป็น 'การโกง' ถ้ามันดูซอร์สโค้ดของมันเอง" งานของคุณคือการทำให้หนึ่งใน "โกง quines" ที่อ่านรหัสต้นฉบับ

นี่คือดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์ - ในแต่ละภาษา - ชนะ ซึ่งหมายความว่าสคริปต์ Pyth ขนาด 5 ไบต์จะไม่ชนะสคริปต์ Python ขนาด 21 ไบต์ แต่สคริปต์ Python ขนาด 15 ไบต์

คุณต้องใช้ไฟล์ I / O เพื่ออ่านซอร์สโค้ดดังนั้นโค้ด JavaScript ต่อไปนี้ที่นำมาจากหน้า Wikipedia อย่างเป็นทางการนั้นไม่ถูกต้อง:

function a() {
    document.write(a, "a()");
}
a()

มันจะต้องเข้าถึงรหัสที่มาของไฟล์บนดิสก์

คุณไม่ได้รับอนุญาตให้ระบุชื่อไฟล์ คุณต้องทำให้มันตรวจจับชื่อไฟล์เอง

ทุกคนชัดเจน? ไป!


1
บรรทัดใหม่ต่อท้ายไม่ปรากฏในไฟล์ต้นฉบับอนุญาตหรือไม่
isaacg

3
@isaacg IMHO นั่นไม่ใช่ quine เนื่องจากไม่ใช่ซอร์สโค้ด
mınxomaτ

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

3
ฉันเห็นด้วยกับ @feersum แต่การที่ต้องใช้ชื่อไฟล์ที่เฉพาะเจาะจงทำให้ความท้าทายนี้เป็นเรื่องเล็กน้อย
mınxomaτ

1
เราสามารถสันนิษฐานได้ว่า (สำหรับภาษาที่คอมไพล์) ซอร์สโค้ดอยู่ในโฟลเดอร์เดียวกัน (เช่นเราสามารถเพิ่ม ".cpp" หรือ ".hs" เพื่อหาเรื่อง [0] เพื่อรับซอร์ส)
HEGX64

คำตอบ:


60

Zsh , 4 ไบต์

<$0

Z เชลล์มีฟังก์ชันแมวตัวละครตัวที่สี่คือ linefeed

ลองออนไลน์!

รหัสไม่ได้ขึ้นอยู่กับชื่อไฟล์ มันใช้งานได้แม้ว่าชื่อไฟล์จะมีอักขระพิเศษเช่นช่องว่างหรือบรรทัดใหม่

ทดสอบการทำงาน

$ cat "my quine.sh"
<$0
$ zsh "my quine.sh" 
<$0
$ diff -s <(zsh "my quine.sh") <(cat "my quine.sh")
Files /dev/fd/63 and /dev/fd/62 are identical

28
feline functionalities:)
TheB

48

Bash ขนาด 6 ไบต์

cat $0

เป็นพื้น


3
มันไม่ได้พิมพ์ขึ้นบรรทัดใหม่
Addison Crump

2
catไม่ผนวกบรรทัดใหม่ (อย่างน้อยในระบบของฉัน)
สปาเก็ตตี้

7
@isaacg catพิมพ์เนื้อหาของไฟล์ที่ให้มาไบต์ต่อไบต์
เดนนิส

2
@ Lukstorms แต่นี่จะไม่ใช่catวิธีแก้ปัญหาแทนที่จะเป็นbashวิธีแก้ปัญหาใช่ไหม และแมวก็ไม่ได้มีคุณสมบัติเป็นภาษาโปรแกรมจริงๆ
Fabian Schmengler

30
จะทำงานนี้ถ้าไฟล์เป็นชื่อ-e?
Mark Plotnick

32

ตัวโหลดที่รันได้ UNIX ขนาด 10 ไบต์

#!/bin/cat

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

#!/bin/dd

7
ฉันชอบสิ่งนี้. ไม่แน่ใจว่ามันมีคุณสมบัติเป็น "ภาษา" หรือไม่
Kevin

อาจจะโกงเล็กน้อย แต่คุณไม่สามารถเปลี่ยนชื่อโฟลเดอร์ bin และโปรแกรม cat เพื่อทำให้เส้นทางสั้นลงหรือไม่
James Webster

3
ฉันไม่แนะนำให้คุณทำ btw ฉันแนะนำให้คุณทำได้
James Webster

3
@ Kevin "ภาษา" (นั่นคือล่าม) catเป็น และผมคิดว่าถ้าคุณต้องการที่จะเฉพาะเจาะจงมากcatโปรแกรมเพียงแค่พิมพ์ตัวเองและเข้ากันได้กับทุกรูปแบบแฟ้มในการดำรงอยู่ :)
l0b0

1
sudo install /bin/cat /c@JamesWebster ใช่แล้วในกรณีที่/binไม่ได้อยู่ในระบบไฟล์รูท ต้องมีสิ่งนั้นcatใน singleuser …
Blacklight Shining

25

C, 52

s[99];main(){read(open(__FILE__,0),s,99);printf(s);}

แน่นอนนี้อ่านซอร์สโค้ดไม่ใช่โปรแกรมที่คอมไพล์ - ฉันถือว่ามันอยู่ในสเป็ค


คุณสามารถใช้printfแทนที่จะputsหลีกเลี่ยงการขึ้นบรรทัดใหม่
feersum

@feersum ใช่จับได้ดี
Digital Trauma

19
@DigitalTrauma มันเป็นเพราะอวตารของคุณแน่นอน
Peter Olson

3
ที่จริงแล้วputsสามารถใช้งานได้คุณต้องreadมีอักขระน้อยลง
user4098326


13

PHP, 21 ไบต์

<?=file(__FILE__)[0];

fileอ่านบรรทัดไฟล์ทีละบรรทัดในอาร์เรย์และไฟล์มีเพียงหนึ่งบรรทัด readfile(__FILE__)นี้ช่วยประหยัดไบต์ในการเปรียบเทียบกับ


ขอให้สังเกตว่ามันใช้งานได้ตั้งแต่ PHP5.4 ขึ้นไปซึ่งเป็นรุ่นแรกที่รองรับการอ้างอิงอาร์เรย์ แต่นอกเหนือจากนั้นคำตอบค่อนข้างดี!
Ismael Miguel

1
readfileยังเป็น <?readfile(__FILE__);21:
โม่

1
ใช่แล้วไม่จำเป็นต้องใช้เลย<?=
Fabian Schmengler

12

Perl, 15 ไบต์

open 0;print<0>

บันทึกแล้ว 3 ไบต์ขอบคุณ @ ThisSuitIsBlackNot !


2
คุณสามารถบันทึก 3 ไบต์ด้วยopen 0;print<0>
ThisSuitIsBlackNot

@ThisSuitIsBlackNot ฉันแน่ใจว่ามีวิธีที่สั้นกว่าที่จะทำ แต่ฉันไม่สามารถใช้ชีวิตของฉันออกไปได้ ... ใช้0สมมติฐาน$0แล้ว?
Dom Hastings

3
อ๋อ โปรดดูperldoc -f open: "ในฐานะทางลัดการเรียกใช้อาร์กิวเมนต์ตัวเดียวจะใช้ชื่อไฟล์จากตัวแปรสเกลาร์โกลบอลที่มีชื่อเดียวกับ filehandle: $ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";"
ThisSuitIsBlackNot

11

Perl 6, 20 ไบต์

print slurp $?FILE

ฉันไม่ได้ทำงานกับ Perl 6 นานมากดังนั้นฉันไม่แน่ใจว่ามีเทคนิคใดที่ทำให้เรื่องนี้สั้นลงหรือไม่


2
คุณสามารถลบช่องว่างที่สองได้หรือไม่
Eevee

3
@Eevee ไม่มันโกรธ
Hotkeys

11

osascript (AppleScript จากบรรทัดคำสั่ง), 40 33 32 ไบต์

(อ่านเส้นทางมาหาฉัน) วรรค 1

osascript aการดำเนินการเกี่ยวกับไฟล์ที่เรียกว่ากับ

รับย่อหน้า (บรรทัด) ของไฟล์และพิมพ์ไปยัง STDOUT พร้อมกับขึ้นบรรทัดใหม่ดังนั้นบรรทัดใหม่ในโค้ด


1
ดูการแก้ไข OP ของฉัน
TheInitializer

ทำงานเพื่อให้มันทำงาน
Addison Crump

read path to meดูเหมือนว่าจะทำงานให้ฉัน เอลแคป
Digital Trauma

ไม่เห็นนี่ แต่นี่เป็นวิธีที่ฉันทำ : P ขอบคุณ @ DigitalTrauma แก้ไข: บรรทัดใหม่ที่ต่อท้ายจะต้องพิจารณาเพื่อให้คุณเพิ่มบรรทัดใหม่และใช้ย่อหน้า 1
Addison Crump

11

Python 2, 32 ไบต์

มีการขึ้นบรรทัดใหม่ที่ท้ายไฟล์

print open(__file__).readline()

Python 3, 33 ไบต์

มีการขึ้นบรรทัดใหม่ที่ท้ายไฟล์

print(open(__file__).readline())

ขอขอบคุณที่feersumสำหรับการจับปัญหาและการจัดหา__file__, Loovjoหาวิธีการใหม่ในการแก้ปัญหางูหลาม 2 ที่บันทึกไว้ 17 ไบต์และSkylerหาโซลูชันที่บันทึกไว้เลยไบต์อื่นและทำงานอยู่ในทั้งงูหลามที่ 2 และ 3 (รอprintเป็นฟังก์ชั่นในหลาม 3)!

ลิงก์ Doc สำหรับ readline


สิ่งนี้จะช่วยประหยัด 2 ไบต์ใน python3 เนื่องจากคุณสามารถละทิ้งendพารามิเตอร์ได้
Skyler

@Skyler คุณถูกต้องอย่างแน่นอน
Celeo

วิธีการทำงานนี้ในหลาม 3 ซึ่งต้องการ parens สำหรับprint?
Doorknob

Python 3 ควรprint(open(__file__).readline())ตามด้วยการขึ้นบรรทัดใหม่
Skyler

ตัวอย่าง Python 3 ของคุณบอกว่า Python 2 แทนที่จะเป็น Python 3
TheInitializer


10

Python 2.7, 30 ไบต์

print open(__file__).read(29)

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

ฉันใช้เล่ห์เหลี่ยมเดียวกันกับที่นี่ในการส่ง C ของฉัน สิ่งนี้จะอ่านไฟล์ต้นฉบับทั้งหมดยกเว้นการขึ้นบรรทัดใหม่ต่อท้ายเพื่อบัญชีขึ้นบรรทัดใหม่เพิ่มเติมซึ่งprintจะผนวกเข้ากับเอาต์พุต


สิ่งนี้เกิดปัญหาเดียวกันกับการขึ้นบรรทัดใหม่ที่การส่งอื่น ๆ ทำหรือไม่
โคล

ไม่ควรมีบรรทัดใหม่ที่ต่อท้ายซึ่งทำให้ 30 ไบต์ในซอร์สโค้ด แต่ฉันไม่สามารถแสดงในบล็อคโค้ดได้ การส่งของฉันทำงานได้เนื่องจากอ่าน 29 ไบต์แรกของซอร์สโค้ดเพื่อให้บรรทัดใหม่จากprintจะไม่อยู่ภายนอก
xsot

4
นั่นไม่ใช่สิ่งที่จุลภาคทำ มันผนวกช่องว่างแทนการขึ้นบรรทัดใหม่
xsot

2
สามารถใช้␤เพื่อระบุบรรทัดใหม่ที่มีความสำคัญทางความหมาย
Eevee

9

Java, 212 196 ไบต์ (171 ไบต์พร้อมด้วยกฎการเข้ารหัสยากที่น่าสงสัย)

ขอบคุณ @Cruncher สำหรับการย่อให้สั้นลง ~ 15 ไบต์!

ฉันไม่สงสัยเลยว่านี่สามารถเล่นกอล์ฟได้

import java.nio.file.*;class A{public static void main(String[]a){new A();}A(){try{System.out.print(new String(Files.readAllBytes(Paths.get(getClass().getName()+".java"))));}catch(Exception e){}}}

หรือวิธีอื่นโดยใช้วิธีการคงที่ (และชื่อของชั้นเรียน) ฉันได้รับ 171 ไบต์ ฉันไม่แน่ใจว่าสิ่งนี้มีคุณสมบัติเป็นฮาร์ดโค้ดหรือไม่

import java.nio.file.*;class A{public static void main(String[]a)throws Exception{System.out.print(new String(Files.readAllBytes(Paths.get(A.class.getName()+".java"))));}}

ใช้ตัวสร้างเพื่อรับชื่อคลาสโดยวิธีการไม่คงที่ โดยใช้วิธีการแบบคงที่ ( A.class.getName()) คือจริงๆเขียนยากดังนั้นผมจึงใช้วิธี 'เหมาะสม' ใช้A.class.getName()รหัสนี้สั้นลงถึง 171 ไบต์

รุ่นที่อ่านได้:

ใช้ตัวสร้างและthis.getClass():

import java.nio.file.*;
class A{
    public static void main(String[]a) {
        new A();
    }
    A(){
        try{
            System.out.print(
                new String(
                Files.readAllBytes(
                Paths.get(
                getClass().getName()+".java"))));
        }
        catch(Exception e) {}
    }
}

ใช้วิธีการคงที่A.class.getName():

import java.nio.file.*;
class A {
    public static void main(String[] a) throws Exception {
        System.out.print(
             new String(
                  Files.readAllBytes(
                       Paths.get(
                            A.class.getName()+".java"))));
    }
}

จับไบต์ทั้งหมดของไฟล์ในครั้งเดียวและส่งออกไปยัง STDOUT ตรงไปตรงมาสวย


ทำไมไม่ใช้A.class.getName()?
Fabio F.

3
มันเป็น CodeGolf ไม่ใช่ CodeReview! ;)
Fabio F.

1
@FabioF ใช่ แต่ฉันคิดว่าการเต้นในสายของการเป็นชื่อไฟล์ hardcoded ซึ่งผิดกฎ ประเด็นคือถ้าคุณเปลี่ยนชื่อไฟล์คุณต้องเปลี่ยนชื่อของคลาส (ชัด) แต่เปลี่ยนสายนี้ซึ่งเป็นเหมือนชื่อไฟล์ hardcoded
Cruncher

1
คุณไม่สามารถเรียกคำแถลงการพิมพ์ภายในตัวสร้างและช่วยตัวเองจากการตั้งค่าตัวแปรแบบคงที่หรือไม่
Cruncher

1
@ Cruncher Nah คุณได้รับ java.io ฉันจะติดกับ java.nio - จุดนี้ไม่ได้ชนะ แต่แสดงวิธีที่จะทำมันให้รัดกุมมากกับวิธีการที่แตกต่างกัน
Addison Crump



7

ไป, 111 105 ไบต์

package main
import("io"
."os"
."runtime")
func main(){_,p,_,_:=Caller(0)
f,_:=Open(p)
io.Copy(Stdout,f)}

code-golf ครั้งแรกของฉันใน Go - เพียงไม่กี่เทคนิคที่คุณสามารถใช้ที่นี่ฉันเดา


มีคำตอบใน Go แล้ว - ใช้วิธีการเดียวกันนี้หรือไม่?
Addison Crump

@VoteToClose: ฉันรู้ว่าฉันได้รับแรงบันดาลใจจากคนอื่น ๆ แน่นอน แต่ใช้แพคเกจการเปลี่ยนชื่อที่นี่ (เคล็ดลับราคาถูก) เช่นเดียวกับเทคนิคที่แตกต่างกันสำหรับการเปิดและท่อไฟล์เพื่อ stdout ช่วยฉันด้วยขนาด 22 ไบต์ ;-)
tomasz

จริงๆแล้ววิธีการนั้นแตกต่างกันเล็กน้อยดีมาก!
Fabian Schmengler

7

PowerShell, 39 36 31 25 ไบต์

เกี่ยวกับคับที่ฉันจะได้รับ:

gc $MyInvocation.MyCommand.Path | oh

ได้รับการสนับสนุนตามความต้องการที่เป็นที่นิยมสิ่งนี้ได้ถูกเปลี่ยนเป็น:

gc $PSCommandPath|echo -n

พิมพ์ไปยังเอาต์พุตมาตรฐานปัจจุบันของเชลล์โฮสต์


gc $MyInvocation.MyCommand.Pathก็เพียงพอแล้ว มันจะพิมพ์ออกมาโดยอัตโนมัติ
แอนดรู

มันไม่รับประกันว่าจะได้โดยเฉพาะอย่างยิ่งหากสคริปต์ทำงานเงียบ
Chad Baxter

ฮ่าฮ่าใช่ฉันไม่สนใจ ฉันจะโพสต์ถ้าไม่มีใครมีคำตอบ PowerShell แต่ฉันลืมว่านั่นgcเป็นนามแฝงและกำลังจะใช้catดังนั้นคุณมีไบท์กับฉันที่นั่น
แอนดรู

เอ่อฉันจะไม่เข้มงวดกับมัน มิฉะนั้นคำตอบ PS ทั้งหมดจะต้องไพพ์ไปยังเชลล์โฮสต์อย่างชัดเจน แต่นั่นก็ขึ้นอยู่กับคุณ ...
Andrew

คุณสามารถใช้gc $PSCommandPath17 ไบต์แทน ปัญหาที่ฉันเห็นคือสิ่งนี้ทำให้เกิดการขึ้นบรรทัดใหม่ (ซึ่งไม่มีอยู่ในแหล่งที่มา) มันไม่ชัดเจนในตอนนี้หากการขึ้นบรรทัดใหม่เป็นไปตามตกลงหรือไม่ ... ขึ้นอยู่กับว่ากฎนั้นเราอาจต้องทำบางสิ่งที่มีความซับซ้อนเช่นgc $PSCommandPath|write-host -n31 ไบต์
AdmBorkBork


5

C, 49 ไบต์

s[];main(){read(open(__FILE__,0),s,48);puts(s);}

แก้ไข: เพื่อชี้แจงชัดเจนไบต์ที่ 49 เป็นบรรทัดใหม่

นี่เป็นการอ่านซอร์สโค้ดด้วยการขึ้นบรรทัดใหม่ในตอนท้ายเพื่อทำการขึ้นบรรทัดใหม่ซึ่งputsจะต่อท้ายส่วนท้ายของเอาต์พุต


รหัสนี้จะเรียกพฤติกรรมที่ไม่ได้กำหนดสองครั้ง
Joshua

5
นี่คือรหัสกอล์ฟ รหัสของฉันสร้างผลลัพธ์ที่ต้องการดังนั้นจึงเป็นข้อมูลที่ถูกต้อง
xsot

1
@xsot ในกรณีนั้นคุณควรแสดงรายการตัวเลือก version + compiler มิฉะนั้นอาจไม่สามารถตรวจสอบได้
Justin

1
หากอนุญาตให้มีพฤติกรรมที่ไม่ได้กำหนดตราบใดที่คุณมีคอมไพเลอร์บางตัวที่สร้างผลลัพธ์ที่ต้องการในเครื่องบางช่วงของดวงจันทร์ฉันก็ขอเสนอ int main (void) {* 0; } เป็นวิธีแก้ปัญหา ท้ายที่สุดมาตรฐานจะอนุญาตให้มีการใช้งานที่รวบรวมว่าเป็นโปรแกรมที่ช่วยแก้ปัญหา ฉันพอใจกับการใช้พฤติกรรมที่ขึ้นอยู่กับการใช้งานตราบใดที่คุณระบุคอมไพเลอร์ แต่ด้วยพฤติกรรมที่ไม่ได้กำหนดคุณไม่สามารถรับประกันได้ว่าคุณจะไม่ได้รับคำตอบที่แตกต่างกันสิบข้อถ้าคุณวิ่งสิบครั้งในแถวบน เครื่องเดียวกัน
เรย์

1
@MDXF ฉันไม่ได้แนะนำอย่างจริงจังว่าเราเขียนวิธีแก้ปัญหานั้น ฉันโต้เถียงกับการอนุญาตให้มีพฤติกรรมที่ไม่ได้กำหนด int main() {*0;} อาจทำงานได้แม้ในคอมไพเลอร์ที่มีอยู่เนื่องจากมันมีพฤติกรรมที่ไม่ได้กำหนด ในทำนองเดียวกันโซลูชันของ xsot อาจทำงานกับคอมไพเลอร์ที่มีอยู่เนื่องจากมีพฤติกรรมที่ไม่ได้กำหนด ไม่มีใครรับประกันว่าจะแก้ปัญหา (แม้ว่า xsot นั้นเป็นที่ยอมรับกันว่ามีแนวโน้มที่จะทำเช่นนั้น แต่ก็อาจผิดพลาดได้อย่างง่ายดาย) อาร์กิวเมนต์ที่แท้จริงของฉันคือเราควรอนุญาตให้ใช้โซลูชันที่ขึ้นอยู่กับพฤติกรรมที่ขึ้นอยู่กับการใช้งานหรือไม่ระบุ แต่ไม่ใช่พฤติกรรมที่ไม่ได้กำหนด
เรย์

5

Mathematica ขนาด 16 ไบต์

FilePrint@$Input

ทำงานในโหมดสคริปต์


ฉันใช้ Mathematica มาหลายปีแล้วและไม่เคยได้ยินโหมดสคริปต์เลยแม้แต่น้อย
Michael Stern

4

Pyth, 25 ไบต์

$import sys$h'e$sys.argv

นี่จะอ่านชื่อไฟล์ โดยพื้นฐานแล้วมันจะค้นหา argv เปิดไฟล์ที่สอดคล้องกับอาร์กิวเมนต์สุดท้ายและพิมพ์บรรทัดแรก


คุณทำh'$__file__$ไม่ได้เหรอ
kirbyfan64sos

@ kirbyfan64sos NameError: name '__file__' is not definedนั่นทำให้ผมมีข้อผิดพลาด Pyth ถูกคอมไพล์เป็น Python จากนั้นสตริงผลลัพธ์จะถูกดำเนินการ ดังนั้นฉันจะไม่คาดหวังว่าจะทำงาน
isaacg

4

ไป, 133 ไบต์

ทุกคนชัดเจน? ไป!

package main
import("fmt"
"io/ioutil"
"runtime")
func main(){_,f,_,_:=runtime.Caller(0)
s,_:=ioutil.ReadFile(f)
fmt.Print(string(s))}

2
สิ่งนี้เป็นแรงบันดาลใจให้ฉันเขียนโซลูชัน code-golf (และที่แรกสุด) ของฉันเองใน Go มองหาเทคนิคทั่วไปคุณสามารถลงไป 123 r"runtime"ตัวอักษรที่นี่โดยใช้ชื่อตัวอักษรเดียวสำหรับแพคเกจยกตัวอย่างเช่น
tomasz

4

> <> , 13 ไบต์

0:0go:c=?;1+!

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

ลองออนไลน์


4

Haskell, 63 ไบต์

สำหรับวิทยาศาสตร์!

import System.Environment
main=getProgName>>=readFile>>=putStr

ใช้งานได้กับrunhaskellคำสั่งเท่านั้น เจ๋งมากแม้ว่า
HEGX64

4

> <> , 31 ไบต์

คำเตือน: ไม่มีไฟล์ I / O ใน> <> แต่ฉันคิดว่ามันน่าสนใจที่จะแสดง codespace ของ I / O ที่สืบทอดมาจาก Befunge หนึ่งในภาษาที่เป็นแรงบันดาลใจ> <>

00voa0+1;!?$~<
1+> :r:@g: ?!^o$

ควินตนเองอ่านฉันทำเวลาที่ผ่านมาคุณสามารถลองที่นี่

ฉันเพิ่งเห็นมีสั้น> <> ตัวเองอ่านควิน ในขณะที่เห็นได้ชัดว่าดีกว่าในมาตรฐานของ code-golf ฉันต้องการชี้ให้เห็นว่ามันมีความยาวของรหัส hardcoded ในขณะที่ฉันจะคัดลอกบรรทัดหรือคอลัมน์ของรหัสเพิ่มเติม (ตราบใดที่พวกเขาไม่ทำลายรหัสต้นฉบับ)


ฉันคิดว่าจะโพสต์ใน> <> แต่ฉันคิดว่า> <> จะเป็นไปไม่ได้เนื่องจากกฎ: "คุณต้องใช้ไฟล์ I / O เพื่ออ่านซอร์สโค้ด"
Sp3000

@ Sp3000 ดูเหมือนจะดูเหมือนว่าฉันไม่ได้อ่านความท้าทายมากพอ ฉันจะเพิ่มการปฏิเสธความรับผิดชอบ
Aaron


3

Perl 5, 15 13 ไบต์

มอบเครดิตให้แก่โซลูชัน Bash สำหรับการสร้างแรงบันดาลใจนี้:

print`cat $0`

แก้ไข: ไม่ต้องการเซมิโคลอนหรือช่องว่างแรก


ไม่ Perl บริสุทธิ์ก็ต้องบางปฏิบัติการอื่น ๆ คือปัจจุบันและค้นพบได้ในcat $PATHแต่ถ้ามันมีอยู่ก็สามารถสันนิษฐานได้ว่าเป็นเพียงคำสั่งที่มีให้perlดังนั้นทำไมไม่
Golar Ramblar

3

Node.js, 66 63 ไบต์

p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))

ไม่ใช้console.logซึ่งจะผนวกบรรทัดใหม่


1
คุณสามารถบันทึกไม่กี่ไบต์โดยใช้ API แบบซิงโครนัส:p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
TehShrike

1
ทำไมไม่console.log(require('fs').readFileSync(process.argv[1]))\nเหมาะกับ 57 ไบต์?
Conor O'Brien

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


3

Haskell , 49 ไบต์

{-#LANGUAGE CPP#-}main=putStr=<<readFile __FILE__

ลองออนไลน์!

(GHC) Haskell มีส่วนขยายเพื่อใช้ตัวประมวลผลล่วงหน้า C (โดยทั่วไปใช้สำหรับการพกพาระหว่างเวอร์ชันและสถาปัตยกรรม) หวังว่าจะอธิบายด้วยตนเอง


3

HTML พร้อม JavaScript ขนาด 115 ไบต์ (ไม่นับ)

<!DOCTYPE html><html><title>x</title><script>alert(new XMLSerializer().serializeToString(document))</script></html>

สิ่งนี้นับหรือไม่ ฉันไม่รังเกียจมันสนุก :)

ในทางเทคนิคแล้วมันไม่ได้เปิดไฟล์ นอกจากนี้ยังเป็นเอกสาร HTML5 ที่มีรูปแบบที่ดี XMLSerializer เป็นเครื่องมือเดียวที่ส่งคืนส่วน DOCTYPE แต่กลับไม่ได้มาตรฐาน ยังใช้งานได้กับ Chrome และ Firefox และฉันเดิมพันเบราว์เซอร์อื่น ๆ

และเป็นโบนัส:

JavaScript ขนาด 41 ไบต์

alert(document.currentScript.textContent)

ลบ ";" ในตอนท้ายประหยัด 1 byte :)
ЕвгенийНовиков

1
@ ЕвгенийНовиковคุณพูดถูกฉันไม่แน่ใจว่าทำไมฉันถึงทิ้งมันไว้ในตอนนั้น ดูเหมือนว่าฉันจะไม่นับ
Domino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.