Şekil Tanımlama Programı


25

Göreviniz, girişin şeklini tanımlayan bir program oluşturmaktır. Tanımlanacak şekiller aşağıdakilerden herhangi biri olabilir:

Kare

Bir kare olarak tanımlanabilmesi için, kaynağın eşit uzunlukta tüm satırlara ve her satırdaki karakterlerle aynı sayıda satıra sahip olması gerekir (yeni satır karakterleri hariç). İsteğe bağlı izleyen bir yeni satır kabul edilebilir.

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

Dikdörtgen

Dikdörtgen olarak tanımlanabilmesi için, kaynağın eşit uzunlukta tüm hatları olması gerekir, ancak satır sayısı satır başına karakter sayısıyla eşleşmiyor (yeni satır karakterleri hariç). İsteğe bağlı izleyen bir yeni satır kabul edilebilir. Bu yatay veya dikey olabilir.

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

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

Üçgen

Üçgen olarak tanımlanabilmesi için kaynak ya bir karakterle başlamalı ve izleyen her satırda bir tane daha ek karakter bulunmalıdır (sonuncusu dahil) veya ilk satırdan sonra, sonraki her satır sonuncuya kadar bir karakterden daha az olmalıdır. sadece bir tane var.

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

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

Dağınıklık

Yukarıdakilere uygun olarak tutarlı bir format izlemeyen herhangi bir şey, karışıklık olarak tanımlanmalıdır.

kurallar

  • Her şekli tanımlamak için dört tutarlı yazdırılabilir değer döndürebilirsiniz.
  • Kaynak kodunuz ayrıca yukarıdaki şekillerden birine de uymalıdır (hayır, karışıklık değil).
  • Kaynağınızdaki sondaki tek satır yeni kabul edilebilir
  • Girişin boş satır içermediğini (izleyen satır sonları dahil) boş olmadığını ve yalnızca satırsonlarından oluşmadığını kabul edebilirsiniz.
  • Tüm şekillerin yüksekliği ve genişliği> = 2 olmalıdır, aksi takdirde bu karışıklık olarak tanımlanır.
  • Standart boşluklar yasaktır.
  • Bayt cinsinden en kısa çözüm, her dilde kazanır.

"Kaynak kodunuz, yukarıdaki şekillerden birine de uymalıdır", bir astarın sadece iyi olduğu anlamına mı geliyor?
tsh

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

1
Giriş bir dizi olabilir mi? örneğin, bir kare ['abc','cfd','fgh']?
Luis felipe De jesus Munoz

1
@recursive güncellendi, teşekkür ederim!
Dom Hastings

3
Bana kaynak kodumun bir karmaşa olamayacağını mı söylüyorsun? neden olmasın?!?!
NH.

Yanıtlar:


9

Jöle , 35 bayt

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

Çevrimiçi deneyin!

0= Mess
1= Dikdörtgen
2= Kare
3= Üçgen


Son satırınızdaki boşluk kodunuz tarafından kullanılıyor mu? Yoksa bu sadece "dikdörtgen" kriterlerine uymak için mi doldurmak?
BradC

@BradC İkincisi. Muhtemelen bir açıklama eklemeliyim.
Outgolfer'lı Erik,

7

Brachylog , 45 bayt

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

Çevrimiçi deneyin!

Kod bir dikdörtgendir (ekranımda görüntülenme biçimine rağmen). Çıktılar: kare için 1, dikdörtgen için 2, üçgen için 3 ve karışıklık için hiçbir şey


Açıklama:

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

Java 10, 231 221 219 217 213 211 207 bayt

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

İşlev bir dikdörtgenin kendisidir.
1= Kareler; 2= Dikdörtgenler; 3= Üçgenler; 0= Karışıklık.

@ OlivierGrégoire sayesinde -14 bayt .

Açıklama:

Çevrimiçi deneyin.

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 bayt için düzeltildi: 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;}(çift boşluktan sonra var, satır sonundan sonra D=L-l;.
Olivier Grégoire

@ OlivierGrégoire Teşekkürler. Ve değiştirerek iki bayt golfed D==-1|D==1için D>-2|D<2. Bu ve l==1|L==1bazı bitsel işlemler ile daha golf oynayabilir, ancak bu gerçekten benim uzmanlığım değil.
Kevin Cruijssen

1
207 bayt: 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;}(sonra bölünür D=L-l;++). Yine de döngüyü ve ifadeyi bir arada birleştirerek hâlâ golf oynayabiliyorum, ancak şu anda ne olduğunu göremiyorum.
Olivier Grégoire

6

Python 2 , 129 114 109 107 113 bayt

l=map(len,input().split('\n'));m=len(
l);r=range(1,m+1);print[[1],0,r,r[::-
1],[m]*m,0,[max(l)]*m,l].index(l)%7/2

Çevrimiçi deneyin!


Baskılar

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

@KevinCruijssen Teşekkürler, şimdi düzeltilmelidir
TFeld

6

Jöle , 32 27 bayt

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

Çevrimiçi deneyin!

Şimdi çizgilerin bir listeye girdi alarak ve anahtarlı >1×ile ’ave kullanma SƲsonra L€ yerine FLƲƊ. Bunlar iki satırda yoğunlaşmamı sağladı ve toplamda 5 bayt kurtardım. Aşağıdaki değerler öncekiyle aynıdır.

[0.0, 0.0]= Mess
[0.0, 1.5707963267948966]= Dikdörtgen
[0.0, 0.7853981633974483]= Kare
[1.5707963267948966, 0.0]= Üçgen


ZL«Len az yükseklik ve genişlik alır ve ondan 1 çıkarır. Çikinci bağlantıyı çağırır ve girdi tek bir Çsatırsa , sonuçta mantıksal olan VEeded önceki sayı ile sonuçlanır ve sonuç yalnızca tek bir satır olduğunda çıkar [0.0, 0.0].

İkinci bağlantıda: ,Utersiyle eşleştirilmiş bir çizgi uzunluğu listesi verir. Jolduğu range(number of lines)ve ⁼€bunların her birinin sonucu eşit olup olmadığını kontrol eder J. (Herhangi bir) giriş bir üçgen ise 1 verir.

E Tüm çizgi uzunluklarının eşit olup olmadığını kontrol eder (dikdörtgen / kare).

SƲa $ile onları tek bir monad halinde gruplamak, toplam karakter sayısının kare bir sayı olup olmadığını kontrol eder.

Böylece, ikinci bağlantının sonunda, [[a,b],c]her sayının olduğu yerde 0veya 1girişin üçgen, dikdörtgen mi olduğunu ve sırasıyla kare kare karakterleri olup olmadığını belirten bir nokta var.

Bununla birlikte, bir kare sayısı, girişin karesi olduğu anlamına gelmez; çünkü

a3.
4

kare bir eleman sayısına sahiptir, fakat kare değildir.

Burası æA(arctan2) girildiği yer. 0æA0== 0æA1== 0. Başka bir deyişle, girişin kare sayısı varsa ancak bir dikdörtgen değilse, o zaman bir kare değildir. Bunu yapmanın kesinlikle daha net yolları var ama düşünecek baytlarımız olduğunda ve tutarlı bir keyfi çıktımız olmasına izin verdiğimizde ne önemi var.

Not Önceden æA/yerine æAƝ(ve ikinci bağlantıda bir ,yerine ;) kullanıyordum, ancak önceki yöntem, kare sayıda öğeye sahip üçgenler arasında olmayanları ve ayırt etmeyenleri açıkça ayırt etmeleri gerektiğini açıklar.


Düşünerek rakamlara bakıyordum, belli belirsiz tanıdık geliyorlardı ...
Dom Hastings

@HomHastings Haha. Kareleri element sayı karelerinden ayırt etmekte zorlanıyordum ve arctan2tam ihtiyacım olan şeydi.
dylnan

1
Kaynak kısıtlaması olmasaydı, bunun daha kısa olacağını sanmıyorum Komik
dylnan 17

... Bunun geçerli olduğundan emin misin? Jelly'teki yeni satır 0x7F, 0x0A değil.
user202729

@DomHastings Bu geçerli mi? (bkz. yukarıdaki sebep)
user202729

4

Java 10, 274 323 298 229 bayt

İlk üçgen gönderimi.

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 Dağınıklık

1 Dikdörtgen

3 Kare

4 Üçgen

Burada çevrimiçi deneyin .

Biraz daha golf oynamak için birkaç kez düzenlendi.

Elbette bunu bir dikdörtgene dönüştürerek çok fazla bayt tasarrufu yapabilirim ( 281 267 259 200 byte, buraya bakın ).

Tanımlamanın sonucu, bitsel AND kullanılarak manipüle edilir ve aşağıdaki şekilde bir bit maskesi elde edilir:

1        1      1
triangle square rectangle

Ungolfed versiyonu:

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'ye Hoşgeldiniz!
Steadybox

Üçgenler için yaşasın! Teşekkürler!
Dom Hastings

Merhaba, PPCG'ye hoş geldiniz! Harika ilk cevap. Cevabımı daha önce de bir üçgen haline getirmeye çalıştım, ancak dikdörtgene kıyasla çok fazla bayta mal olacaktı ve bazı anahtar kelimeler de ilk cevabımda biraz uzun sürdü. :) Büyük cevap olsa da, benden +1. Ve yazının tamamını vurgulamak için gönderinizi düzenleme özgürlüğüne kavuştum, bu nedenle ungolfed sürümünüzdeki yorumları okumak daha kolay olur. Kaldınız!
Kevin Cruijssen

@KevinCruijssen Oy verdiğiniz ve düzenlediğiniz için teşekkür ederiz, şimdi çok daha iyi görünüyor. Cevabım, 281 baytlık bir dikdörtgen haline getirilerek kısaltılabilir. Ama bunun neresinde eğlence var?
OOBalance

3

Javascript 125 bayt

_=>(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
Bayt sayısı 125 (yeni satırlar dahil)
Herman L

Üçgen 1'e mi gitmeli? 3456 değil
l4m2 23.03.2018

@ l4m2 ne demek istiyorsun?
Luis Felipe De Jesus Munoz

2
üçgen her zaman 1'den başlamalı mı?
Luis Felipe De Jesus Munoz

3
Sanırım @ l4m2'nin işaret ettiği şey bir üçgenin ilk satırında veya son satırında sadece bir karakter içermesi gerektiği, aksi halde "karışıklık" olduğu.
Shaggy


3

PHP, 195 205 bayt

<?$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;?>

Baş aşağı üçgeni buna pahalı 56 bayt ekler!

Çıkışlar S, R, T, M

Dom Hastings sayesinde birkaç byte kurtarıldı.

Çevrimiçi deneyin!

Şimdi birkaç sorun düzeltildi ... Test çalıştırmaları bunu üretir.

$_="
$_="
$_""
;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
=============

Atla ?>gayet olmalıdır
TSH

Bu dönüş görünüyor Tiçin cccc\na\naa\ncccc online Try!
Dom Hastings

3

Perl 6 , 81 bayt

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

Çevrimiçi deneyin!

TrueKare için, Falsedikdörtgen 3için, üçgen Niliçin, karışıklık için döndürür .


Çok güzel, özellikle biraz açabilir $_ Z- .skipmisin?
Phil H

3

Stax , 39 bayt

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

Çevrimiçi çalıştırın ve hata ayıklayın!

Şimdiye kadar en kısa ASCII-sadece cevap.

0 - Karışıklık
1 - Dikdörtgen
2 - Kare
3 - Üçgen

açıklama

Çözüm, aşağıdaki gerçeği kullanır: Programın yürütülmesinde açıkça bir şey yazdırılırsa, örtük bir çıktı üretilmez. Aksi takdirde, yürütmenin sonunda yığının tepesi örtük olarak çıkar.

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

Haskell , 113 107 103 101 bayt

((#)=<<k).map k.lines;k=length;1#x=0;l#x|x==[1..l]
  ||x==[l,l-1..1]=3;l#x=k[1|z<-[l,x!!0],all(==z)x]

Çevrimiçi deneyin!

Mess, dikdörtgen, kare ve üçgen için sırasıyla 0, 1, 2 ve 3 değerini döndürür.

Düzenleme: Lynn sayesinde -2 bayt !


3

05AB1E , 35 29 27 bayt

Magic Octopus Urn sayesinde 8 bayt kaydedildi

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

Çevrimiçi deneyin!

0= Mess
4= Üçgen
1= Dikdörtgen
3= Kare


Bu, bazı dağınık kodlarda başarısız görünüyor: Çevrimiçi deneyin!
Dom Hastings

@DomHastings: Bunu yakaladığınız için teşekkürler. O golf biraz terbiyesiz olduğunu düşündüm. Şimdi iyi olmalı.
Emigna

Çevrimiçi deneyin! - 19 bayt - 1 (Dikdörtgen), 2 (Üçgen), 5 (Kare) ve 0 (Mess) [İkili sayıları kullanma]. Muhtemelen kabul edilebilir lol. gs€g©QP®¥ ÄP®1å&®ËJCbir boşluk char ve C21 olsa da ekleyebilirsiniz .
Sihirli Ahtapot Urn

@MagicOctopusUrn: Hala uzunluk / yükseklik> = 2 olup olmadığını kontrol etmesi gerekiyor, ama yine de baytları kurtarması gerekiyor. Akıllıca hile ikiliden çıkış numaralarını bina!
Emigna

1
@ MagicOctopusUrn: Orijinal sürümümde bazı baytları kaydetmek için delta ve ikili numaralarınızı kullandım. Muhtemelen bir kaç tane daha biraz daha yazmaktan tasarruf edebilir.
Emigna

2

R , 101 bayt

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

1 = Kare
2 = Dikdörtgen
3 = Üçgen
4 = Rastgele

Kod, 'NEGATİF KABUL EDİLDİ' (U + 0015) veya yukarıdaki koddaki kareyle ilgilenemez. Giriş bu byte'ı içeriyorsa, bu bayt farklı bir şeye değiştirilebilir.

Çevrimiçi deneyin!


belki readLines()yerine kullanabilirsiniz scan()?
Giuseppe

@Giuseppe ReadLines'in çalışması için noob yapamaz / çok çalışamaz
Vlo

Hmm, file("stdin")konsoldan okumasını sağlamak için belirtmeniz gerekiyor (bir sonraki kod satırı yerine). Bu muhtemelen daha az golf sahası olacağı anlamına gelir. ah iyi.
Giuseppe

2

Salyangoz, 29 bayt

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

Çıkış anahtarı:

  • 0 - Karışıklık
  • 3 - Üçgen
  • 6 - Dikdörtgen
  • 7 - Kare

Kaynak düzeni olmayan 23 bayt olacaktır:

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

Kendimi doğuran soruyu okuduğumdan beri hep bu dilde oynamaya istekli oldum!
Dom Hastings

1

Wolfram Dili (Mathematica) , 119 bayt

(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}&

Kullanılması Replace /.ve karakter üzerine desen eşleştirme hattı ile saymak.Replaceeşleştirilen bir kuralın ilk RHS'sini atacak, bu yüzden sıralama 1 karakter girişi, sonra kareler, dikdörtgenler, üçgenler ve karışıklıklar için bir düşüş testi olacak.

kare = 0, dikdörtgen = 1, üçgen = 2, karışıklık = 3

Çevrimiçi deneyin!


@DomHastings, düzeltildi.
Kelly Lowder

1

Kırmızı , 209 bayt

func[s][c: copy[]foreach a split s"^/"[append c length? a]d: unique c
r: 0 if 1 < l: length? c[if 1 = length? d[r: 2 if(do d)= l[r: 1]]n: 0
v: copy[]loop l[append v n: n + 1]if(v = c)or(v = reverse c)[r: 3]]r]

Çevrimiçi deneyin!

0 Dağınıklık

1 Kare

2 Dikdörtgen

3 Üçgen


1

AWK , 119 bayt

{p=l;l=L[NR]=length($0)
D=d}{d=p-l;x=x?x:NR>2?\
d!=D:0}END{print x==1?\
3:d*d==1?(L[NR]+L[1]==\
NR+1)?2:3:p!=NR}#######

Çevrimiçi deneyin!

Çıktı:

0= Kare
1= Dikdörtgen
2= Üçgen
3= Karışıklık


1

Ruby , 115 111 bayt

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

Çevrimiçi deneyin!

Anonim lambda. Çıktılar:

  1. Kare
  2. Dikdörtgen
  3. Üçgen
  4. Dağınıklık

Bu, karışıklık olarak işaretlenmesi gereken bazılarında başarısız görünüyor: Çevrimiçi deneyin!
Dom Hastings

Ah, sanırım bu hızlı bir çözüm olarak devam edecek. Muhtemelen biraz daha golf
Kirill L.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.