เขียนฟังก์ชั่นที่จะบอกคุณว่าบรรทัดใดที่ถูกลบไป


28

เขียนฟังก์ชั่นที่มีห้าบรรทัด

ถ้าคุณเรียกใช้ฟังก์ชันตามที่ควรจะเป็น 0

หากคุณลบหนึ่งในห้าบรรทัดใด ๆ และเรียกใช้ฟังก์ชั่นควรบอกคุณว่าบรรทัดใดที่ถูกลบออก (เช่นหากคุณลบบรรทัดสุดท้ายมันควรกลับ 5)

ความกะทัดรัดความแปลกใหม่และความสง่างามล้วนเป็นสิ่งที่ควรพิจารณา โซลูชัน upvoted ที่สูงที่สุด (หลังจากระยะเวลาที่เหมาะสม) ชนะ


4
ฟังก์ชั่นสามารถรับพารามิเตอร์ได้หรือไม่?
jeremy

6
การประกาศฟังก์ชั่นนับเป็นหนึ่งในบรรทัดหรือไม่หากเราต้องการใช้ภาษาแบบนั้นหรือเป็นเพียงการนับร่างกาย?
meiamsome

1
นอกจากนี้บรรทัดของเราจำเป็นต้องมีหมายเลข 1, 2, 3, 4, 5 หรือรูปแบบการกำหนดหมายเลขใด ๆ ที่อนุญาตหรือไม่
meiamsome

@ Jeremy ใช่นั่นเป็นเรื่องปกติ
jawns317

@meiamsome มีเพียงเนื้อหาเท่านั้นที่นับและบรรทัดควรมีหมายเลข 1, 2, 3, 4, 5 เพื่อจุดประสงค์ในการคืนค่า
jawns317

คำตอบ:


18

ทับทิม

ละทิ้งเวทมนตร์หมายเลขเนื่องจากไม่ใช่โค้ดกอล์ฟ

def f
  r=2^3^4^5
  defined?(r) ? r^=2 : r=1^3^4^5
  r^=3
  r^=4
  r^=5
end

1^2^3^4^5แต่ละบรรทัดแถบหมายเลขของตัวเองออกมาจาก มันคือ Ruby ดังนั้นบรรทัดสุดท้ายจะกำหนดค่าส่งคืน


13

JavaScript ( 134   77   69   65   60 ตัวอักษร)

→การสาธิตสด←

function(n){
a=n-=1
n-=2
+3
+4;if(this.a)return 5
return n;var a
}

เรียกใช้ฟังก์ชันนี้ด้วย n = 10

  • หากไม่มีบรรทัดหายไป 5 บรรทัดส่งคืน n == 0
  • หากไม่มีบรรทัด 1 บรรทัด 5 จะส่งคืน n == 1
  • หากไม่มีบรรทัด 2 บรรทัด 5 จะส่งคืน n == 2
  • หากไม่มีบรรทัด 3 สาย 5 จะส่งคืน n == 3
  • หากไม่มีบรรทัดที่ 4 บรรทัดที่ 5 จะส่งคืน n == 4
  • หากไม่มีบรรทัดที่ 5 var "a" จะกลายเป็นโกลบอลและบรรทัดที่ 4 ตรวจพบว่าต้องการส่งคืน "5"
  • หากมีบรรทัดที่ 5 เอ็นจิ้น JS จะทำการ "ตัวแปร hoisting", "a" กลายเป็น var ในตัวเครื่องและบรรทัดที่ 4 จะไม่ส่งคืน "5"



รุ่นก่อนหน้า:

65 ตัวอักษร

function(n){
a=n-=1
n-=2
+3
+4;if(this.a)return 5
n-=5;return n;var a
}

(ต้องถูกเรียกด้วย n = 15)

69 ตัวอักษร

function(n){
n-=1
n-=2
n-=3
a=n-=4;if(this.a)return 5
n-=5;return n;var a
}

(ต้องถูกเรียกด้วย n = 15)

77 ตัวอักษร

function(){
a=
b=
c=
d=1;if(this.a)return 5
1;var a,b,c,d;return d?c?b?a?0:1:2:3:4
}

134 ตัวอักษร

function w(){
a=1;e=1;if(this.e)return 5
b=1;if(!a)return 1
c=1;if(!b)return 2
d=1;if(!c)return 3
var a,b,c,d,e;return d?0:4
}

ที่ไม่แข็งแรงเล่นกอล์ฟ

  function whichlineisremoved(){
    /* 1 */ var a = 1; e = 1; if(window.e) return 5;
    /* 2 */ var b = 1, a; if(!a) return 1;
    /* 3 */ var c = 1, b; if(!b) return 2;
    /* 4 */ var d = 1, c; if(!c) return 3;
    /* 5 */ var e = 1, d; if(!d) return 4; return 0;
  }

สิ่งที่ว่าไม่var aหลังจากที่returnทำ? ในทางทฤษฎีไม่ควรเข้าถึง
Braden สุดยอด

@ B1KMusic ในความเป็นจริงมันเป็น "ถึง" เนื่องจากสิ่งที่เรียกว่าการยกตัวแปร JavaScript เมื่อ JS คือ "รวบรวม" การประกาศ "var" ทั้งหมดจะถูกวางไว้ที่จุดเริ่มต้นของฟังก์ชั่นที่เป็นอยู่
xem

อืมมันแปลกนะ มีการใช้งานจริงสำหรับสิ่งนี้ในภาษาหรือนี่เป็นการเล่นกอล์ฟ / การเอาเปรียบอย่างหมดจดหรือไม่? ฉันจำการอ่านตัวแปรเกี่ยวกับการยกตัวแปรในเอกสารของ Mozilla ไม่ได้
Braden สุดยอด

มันเป็นคุณสมบัติของ JS อธิบายไว้ที่นี่: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ …
xem

อ้าดังนั้นมันจึงเป็นข้อได้เปรียบสำหรับการเล่นกอล์ฟ
Braden สุดยอด

6

หลาม

หากได้รับอนุญาตพารามิเตอร์สิ่งนี้จะทำงาน:

def f(n=10):
    n -= 1
    n -= 2
    n -= 3
    if n == 4: return 0 if f(7) else 5
    return n - 4 or 4

4

R

f <- function() {
  T <- FALSE
  F <- TRUE
  month.abb <- TRUE
  (pi <- 5)
  T + (!F) * 2 + (!isTRUE(month.abb)) * 3 + (pi != 5) * 4
}

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


3

Lua 5.2+

55 chars ในเนื้อหาของฟังก์ชั่นยกเว้นการขึ้นบรรทัดใหม่ ฉันไม่สามารถคิดอะไรได้ดีไปกว่านี้อีกแล้ว:

function f()
return 7--[[
return 1--[=[]]-2
--[[
-2--[=[]]
-5--]=]--]]-1
end

หวังว่าจะได้รับคะแนนพิเศษสำหรับการละเมิดความคิดเห็น: P

เหตุผลที่ไม่ทำงานใน 5.1 คือซ้อนกัน [[]]ลบและใน 5.1 ให้ข้อผิดพลาดในการรวบรวมแทนที่จะเพิกเฉยเช่น 5.2

  • หากไม่มีการลบบรรทัดใด ๆ ฟังก์ชันของฟังก์ชันจะเป็น eqivalent return 7-2-5
  • หากลบบรรทัดแรกออก return 1
  • ถ้าครั้งที่สอง return 7-5
  • ถ้าครั้งที่สาม return 7-2-2
  • ถ้าที่สี่ return 7-2-1
  • ถ้าที่ห้า return 7-2

2

ทับทิม

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

def tellMe(x=[1,2,3,4,5])
    x.delete(1)
    x.delete(2)
    x.delete(3)
    x.delete(4);x[0]
    x.delete(5);x==[]?0:x[0]
end

2

Befunge ไม่มีฟังก์ชันชัดเจน แต่นี่คือสิ่งที่ฉันเรียกฟังก์ชันใน Befunge:

v^    <
>v
1>v
 2>v
##3>5v
$0v4 >
>>>>>>^

บรรทัดแรกและสุดท้ายคือฟังก์ชั่นเริ่มต้นและสิ้นสุดฟังก์ชั่น มันทำสิ่งที่ใกล้เคียงที่สุดกับ "return" นั่นคือมันจะผลักดันค่าที่ถูกต้องไปยัง stack


1

คำตอบใหม่

ฉันพบวิธีแก้ไขปัญหาอื่น แย่มากฉันชอบวิชาคณิตศาสตร์มาก โซลูชันนี้ใช้การเรียกซ้ำและตัวแปรส่วนกลาง (yuck!) เพื่อบอกว่าทุกบรรทัดมีการเรียกใช้หรือไม่ ฉันต้องการทำสิ่งที่แตกต่างจากโซลูชันอื่น ๆ ดังนั้นนี่จึงไม่ค่อยสง่างาม แต่ใช้งานได้ดี :)

PHP

function LOL($a) {
    if (!$a) { LOL(true); if (!$GLOBALS['b']) return 2; if (!$GLOBALS['c']) return 3; if (!$GLOBALS['d']) return 4; if (!$GLOBALS['e']) return 5; return 0; } 
    if ($a) $GLOBALS['b'] = true; else return 1;
    $GLOBALS['c'] = true;
    $GLOBALS['d'] = true;
    $GLOBALS['e'] = true;
}

ฉันสนุกกับการท้าทายนี้จริงๆขอบคุณ! :)


คำตอบเก่า

ฉันแก้มันโดยใช้คณิตศาสตร์ หากตัวแปรแต่ละตัวถูกมองว่าไม่เป็นที่รู้จักและเราทำการประกาศหนึ่งรายการต่อบรรทัดมีห้า unknowns และรหัสห้าบรรทัด: สิ่งนี้นำเราไปสู่ระบบ 5x5 ต่อไปนี้:

b+c+d+e = 1;
a+c+d+e = 2;
a+b+d+e = 3;
a+b+c+e = 4;
a+b+c+d = 5;
//Solutions are displayed in the code below.

เมื่อฉันค้นพบค่าฉันได้รหัสพวกเขาและเพิ่มสิ่งพื้นฐานบางอย่าง

PHP

function LOL(){
    $a = 2.75;
    $b = 1.75;
    $c = 0.75;
    $d = -0.25; if ($a+$b+$c+$d == 5) return $a+$b+$c+$d;
    $e = -1.25; return $a+$b+$c+$d+$e;
}

หมายเหตุ:คำตอบเก่าจะไม่ทำงานหากปล่อยไว้ตามสภาพเดิม


ฉันชอบระบบของความคิดสมการเชิงเส้น
ML

1

ขี้ผึ้ง 86 ไบต์

ลอง esolang ที่คิดค้นขึ้นครั้งแรกของฉัน หลังจากความสับสนครั้งแรกฉันพบว่าวิธีแก้ปัญหานั้นง่ายมาก

_1 p
_^v>~2+p
   >   >~3+p
       >   >~4+X@7~8+~@$^^{;
           >    >~5+@7~8+~@${;

คำอธิบาย:

โปรแกรมขี้ผึ้งทำงานบนตารางหกเหลี่ยมแบบสองมิติ โปรแกรมจะถูกจัดเก็บในรูปแบบสี่เหลี่ยม

    a — b — c — d
   / \ / \ / \ /
  e — f — g — h
 / \ / \ / \ /
i — j — k — l

ถูกเก็บเป็น

abcd
efgh
ijkl

คำแนะนำสำหรับการเคลื่อนที่ในบางทิศทางคือ:

    b — d 
   / \ / \                                  bd
  < —IP — >    or in compact form (β=IP):   <β>
   \ / \ /                                   pq
    p — q

คำอธิบายสั้น ๆ

_1 p สร้าง IP เพิ่ม 1 จากนั้นเปลี่ยนเส้นทาง IP เป็นบรรทัด 2

_^v>~2+p สร้าง IP อื่นในกรณีที่บรรทัดที่ 1 หายไปทำให้ IP ช้าลงเพื่อให้แน่ใจว่า IP จากบรรทัดที่หนึ่งอยู่ข้างหน้าจากนั้นเพิ่ม 2 จากนั้นเปลี่ยนเส้นทางไปยังบรรทัดที่ 3

> >~3+p เพิ่ม 3 จากนั้นเปลี่ยนเส้นทางไปที่บรรทัด 4

> >~4+X@7~8+~@$^^{; เพิ่ม 4 จากนั้นตั้งค่า lstack ที่ 2 เป็น 15 จากนั้น XOR lstack ค่าสูงสุดและอันดับที่ 2 ชะลอ IP (เพื่อให้แน่ใจว่า IP ในบรรทัดที่ 5 อยู่ข้างหน้าถ้ามีบรรทัดที่ 5 อยู่) และออกผลลัพธ์แล้วยุติโปรแกรม

> >~5+@7~8+~@${; เพิ่ม 5 จากนั้นทำเช่นเดียวกันกับในบรรทัด 4 ยกเว้นการชะลอตัว

โดยทั่วไปโปรแกรมเพียงคำนวณผลรวม xor 15

  • โปรแกรมเหมือนเดิม: (1 + 2 + 3 + 4 + 5) xor 15 = 0
  • ไม่มีสาย 1: (2 + 3 + 4 + 5) xor 15 = 1
  • ไม่มีบรรทัด 2: (1 + 3 + 4 + 5) xor 15 = 2
  • ไม่มีบรรทัดที่ 3: (1 + 2 + 4 + 5) xor 15 = 3
  • ไม่มีบรรทัดที่ 4: (1 + 2 + 3 + 5) xor 15 = 4
  • ไม่มีบรรทัด 5: (1 + 2 + 3 + 4) xor 15 = 5

การเพิ่ม>ในบรรทัดที่ 3 ถึง 5 เพียงแค่รับประกันได้ว่าหากหนึ่งใน 2 บรรทัดที่ 4 หายไป IP ยังคงได้รับการเปลี่ยนเส้นทางอย่างถูกต้องและไม่ออกจากโปรแกรม

คุณสามารถโคลนล่ามขี้ผึ้งของฉันที่เขียนใน Julia จากที่เก็บ GitHub ของฉัน

readme บน GitHub นั้นทันสมัยและมีโครงสร้างที่ดีกว่าหน้า esolangs



0

LISP ทั่วไป:

(defun which-line-is-removed (&aux (x 30)) 
  (decf x 2)
  (decf x 4)
  (decf x 8)
  (decf x 16) 5
  (if (zerop x) 0 (log x 2))
)

หมายเหตุ: การมีวงเล็บปิดในบรรทัดของตัวเองนั้นถือว่าเป็นลักษณะที่ไม่ดี แต่เนื่องจากภาษาอื่นมีendและ}ฉันถือว่าอนุญาต


0

Bash, 131 ตัวอักษร

#!/bin/bash

# the function:
function f(){
  a=1;
  b=2;
  c=3;
  d=4;[ ! $1 ]&&f 1&&return 5||true
  [ $1 ]&&return 6;e=5;s=$((a+b+c+d+e));return $((15-$s))
}

# call it:
f
# report the result:
echo Removed line $?

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

(หมายเหตุ: ลดลงเหลืออย่างน้อย 131 ตัวอักษรหากแยกแยะทุกอย่างยกเว้นฟังก์ชั่นตัดช่องว่างและเปลี่ยน / bin / bash เป็น / bin / sh)


0

จาวาสคริ

function(){
/*aa*/if(arguments.callee.toString().indexOf("*"+"a".repeat(6)+"*")==-1)return 5;
/*aaa*/if(arguments.callee.toString().indexOf("*"+"a".repeat(5)+"*")==-1)return 4;
/*aaaa*/if(arguments.callee.toString().indexOf("*"+"a".repeat(3)+"*")==-1)return 2;
/*aaaaa*/if(arguments.callee.toString().indexOf("*"+"a".repeat(4)+"*")==-1)return 3;
/*aaaaaa*/return +!~arguments.callee.toString().indexOf("*"+"a".repeat(2)+"*");
};
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.