เขียนฟังก์ชั่นที่จะบอกคุณว่ามีการลบเส้นสองบรรทัด


19

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

คำแนะนำคือ:

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

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

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

ทีนี้ลองทำอะไรที่ยากขึ้นหน่อย

ปฏิบัติตามกฎเดียวกันกับข้างต้น แต่คราวนี้ฟังก์ชั่นควรกลับอาร์เรย์ที่บอกคุณว่ามีสองสายที่ถูกลบ

ตัวอย่างเช่นถ้าฉันลบบรรทัด 1 และ 5 ค่าส่งคืนควรเป็น [1,5] และถ้าฉันลบบรรทัด 3 และ 4 ค่าส่งคืนควรเป็น [3,4]

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

คุณสามารถใช้ประโยชน์จากฟังก์ชั่นตัวช่วยได้หรือไม่? ใช่ แต่ถ้าคุณต้อง ฟังก์ชั่นในตัวเดียวที่ดึงสิ่งนี้ออกมาเป็นอุดมคติ

เช่นเดียวกับความท้าทายครั้งสุดท้ายโซลูชั่น upvoted ที่สูงที่สุดจะเป็นผู้ชนะ ฉันจะเลือกผู้ชนะในหนึ่งสัปดาห์หรือเร็วกว่านั้นหากไม่มีการส่งผลงานใหม่ใน 24 ชั่วโมง


2
ส่งคืนรายการว่างหรือไม่ตกลงหากไม่มีการลบบรรทัดหรือต้องเป็นหมายเลข 0 หรือไม่
Ilmari Karonen

1
บรรทัดส่งคืนในฟังก์ชันเป็นหนึ่งในบรรทัดที่สามารถลบออกได้หรือไม่
le_vine

11
เราคาดหวังว่าพรุ่งนี้เวอร์ชัน "สามบรรทัด" จะถูกโพสต์หรือไม่
Howard

ฟังก์ชันจะต้องส่งคืนอาเรย์อย่างแท้จริงหรือสามารถแก้ไขตัวแปรในขอบเขตโกลบอล. etc ได้หรือไม่ ฉันไม่คิดว่ามันเป็นไปได้ใน 5 บรรทัดในขณะที่จริงกลับมาเพราะไม่สามารถมองไปข้างหน้าเป็นทุกบรรทัดจะต้องกลับมาในกรณีที่ผลตอบแทนจะถูกลบออก เว้นแต่จะมีข้อผิดพลาดทางภาษาบางอย่างเช่นฟังก์ชั่นส่งคืนอัตโนมัติที่ฉันไม่รู้
George Reith

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

คำตอบ:


17

Perl

sub foo {
    @a = (2..5);
    @a = grep $_ != 2, (@a ? @a : (1..5));
    @a = grep $_ != 3, (@a ? @a : (1..5));
    @a = grep $_ != 4, (@a ? @a : (1..5));
    @a = grep $_ != 5, (@a ? @a : (1..5));
}

ใช้งานได้จริงกับจำนวนบรรทัดใด ๆ ที่ถูกลบ (ตราบใดที่ไม่ใช่ทุกบรรทัดนั่นคือ) และสามารถขยายได้เล็กน้อยถึง 5 บรรทัด ไม่มีฟังก์ชั่นตัวช่วยเหลือถูกใช้และยังใช้เพียงหนึ่งคำสั่งต่อบรรทัด มันขึ้นอยู่กับความจริงที่ว่าในกรณีที่ไม่มีreturnคำสั่งที่ชัดเจนค่าตอบแทนของฟังก์ชั่น Perl คือมูลค่าของคำสั่งสุดท้ายในมัน

โปรดทราบว่า (ในบริบทรายการ) รหัสนี้ส่งคืนรายการเปล่าแทนที่จะเป็นหมายเลข 0 หากไม่มีการลบบรรทัด สิ่งนี้สามารถแก้ไขได้ (เช่นการต่อท้าย " @a ? @a : 0;" ไปยังบรรทัดสุดท้าย) แต่จะทำให้โค้ดน่าเกลียดยิ่งขึ้น ไม่ว่าในกรณีใดในบริบทสเกลาร์จะส่งคืนจำนวนบรรทัดที่ถูกลบซึ่งจะเป็น 0 หากไม่มีการลบบรรทัด ;-)


9

ทับทิม

คล้ายกับรุ่น Perl แต่เป็น Ruby ฉันส่งคืน 0 หากไม่มีการลบบรรทัดตามที่ร้องขอ แต่ฉันยอมรับว่ามันทำให้โค้ดน่าเกลียดและไม่ค่อยสมเหตุสมผลเท่าค่าตอบแทน

def which_lines_removed(arr = [*1..5])
  arr -= [1]
  arr -= [2] 
  arr -= [3] 
  arr -= [4] 
 (arr -= [5]).empty? ? 0 : arr
end

ถ้าอาเรย์ที่ว่างเปล่ายอมรับได้เป็นค่าที่ส่งคืนเมื่อไม่มีการลบบรรทัดโค้ดจะมีลักษณะดังนี้:

def which_lines_removed(arr = [*1..5])
  arr -= [1]
  arr -= [2] 
  arr -= [3] 
  arr -= [4] 
  arr -= [5]
end

ทั้งสองวิธีนี้ทำงานสำหรับจำนวนบรรทัดที่ลบระหว่าง 0 ถึง 5


4

จาวาสคริปต์, 152 ตัวอักษรกอล์ฟ

function t() {
    var fa = (f + '').match(/\d/g)
    var ra = []
    for (var i = 0; i < 5; i++) {
        if (fa.indexOf(i + '') < 0) ra.push(i + 1)
    }
    return ra
}

function f() {
    0; return t()
    1; return t()
    2; return t()
    3; return t()
    4; return t()
}

แข็งแรงเล่นกอล์ฟ:

function t(){for(a=[],i=0;++i<5;)if((f+'').indexOf(i)<0)a.push(i+1);return a}function f(){
return t(0)
return t(1)
return t(2)
return t(3)
return t(4)
}

มีตัวเอง (แต่น่าเกลียด):

function f() {
    0; var ra = []; for (var i = +![]; i < 5; i++) if ((f + '').match(/\d/g).indexOf(i + '') < +![]) ra.push(i); return ra
    1; var ra = []; for (var i = +![]; i < 5; i++) if ((f + '').match(/\d/g).indexOf(i + '') < +![]) ra.push(i); return ra
    2; var ra = []; for (var i = +![]; i < 5; i++) if ((f + '').match(/\d/g).indexOf(i + '') < +![]) ra.push(i); return ra
    3; var ra = []; for (var i = +![]; i < 5; i++) if ((f + '').match(/\d/g).indexOf(i + '') < +![]) ra.push(i); return ra
    4; var ra = []; for (var i = +![]; i < 5; i++) if ((f + '').match(/\d/g).indexOf(i + '') < +![]) ra.push(i); return ra
}

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

ใช้งานได้จริงกับจำนวนบรรทัดที่ลบออก ! มันจะส่งกลับอาร์เรย์ของบรรทัดที่ถูกลบออกหรืออาร์เรย์ว่างเปล่าหากไม่มีการลบออก (ฉันสามารถเปลี่ยนที่จะคืนค่าศูนย์ได้อย่างง่ายดาย (โดยแทนที่return raด้วยreturn ra || 0) แต่ฉันชอบโซลูชันอาร์เรย์ที่ว่างเปล่าเพราะมันจะมีประโยชน์มากขึ้นในโลกแห่งความจริง)

ยกตัวอย่างเช่นการเอาผลตอบแทนบรรทัดแรก[1]และเอาทุกอย่าง [2,3,4,5]แต่ผลตอบแทนที่บรรทัดแรก (แน่นอนมันไม่ทำงานหากคุณลบทุกบรรทัด;-))


3

ทับทิม

def f
    a = [ 2, 3, 4, 5 ]
    defined?(a) ? a = a.select { |num|    num != 2 } : a = [ 1, 3, 4, 5 ]
    defined?(a) ? a = a.select { |num|    num != 3 } : a = [ 1, 2, 4, 5 ]
    a = a.select { |num|    num != 4 }
    (a = a.select { |num|    num != 5 }) == [] ? a = 0 : a
end

วิธีการทำงาน: ความคิดของฉันคือ: สร้างอาร์เรย์และในแต่ละบรรทัดให้ลบค่าเฉพาะ ดังนั้นในบรรทัดแรกฉันมีอาร์เรย์[ 1, 2, 3, 4, 5]โดยที่องค์ประกอบ1ถูกลบออก ที่บรรทัดที่สองหากaมีการกำหนดไว้แล้วให้ลบองค์ประกอบ2ออก มิฉะนั้นให้สร้างอาร์เรย์ใหม่โดย2ลบองค์ประกอบออก ทำเช่นเดียวกันสำหรับสาย 3. ที่บรรทัดที่ 4 4คุณสามารถมั่นใจได้ว่ามีอยู่แล้วอาร์เรย์ที่สร้างขึ้นดังนั้นเพียงแค่ลบองค์ประกอบ ที่บรรทัด 5 ครั้งแรกลบองค์ประกอบ5และถ้าเป็นแล้วอาร์เรย์ที่ว่างเปล่ากลับa มิฉะนั้นกลับ0a


3

หลาม

f=lambda:{1,2,3,4,5}-{
1,
2,
3,
4,
5,
} or 0

ส่งคืน 0 ถ้าไม่มีบรรทัดถูกลบออกมิฉะนั้นส่งคืนบรรทัดที่ลบ คุณสามารถลบ 1 ถึง 5 บรรทัดยกเว้นบรรทัดที่ 0 และ 6 ;-)


2

JavaScript, แบบครบวงจร, ทำงานสำหรับ 0, 1, 2 บรรทัดที่ลบออก ( 607  315 186 ตัวอักษร)

การสาธิตสด

การเหยียดหยามตัวแปร JS ยกและการรั่วไหลทั่วโลกเช่นเดียวกับความท้าทายอื่น ๆ :)

function(r){
r.shift();
r.splice(r.indexOf(2),1)
r.splice(r.indexOf(3),1);a=b=1;if(this.a&&this.b)return r
var a;r.splice(r.indexOf(4),1);b=1;if(this.b)return r
var b;r.pop();return r[0]?r:0
}

ที่จะเรียกว่ามีอาร์เรย์ [1,2,3,4,5] เป็นพารามิเตอร์

315 ตัวอักษร

function(r){
var a;
var b;
var c;a=1;b=2;d=4;e=5;for(i in(z="abde".split("")))if(y=this[z[i]])r.push(y);return r.length?r:0
var d;a=1;b=2;c=3;e=5;for(i in(z="abce".split("")))if(y=this[z[i]])r.push(y);return r.length?r:0
var e;a=1;b=2;c=3;d=4;for(i in(z="abcd".split("")))if(y=this[z[i]])r.push(y);return r.length?r:0
}

ที่จะเรียกด้วยอาร์เรย์ที่ว่างเปล่าเป็นพารามิเตอร์



รุ่นที่ไม่ใช่กอล์ฟ

(ใช้ได้กับการลบ 3 และ 4 บรรทัด):

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

ที่จะเรียกด้วยอาร์เรย์ที่ว่างเปล่าเป็นพารามิเตอร์


2

JavaScript:

var f = function(){
    1
    2
    a=[];for(i=0;i++<6;){if((f+'').indexOf(i)<0){a.push(i)}}return a.length?a:0;3
    a=[];for(i=0;i++<6;){if((f+'').indexOf(i)<0){a.push(i)}}return a.length?a:0;4
    a=[];for(i=0;i++<6;){if((f+'').indexOf(i)<0){a.push(i)}}return a.length?a:0;5
}

ซอ


2

จาวาสคริ

(function (i){

i += .1;     // line 1
i += .02;    // line 2
i += .003;   // line 3
i += .0004;  // line 4
i += .00005; // line 5

return (Math.round((.12345-i)*100000)/100000+'').match(/([1-5])/g) || 0 })(0)

เรียกมันว่าสิ่งที่คุณต้องการ แต่ฉันคิดว่ามันสวย

แจ้งให้คุณทราบว่ามีการลบบรรทัดใด (1 หรือมากกว่า) หรือ 0 หากไม่มีการลบบรรทัด ทั้ง 5 บรรทัดสามารถลบออกได้

แก้ไข:

เนื่องจากฉันทราบว่ารหัสของฉันอาจมี 6 บรรทัดและละเมิดกฎฉันจึงปรับเปลี่ยนเป็นดังต่อไปนี้:

(Math.round((.12345 - (new (function(){

    this.i = isFinite(this.i) ? this.i + .1 : .1 ;
    this.i = isFinite(this.i) ? this.i + .02 : .02;
    this.i = isFinite(this.i) ? this.i + .003 : .003; 
    this.i = isFinite(this.i) ? this.i + .0004 : .0004;
    this.i = isFinite(this.i) ? this.i + .00005 : .00005; 

})().i || 0) )*100000)/100000+'').match(/([1-5])/g) || 0

เช่นเดียวกับ - มันจะส่งคืนอาร์เรย์ของบรรทัดที่ถูกลบตั้งแต่ 1- ทั้งหมดหรือ 0 หากไม่มี


ไม่แน่ใจว่ามันจะช่วยได้หรือเปล่า แต่ฉันสังเกตุเห็นว่ามีคนอื่นทำอยู่ดี
logic8

เนื่องจากไม่ใช่โค้ดกอล์ฟคุณไม่จำเป็นต้องลบช่องว่างออก
Timtech

1
บรรทัด "return" อยู่ในฟังก์ชันดังนั้นฟังก์ชันจึงมีรหัสหกบรรทัดซึ่งละเมิดกฎของความท้าทาย
jawns317

@ jawns317 ฉันไม่แน่ใจว่านิยาม "line" เป็นอย่างไร ใครช่วยกรุณาให้คำจำกัดความที่ชัดเจน?
logic8

@ logic8 ลบfunction(){และ}(และฟังก์ชั่นผู้ช่วยใด ๆ ) นับจำนวนบรรทัด
Doorknob

1

เสียงกระเพื่อมสามัญ

(defun which-lines-are-removed (&aux (x (list 1 2 3 4 5))) 
  (setq x (remove-if #'(lambda (x) (eql x 1)) x))
  (setq x (remove-if #'(lambda (x) (eql x 2)) x))
  (setq x (remove-if #'(lambda (x) (eql x 3)) x))
  (setq x (remove-if #'(lambda (x) (eql x 4)) x))
  (setq x (remove-if #'(lambda (x) (eql x 5)) x))
)

ใช้งานได้สำหรับการลบ 1-4 บรรทัด หากคุณลบทุกบรรทัดมันจะกลับมาเหมือนถ้าคุณลบไม่มี

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


1

หลาม

def function(a = [1,2,3,4,5]):
    delete(a, len(a)-5)#1
    delete(a, len(a)-4)#2
    delete(a, len(a)-3);print a if len(a)==2 else '',#3
    delete(a, len(a)-2);print a if len(a)==2 else '',#4
    delete(a, len(a)-1);print a if len(a)==2 else '',#5

def delete(a, i):
    del a[i]
    return a

ใช้งานได้กับทุกบรรทัด - แต่ถ้าลบสองรายการเท่านั้น หากลบเพียงหนึ่งบรรทัดก็จะพิมพ์บรรทัดที่ถูกลบและบรรทัดที่ 5 หากมีการลบบรรทัดมากเกินไปมันจะไม่พิมพ์อะไรเลย

สิ่งนี้ใช้ฟังก์ชั่นตัวช่วยเพราะไม่สามารถใช้คำหลัก del ในบรรทัดที่มี; (เท่าที่ฉันรู้)

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

ฟังก์ชั่นนี้ขาดคุณสมบัติในสองวิธี:

  1. มันไม่ได้พิมพ์ 0 ถ้ามันถูกเรียกใช้ตามที่เป็น (มันถือว่าสองบรรทัดสุดท้ายได้รับการแสดงความคิดเห็นและเพื่อพิมพ์ 4, 5
  2. มันถือว่าprintและreturnสามารถใช้แทนกันได้

จะprint ''ไม่สร้างอักขระขึ้นบรรทัดใหม่พิเศษหรือไม่
SimonT

1

Deja Vu

ทำงานเพื่อลบจำนวนบรรทัดใด ๆ (ตราบเท่าที่คุณออกอย่างน้อยหนึ่งบรรทัด)

local line n:
    try:
        dup
    catch stack-empty:
        dup set{ 1 2 3 4 5 }
    delete-from swap n

func which-gone:
    line 1
    line 2
    line 3
    line 4
    line 5

0

R

ฉันมีเวอร์ชั่นอื่นใน R ซึ่งฉันคิดว่าดีกว่า (แต่ใช้ฟังก์ชั่นตัวช่วย):

trick <- function(sym, value) {
  assign(sym, value, envir=parent.frame())
  values <- unlist(as.list(parent.frame()))
  if(length(values)==5) 0 else which(!1:5 %in% values)
}

reportRemovedLines <- function(){
  trick("a", 1)
  trick("b", 2)
  trick("c", 3)
  trick("d", 4)
  trick("e", 5)
}

หรือสามารถหลีกเลี่ยงการใช้ฟังก์ชันตัวช่วยได้โดยกำหนดเป็นอาร์กิวเมนต์เริ่มต้น (ทำงานเหมือนกัน แต่อ่านได้น้อยกว่า - อย่างไรก็ตามไม่ใช้ฟังก์ชันตัวช่วย "แยกกัน":

funnyVersion <- function(trick = function(sym, value) {
  assign(sym, value, envir=parent.frame())
  values <- unlist(as.list(parent.frame()))
  if(length(values)==5) 0 else which(!1:5 %in% values)
}){
  trick("a", 1)
  trick("b", 2)
  trick("c", 3)
  trick("d", 4)
  trick("e", 5)
}

ทั้งสองreportRemovedLines()และfunnyVersion()ทำงานกับจำนวนบรรทัดใด ๆ ที่ถูกลบ - ยกเว้นถ้าคุณลบทุกบรรทัด (ในกรณีนั้นพวกเขาจะกลับมาNULL) จริง ๆ แล้วพวกเขาส่งคืนหมายเลขบรรทัดไม่ใช่แค่พิมพ์พวกเขาเช่นเดียวกับใน R ค่าของนิพจน์สุดท้ายที่ประเมินภายในฟังก์ชันจะถูกส่งคืนโดยอัตโนมัติ

มันทำงานยังไง? เคล็ดลับอยู่ในtrickฟังก์ชั่นที่รับวัตถุทั้งหมดจาก "สภาพแวดล้อมหลัก" ของมัน (เช่นสภาพแวดล้อมของฟังก์ชั่นที่เรียกมัน) ทำให้ค่าของพวกมันรวมกันในเวกเตอร์และส่งคืนซึ่งค่าจาก 1 ถึง 5 จะไม่แสดง


0

JavaScript (136/166 ตัวอักษร)

เวอร์ชันที่เล็กกว่าซึ่งมีค่าบางค่าที่ประกาศในตอนต้น

function(){b=[1,2,3,4,5],i=0
    b.splice(0,1);i++
    b.splice(1-i,1);i++
    b.splice(2-i,1);i++
    b.splice(3-i,1);i++
    b.splice(4-i,1);i++
return b}

รุ่นที่มีในตัวเอง (คุณไม่จำเป็นต้องผ่านอะไรเลย - อาร์กิวเมนต์ b อยู่ที่นั่นเพื่อให้ฉันสามารถตรวจสอบว่ามีการกำหนด b ด้วยหรือไม่||)

function(b){
    b=[2,3,4,5],i=1
    b=b||[1,2,3,4,5],i=i||0,b.splice(1-i,1);i++
    b=b||[1,2,3,4,5],i=i||0,b.splice(2-i,1);i++
    b.splice(3-i,1);i++
    b.splice(4-i,1);i++
return b}

ใช่ทั้งสองมีreturnข้อความ แต่นั่นก็ยุติธรรมถ้าฉันกำลังแข่งขันกับภาษาที่มีผลตอบแทนโดยปริยาย


จริงมันง่ายกว่าในภาษาเหล่านั้น แต่มันเป็นไปไม่ได้ใน JS ฉันไม่คิดว่าสิ่งเหล่านี้จะเป็นไปตามข้อ จำกัด ของความท้าทายเนื่องจากรุ่น 136-char ของคุณมีโค้ดเจ็ดบรรทัดภายในฟังก์ชันและเวอร์ชัน 166-char ของคุณมีหกข้อ ความจริงที่ว่าคุณมีรหัสในบรรทัดเดียวกันกับวงเล็บเปิดหรือปิดไม่ได้หมายความว่ารหัสไม่ได้เป็นส่วนหนึ่งของฟังก์ชั่น
jawns317

แล้วคำตอบที่ใช้ผู้ช่วยเหลือล่ะ
Bobby Marinoff

ฟังก์ชั่นผู้ช่วยได้รับอนุญาตอย่างชัดเจน แต่ฟังก์ชั่นที่ลบบรรทัดควรมีโค้ดห้าบรรทัด
jawns317

0

R

รุ่นง่าย (ไม่เข้าใจผิดได้เนื่องจากคุณจะได้รับข้อผิดพลาดหากคุณลบบรรทัดที่ 5):

doit <- function() setdiff(1:5, c(
       1,
       2,
       3,
       4,
       5
    ))

และรุ่นที่เข้าใจผิดได้:

doit<-function() setdiff(1:5, scan(text="
1
2
3
4
5
"))

มันทำงานได้กับจำนวนบรรทัดใด ๆ ที่ถูกลบ (ยกเว้นถ้าคุณลบทุกบรรทัด) และสามารถขยายได้อย่างง่ายดายมากกว่า 5 บรรทัด ใช้มัน "จะเป็น" จะกลับมาซึ่งเป็นแนวคิดคล้ายกับการกลับมาเพียงแค่integer(0) 0การคืนค่า 0 ที่แท้จริงจะทำให้มันน่าเกลียดและนานขึ้น แต่จะไม่ซับซ้อน

ในที่สุดรุ่นที่ใช้เวทย์มนตร์:

ฟังก์ชั่นผู้ช่วย:

dysfunction <- function(E){
    FUN <- function(){}
    e <- substitute(E)
    e[[1]] <- as.name("list")
    nb <- quote(setdiff(as.list(1:5), x))
    nb[[3]] <- e
    body(FUN) <- nb
    FUN
    }

ฟังก์ชั่นที่เกิดขึ้นจริง:

df <- dysfunction({
1
2
3
4
5
})

0

C ++

void function(int & i)
{
        i=i|1;
        i=i|2;
        i=(i|4);
        i=(i|8);
        i=(i|16);
} 


int[] func2(int i)
{
    int arr[]={0,0};
    int k=0,l=1;
    for(int j=1;j<=16;j*=2,l++)
    {
        if((i&j)==0)
        {
             arr[k++]=l;
        }
    }
    return arr;
}

วิธีใช้: เรียกใช้ฟังก์ชันด้วย i และใช้ func2 เพื่อทำความเข้าใจว่าฟังก์ชั่นใดกำลังบอก

หากคุณเปลี่ยน line int arr [] = {0,0} เป็น int arr [] = {0,0,0,0,0} มันจะใช้ได้ทั้งห้าบรรทัดมันเป็น handline หนึ่งบรรทัดในการลบกรณีทดสอบ โดยอัตโนมัติสิ่งที่ฉันทำคือการใช้บิตของตัวแปรเป็นธงสำหรับแต่ละบรรทัด ....


ไม่มีfunctionหกเส้นไม่ใช่ห้าเส้น?
Cel Skeggs

ผลตอบแทนที่ไม่เป็นส่วนหนึ่งของที่ u สามารถดูคำตอบอื่น ๆ ยัง .... มันพึ่งพาภาษา
โมกุล Zeeshan

ดูความคิดเห็นนี้จากผู้เขียนความท้าทายหนึ่งในรายการอื่น ๆ : "จริงมันง่ายกว่าในภาษาเหล่านั้น แต่มันเป็นไปไม่ได้ใน JS ฉันไม่คิดว่าสิ่งเหล่านี้จะได้พบกับข้อ จำกัด ของความท้าทายเนื่องจาก รุ่น 136-char ของคุณมีรหัสเจ็ดบรรทัดภายในฟังก์ชันและรุ่น 166-char ของคุณมีหกข้อเท็จจริงที่ว่าคุณมีรหัสในบรรทัดเดียวกับวงเล็บเปิดหรือปิดไม่ได้หมายความว่ารหัสไม่ได้เป็นส่วนหนึ่งของ ฟังก์ชั่น - jawns317 "
Cel Skeggs

ตรวจสอบในขณะนี้และบอกฉัน ur ตอบสนอง
โมกุล Zeeshan

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