หมายเลขอินพุต หมายเลขบรรทัดเอาต์พุต


18

รหัสกอล์ฟ

backstory จริงทั้งหมด : ฉันเป็นผู้รับเหมาทำงานบนเว็บไซต์ www Sky.Netและหนึ่งในภารกิจของเราในการสร้างโปรแกรมที่รู้ตัวเองหรืออะไรบางอย่างฉันไม่รู้ว่าฉันไม่ได้ฟังเจ้านายจริงๆ อย่างไรก็ตามในความพยายามที่จะทำให้โค้ดของเราตระหนักถึงตนเองมากขึ้นเราต้องการให้ฝ่ายไอทีสามารถรู้ได้ว่าโค้ดใดบ้างที่อยู่ในแต่ละหมายเลขบรรทัด


ท้าทาย

สร้างโปรแกรมหรือฟังก์ชั่นที่ใช้เวลาการป้อนข้อมูลและส่งกลับรหัสของโปรแกรมพูดหรือฟังก์ชั่นในบรรทัดnn


กฎระเบียบ

program โปรแกรมหรือฟังก์ชั่นของคุณจะต้องมีความยาวอย่างน้อย 4 บรรทัด แต่ละบรรทัดต้องไม่ซ้ำกัน

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

➌บรรทัดแรกในโปรแกรม / ฟังก์ชั่นของคุณคือบรรทัดที่ 1 ไม่ใช่บรรทัดที่ 0

➍คุณไม่สามารถเข้าถึงไฟล์ที่โปรแกรมของคุณเปิดอยู่ (หากมีคนถามว่า "นี่ไม่ใช่การละเมิดกฎ # 4" หรืออาจเป็น)

➎บรรทัดต้องไม่ว่างเปล่า(รวมถึงช่องว่างถ้าช่องว่างไม่ได้ทำอะไรในภาษาของคุณ)

➏เส้นไม่สามารถ // ความคิดเห็น (/ * ของรูปแบบ <! - ใด ๆ )


นี่เป็นความท้าทายที่คล้ายกับ
นี่คือดังนั้นการส่งผู้เล่นที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ!


ขอให้เรายังคงอภิปรายนี้ในการแชท
Conor O'Brien

1
ฉันต้องการที่จะเห็นสิ่งนี้ทำใน99 :)
Jonathan Allan

2
@JanathanAllan คุณอาจพบปัญหาที่ไม่ใช่ทุกบรรทัดจะไม่ซ้ำกัน
MildlyMilquetoast

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

ชื่ออาจจะดีกว่า "หมายเลขอินพุต; บรรทัดเอาต์พุตที่มีหมายเลขบรรทัดนั้น"? หรือแม้แต่ "เอาท์พุทตามหมายเลข"
Paŭlo Ebermann

คำตอบ:


16

เป็นกลุ่ม 7 ไบต์

1
2
3
4

ลองออนไลน์!

เท่าที่ฉันสามารถบอกได้สิ่งนี้เป็นไปตามกฎทั้งหมด ตามค่าเริ่มต้นโปรแกรมเปล่าจะพิมพ์อินพุตทั้งหมด ตั้งแต่

<N><CR>

คือ noop ไม่มีอะไรเปลี่ยนแปลงข้อความอินพุตและเนื่องจากอินพุตแต่ละรายการตรงกับเอาต์พุตที่ต้องการวิธีการเดียวกันนี้ทำงานกับจำนวนบรรทัดใด ๆ


2
จะทำงานในภาษาอื่น - การเพิ่มครั้งแรก: Pyth
Jonathan Allan

เดี๋ยวก่อน เป็นกลุ่มวัดในการกดแป้น
Pavel

@JonathanAllan ดูเหมือนว่า Pyth จะได้รับการกำหนดค่าผิดใน TIO หากคุณดูผลลัพธ์การดีบั๊กคุณจะเห็นว่ารหัสที่ใช้งานจริงคือสิ่งที่อยู่ในเขตข้อมูลอาร์กิวเมนต์ไม่ใช่สิ่งที่อยู่ในเขตข้อมูลรหัส นี่คือสิ่งที่เรียกใช้รหัสที่ดูเหมือนว่า
isaacg


2
สามารถใช้งานได้ใน Brachylog
Fatalize

9

Ruby, 71 70 66 ไบต์

ลองออนไลน์!

->n{
k=["}", "k[-n]%%k.inspect", "k=%s", "->n{"]
k[-n]%k.inspect
}

โหมด "โกง": 7 + 1 = 8 ไบต์

ต้องการ-pแฟล็กสำหรับ +1 ไบต์ สำเนาคำตอบ Vอย่างแท้จริง พิมพ์หมายเลขที่ป้อนเข้า โปรแกรมทั้งหมดเป็นเพียงแค่ไม่มีประสิทธิภาพ

1
2
3
4

อะไร-pทำอย่างไร
Pavel

@Pavel มันทำให้โปรแกรมอ่านแต่ละบรรทัดของ STDIN ลงไป$_รันเนื้อหาของโปรแกรมแล้วพิมพ์เนื้อหาของ$_ไปที่หน้าจอ (ทำซ้ำตามบรรทัดของ STDIN) เนื่องจากโปรแกรมไม่ทำอะไรเลยมันเป็นเพียง Unix catแต่นั่นหมายความว่าทุกอินพุตจาก 1-4 จะส่งออกเนื้อหาของบรรทัดเนื่องจากแต่ละบรรทัดเป็นหมายเลขบรรทัดตามตัวอักษร
หมึกมูลค่า

@Pavel สำหรับข้อมูลเพิ่มเติมดูrobm.me.uk/ruby/2013/11/20/ruby-enp.html
Value Ink

ฉันชอบคำตอบ "การโกง" ของคุณ Perl ยังมี-pแต่1\n2\n3\n4ไม่ใช่โปรแกรม Perl ที่ถูกต้อง
ThisSuitIsBlackNot

7

Haskell, 69 59 ไบต์

(lines(s++show
 s)
 !!)
s="\n(lines(s++show\n s)\n !!)\ns="

ขึ้นอยู่กับมาตรฐาน Haskell Quine การแสดงออกครั้งแรก (แผ่กระจายไปทั่วสามบรรทัดแรก) เป็นฟังก์ชั่นที่ไม่มีชื่อที่เลือกบรรทัดที่ n จากสตริง quinified s( s++show s) +2 ไบต์สำหรับการจัดทำดัชนีแบบ 1 (เป็นกฎที่ไม่จำเป็น)

สำหรับลองออนไลน์! รุ่นฉันต้องตั้งชื่อฟังก์ชั่นซึ่งเพิ่ม 4 ไบต์


กฎนี้แบ่งเป็น 6 หรือไม่? :)
Albert Renshaw

การจัดทำดัชนีบรรทัดไม่ควรเป็นแบบอิง 0 กฎต้องมีการจัดทำดัชนีอย่างชัดเจน
มูลค่าหมึก

@AlbertRenshaw: แก้ไขแล้ว
nimi

@ValueInk: แก้ไข
nimi

@nimi lol " การแก้ปัญหา " แบบนี้เป็นสาเหตุที่ฉันถูกล่อลวงให้ทำให้การประกวดนี้เป็นที่นิยมฮ่าฮ่า อย่างไรก็ตามการทำงานที่ดี!
Albert Renshaw

5

PowerShell , 184 172 ไบต์

$v=0,
'$v=0,',
"'`$v=0',",(($q='"{0}`$v=0{0},",(($q={0}{1}{0})-f([char]39),$q)')-f([char]39),$q),
(($z='(($z={0}{1}{0})-f([char]39),$z;$v[$args]')-f([char]39),$z);$v[$args]

ลองออนไลน์!

คำอธิบาย

เริ่มต้นด้วยการสร้างอาร์เรย์$vในบรรทัดแรก ในบรรทัดเดียวกันนั้น0องค์ประกอบที่หนึ่ง( th) ถูกตั้งค่าเป็น0และเครื่องหมายจุลภาค,ยังคงคำจำกัดความ

บรรทัดถัดไปตั้งค่าองค์ประกอบถัดไป ( 1) ของอาร์เรย์เป็นสตริงที่แสดงเนื้อหาของบรรทัดแรกของสคริปต์เพื่อให้$v[1]ส่งคืนบรรทัดแรก

บรรทัดที่ 3 ตั้งค่าองค์ประกอบที่ 3 ของอาร์เรย์ (ดัชนี2) เป็นสตริงที่แทนบรรทัดที่ 2 ของสคริปต์จากนั้นในบรรทัดเดียวกันตั้งค่าองค์ประกอบที่ 4 (ดัชนี3) โดยใช้ข้อมูลโค้ด quine ที่ใช้ตัวดำเนินการรูปแบบ ( -f) เพื่อแทนที่ อินสแตนซ์บางตัวของอัญประกาศเดี่ยว ( [char]39) และสตริงแม่แบบการจัดรูปแบบเป็นของตัวเองเพื่อทำซ้ำทั้งหมดของบรรทัดที่ 3

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


4

Python 2, 104 73 67 ไบต์

ขอบคุณ Jonathan Allan ที่ช่วยประหยัด 6 ไบต์!

s=\
['print s[input()]or s', 's=\\', 0, 'exec s[', '0]']
exec s[
0]

แก้ไข:นับไบต์เดียวกัน แต่ฉันชอบวิธีนี้ดีกว่า

ลองออนไลน์!

รุ่นหลามของมูลค่าหมึกเป็นคำตอบทับทิม

คำตอบที่เก่ากว่า (67 ไบต์):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s

บันทึก 6 โดยกำจัดn: TIO
Jonathan Allan

@ovs ความต้องการของการท้าทายต้องใช้ซอร์สโค้ดขั้นต่ำ 4 บรรทัด: V
Value Ink

2

CJam , 19 18 17 ไบต์

1
{'_'~]ri(=}
_
~

ลองออนไลน์!

ขึ้นอยู่กับมาตรฐาน CJam-Quine การ{...}_~ดำเนินการ...กับบล็อกด้วยตัวเองบนสแต็ก (และในกรณีนี้ยัง1ต่ำกว่านั้น) จากนั้นเราจะ:

'_'~  e# Push the third and fourth line.
]     e# Wrap all four lines in a list.
ri    e# Read input and convert to integer.
(=    e# Use as index into the lines.

นี่คือสิ่งที่สวยงาม เช่นเดียวกับใบหน้าที่ยิ้มของตรรกะ (= ฮ่าฮ่า
Albert Renshaw

1

PHP, 261 ไบต์

<?php function f($l){
$a="aWYoJGw9PTEpJG09Ijw/cGhwIGZ1bmN0aW9uIGYoXCRsKXsiO2lmKCRsPT0yKSRtPSJcJGE9XCIkYVwiOyI7aWYoJGw9PTMpJG09IlwkYj1cIiR";
$b="iXCI7IjtpZigkbD09NCkkbT0iZXZhbChiYXNlNjRfZGVjb2RlKFwkYS5cJGIpKTt9Pz4iO2VjaG8gJG07";
eval(base64_decode($a.$b));}?>

ลองออนไลน์ !!

สตริงที่เข้ารหัสคือ:

if($l==1)$m="<?php function f(\$l){";
if($l==2)$m="\$a=\"$a\";
if($l==3)$m="\$b=\"$b\";
if($l==4)$m="eval(base64_decode(\$a.\$b));}?>";
echo $m;

! ที่น่าสนใจ สตริงที่เข้ารหัสคืออะไร
Albert Renshaw

1
@Albert Renshaw ฉันได้แก้ไขมันเพื่อเพิ่มเวอร์ชั่นถอดรหัสของสตริง
Divcy

0

Perl, 52 ไบต์

$_=q{print+(split/
/,"\$_=q{$_};
eval")[<>-1]};
eval

นี่คือรูปแบบที่เรียบง่ายใน quine คลาสสิก

$_=q{print"\$_=q{$_};eval"};eval

"payload" อยู่splitในบรรทัดใหม่และเลือกบรรทัดที่ถูกต้องโดยการจัดทำดัชนีลงในรายการผลลัพธ์

Perl, 49 48 ไบต์ (ไม่ใช่การแข่งขัน)

#!/usr/bin/perl -d:A
sub DB'DB{
print${"_<$0"}[<>]}
1

38 ไบต์สำหรับรหัส (ไม่รวม shebang แต่รวม-d:A) บวก 10 Devel/A.pmไบต์สำหรับชื่อไฟล์ซึ่งจะต้องเป็น ไดเรกทอรีจะต้องอยู่ในDevel@INC

ในทางเทคนิคแล้วสิ่งนี้ละเมิดกฎข้อที่ 4 เพราะ-d:Aทำให้ไฟล์ถูกแยกวิเคราะห์สองครั้งดังนั้นจึงเป็นวิธีแก้ปัญหาที่ไม่ใช่คู่แข่ง

มันใช้เบ็ดดีบั๊กในการเข้าถึงบรรทัดของไฟล์ซึ่ง perl เก็บใน@{"_<$filename"}อาร์เรย์ในเวลารวบรวม

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