triplegolf - ไม่เพียง แต่ความยาวของซอร์สโค้ดจะนับเท่านั้น!


15

เป้าหมายของการท้าทายนี้คือการเขียนโปรแกรมที่ความยาวของสามสิ่งต่อไปนี้เหมือนกันทุกประการ:

  • ความยาวของรหัสที่มา
  • ความยาวของเอาต์พุตที่พิมพ์ไปยังเอาต์พุตมาตรฐาน
  • ความยาวของคำเตือนคอมไพเลอร์ที่สร้างด้วยคอมไพเลอร์ (ไม่มีการแก้ไข) ที่คุณเลือก

ผู้ชนะคือรหัสที่สั้นที่สุดเพื่อให้เป็นไปตามเกณฑ์ทั้งสามและต้องมีความยาวอย่างน้อย 1 ตัวอักษร

หากสิ่งมีชีวิตเพิ่มขึ้นหากเอาต์พุตมีอักขระที่แตกต่างกันน้อยกว่าสามตัวจะได้รับโทษเพิ่ม5 จุดสำหรับความยาวของแต่ละคน (เช่น +10 หากเพียงประเภทเดียว +5 สำหรับสองคน)

(ขึ้นบรรทัดใหม่นับเป็น 1 หรือ 2 ตัวอักษรที่คุณเลือก แต่จะต้องสอดคล้องกับเกณฑ์ทั้งสามตัวช่องว่างสีขาวนำหน้าและต่อท้ายจะถูกละเว้นในทุกบรรทัดในเกณฑ์ทั้งสาม)

ในกรณีที่มีคะแนนเท่ากันผู้ที่พิมพ์ผลที่น่าสนใจที่สุด (แทนที่จะเป็นขยะ) เป็นผู้ชนะ


1
"ประเภทของตัวละคร" คืออะไร?
ปีเตอร์เทย์เลอร์

5
นอกจากนี้จะเกิดอะไรขึ้นหากคอมไพเลอร์สร้างเอาต์พุตที่ไม่มีคำเตือน (เช่น "การรวบรวมหลัก") นอกจากนี้จะเกิดอะไรขึ้นถ้าชื่อไฟล์ต้นฉบับปรากฏในข้อความเตือน (เช่น "foo.c: 1: 1: ... ")?
Joey Adams

3
อาวุธที่ฉันเลือกคือ VBA ซึ่งไม่มีคอมไพเลอร์และไม่ส่งออกไฟล์ไบนารี่ให้ทำงาน (เช่นกรณีของภาษาอื่นฉันเชื่อว่า) มีสิ่งที่ต้องพิจารณาหรือไม่หรือฉันเพิ่งตัดสิทธิ์โดยค่าเริ่มต้น
Gaffi

2
ฉันสงสัยว่าสามควินเป็นไปได้ในบางภาษาหรือไม่?
Ry-

2
สำหรับภาษาที่ตีความเราได้รับผลลัพธ์แม้จะเกิดข้อผิดพลาดในกรณีเช่นนี้ข้อผิดพลาดเหล่านั้นได้รับการยอมรับหรือยอมรับเฉพาะคำเตือนเท่านั้น
l0n3sh4rk

คำตอบ:


14

Bash, 23 ตัวอักษร

ข้อผิดพลาด:

bash: /: Is a directory

ที่มา:

echo       $0-$01234;/;

เอาท์พุท:

/bin/bash-/bin/bash1234


Brainf * ck, 32 ตัวอักษร

รหัสนี้รันเป็นเวลาประมาณ 3 วินาทีและหยุดและแสดงข้อผิดพลาดและผลลัพธ์ต่อไปนี้

ข้อผิดพลาด:

bff: out of memory (-2058691272)

ที่มา:

+++++[......-]..+[>>>>>>>>>>>>-]

เอาท์พุท: (Hexdump)

0505 0505 0505 0404 0404 0404 0303 0303
0303 0202 0202 0202 0101 0101 0101 0000


C, 35 ตัวอักษร

คำเตือน:

b.c:1:30: warning: division by zero

แหล่งที่มาและเอาท์พุท:

main(){system("cat "__FILE__)/0;;;}


PHP, 50 ตัวอักษร

คำเตือน:

PHP Warning:  Division by zero in /tmp/3 on line 1

แหล่งที่มาและเอาท์พุท:

<?php echo (0/0).''.file_get_contents(__FILE__);?>

1
ตัวอย่าง bash เป็นข้อผิดพลาดไม่ใช่คำเตือน
Peter Taylor

คุณใช้คอมไพเลอร์สำหรับโซลูชัน C คืออะไร
breadbox

@breadbox gcc เวอร์ชั่น 4.7.0 20120505 (ก่อนวางจำหน่าย) (GCC)
l0n3sh4rk

8

C - 48 ตัวอักษร

main(i){while(++i<49)putchar(i);putchar('\z');}

หมายเหตุ: รวมบรรทัดใหม่ (สไตล์ Unix) สุดท้าย

เอาต์พุตจากการgcc a.cอ่าน:

a.c:1:41: warning: unknown escape sequence '\z'

ผลลัพธ์จากa.outการพิมพ์ส่วนใหญ่ไม่ใช่ตัวอักษรดังนั้นนี่คือสิ่งที่ดูเหมือนว่าหลังจากท่อผ่าน hexdump:

00000000: 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011  ................
00000010: 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021  .............. !
00000020: 2223 2425 2627 2829 2A2B 2C2D 2E2F 307A  "#$%&'()*+,-./0z

ความเข้าใจของฉันเป็นที่ไม่สามารถพิมพ์ (whitepace?) จะถูกตัดทอนดังนั้นสิ่งนี้จะไม่นับ หากได้ผลฉันสามารถปรับปรุงคำตอบของฉันเองได้
Gaffi

1
อักขระควบคุมมักไม่ถือว่าเป็นช่องว่างยกเว้นแน่นอนสำหรับ \ t, \ n, \ r, \ f และบางครั้ง \ v ไม่มีสิ่งเหล่านี้อยู่ในตำแหน่งผู้นำหรือตามหลังดังนั้นฉันจึงคิดว่าฉันปลอดภัย
breadbox

1
ฉันคิดว่านี่เป็นที่ยอมรับอย่างสมบูรณ์ พวกเขาไม่ใช่ช่องว่างและในทั้งสองกรณีนี่ไม่ใช่ ACM ที่เข้มงวดกับข้อกำหนด เหตุผลหลักสำหรับ "กฎช่องว่าง" นี้คือ IDE บางตัวอาจจัดรูปแบบเอาต์พุตคอมไพเลอร์อย่างหนัก
vsz

1
@copy, or main(i){i='\z';while(i-->74)putchar(i);}- แต่การลดขนาดโปรแกรมนั้นเป็นไปในทางตรงกันข้าม
breadbox

1
นี่คือคำตอบโปรดของฉันฉันรู้ว่าฉันควรห้ามไม่ให้เข้าถึงเนื้อหาของไฟล์ (เช่นเดียวกับควายจริง)
vsz

5

JavaScript, 63 66

!function x(){console.log(x+'...');eval(Array(33).join('$'))}()

ผลลัพธ์คือ:

function x(){console.log(x+'...');eval(Array(33).join('$'))}...

ใน Chrome ข้อผิดพลาดคือ:

ReferenceError: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ is not defined

3

Visual Basic .NET, 185

Gee vbcสวยมากด้วยคำเตือนการรวบรวม อย่างไรก็ตามรหัสคือ:

Public Module Main
    Public Sub Main()
        Console.WriteLine(New String("a"c,185))
    End Sub

    Public Function A()
        'This is actually just padding.
        'Hi
    End Function
End Module

(โปรดทราบว่าพวกเขาควรจะเป็นแท็บไม่ใช่ที่ว่าง)

ผลลัพธ์คือ:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

และคำเตือนของคอมไพเลอร์ก็คือ

warning BC42105: Function 'A' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.

    End Function
    ~~~~~~~~~~~~

(ครั้งนี้เป็นช่องว่างสี่ช่องไม่ใช่แท็บ)


3

Zsh , 20 ไบต์

<<<   $-$_$_$_$_$_
[

ปัญหาที่เราเผชิญที่นี่ถูกกล่าวถึงในความคิดเห็นด้านบน: Zsh พิมพ์ชื่อโปรแกรมเพิ่มเติมจากหมายเลขบรรทัดก่อนทุกข้อผิดพลาด วิธีแก้ปัญหาที่นี่ใช้ชื่อไฟล์อักขระเดียวเพื่อใช้งานในทางที่ผิด ฉันรวบรวมมันลงในสคริปต์ผู้ช่วยเพื่อแสดงสิ่งที่พิมพ์และใช้wc -cกับ stderr, stdout และไฟล์ต้นฉบับ

เอาท์พุท: 569Xcatcatcatcatcatตามด้วย
ข้อผิดพลาดขึ้นบรรทัดใหม่: s:[:2: ']' expectedตามด้วยขึ้นบรรทัดใหม่


แก้ไข: เลือกโซลูชัน 20 ไบต์โดยไม่มีข้อ จำกัด ไฟล์:

<<<$-$-$-$-$_>&1 >&2

ลองออนไลน์!

zsh , zsh -x10 ไบต์

<<<$_$_$_

-xธงเปิดใช้งาน xtrace ต้องใช้ชื่อไฟล์อักขระเดียวอีกครั้ง ลองออนไลน์!

Zsh zsh -JNTwEDY , 12 ไบต์

<<<$->&1 >&2

-flagคำตอบสั้น ๆโดยไม่ต้องมีชื่อไฟล์ ตั้งค่าสถานะเพิ่มเติมและ$-พิมพ์ทั้งหมด ลองออนไลน์!


2

JavaScript (Firefox 54), 34 ไบต์

alert((f=function(x)1234)(56)+f+f)

ขาออก:

1234function(x)1234function(x)1234

และจะส่งคำเตือนนี้ไปที่คอนโซลของเบราว์เซอร์:

expression closures are deprecated

ดูเหมือนว่านี่ในสำเนา Developer Firefox (54.0a2) ของฉัน มันอาจทำงานได้ใน Firefox รุ่นอื่นเช่นกัน


2

Ruby, 48 ตัวอักษร

IO=1;puts ?a*48;# let's make it 48 bytes long :)

เอาท์พุท

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

เตือน

r.rb:1: warning: already initialized constant IO

(ไฟล์คือ r.rb ฉันลบพา ธ ถ้าคุณเรียกใช้จาก irb คุณจะได้รับ (irb): 1: คำเตือน ... )

มีวิธีการเตือนใน Ruby แต่เพียงแค่ส่งออกอาร์กิวเมนต์ไปที่ $ stderr ทำให้ดูเหมือนคำเตือนน้อยลง


1

Python ขนาด 57 ไบต์

ล่ามอื่น ๆ อาจแสดงคำเตือนต่างออกไป นี่เป็นเพียงการทดสอบการทำงานกับ TIO

from warnings import*
print("prt"*19)
warn("Warning...!")

ลองออนไลน์

เอาท์พุต

prtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprtprt

คำเตือน

.code.tio:3: UserWarning: Warning...!
  warn("Warning...!")

โปรดทราบว่าช่องว่างนำหน้าจะไม่ถูกนับไปยังจำนวนไบต์ หากช่องว่างนำหน้าไม่ได้ถูกละเว้นสิ่งนี้สามารถทำได้ใน 51 ไบต์


1

Javascript (ES6), 32 30 ไบต์

Screen(console.log(Function));

พิมพ์

ƒ Function() { [native code] }

ใน Chrome แล้วพ่น

TypeError: Illegal constructor

โซลูชัน 32 ไบต์เดิมของฉัน:

(x=y=>console.log(x+!0+10)||z)()

ก่อนอื่นพิมพ์

y=>console.log(x+!0+10)||ztrue10

และพ่นความผิดพลาด

ReferenceError: z is not defined

0

VBA, 39 ไบต์

ไม่แน่ใจว่าสิ่งนี้มีคุณสมบัติเหมาะสมหรือไม่รับข้อ จำกัด ของคอมไพเลอร์ แต่:

อินพุต: (ในหน้าต่างทันที)

For i=1 To 39:a=a & Chr(i):Next:Print a

* เอาต์พุตประกอบด้วยอักขระที่ไม่พิมพ์ซึ่งไม่สามารถเล่นได้ดีในหน้าต่างนี้


VBA ไม่ได้ให้คำเตือนผู้แปลใด ๆ ดังนั้นฉันไม่คิดว่าสิ่งนี้นับว่าถูกต้อง
Taylor Scott

0

Perl 6 , 10 ไบต์

dd say 1e9

ลองออนไลน์!

พิมพ์1000000000ไปที่ STDOUT และBool::Trueไปที่ STDERR ทั้งคู่ผลิตขึ้นบรรทัดใหม่ แต่การเว้นช่องว่างท้ายถูกละเว้นในความท้าทายนี้ ddเป็นฟังก์ชั่นการดีบักเฉพาะของ Rakudo

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