एक फ़ंक्शन लिखें जो आपको बताता है कि इसकी कौन सी रेखा हटा दी गई है


28

एक फ़ंक्शन लिखें जिसमें पांच लाइनें हों।

यदि आप फ़ंक्शन को चला रहे हैं, तो इसे 0 पर लौटना चाहिए।

यदि आप पांच लाइनों में से किसी एक को हटाते हैं और फ़ंक्शन को चलाते हैं, तो आपको यह बताना चाहिए कि कौन सी रेखाओं को हटा दिया गया है (उदाहरण के लिए, यदि आप अंतिम पंक्ति को हटाते हैं तो इसे 5 वापस करना चाहिए)।

Brevity, नवीनता, और लालित्य सभी विचार के पात्र हैं। उच्चतम उत्थान समाधान (समय की उचित मात्रा के बाद) जीतता है।


4
क्या फ़ंक्शन एक पैरामीटर ले सकता है?
जेरेमी

6
यदि हम उस तरह की भाषा का उपयोग करना चाहते हैं, या केवल शरीर की गिनती की जाती है, तो फ़ंक्शन घोषणा को एक पंक्ति के रूप में गिना जाता है?
मेयोनेज़ोम

1
इसके अलावा, क्या हमारी रेखाओं को 1, 2, 3, 4, 5 संख्याओं की आवश्यकता है या किसी भी नंबरिंग योजना की अनुमति है?
मेयोनेज़ोम

@ जेरेमी, हाँ, यह ठीक है।
jawns317

@ शर्मनाक, केवल शरीर मायने रखता है, और रिटर्न मानों के उद्देश्य से लाइनों को 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। यह रूबी है, इसलिए अंतिम पंक्ति रिटर्न मान को परिभाषित करती है।


13

जावास्क्रिप्ट ( 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 इंजन "वैरिएबल होस्टिंग" करता है, "a" स्थानीय संस्करण बन जाता है, और पंक्ति 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
}

गैर golfed

  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करते हैं? सिद्धांत रूप में, यह नहीं पहुँचा जाना चाहिए।
ब्रैडेन बेस्ट

@ B1KMusic, वास्तव में जावास्क्रिप्ट चर होज़िंग नामक किसी चीज़ के कारण यह "पहुंच" है। जब JS को "संकलित" किया जाता है, तो सभी "var" घोषणाएँ वस्तुतः उन कार्यों की शुरुआत में रखी जाती हैं जिनमें वे हैं।
XEM

हम्म, यह अजीब है। क्या भाषा में इसके लिए एक व्यावहारिक उपयोग है, या यह विशुद्ध रूप से एक गोल्फ / शोषण है? मुझे याद नहीं है कि मोजिला के प्रलेखन में परिवर्तनशील होड़ के बारे में कुछ भी पढ़ना।
ब्रैडेन बेस्ट

यह एक जेएस सुविधा है। यहाँ वर्णित है: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
xem

आह, तो यह गोल्फ के लिए एक शोषण की अधिक है।
ब्रैडेन बेस्ट

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

आर

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

फ़ंक्शन अंतर्निहित "स्थिरांक" का उपयोग करता है और उनमें से प्रत्येक को एक और मूल्य प्रदान करता है। यदि ये सभी चर नए मान के बराबर हैं, तो फ़ंक्शन 0. वापस हो जाता है। गणितीय संचालकों के कारण तार्किक मान संख्यात्मक रूप में बदल जाते हैं। 4 वीं पंक्ति के आसपास के कोष्ठक नेत्रहीन अपने परिणाम (यदि यह अंतिम आदेश है) को वापस करने की अनुमति देते हैं।


3

लुआ 5.2+

समारोह में 55 वर्ण नए वर्णों को छोड़कर। मैं कुछ भी बेहतर नहीं कर सकता लेकिन यह:

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

टिप्पणियों के दुरुपयोग के लिए अतिरिक्त अंक प्राप्त करने की उम्मीद: पी

५.१ में काम नहीं करने का कारण यह है कि नेस्टेड [[]]को हटा दिया गया था, और ५.१ में ५.२ की तरह इसे अनदेखा करने के बजाय संकलन त्रुटि देता है।

  • यदि लाइनों में से कोई भी हटाया नहीं जाता है, तो फ़ंक्शन बॉडी के लिए eqivalent है return 7-2-5
  • यदि पहली पंक्ति हटा दी जाती है, return 1
  • यदि दूसरा, return 7-5
  • यदि तीसरा, return 7-2-2
  • यदि चौथा, return 7-2-1
  • यदि पांचवां, return 7-2

2

माणिक

मैंने इसे बिटवाइज़ ऑपरेशंस के साथ करने की कोशिश की और फिर मुझे महसूस हुआ कि सूचियों का उपयोग करने का एक बहुत सरल उपाय है! यह चुनौती एक प्रोग्रामिंग भाषा द्वारा सबसे अच्छी तरह से परोसी जाती है, जो अपने द्वारा देखे गए अंतिम मूल्य, जैसे कि रूबी, को स्वचालित रूप से वापस कर देती है।

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 >
>>>>>>^

पहली और आखिरी लाइनें फंक्शन स्टार्ट और फंक्शन एंड हैं। यह "वापसी" के लिए निकटतम काम करता है, अर्थात, यह स्टैक पर सही मूल्य को धक्का देता है।


1

नया उत्तर

मुझे एक और उपाय मिला। यह बहुत बुरा है, मुझे गणित बहुत पसंद है। यह समाधान बताता है कि प्रत्येक पंक्ति को चलाया गया है या नहीं, यह बताने के लिए पुनरावर्तन और वैश्विक चर (yuck!) का उपयोग करता है। मैं अन्य समाधानों से कुछ अलग करना चाहता था, इसलिए यह बहुत सुरुचिपूर्ण नहीं है, लेकिन यह ठीक से काम करता है :)

पीएचपी

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;
}

मैंने वास्तव में इस चुनौती का आनंद लिया, धन्यवाद! :)


पुराना उत्तर

मैंने इसे मैथ्स का उपयोग करके हल किया। यदि प्रत्येक चर को एक अज्ञात के रूप में देखा जाता है, और हम प्रति पंक्ति एक घोषणा करते हैं, तो पाँच अज्ञात और पांच पंक्तियाँ हैं: यह हमें निम्नलिखित 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.

एक बार जब मुझे मूल्य मिल गए, तो मैंने उन्हें हार्डकोड किया और कुछ बुनियादी सामान जोड़े।

पीएचपी

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 बाइट्स

मेरी पहली आविष्कार एसोलंग की कोशिश करना। प्रारंभिक भ्रम के बाद मैंने पाया कि समाधान इतना सरल है।

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

स्पष्टीकरण:

मधुमक्खी पालन कार्यक्रम 2 डी हेक्सागोनल ग्रिड पर काम करते हैं। कार्यक्रम एक आयताकार प्रारूप में संग्रहीत होते हैं।

    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 एक और आईपी बनाएँ, बस केस लाइन 1 गायब है, यह सुनिश्चित करने के लिए आईपी को धीमा करें कि लाइन एक से आईपी आगे है, फिर 2 जोड़ें, फिर लाइन 3 पर रीडायरेक्ट करें

> >~3+p 3 जोड़ें, फिर पंक्ति 4 पर पुनर्निर्देशित करें

> >~4+X@7~8+~@$^^{; 4 जोड़ें, फिर 15 तक 2 लेस्टैक मान सेट करें, फिर XOR लेस्टैक टॉप और 2 वैल्यू, 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 लाइनों में से एक गायब है, तो आईपी अभी भी ठीक से पुनर्निर्देशित हो जाता है और प्रोग्राम को नहीं छोड़ता है।

आप जिटिया में लिखी मेरी बीटवाक्स दुभाषिया को मेरे गीथहॉस रिपॉजिटरी से क्लोन कर सकते हैं

GitHub पर रीडमी अधिक तिथि तक है और एसोलैंग्स पृष्ठ की तुलना में बेहतर संरचित है।



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

बैश, 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 वर्णों के लिए है यदि हर चीज को हटा दिया जाए, लेकिन फ़ंक्शन, व्हिचस्पेस को खोदकर / बिन / बैश को / बिन / श में बदल दिया जाए)


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)+"*");
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.