2 डी असमानताएं


29

लक्ष्य

संख्याओं के एक ग्रिड को देखते हुए, असमानताओं को भरें।

मान्यताओं

ग्रिड में कॉलम और पंक्तियों की संख्या बराबर है।
ग्रिड का अधिकतम आकार 12x12 है।
ग्रिड में केवल पूर्णांक 0-9 होते हैं।
आउटपुट में एक अनुगामी न्यूलाइन हो सकती है।
इनपुट बिल्कुल नीचे लिखा है, जिसमें रिक्त स्थान और newlines शामिल हैं।

उदाहरण इनपुट

4 2 3 1

6 2 3 1

6 9 2 1

0 2 1 6

उदाहरण आउटपुट

4>2<3>1
^ " " "
6>2<3>1
" ^ v "
6<9>2>1
v v v ^
0<2>1<6

उदाहरण इनपुट (2)

1 2 3 4 5

5 4 3 2 1

0 0 0 3 2

3 2 0 0 0

2 1 3 1 5

उदाहरण आउटपुट (2)

1<2<3<4<5
^ ^ " v v
5>4>3>2>1
v v v ^ ^
0=0=0<3>2
^ ^ " v v
3>2>0=0=0
v v ^ ^ ^
2>1<3>1<5

उदाहरण इनपुट (3)

8

उदाहरण आउटपुट (3)

8

उदाहरण इनपुट (4)

0 0 0 0 0 0 0 0 0 0 0 0

0 1 1 1 1 1 1 1 1 1 1 0

0 1 2 3 4 5 6 7 8 9 1 0

0 1 3 9 8 7 6 5 4 8 1 0

0 1 4 8 9 8 7 6 5 7 1 0

0 1 5 7 8 9 9 7 6 6 1 0

0 1 6 6 7 9 9 8 7 5 1 0

0 1 7 5 6 7 8 9 8 4 1 0

0 1 8 4 5 6 7 8 9 3 1 0

0 1 9 8 7 6 5 4 3 2 1 0

0 1 1 1 1 1 1 1 1 1 1 0

0 0 0 0 0 0 0 0 0 0 0 0

उदाहरण आउटपुट (4)

0=0=0=0=0=0=0=0=0=0=0=0
" ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ "
0<1=1=1=1=1=1=1=1=1=1>0
" " ^ ^ ^ ^ ^ ^ ^ ^ " "
0<1<2<3<4<5<6<7<8<9>1>0
" " ^ ^ ^ ^ " v v v " "
0<1<3<9>8>7>6>5>4<8>1>0
" " ^ v ^ ^ ^ ^ ^ v " "
0<1<4<8<9>8>7>6>5<7>1>0
" " ^ v v ^ ^ ^ ^ v " "
0<1<5<7<8<9=9>7>6=6>1>0
" " ^ v v " " ^ ^ v " "
0<1<6=6<7<9=9>8>7>5>1>0
" " ^ v v v v ^ ^ v " "
0<1<7>5<6<7<8<9>8>4>1>0
" " ^ v v v v v ^ v " "
0<1<8>4<5<6<7<8<9>3>1>0
" " ^ ^ ^ " v v v v " "
0<1<9>8>7>6>5>4>3>2>1>0
" " v v v v v v v v " "
0<1=1=1=1=1=1=1=1=1=1>0
" v v v v v v v v v v "
0=0=0=0=0=0=0=0=0=0=0=0

एक्स में। 2 पंक्तियाँ और स्तंभ समान नहीं हैं।
जियोकॉवेल

1
क्या 2 अंकों की संख्या होगी?
डाउनगेट

@ V @ ग्रिड में केवल पूर्णांक 0-9 होते हैं।
डेनिस

1
मुझे लगता है कि इनपुट की गिने पंक्तियों पर कोई अनुगामी स्थान नहीं हैं। क्या रिक्त स्थानों पर कोई स्थान है? यदि मैं संपादन बटन दबाता हूं तो मुझे पता चलता है कि प्रत्येक रिक्त पंक्ति पर उदाहरण 4 के लिए 23 रिक्त स्थान हैं, अन्य सभी उदाहरणों के लिए शून्य। लेकिन प्रदान किया गया पृष्ठ उन सभी को हटा देता है, कम से कम जब मैं इसे एक पाठ संपादक में जांचने के लिए कॉपी करता हूं ..
लेवल रिवर सेंट

1
@steveverrill रिक्त लाइनों पर कोई स्थान नहीं हैं।
चिरायता

जवाबों:



7

सीजेएम, 52 बाइट्स

qN%::~_z_2{{_1>.-W<:g}%\z}*@@..{'=+}.{N@"\"v^"f=S*N}

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

संशोधन 3 में एक बग को इंगित करने के लिए @CroCo का धन्यवाद।

संशोधन 6 में एक बग को इंगित करने के लिए @Prrha के लिए धन्यवाद।

यह काम किस प्रकार करता है

qN%        e# Read all input and split it at runs of linefeeds.
::~        e# Evaluate each character separately.
           e# This turns non-empty lines into arrays of integers.
_z_        e# Copy, transpose rows and columns, and copy again.
2{         e# Do the following twice:
  {        e#   For each row:
    _1>    e#     Copy the row and remove the copy's first element.
    .-     e#     Perform vectorized subtraction.
    W<     e#     Remove the last element.
           e#     This pushes the array of increments of the row.
    :g     e#     Replace each difference with its sign (-1, 0 or 1).
  }%       e#
  \        e#   Swap the two topmost arrays on the stack.
  z        e#   Transpose rows and columns of the topmost array.
}*         e#
           e# The topmost result has been transposed before and after computing
           e# the increments of its rows. It holds the increments of it columns.
           e# The result below it has been transposed twice (therefore not at
           e# all) before computing the increments of its rows.
@@         e# Rotate the number array and the row increment array on top.
..{        e# For each number and the corresponding increment, push both; then:
  '=+      e#   Add the increment to the character '='.
}          e#
.{         e# For each row of the column increment array and corresponding row
           e# of the last result, push both rows; then:
  N@       e#   Push a linefeed and rotate the column increments on top.
  "\"v^"f= e#   For each, select the appropriate comparison character.
  S*       e#   Join those characters, separated by spaces.
  N        e#   Push another linefeed.
 }         e#

5

पायथन 2, 207 197 बाइट्स

f=lambda a:''.join(['=><'[cmp(a[i-1],a[i+1])]if c==' 'else'\n'+' '.join('"v^'[cmp(a[j-a.index('\n')],a[j+2])]for j in range(i,i+a.index('\n'),2))if a[i:i+2]=='\n\n'else c for i,c in enumerate(a)])

यह एक फ़ंक्शन f बनाता है जो संख्याओं के ग्रिड को एक स्ट्रिंग के रूप में लेता है और संबंधित असमानताओं के साथ संबंधित स्ट्रिंग लौटाता है।

फ़ंक्शन स्ट्रिंग में प्रत्येक वर्ण पर पुनरावृत्त करता है। यदि चरित्र एक स्थान है, तो इसे दोनों तरफ की संख्याओं के लिए असमानता से बदल दिया जाता है। यदि वर्ण और अगला वर्ण नई रेखाएँ हैं, तो पूरी रेखा को ऊपर और नीचे की सभी संख्याओं के लिए असमानताओं से बदल दिया जाता है।

यहां प्रश्न में प्रत्येक उदाहरण के लिए फ़ंक्शन का आउटपुट है, वास्तव में लंबे समय को छोड़कर:

>>> print f("""\
... 4 2 3 1
...
... 6 2 3 1
...
... 6 9 2 1""")
4>2<3>1
^ " " "
6>2<3>1
" ^ v "
6<9>2>1
>>> print f("""\
... 1 2 3 4 5
...
... 5 4 3 2 1
...
... 0 0 0 3 2
...
... 3 2 0 0 0
...
... 2 1 3 1 5""")
1<2<3<4<5
^ ^ " v v
5>4>3>2>1
v v v ^ ^
0=0=0<3>2
^ ^ " v v
3>2>0=0=0
v v ^ ^ ^
2>1<3>1<5
>>> print f("8")
8

यह चतुर है, पात्रों को एक स्ट्रिंग में डालकर फिर इसे सब्स्क्रिप्ट कर रहा है। मुझे कुछ समय का उपयोग करना होगा।
बिकुल

3

सी, 552 408 बाइट्स

यह एक गड़बड़ है, लेकिन यह परीक्षण के मामलों के साथ काम करता है (एकल के लिए 8, इनपुट को नई लाइन द्वारा ठीक से काम करने के लिए पालन करना होगा)

#define P putchar
main(n,z)char**z;{char*t=*++z;n=0;while(*(*z)++!=10)if(**z!=32)n++;char a[n][n];int r=-1,c=0;n--;do*t>32?c?:r++,a[c][r]=*t:*t==10?c=0:c++;while(*++t);r=c=0;do{int j=a[c][r],s=61,k=a[c+1][r];P(j);if (c==n){if(r==n)break;c=0;r++;P(10);for(int t=a[c][r-1],b=a[c][r];c<n+1;t=a[c][r-1],b=a[c][r])s=t>b?118:t<b?94:34,printf("%c ",s),c++;c=0;P(10);continue;}s=j>k?62:j<k?60:s;P(s);c++;}while(1);}

यहाँ विस्तारित संस्करण है; मैं यहाँ पर इस तरह से प्यार करता हूँ कि मैं इसे और अधिक प्रभावी ढंग से कैसे गोल्फ सकता हूँ। मुझे पता है कि यहां पर बहुत सुधार किया जाना है।

#define P putchar
main(n,z)char**z; {
    char *t = *++z;
    n = 0;
    while (*(*z)++!=10)
        if (**z!=32)
            n++;
    char a[n][n];
    int c,r=c=0;
    r = -1,n--;
    do
        *t>32?c?:r++, a[c][r] = *t:*t==10?c=0:c++; //32 is ASCII for space
    while (*++t);
    r=c=0;
    do {
        int j = a[c][r],s=61,k = a[c+1][r];P(j);
        if (c==n)
        {
            if (r==n)break;
            c=0;r++;P(10);
            for (int t=a[c][r-1],b=a[c][r];c<n+1; t = a[c][r-1],b = a[c][r])
                s=t>b?118:t<b?94:34,printf("%c ",s),c++;
            c = 0;
            P(10);
            continue;
        }
        s=j>k?62:j<k?60:s;

        P(s);
        c++;
    } while (1);
}

1
अधिक टर्नरी ऑपरेटर की जरूरत है। जैसे: आपके भीतर-सबसे अधिक लूप में: s=t>b?'v':t<b?'^':'"';ध्यान दें कि यदि पहले से ही जांचा जाए कि एक या दूसरे से अधिक होने के बाद दो मान बराबर हैं तो जाँचना अनावश्यक है। केवल 3 संभावनाएं हैं।
डारेल हॉफमैन

सलाह के लिए धन्यवाद, कुछ अन्य चीजों के अलावा 100 से अधिक बाइट लेना बंद कर दिया।
बजे क्रिस लूनम

2

जावास्क्रिप्ट (ईएस 6) 162

f=s=>(s=s.split`
`).map((r,i)=>r?(w=r).replace(/ /g,(c,j)=>x('<=>',r[j-1]-r[j+1])):w.replace(/\d/g,(c,j)=>x('^"v', c-s[i+1][j]))  ,x=(y,v)=>y[-~(v>0)-(v<0)]).join`
`

// more readeable 
u=s=>(
  x=(y,v)=>y[-~(v>0)-(v<0)],
  s=s.split`\n`,
  s.map((r,i)=>r
    ?(w=r).replace(/ /g,(c,j)=>x('<=>',r[j-1]-r[j+1]))
    :w.replace(/\d/g,(c,j)=>x('^"v', c-s[i+1][j]))
  ).join`\n`
)

//TEST
console.log=x=>O.innerHTML+=x+'\n'

;[
 '4 2 3 1\n\n6 2 3 1\n\n6 9 2 1\n\n0 2 1 6'
,'1 2 3 4 5\n\n5 4 3 2 1\n\n0 0 0 3 2\n\n3 2 0 0 0\n\n2 1 3 1 5'
,'8',  
,'0 0 0 0 0 0 0 0 0 0 0 0\n\n0 1 1 1 1 1 1 1 1 1 1 0\n\n0 1 2 3 4 5 6 7 8 9 1 0\n\n0 1 3 9 8 7 6 5 4 8 1 0\n\n0 1 4 8 9 8 7 6 5 7 1 0\n\n0 1 5 7 8 9 9 7 6 6 1 0\n\n0 1 6 6 7 9 9 8 7 5 1 0\n\n0 1 7 5 6 7 8 9 8 4 1 0\n\n0 1 8 4 5 6 7 8 9 3 1 0\n\n0 1 9 8 7 6 5 4 3 2 1 0\n\n0 1 1 1 1 1 1 1 1 1 1 0\n\n0 0 0 0 0 0 0 0 0 0 0 0'  
].forEach(t=>console.log(t+'\n\n'+f(t)+'\n\n'))
<pre id=O></pre>


1

हास्केल, 201 बाइट्स

import Data.List
t=transpose
g=mapM_ putStrLn.t.map(h 1).t.map(h 0).lines
h n s@(a:_:b:r)|'/'<a&&a<':'=a:(o n a b):h n(b:r)
 |0<1=s
h n r=r
f=fromEnum
o n a b=l!!n!!(1+signum(f a-f b))
l=["<=>","^\"v"]

g एक स्ट्रिंग की उम्मीद है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.