आकृति पहचान कार्यक्रम


25

आपका कार्य एक प्रोग्राम बनाना है जो इनपुट के आकार की पहचान करता है। पहचानी जाने वाली आकृतियाँ निम्नलिखित में से कोई भी हो सकती हैं:

वर्ग

एक वर्ग के रूप में पहचाने जाने के लिए, स्रोत में सभी समान लंबाई की रेखाएँ होनी चाहिए, और प्रति पंक्ति वर्णों की समान संख्या (बहिष्कृत नई वर्ण)। एक वैकल्पिक अनुगामी न्यूलाइन स्वीकार्य है।

$_='
$_="
$_"'
;say

आयत

एक आयत के रूप में पहचाने जाने के लिए, स्रोत में सभी समान लंबाई की रेखाएँ होनी चाहिए, लेकिन लाइनों की संख्या प्रति पंक्ति वर्णों से मेल नहीं खाती (newline वर्णों को छोड़कर)। एक वैकल्पिक अनुगामी न्यूलाइन स्वीकार्य है। यह या तो क्षैतिज या ऊर्ध्वाधर हो सकता है।

$_=
"no
t a
squ
are
";#

$_="but it
is still a
consistent
shape!";##

त्रिभुज

एक त्रिकोण के रूप में पहचाने जाने के लिए, स्रोत को या तो एक वर्ण से शुरू करना चाहिए, और प्रत्येक बाद की पंक्ति में एक अतिरिक्त वर्ण (अंतिम सहित) होना चाहिए, या पहली पंक्ति के बाद, प्रत्येक बाद की पंक्ति में अंतिम तक एक वर्ण कम होना चाहिए, जो केवल एक है।

$
_=
"So
this
"."".
shape;

$_="or
even,
this
way
!!
"

गड़बड़

जो कुछ भी उपरोक्त के अनुसार एक सुसंगत प्रारूप का पालन नहीं करता है, उसे गड़बड़ के रूप में पहचाना जाना चाहिए।

नियम

  • आप प्रत्येक आकृति की पहचान करने के लिए कोई चार सुसंगत मुद्रण योग्य मान वापस कर सकते हैं।
  • आपका स्रोत कोड भी उपरोक्त आकृतियों में से एक (नहीं, गड़बड़ नहीं) का पालन करना होगा।
  • आपके स्रोत में एक एकल अनुगामी न्यूलाइन स्वीकार्य है।
  • आप यह मान सकते हैं कि इनपुट में कोई रिक्त रेखाएँ नहीं हैं (जिसमें अनुलिपि शामिल हैं), रिक्त नहीं है, और इसमें केवल नई वर्णमालाएँ सम्मिलित नहीं हैं।
  • सभी आकृतियों की ऊंचाई और चौड़ाई> = 2 होनी चाहिए, अन्यथा इसे एक गड़बड़ के रूप में परिभाषित किया गया है।
  • मानक खामियों को मना किया जाता है।
  • बाइट्स में सबसे छोटा समाधान, प्रत्येक भाषा में, जीतता है।

"आपका स्रोत कोड भी उपरोक्त आकृतियों में से एक का पालन करना चाहिए" इसका मतलब है कि एक लाइनर सिर्फ ठीक है?
tsh

1
@ tshAll shapes must have a height and width of >= 2.
TFeld

1
इनपुट एक सरणी हो सकता है? उदाहरण के लिए, एक वर्ग ['abc','cfd','fgh']?
लुइस फेलिप डी जीसस मुनोज

1
@recursive अपडेट किया गया, धन्यवाद!
डोम हेस्टिंग्स

3
आप मुझे बता रहे हैं कि मेरा सोर्स कोड गड़बड़ नहीं हो सकता? क्यों नहीं?!?!
एनएच।

जवाबों:


9

जेली , 35 बाइट्स

L€ṀR,Ṛ$ċƲȧ3
L€,;¥LE€S+Ç
ỴµZL«L>1ȧÇ 

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

0= मेस
1= आयत
2= वर्ग
3= त्रिकोण


क्या आपके कोड द्वारा उपयोग की जाने वाली अंतिम पंक्ति में स्थान है? या कि सिर्फ "आयत" मानदंड को पूरा करने के लिए पैडिंग है?
ब्रैड मार्क

@ ब्रैडक बाद। मुझे शायद स्पष्टीकरण जोड़ना चाहिए।
एर्ग आउटफोलर

7

ब्रेकीलॉग , 45 बाइट्स

lᵐ{≥₁|≤₁}o{l>1&t>1&}↰₃
lg,?=∧1w|=∧2w|t⟦₁≡?∧3w

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

कोड एक आयत है (जिस तरह से यह मेरी स्क्रीन पर प्रस्तुत होता है)। आउटपुट: वर्ग के लिए 1, आयत के लिए 2, त्रिकोण के लिए 3, और गड़बड़ के लिए कुछ भी नहीं


स्पष्टीकरण:

lᵐ{≥₁|≤₁}o{l>1&t>1&}↰₃
lg,?=∧1w|=∧2w|t⟦₁≡?∧3w

lᵐ                        Get the length of each string
  {     }                 Verify 
   ≥₁                     The list is non-increasing
     |                    or...
      ≤₁                  The list is non-decreasing
         o                Sort it to be non-decreasing
          {        }      Verify
           l>1            The number of lines is greater than 1
              &           and...
               t>1&       The longest line is longer than 1 character
                    ↰₃    Call the following

lg,?                      Join the number of lines with the line lengths
    =∧1w                  If they are all equal, print 1 (Square)
         |=∧2w            Or if just the line lengths are equal, print 2 (Rectangle)
              |t⟦₁         Or if the range [1, 2, ... <longest line length>]
                  ≡?       Is the list of lengths
                    ∧3w    Print 3 (triangle)
                           Otherwise print nothing (mess)

7

जावा 10, 231 221 219 217 213 211 207 बाइट्स

s->{var a=s.split("\n");int r=a.length,l=a[0].length(),R=0,i=1,L,D;if(r>1){for(L=a[1].length(),D=L-l;++
i<r;R=L-a[i-1].length()!=D?1:R)L=a[i].length();R=R<1?D==0?r==l?1:2:D>-2&D<2&(l<2|L<2)?3:0:0;}return R;}

कार्य एक आयत ही है।
1= वर्ग; 2= आयताकार; 3= त्रिकोण; 0= मेस।

-14 बाइट्स की बदौलत @ OlivierGrégoire

स्पष्टीकरण:

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

s->{                        // Method with String parameter and integer return-type
  var a=s.split("\n");      //  Input split by new-lines
  int r=a.length,           //  Amount of lines
      l=a[0].length(),      //  Length of the first line
      R=0,                  //  Result-integer, initially 0
      i=1,                  //  Index integer, starting at 1
      L,D;                  //  Temp integers
  if(r>1){                  //  If there are at least two lines:
    for(L=a[1].length(),    //   Set `L` to the length of the second line
        D=L-l;              //   And set `D` to the difference between the first two lines
        ++i<r;              //   Loop over the array
        ;                   //     After every iteration:
         R=L-a[i-1].length()//     If the difference between this and the previous line
          !=D?              //     is not equal to the difference of the first two lines:
           1                //      Set `R` to 1
          :                 //     Else:
           R)               //      Leave `R` the same
      L=a[i].length();      //    Set `L` to the length of the current line
  R=R<1?                    //   If `R` is still 0:
     D==0?                  //    And if `D` is also 0:
      r==l?                 //     And the amount of lines and length of each line is equal
       1                    //      It's a square, so set `R` to 1
      :                     //     Else:
       2                    //      It's a rectangle, so set `R` to 2
     :D>-2&D<2&             //    Else-if `D` is either 1 or -1,
      (l<2|L<2)?            //    and either `l` or `L` is 1:
       3                    //     It's a triangle, so set `R` to 3
    :0:0;}                  //   In all other cases it's a mess, so set `R` to 0
  return R;}                //  Return the result `R`

1
: 221 बाइट्स के लिए फिक्स्ड s->{var a=s.split("\n");int S=a.length,l=a[0].length(),L,D,b=0,i=1;if(S<2)return 0;for(L=a[1].length(),D=L-l; b<1&++i<S;)if((L=a[i].length())-a[i-1].length()!=D)b=1;return b<1?D==0?S==l?1:2:D==-1|D==1?l==1|L==1?3:0:0:0;}(के बाद डबल स्पेस var, लाइन ब्रेक के बाद D=L-l;
ओलिवर Grégoire

@ ओलिवियरग्रेगायर धन्यवाद। और मैंने दो और बाइट्स को गोल्फ में बदल D==-1|D==1कर बदल दिया D>-2|D<2। यह एक और l==1|L==1कुछ बिटवाइज़ ऑपरेशंस के साथ अधिक गोल्फ हो सकता है, लेकिन यह वास्तव में मेरी विशेषज्ञता नहीं है।
केविन क्रूज़सेन

1
207 बाइट्स: s->{var a=s.split("\n");int r=a.length,l=a[0].length(),L,D,b=0,i=1;if(r>1){for(L=a[1].length(),D=L-l;++ i<r;b=L-a[i-1].length()!=D?1:b)L=a[i].length();b=b<1?D==0?r==l?1:2:D>-2&D<2&(l<2|L<2)?3:0:0;}return b;}(ब्रेक के बाद D=L-l;++)। लूप और स्टेटमेंट को एक में विलय करने के बाद भी गोल्फ खेलने योग्य है, लेकिन मैं अभी नहीं देखता हूं।
ओलिवियर ग्रेजायर 13


6

जेली , 32 27 बाइट्स

,U⁼€JẸ,E;SƲ$
ZL«L’aL€Ç$æAƝ

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

अब लाइनों की सूची पर इनपुट लेने और बंद >1×के साथ ’aऔर का उपयोग कर SƲके बाद L€ के बजाय FLƲƊ। इनसे मुझे दो लाइनों में संघनित होने की अनुमति मिली और मैंने कुल 5 बाइट्स बचाए। निम्नलिखित मान पहले जैसे ही हैं।

[0.0, 0.0]= मेस
[0.0, 1.5707963267948966]= आयत
[0.0, 0.7853981633974483]= वर्ग
[1.5707963267948966, 0.0]= त्रिकोण


ZL«Lन्यूनतम ऊंचाई और चौड़ाई प्राप्त करता है और इसमें से 1 घटाता है। Çदूसरी कड़ी को कॉल करता है और अंत में यदि इनपुट सिंगल लाइन है Çतो पिछले नंबर के साथ लॉजिकल एंडेड हो जाता है अगर केवल एक ही लाइन होती है तो आउटपुट होगा [0.0, 0.0]

दूसरी कड़ी में: ,Uपंक्ति की लंबाई के साथ पैदावार की एक सूची देता है जो रिवर्स है। Jहै range(number of lines)और ⁼€जाँच करता है कि उनमें से प्रत्येक के परिणाम के बराबर हैं या नहीं J(कोई) 1 पैदावार देता है अगर इनपुट एक त्रिकोण है।

E जाँच करता है कि सभी पंक्ति की लंबाई बराबर (आयत / वर्ग) है।

SƲएक साथ $एक एकल इकाई के चेक में करने के लिए समूह उन्हें चाहे वर्णों की कुल संख्या एक वर्ग संख्या है।

तो दूसरी कड़ी के अंत में हमारे पास [[a,b],c]वह संख्या है जहाँ प्रत्येक संख्या होती है 0या 1यह इंगित करती है कि क्या इनपुट एक त्रिभुज, आयताकार है, और इसमें क्रमशः वर्णों की संख्या है।

हालांकि तत्वों की एक वर्ग संख्या मतलब यह नहीं है कि इनपुट एक वर्ग है जैसे कि एक गन्दा इनपुट

a3.
4

तत्वों की एक वर्ग संख्या है, लेकिन एक वर्ग नहीं है।

यह जहां है æA(arctan2) में आता है। 0æA0== 0æA1== 0। दूसरे शब्दों में, यदि इनपुट में तत्वों की वर्ग संख्या है, लेकिन एक आयत नहीं है, तो यह एक वर्ग नहीं है। ऐसा करने के लिए निश्चित रूप से अधिक स्पष्ट तरीके हैं, लेकिन क्या फर्क पड़ता है जब हमारे पास सोचने के लिए बाइट्स होते हैं और हमें लगातार मनमाना आउटपुट की अनुमति होती है।

नोट मैं पहले के æA/बजाय æAƝ(और दूसरे लिंक में एक के ,बजाय) का उपयोग कर रहा था, ;लेकिन पूर्व विधि त्रिकोण के बीच भिन्न होती है जिसमें वर्ग संख्या के तत्व होते हैं और जो नहीं होते हैं लेकिन उन्हें स्पष्ट रूप से एक ही चीज़ के रूप में गिना जाना चाहिए।


मैं सोचता हुआ संख्याओं को देख रहा था, वे अस्पष्ट रूप से परिचित लगते हैं ...
डोम हेस्टिंग्स

@DomHastings हा। मुझे वर्ग-से-तत्व तत्वों की गड़बड़ियों से वर्गों को अलग करने में परेशानी हो रही arctan2थी और वास्तव में मुझे इसकी आवश्यकता थी।
dylnan

1
अजीब बात है कि मुझे नहीं लगता है कि यह कोई छोटा होगा यदि कोई स्रोत प्रतिबंध नहीं था
डायलन

... क्या आपको यकीन है कि यह वैध है? जैसा कि जेली में न्यूलाइन 0x7F है, न कि 0x0A।
user202729

@DomHastings क्या यह मान्य है? (ऊपर कारण देखें)
user202729

4

जावा 10, 274 323 298 229 बाइट्स

पहला त्रिकोण प्रस्तुत।

s
->
{  
var 
a=s. 
split 
("\n");
int i,l=
a.length,
c,f=a[0]. 
length(),r=
l<2||f<2&a[1
].length()<2?
0:f==l?7:5;var
b=f==1;for(i=1;
i<l;){c=a[i++]. 
length();r&=c!=f?
4:7;r&=(b&c!=f+1)|
(!b&c!=f-1)?3:7;f=c
;}return r;}        

0 गड़बड़

1 आयत

3 वर्ग

4 त्रिभुज

इसे यहाँ ऑनलाइन आज़माएँ ।

कई बार इसे थोड़ा और गोल्फ के लिए संपादित किया।

बेशक मैं इसे एक आयत में बदलकर बहुत सारे बाइट्स बचा सकता था ( 281 267 259 200 बाइट्स, यहां देखें )।

पहचान के परिणाम को बिटवाइस का उपयोग करके हेरफेर किया जाता है और एक बिटमास्क का पालन निम्नानुसार किया जाता है:

1        1      1
triangle square rectangle

Ungolfed संस्करण:

s -> {
    var lines = s.split("\n"); // split input into individual lines
    int i, // counter for the for loop
    numLines = lines.length, // number of lines
    current, // length of the current line
    previous = lines[0].length(), // length of the previous line
    result = numLines < 2 // result of the identification process; if there are less than two lines
    || previous < 2 & lines[1].length() < 2 // or the first two lines are both shorter than 2
    ? 0 : previous == numLines ? 7 : 5; // it's a mess, otherwise it might be a square if the length of the first line matches the number of lines
    var ascending = previous == 1; // determines whether a triangle is in ascending or descending order
    for(i = 1; i < numLines; ) { // iterate over all lines
         current = lines[i++].length(); // store the current line's length
        result &= current != previous ? 4 : 7; // check if it's not a rectangle or a square
        result &= (ascending & current != previous+1)|(!ascending & current != previous-1) ? 3 : 7; // if the current line is not one longer (ascending) or shorter (descending) than the previous line, it's not a triangle
        previous = current; // move to the next line
    }
    return result; // return the result
}

1
PPCG में आपका स्वागत है!
स्टेडीबॉक्स

त्रिकोण के लिए हुर्रे! धन्यवाद!
डोम हेस्टिंग्स

नमस्ते, PPCG में आपका स्वागत है! शानदार पहला जवाब। मैंने पहले भी अपने उत्तर को एक त्रिकोण बनाने की कोशिश की, लेकिन आयत की तुलना में बहुत अधिक बाइट्स खर्च होंगे, और कुछ कुंजी-शब्द मेरे प्रारंभिक उत्तर में भी बहुत लंबे थे। :) महान जवाब हालांकि, मेरी ओर से +1। और मैंने पूरी पोस्ट पर हाइलाइटिंग जोड़ने के लिए आपकी पोस्ट को संपादित करने की स्वतंत्रता ली, इसलिए आपके अनगुल्ड संस्करण में टिप्पणियों को पढ़ना आसान है। यहां रहने का आनंद!
केविन क्रूज़सेन

@KevinCruijssen upvote और संपादन के लिए धन्यवाद, यह अब बहुत बेहतर लग रहा है। मेरे उत्तर को एक आयत में बदलकर छोटा किया जा सकता है, साथ ही 281 बाइट भी। लेकिन उसमें मज़ा कहाँ है?
ओबैलेंस

3

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

_=>(g=(l=_.split('\n').map(a=>a.length)).
length)<3?0:(r=l.reduce((a,b)=>a==b?a:0))
?r==g?2:1:l.reduce((a,b)=>++a==b?a:0)?3:0

0 = Mess
1 = Rectangle
2 = Square
3 = Triangle

fa=_=>(g=(l=_.split('\n').map(a=>a.length)).length)<3?0:(r=l.reduce((a,b)=>a==b?a:0))?r==g?2:1:l.reduce((a,b)=>++a==b?a:0)?3:0

var square = `asd
asd
asd`

var rectangle = `asd
asd
asd
asd
asd
asd`

var triangle = `asd
asdf
asdfg
asdfgh`

var mess = `asd
dasdasd
sd
dasasd`

console.log(fa(square), fa(rectangle), fa(triangle), fa(mess))


3
बाइट की गिनती 125 (न्यूक्लियर सहित)
हरमन एल

त्रिकोण 1 पर जाना चाहिए? नहीं 3456
l4m2

@ l4m2 तुम्हारा क्या मतलब है?
लुइस फेलिप डी जीसस मुनोज

2
त्रिकोण हमेशा 1 पर शुरू होना चाहिए?
लुइस फेलिप डी जीसस मुनोज

3
मुझे लगता है कि @ l4m2 जो इंगित कर रहा है वह यह है कि एक त्रिभुज की पहली या अंतिम पंक्ति में केवल एक वर्ण होना चाहिए, अन्यथा यह "गड़बड़" है।
शैगी


3

पीएचपी, 195 205 बाइट्स

<?$a=$argv[1];$r=substr($a,-2,1)=="\n"?strrev($a):$a;foreach(explode("\n",$r)as$l){$s=strlen($l);$x[$s
]=++$i;$m=$i==$s?T:M;}$z=count($x);echo$i*$z>2?$z==1&&key($x)==$i?S:($z==1&&$i>2?R:($i==$z?$m:M)):M;?>

उल्टा त्रिभुज इसमें एक महंगी 56 बाइट जोड़ता है!

आउटपुट S, R, T, M हैं

डोम हेस्टिंग्स के लिए धन्यवाद, कुछ बाइट्स बचाए।

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

अब कुछ मुद्दों को तय किया ... टेस्ट रन यह उत्पादन।

$_="
$_="
$_""
;say

RESULT:S
=============
$_=
"no
t a
squ
are
";#

RESULT:R
=============
$
_=
"So
this
"."".
shape;

RESULT:T
=============
$_="or
even,
this
way
!!
"

RESULT:T
=============
as
smiley
asd
A

RESULT:M
=============
X

RESULT:M
=============
XX

RESULT:M
=============
cccc
a
aa
cccc

RESULT:M
=============

न आना ?>अभी होना चाहिए ठीक
TSH

यह वापस जाने के लिए लगता है Tके लिए cccc\na\naa\ncccc इसे ऑनलाइन आज़माएं!
डोम हेस्टिंग्स

3

पर्ल 6 , 81 बाइट्स

{.lines>>.chars.&{($_==.[0],3)[2*(2>.max
)+($_ Z- .skip).&{.[0].abs+.Set*2+^2}]}}

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

रिटर्न Trueवर्ग, के लिए Falseआयत के लिए, 3त्रिकोण के लिए, Nilगंदगी के लिए।


बहुत अच्छा, क्या आप इसे थोड़ा सा खोलना चाहेंगे, विशेष रूप से $_ Z- .skip?
फिल एच

3

स्टैक्स , 39 बाइट्स

L{%m~;:-c:u{hJchC; 
|mb1=-C;%a\sI^^P}M0

भागो और डिबग ऑनलाइन!

सबसे छोटा ASCII- केवल अब तक का उत्तर।

0 - मेस
1 - आयत
2 - वर्ग
3 - त्रिकोण

व्याख्या

समाधान निम्नलिखित तथ्य का उपयोग करता है: यदि प्रोग्राम के निष्पादन में कुछ स्पष्ट रूप से मुद्रित होता है, तो कोई निहित आउटपुट उत्पन्न नहीं होता है। अन्यथा, निष्पादन के अंत में स्टैक का शीर्ष अंतर्निहित आउटपुट है।

L{%m~;:-c:u{hJchC;|mb1=-C;%a\sI^^P}M0
L                                        Collect all lines in an array
 {%m                                     Convert each line to its length
    ~;                                   Make a copy of the length array, put it on the input stack for later use
      :-                                 Difference between consecutive elements.
                                         If the original array has only one line, this will be an empty array
        c:u                              Are all elements in the array the same?
                                         Empty array returns false
           {                      }M0    If last test result is true, execute block
                                         If the block is not executed, or is cancelled in the middle, implicitly output 0
            hJ                           The first element of the difference array squared (*)
              chC                        Cancel if it is not 0 or 1
                 ;|m1=                   Shortest line length (**) is 1
                      -                  Test whether this is the same as (*)
                                         Includes two cases:
                                             a. (*) is 1, and (**) is 1, in which case it is a triangle
                                             b. (*) is 0, and (**) is not 1, in which case it is a square or a rectangle
                        C                Cancel if last test fails
                         ;%              Number of lines
                           a\            [Nr. of lines, (*)]
                             I           Get the 0-based index of (**) in the array
                                         0-> Square, 1->Triangle -1(not found) -> Rectangle
                              ^^P        Add 2 and print


3

05AB1E , 35 29 27 बाइट्स

मैजिक ऑक्टोपस Urn के लिए धन्यवाद 8 बाइट्स सहेजे गए

DgV€g©ZU¥ÄP®Y
QP®ËJCXY‚1›P*

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

0= मेस
4= त्रिकोण
1= आयत
3= वर्ग


यह कुछ गन्दे कोड पर विफल दिखता है: इसे ऑनलाइन आज़माएं!
डोम हेस्टिंग्स

@DomHastings: इसे पकड़ने के लिए धन्यवाद। मैंने सोचा था कि गोल्फ थोड़ा iffy था। अब ठीक होना चाहिए।
इमीना

इसे ऑनलाइन आज़माएं! - 19 बाइट्स - 1 (आयत), 2 (त्रिकोण), 5 (स्क्वायर) और 0 (मेस) [बाइनरी नंबर का उपयोग करना]। संभवतः स्वीकार्य योग्य नहीं। gs€g©QP®¥ ÄP®1å&®ËJCएक अंतरिक्ष चार और एक C21 के लिए हालांकि जोड़ सकते हैं ।
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn: यह अभी भी लंबाई / ऊंचाई> = 2 के लिए जाँच करने की आवश्यकता है, लेकिन यह अभी भी बाइट्स को बचाना चाहिए। बाइनरी से आउटपुट नंबरों का निर्माण चालाक चाल!
इमीना

1
@MagicOctopusUrn: मैंने अपने मूल संस्करण पर कुछ बाइट्स को बचाने के लिए आपके डेल्टा और बाइनरी ट्रिक्स का उपयोग किया। शायद कुछ और अधिक इसे थोड़ा और फिर से लिखना बचा सकता है।
इमिग्ना

2

आर , 101 बाइट्स

"if"(var(z<-nchar(y<-scan(,"",,,"
","")))==0,"if"(length(y)==z,1,2
),"if"(all(abs(diff(z))==1),3,4))

1 = वर्ग
2 = आयत
3 = त्रिकोण
4 = यादृच्छिक

कोड 'NEGATIVE ACKNOWLEDGE' (U + 0015) या ऊपर दिए गए कोड में वर्ग के साथ सौदा नहीं कर सकता है। यदि इस बाइट में इनपुट की आवश्यकता होती है तो इस बाइट को कुछ अलग किया जा सकता है।

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


शायद आप के readLines()बजाय उपयोग कर सकते हैं scan()?
ग्यूसेप

@Giuseppe काम करने के लिए readLines पाने के लिए बहुत ज्यादा नहीं कर सकते हैं
Vlo

हम्म, ऐसा लगता है कि आपको file("stdin")इसे कंसोल से पढ़ने के लिए निर्दिष्ट करना होगा (कोड की अगली पंक्तियों के बजाय)। इसका मतलब है कि यह शायद कम गोल्फ होगा। ठीक है।
Giuseppe

2

घोंघे, 29 बाइट्स

ada7A
.2,lr
?!(t.
rw~)z
.+~o~

आउटपुट कुंजी:

  • 0 - मेस
  • 3 - त्रिभुज
  • 6 - आयत
  • 7 - वर्ग

यह स्रोत लेआउट के बिना 23 बाइट्स होगा:

zA
.2,dun!(t.rf~)z.+~o~

मैं हमेशा इस भाषा के साथ खेलने के लिए उत्सुक रहा हूँ, क्योंकि इस प्रश्न को पढ़ने से यह पैदा होता है!
डोम हेस्टिंग्स

1

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 119 बाइट्स

(x=StringLength/@#~StringSplit~"\n")/.{{1}->3,s~(t=Table)~{
s=Tr[1^x]}:>0,x[[1]]~t~s:>1,(r=Range@s)|Reverse@r:>2,_->3}&

Replace /.लाइन द्वारा वर्ण गणना पर प्रयोग और पैटर्न का मिलान। Replaceमिलान होने वाले किसी नियम के पहले RHS को किक आउट करेगा, इसलिए ऑर्डर को 1 वर्ण इनपुट के लिए परीक्षण करना है, फिर चौकों, आयतों, त्रिभुजों, और गड़बड़ियों के लिए गिरावट के माध्यम से परीक्षण करना है।

वर्ग = 0, आयत = 1, त्रिकोण = 2, गंदगी = 3

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


@DomHastings, यह तय हो गया है।
केली लोल्डर



1

रूबी , 115 111 बाइट्स

->s{m=s.split(?\n).map &:size;r=*1..s=m.size;s<2?4:(m|[
]).size<2?m[0]<2?4:s==m[0]?1:2:r==m.reverse||r==m ?3:4}

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

अनाम लम्बा। आउटपुट:

  1. वर्ग
  2. आयत
  3. त्रिभुज
  4. गड़बड़

यह कुछ ऐसा है जो गड़बड़ के रूप में चिह्नित किया जाना चाहिए पर विफल रहता है: इसे ऑनलाइन आज़माएं!
डोम हेस्टिंग्स

आउच, मुझे लगता है कि यह एक त्वरित फिक्स के रूप में जाना होगा। शायद इसे थोड़ा और गोल करने की कोशिश करनी होगी ...
किरिल एल।

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