एक साधारण स्प्रेडशीट का मूल्यांकन करें


13

नियम

  1. कोई सेल रेंज संदर्भ नहीं ( A2:B3)।

  2. अधिकतम 9 पंक्तियाँ और 9 कॉलम।

  3. कोई परिपत्र संदर्भ या सूत्र त्रुटियां नहीं।

  4. खाली कोशिकाओं का मूल्यांकन 0

  5. डेटा केवल नंबर हैं, लेकिन इसे स्ट्रिंग्स के रूप में लिया जा सकता है।

  6. सूत्र तार हैं।

कार्यान्वयन विकल्प

आपको इन मामलों में अपनी पसंद बतानी होगी:

  1. किसी एक वर्ण के साथ उपसर्ग करने के लिए सूत्र की आवश्यकता होती है, जैसे =- या नहीं।

  2. दूसरी पंक्ति के सबसे बाईं ओर के सेल है A2या R2C1एक्सेल एट अल द्वारा इस्तेमाल किया दो सम्मेलनों के अनुसार,।

  3. सेल संदर्भ में किसी भी एकल-वर्ण पूर्व प्रत्यय की आवश्यकता होती है, जैसे $- या नहीं।

  4. 0रिक्त कोशिकाओं का प्रतिनिधित्व करने के लिए अशक्त, खाली स्ट्रिंग, खाली सूची, आदि (लेकिन नहीं ) में से एक।

  5. आपके सबमिशन की भाषा (स्प्रेडशीट प्रबंधकों की अनुमति नहीं है)।

  6. सूत्रों के लिए भाषा (ऊपर से भिन्न हो सकती है)। *

  7. ब्राउनी पॉइंट या कुकीज़ आपके समाधान की व्याख्या करने के लिए।

उदाहरण

विकल्प: 7 =:; 8 A2:; 9: कोई नहीं; 10 "":; 12: एक्सेल फॉर्मूला लैंग्वेज

में:

[[       2, 3],
 ["=A1+B1",""]]

बाहर:

[[2,3],
 [5,0]]

में:

[[       2,"=A1+B2"],
 ["=A1+B1",      ""]]

बाहर:

[[2,2],
 [4,0]]

में:

[[ 3, 4,"=A1*B1"],
 [ 2, 5,"=A2*B2"],
 ["","","=C1+C2"]]

बाहर:

[[3,4,12],
 [2,5,10],
 [0,0,22]]

में:

[["","=2*B2*B3"     ,""],
 [ 3,"=A1+(A2+C2)/2", 2],
 [ 1,"=C1+(A3+C3)/2", 5]]

बाहर:

[[0,15,  0],
 [3, 2.5,2],
 [1, 3  ,5]]

* सूत्र भाषा PPCG स्वीकार्य होनी चाहिए , लेकिन आपको केवल सेल संदर्भों के मापदंड 3 और 4 का समर्थन करना होगा, वहां। इसके अलावा और प्रधानता का निर्धारण।


क्या एक्सेल / वीबीए में जवाब प्रस्तुत किया गया है? Expand array to cells, evaluate.
मैजिक ऑक्टोपस Urn

@carusocomputing यदि आप एक्सेल को अपना काम करने नहीं दे रहे हैं, तो बेझिझक पोस्ट करें।
Adám

क्या हमारे पास कोशिकाएं शून्य-आधारित हो सकती हैं? में के रूप में R0C0?
कॉनर ओ'ब्रायन

@ ConorO'Brien नहीं, यह एक्सेल एट अल द्वारा उपयोग किए जाने वाले दो सम्मेलनों में से
आदम

जवाबों:


6

जावास्क्रिप्ट, 125 112 105 बाइट्स

उपयोग करने के लिए, f=शुरुआत में जोड़ें और जैसे आह्वान करें f(argument)

a=>a.map(b=>b.map(p=>+p?p:p?eval(p.replace(/[A-I][1-9]/g,m=>`a[${m[1]-1}][${(m.charCodeAt(0)-65)}]`)):0))

विकल्प:

  1. की आवश्यकता नहीं है =
  2. दूसरी पंक्ति की बाईं सबसे कोशिका है A2
  3. किसी उपसर्ग या प्रत्यय की आवश्यकता नहीं है।
  4. "" (खाली स्ट्रिंग) खाली सेल को निरूपित करने के लिए।
  5. जावास्क्रिप्ट।
  6. जावास्क्रिप्ट।
  7. कुकीज़। 🍪🍪🍪

स्पष्टीकरण:

यह समाधान वर्कशीट की सभी कोशिकाओं (दिए गए सरणी के उप-सरणियों के प्रत्येक तत्व) पर आधारित है और यदि गैर-रिक्त स्ट्रिंग पाया जाता है, तो इसके सेल संदर्भ को दिए गए सरणी के संदर्भ में संबंधित संदर्भों के साथ बदल देता है और अभिव्यक्ति का मूल्यांकन करता है साथ eval()(हाँ, कि बुराई बात यह है कि अपने बुरे सपने में सत्ता आप )। यह समाधान मानता है कि इनपुट सरणी में दिए गए स्थिरांक पूर्णांक प्रकार के हैं।

परीक्षण के मामलों

f=a=>a.map(b=>b.map(p=>+p?p:p?eval(p.replace(/[A-I][1-9]/g,m=>`a[${m[1]-1}][${(m.charCodeAt(0)-65)}]`)):0))

console.log(f([[1,2,3],["A1+B1+C1",10,11]]));
console.log(f([[1,2,5,4,6,89,0],[0,1,2,3,"A2+A1",5,6]]));
console.log(f([[1,2,4,5],["A1/B1*C1+A1+Math.pow(5,B1)",2,3,4]]));


बहुत अच्छा। यहाँ: 🍪
13

किसी भी कारण से आप /\w\d/gअपने regex के लिए उपयोग नहीं कर सकते हैं ?
पॉवेल्स

@powelles \wअंकों से भी मेल खाता है, और \d0 से भी मेल खाता है, दोनों चीजें जो आप इस मामले में नहीं चाहते हैं। /[A-I][1-9]/gहालांकि काम करना चाहिए
लार्स

@LarsW /\w\d/gपरीक्षण मामलों में ठीक उसी परिणाम का उत्पादन करता है। इसके अलावा eval भाग में टेम्पलेट शाब्दिक का उपयोग करके मुट्ठी भर बाइट्स को बचाया जा सकता है।
पॉवेल्स

@powelles हाँ, लेकिन परीक्षण के मामले अधूरे हो सकते हैं। वैसे भी, मुझे लगता है कि चुने गए नियमों का पालन करने की आवश्यकता है; लेकिन वे सिर्फ इनपुट प्रतिबंध (या दोनों) हो सकते हैं, जिससे समस्या भी हो सकती है
LarsW

4

PHP, 265 263 259 258 257 240 224 222 213 202 196 बाइट्स

विशेषता array_walk_recursive, एक पुनरावर्ती अनाम फ़ंक्शन और preg_replace_callback:

function f(&$a){array_walk_recursive($a,$p=function(&$c)use($a,&$p){eval('$c='.preg_replace_callback("#R(.)C(.)#",function($m)use($a,&$p){$d=$a[$m[1]-1][$m[2]-1];$p($d);return$d;},$c?:0).';');});}

या

function f(&$a){array_walk_recursive($a,$p=function(&$c)use($a,&$p){eval('$c='.preg_replace_callback("#R(.)C(.)#",function($m)use($a,&$p){return$p($a[$m[1]-1][$m[2]-1]);},$c?:0).';');return$c;});}

इनपुट पर काम करता है: संदर्भ द्वारा कॉल करें। इसे ऑनलाइन टेस्ट करें

  • कोई अभिव्यक्ति उपसर्ग नहीं
  • संदर्भ प्रारूप R2C1, कोई उपसर्ग नहीं
  • खाली सेल के लिए कुछ भी गलत
  • सभी अंकगणित सहित किसी भी (लोअरकेस) PHP अभिव्यक्ति का मूल्यांकन करता है

ब्रेकडाउन (पहला संस्करण)

function f(&$a)
{
    array_walk_recursive($a,                    # walk through elements ...
        $p=function(&$c)use($a,&$p){            # use array $a and recursive $p
            eval('$c='.                             # 3. evaluate expression
                preg_replace_callback('#R(.)C(.)#', # 2. replace references with ...
                function($m)use($a,&$p){
                    $d=$a[$m[1]-1][$m[2]-1];            # $d=content of referenced cell
                    $p($d);                             # recursive evaluation
                    return$d;                           # return $d
                },$c?:0)                            # 1. replace empty with 0
                .';'
            );
        }
    );
}

+1 बहुत अच्छा; 🍪। आप कहते हैं कि मानक अंकगणित, लेकिन वास्तव में कोई भी उचित PHP अभिव्यक्ति काम करेगा, नहीं?
आदम

1
@ अब आप इसका उल्लेख करते हैं ... जब तक यह लोअरकेस है, हाँ। हालांकि max(range(A1,A3))भ्रामक हो सकता है। : डी
टाइटस २ ''

1
अच्छा गोल्फ मुझे कुछ भी खोजने के लिए काफी समय लगा: $d=$c;preg_match($x="#[A-Z](.)#",$c=$c[0]करने के लिए preg_match($x="#[A-Z](.)#",$c=($d=$c)[0]1 बाइट को बचाने चाहिए।
क्रिस्टोफ

क्या इसे ऑनलाइन आजमाना संभव है ! संपर्क?
आदम

1
@Christoph ने दूसरे उदाहरण को ठीक करने के लिए मुझे एक नया तरीका अपनाया ... और इस प्रक्रिया में बहुत कुछ बचाया ... इसके अलावा गोल्फिंग
टाइटस

3

गणितज्ञ, 119 115 95 बाइट्स

(m=#/.""->0)//.s_String:>ToExpression@StringReplace[s,"R"~~x_~~"C"~~y_:>"m[["<>{x,",",y,"]]"}]&

विकल्प:

  1. कोई उपसर्ग नहीं।
  2. R2C1 अंदाज।
  3. कोई उपसर्ग या प्रत्यय नहीं।
  4. "" खाली कोशिकाओं के लिए।
  5. मेथेमेटिका।
  6. मेथेमेटिका। मनमाने ढंग से अंकगणितीय अभिव्यक्तियाँ जो फॉर्म के चर का उपयोग नहीं करती हैं RxCyऔर जिनके साइड इफेक्ट नहीं होते हैं, उन्हें काम करना चाहिए।

व्याख्या

(m=#/.""->0)

हम इनपुट ( #) में सभी खाली तारों की जगह शून्य से शुरू करते हैं और परिणाम को स्टोर करते हैं m, क्योंकि हमें फिर से दूसरी जगह इसकी आवश्यकता होगी।

...//.s_String:>...

बार-बारs निम्नलिखित के साथ किसी भी शेष स्ट्रिंग को बदलें ...

...StringReplace[s,"R"~~x_~~"C"~~y_:>...]

प्रपत्र के किसी भी सबस्ट्रिंग का मिलान करें RxCyमें sऔर उनके साथ की जगह ...

..."m[["<>{x,",",y,"]]"}

जो देता है m[[x,y]], जो मैट्रिक्स में xऔर yसूचकांकों के रूप में उपयोग करता है m

...ToExpression@...

फिनाल्ज़, इस स्ट्रिंग का एक गणितीय अभिव्यक्ति के रूप में मूल्यांकन करते हैं।


ठंडा। मैंने सोचा था कि यह उस से थोड़ा अधिक समय लगेगा ... यह कोशिश करने का कोई तरीका?
आदम

@ एडम दुर्भाग्य से, यह गणित में काम करने के लिए प्रतीत नहीं होता है, इसलिए गणित की एक प्रति के बिना, शायद नहीं।
मार्टिन एंडर

अभी भी
बिलिन का

@ YSC एक्सेल, 0 बाइट्स।
आदम

@ Adám कि इस चुनौती के नियमों के अनुसार प्रतिस्पर्धा नहीं होगी। इसके अलावा, मुझे लगता है कि मार्टिन एक कुकी के हकदार हैं।
आउटगोल्फर

2

क्लोजर, 263 281 बाइट्स

अरे लानत है कि apply map vectorपरिणाम बिना बदले में, जैसा A2कि वर्णानुक्रम में पहले है B1

#(apply map vector(partition(count(% 1))(for[v(vals(loop[C(into{}(mapcat(fn[i r](map(fn[j v][(str j i)(or v"0")])"ABCDEFGHI"r))(rest(range))%))P[]](if(= C P)C(recur(into(sorted-map)(for[[k v]C][k(reduce(fn[r[K V]](clojure.string/replace r K V))v C)]))C))))](eval(read-string v)))))

उदाहरण:

(def f #(...))

(f [["2" "3"]["(+ A1 B1)" nil]])
([2 3] [5 0])

(f [[nil ,"(* 2 B2 B3)"                ,nil],
    ["3" ,"(+ A1 (/ (+ A2 C2) 2))"     ,"2"],
    ["1" ,"(-> A3 (+ C3) (/ 2) (+ C1))","5"]])
([0 15N 0] [3 5/2 2] [1 3 5])
  1. सूत्र एस-एक्सप्रेशन हैं
  2. A2
  3. नहीं, (+ A1 A2)ठीक है
  4. nilऔर falseखाली कोशिकाओं के रूप में काम करते हैं, लेकिन खाली स्ट्रिंग नहीं करते हैं
  5. Clojure
  6. एस-एक्सप्रेशन (क्लोजर + कोई बिल्ट-इन मैक्रोज़)

थ्रेड पहले मैक्रो का एक उदाहरण:

(macroexpand '(-> A3 (+ C3) (/ 2) (+ C1)))
(+ (/ (+ A3 C3) 2) C1)

Cलूप का प्रारंभिक मूल्य हैश-मैप है, कुंजी सेल नाम हैं और मान मूल मान हैं। तब सभी सेल संदर्भों को संदर्भित कोशिकाओं की सामग्री द्वारा प्रतिस्थापित किया जाता है जब तक कि हम अभिसरण ( Pपुनः स्पष्ट = समानांतर C) नहीं करते हैं, तब कोशिकाओं का मूल्यांकन किया जाता है और फ्लैट संरचना को एक नेस्टेड सूची में वापस विभाजित किया जाता है।

एक समाधान खोजने के लिए अच्छा होगा A1, जहां A2वास्तव में कॉल करने योग्य कार्य हैं, फिर (* 2 B2 B3)उन्हें फिर से लिखा (* 2 (B2) (B3))और निष्पादित किया जा सकता है ।

इसे ऑनलाइन आज़माएं!


2

APL (Dyalog) , 51 बाइट्स

⍎¨({((⍴⍵)↑⍉⎕A∘.,1↓⎕D),¨'←',¨⍵}{0::⍵⋄×≢⍵:⍕⍎⍕⍵⋄0}¨)⍣≡
  1. कोई नहीं

  2. A2

  3. कोई नहीं

  4. खाली स्ट्रिंग

  5. एपीएल

  6. एपीएल

इसे ऑनलाइन आज़माएं!

⍎¨ से परिणाम के प्रत्येक सेल का मूल्यांकन करें

()⍣≡ और अधिक परिवर्तन नहीं होने तक निम्नलिखित दो कार्यों का निरंतर अनुप्रयोग

{ लागू होने वाला पहला अनाम कार्य…

  0 किसी भी
  :: त्रुटि पर:
    तर्क को बिना बताए लौटा दें

   अब कोशिश करो;

   अगर तर्क के
   मिलान:
  × सकारात्मक है
  : तो:
    stringify
    का मूल्यांकन
    stringified
    तर्क

   अन्य;

  0 शून्य लौटाओ

 … प्रत्येक कोशिका के लिए

{ लागू होने वाला दूसरा अनाम कार्य…

  '←',¨
   तर्क के  प्रत्येक सेल को असाइनमेंट एरो प्रीपेंड करें

  (),¨ उस के प्रत्येक सेल के लिए निम्नलिखित प्रस्तुत करना

   1↓
   ⎕D सभी डी igits (यानी शून्य) की स्ट्रिंग के  पहले ड्रॉप

   ⎕AA  वर्णमाला के सभी अक्षरों के नीचे जाने के साथ,
   ∘., एक तालिका बनाएं (शेष अंक सही जा रहे हैं)

    संक्रमण (बढ़ती संख्याओं को कम करने के लिए, पत्रों को आगे बढ़ाना)

   (... )↑ ऊपरी बाएं सबमेट्रिक्स को आकार के साथ लें ...

    
     तर्क  का आकार

} ... पिछले फ़ंक्शन के परिणाम के लिए।


1
आपकी व्याख्याएं हमेशा सुंदर होती हैं, धन्यवाद, मुझे इन उत्तरों को पढ़ने से जो कुछ भी पता है उससे परे एपीएल सीखना चाहता है।
मैजिक ऑक्टोपस Urn

@carusocomputing धन्यवाद। मुझे आपकी सहायता करके खुशी होगी। एपीएल चैट रूम में प्रश्नों और अनुरोधों के लिए स्वतंत्र महसूस करें । अगर आपको जरूरत है तो मैं आपको सेट अप करने में भी मदद करूंगा।
Adám

1

पायथन 2 273,265,263 , 259 बाइट्स

import re
def g(m):x=m.group();return's[%d][%d]'%(int(x[1])-1,ord(x[0])-65)
e=enumerate
while'='in`s`:
    for x,i in e(s):
        for i,j in e(i):
            try:s[x][i]=0if not j else float(eval(re.sub('\w\d',g,str(j)).strip('=')))
            except:pass

इसे ऑनलाइन आज़माएं!

विकल्प:

  1. =

  2. ए 2

  3. कोई नहीं

  4. ""

  5. पायथन 2.7

  6. अजगर का भाव

मूल व्याख्या:

सबलिस्ट में प्रत्येक सूत्र के लिए, इसे संबंधित सूची (B1 s [0] [1] के लिए) के साथ प्रतिस्थापित करें और परिणाम का मूल्यांकन करें!

  • -4 बाइट्स बदलकर () बैकटिक्स के लिए!

आपने अपने उत्तर में पुनः आयात नहीं जोड़ा। इसके अलावा यह इस इनपुट को पास नहीं करता है:s=[[ 3, 4,"max(A1,B1)"],[ 2, 5,"A2**B2"],[ "", "","C1+C2"]]
डेड पॉसम

इनपुट प्रारूप [[ 3, 4,"=max(A1,B1)"],[ 2, 5,"=A2**B2"],[ "", "","=C1+C2"]]वह है जो हेडर के एक भाग के रूप में है! इसे ऑनलाइन लिंक की कोशिश पर जांचें!
कीर्तन प्रभाकरन

1
इसे बाइट काउंट में शामिल किया जाना चाहिए। बस इस साइट पर अन्य अजगर के जवाब की जाँच करें
मृत पोसुम

क्या यह? मैं codeglof का नेट हूं। टिप्पणी के लिए धन्यवाद। जोड़ देंगे।
कीर्तन प्रभाकरन

जहां तक ​​अन्य उत्तरों पर विचार किया जाता है, उन्होंने इनपुट को शामिल किया है! मैं आयात की गिनती के साथ संपादित किया है!
कीर्तन प्रभाकरन २
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.