Program Identifikasi Bentuk

25

Tugas Anda adalah membangun program yang mengidentifikasi bentuk input. Bentuk yang akan diidentifikasi dapat berupa salah satu dari yang berikut:

Kotak

Untuk diidentifikasi sebagai kotak, sumber harus memiliki garis dengan panjang yang sama, dan jumlah garis yang sama dengan karakter per baris (karakter baris baru dikecualikan). Jalur tambahan tambahan opsional dapat diterima.

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

Empat persegi panjang

Untuk diidentifikasi sebagai persegi panjang, sumber harus memiliki garis dengan panjang yang sama, tetapi jumlah garis tidak cocok dengan jumlah karakter per baris (karakter baris baru dikecualikan). Jalur tambahan tambahan opsional dapat diterima. Ini bisa berupa horizontal atau vertikal.

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

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

Segi tiga

Untuk diidentifikasi sebagai segitiga, sumber harus mulai dengan satu karakter, dan setiap baris berikutnya harus memiliki satu karakter tambahan (termasuk yang terakhir), atau setelah baris pertama, setiap baris berikutnya harus memiliki satu karakter lebih sedikit hingga yang terakhir, yang hanya punya satu.

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

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

Kekacauan

Apa pun yang tidak mengikuti format yang konsisten seperti di atas, harus diidentifikasi sebagai berantakan.

Aturan

  • Anda dapat mengembalikan empat nilai yang konsisten yang dapat dicetak untuk mengidentifikasi setiap bentuk.
  • Kode sumber Anda juga harus mematuhi salah satu bentuk di atas (tidak, tidak berantakan).
  • Satu baris baru di sumber Anda dapat diterima.
  • Anda dapat berasumsi bahwa input tidak mengandung baris kosong (termasuk mengikuti baris baru), tidak kosong, dan tidak hanya terdiri dari baris baru.
  • Semua bentuk harus memiliki tinggi dan lebar> = 2, jika tidak, ini didefinisikan sebagai berantakan.
  • Celah standar dilarang.
  • Solusi terpendek dalam byte, dalam setiap bahasa, menang.
Dom Hastings
sumber
"Kode sumber Anda juga harus mematuhi salah satu dari bentuk di atas" apakah itu berarti satu liner baik-baik saja?
tsh
1
@ tshAll shapes must have a height and width of >= 2.
TFeld
1
Inputnya bisa berupa array? misalnya, kotak ['abc','cfd','fgh']?
Luis felipe De jesus Munoz
1
@recursive diperbarui, terima kasih!
Dom Hastings
3
Anda memberi tahu saya kode sumber saya tidak bisa berantakan? kenapa tidak?!?!
NH.

Jawaban:

9

Jelly , 35 byte

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

Cobalah online!

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

Erik the Outgolfer
sumber
Apakah ruang di baris terakhir Anda digunakan oleh kode Anda? Atau apakah itu hanya pelapis untuk memenuhi kriteria "persegi panjang"?
BradC
@BradC Yang terakhir. Saya mungkin harus menambahkan penjelasan.
Erik the Outgolfer
7

Brachylog , 45 byte

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

Cobalah online!

Kode adalah persegi panjang (terlepas dari cara itu ditampilkan di layar saya). Output: 1 untuk persegi, 2 untuk persegi panjang, 3 untuk segitiga, dan tidak ada yang berantakan


Penjelasan:

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)
PunPun1000
sumber
7

Java 10, 231 221 219 217 213 211 207 byte

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

Fungsi adalah persegi panjang itu sendiri.
1= Kotak; 2= Persegi Panjang; 3= Segitiga; 0= Mess.

-14 byte terima kasih kepada @ OlivierGrégoire .

Penjelasan:

Cobalah online.

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`
Kevin Cruijssen
sumber
1
Diperbaiki untuk 221 byte: 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;}(spasi ganda setelah var, line break sesudahnya D=L-l;.
Olivier Grégoire
@ OlivierGrégoire Terima kasih. Dan saya bermain golf dua byte lagi dengan mengubah D==-1|D==1ke D>-2|D<2. Yang satu dan yang l==1|L==1mungkin lebih golf dengan beberapa operasi bitwise, tapi itu bukan keahlian saya.
Kevin Cruijssen
1
207 byte: 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;}(break after D=L-l;++) Masih bisa bermain golf dengan menggabungkan loop dan pernyataan setelahnya menjadi satu, tapi saya tidak mengerti bagaimana sekarang.
Olivier Grégoire
6

Python 2 , 129 114 109 107 113 byte

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

Cobalah online!


Cetakan

  • 0 = Mess
  • 1 = Triangle
  • 2 = Square
  • 3 = Rectangle
TFeld
sumber
@KevinCruijssen Terima kasih, harus diperbaiki sekarang
TFeld
6

Jelly , 32 27 byte

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

Cobalah online!

Sekarang mengambil input pada daftar baris dan beralih >1×dengan ’adan menggunakan SƲsetelah L€ alih-alih FLƲƊ. Ini memungkinkan saya untuk mengembun menjadi dua baris dan saya menyimpan total 5 byte. Nilai-nilai berikut ini sama dengan sebelumnya.

[0.0, 0.0]= Mess
[0.0, 1.5707963267948966]= Rectangle
[0.0, 0.7853981633974483]= Square
[1.5707963267948966, 0.0]= Triangle


ZL«Ldapatkan minimum tinggi dan lebar dan kurangi 1 dari itu. Çmemanggil tautan kedua dan pada akhirnya jika input adalah satu baris, maka hasil Çmenjadi logis ANDed dengan nomor sebelumnya jika hanya ada satu baris output akan menjadi [0.0, 0.0].

Di tautan kedua: ,Umenghasilkan daftar panjang garis yang dipasangkan dengan itu terbalik. Jadalah range(number of lines)dan ⁼€memeriksa apakah masing-masing sama dengan hasil J. (Any) menghasilkan 1 jika input adalah segitiga.

E memeriksa apakah semua panjang garis sama (persegi panjang / persegi).

SƲdengan a $untuk mengelompokkan mereka ke dalam monad tunggal memeriksa apakah jumlah karakter adalah angka kuadrat.

Jadi pada akhir tautan kedua kita memiliki di [[a,b],c]mana setiap angka 0atau 1menunjukkan apakah input adalah segitiga, persegi panjang, dan memiliki jumlah karakter persegi masing-masing.

Namun sejumlah kotak elemen tidak menyiratkan input adalah kuadrat karena input berantakan seperti

a3.
4

memiliki sejumlah elemen tetapi bukan persegi.

Di sinilah æA(arctan2) masuk. 0æA0== 0æA1== 0. Dengan kata lain, jika input memiliki jumlah elemen persegi tetapi bukan persegi panjang, maka itu bukan persegi. Tentu saja ada cara yang lebih jelas untuk melakukan ini, tetapi apa bedanya ketika kita memiliki byte untuk dipikirkan dan kita diizinkan menghasilkan output yang sewenang-wenang yang konsisten.

Catatan saya sebelumnya menggunakan æA/bukannya æAƝ(dan ,bukan ;di dalam tautan kedua) tetapi metode sebelumnya membedakan antara segitiga yang memiliki jumlah kuadrat elemen dan yang tidak tetapi mereka jelas harus dihitung sebagai hal yang sama.

dylnan
sumber
Saya melihat angka-angka berpikir, mereka agak akrab ...
Dom Hastings
@HomHastings Haha. Saya mengalami kesulitan membedakan kotak dari jumlah kotak elemen dan arctan2persis apa yang saya butuhkan.
dylnan
1
Lucu bahwa saya tidak berpikir ini akan menjadi lebih pendek jika tidak ada batasan sumber
dylnan
... Apakah Anda yakin ini valid? Karena baris baru di Jelly adalah 0x7F, bukan 0x0A.
user202729
@HomHastings Apakah ini valid? (lihat alasan di atas)
user202729
4

Java 10, 274 323 298 229 byte

Pengiriman segitiga pertama.

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 Kekacauan

1 Empat persegi panjang

3 Kotak

4 Segi tiga

Cobalah online di sini .

Diedit beberapa kali agar golf sedikit lebih.

Tentu saja saya bisa menyimpan banyak byte dengan mengubahnya menjadi persegi panjang juga ( 281 267 259 200 byte, lihat di sini ).

Hasil identifikasi dimanipulasi menggunakan bitwise AND, menghasilkan bitmask sebagai berikut:

1        1      1
triangle square rectangle

Versi tidak disatukan:

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
}
Ketidakseimbangan
sumber
1
Selamat datang di PPCG!
Steadybox
Hore untuk segitiga! Terima kasih!
Dom Hastings
Hai, selamat datang di PPCG! Jawaban pertama yang bagus. Saya mencoba membuat jawaban saya menjadi segitiga sebelumnya juga, tetapi biayanya terlalu banyak byte dibandingkan dengan persegi panjang, dan beberapa kata kunci agak terlalu panjang dalam jawaban awal saya juga. :) Jawabannya bagus, +1 dari saya. Dan saya mengambil kebebasan untuk mengedit posting Anda untuk menambahkan highlighting ke seluruh postingan, sehingga komentar dalam versi Anda yang tidak dipisahkan lebih mudah dibaca. Selamat menikmati!
Kevin Cruijssen
@KevinCruijssen Terima kasih atas upvote dan editnya, sekarang terlihat jauh lebih baik. Jawaban saya dapat dipersingkat dengan mengubahnya menjadi persegi panjang juga, 281 byte. Tapi di mana kesenangannya?
OOBalance
3

Javascript 125 byte

_=>(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))

Luis felipe De jesus Munoz
sumber
3
Jumlah byte adalah 125 (termasuk baris baru)
Herman L
Segitiga harus pergi ke 1? bukan 3456
l4m2
@ l4m2 apa maksudmu?
Luis felipe De jesus Munoz
2
segitiga harus selalu dimulai dari 1?
Luis felipe De jesus Munoz
3
Saya pikir apa yang ditunjukkan oleh @ l4m2 adalah bahwa segitiga harus hanya memiliki satu karakter pada baris pertama atau terakhir, jika tidak maka ini merupakan "kekacauan".
Shaggy
3

Perl 5 -p , 83 byte

  • Kekacauan: tidak ada
  • Kotak: 0
  • Segitiga: 1
  • Kotak: 2
($z)=grep++$$_{"@+"-$_*~-$.}==$.,0,/$/,-1
}{$.<2or$_=$$z{$z>0||$.}?$z%2:@F>1&&2x!$z

Cobalah online!

Ton Hospel
sumber
3

PHP, 195 205 byte

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

Segitiga terbalik menambahkan 56 byte mahal untuk ini!

Outputnya adalah S, R, T, M

Disimpan beberapa byte berkat Dom Hastings.

Cobalah online!

Memperbaiki beberapa masalah sekarang ... Uji coba menghasilkan ini.

$_="
$_="
$_""
;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
=============
Dave
sumber
Abaikan ?>saja
tsh
Ini sepertinya kembali Tuntuk cccc\na\naa\ncccc Coba online!
Dom Hastings
3

Perl 6 , 81 byte

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

Cobalah online!

Pengembalian Trueuntuk persegi, Falseuntuk persegi panjang, 3untuk segitiga, Niluntuk kekacauan.

nwellnhof
sumber
Sangat bagus, maukah Anda membukanya sedikit, khususnya $_ Z- .skip?
Phil H
3

Stax , 39 byte

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

Jalankan dan debug online!

Sejauh ini hanya jawaban ASCII terpendek.

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

Penjelasan

Solusinya menggunakan fakta berikut: Jika sesuatu dicetak secara eksplisit dalam pelaksanaan program, tidak ada output implisit yang dihasilkan. Jika tidak, bagian atas tumpukan pada akhir eksekusi secara implisit adalah output.

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
Weijun Zhou
sumber
3

Haskell , 113 107 103 101 byte

((#)=<<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]

Cobalah online!

Mengembalikan 0, 1, 2 dan 3 masing-masing untuk kekacauan, persegi panjang, persegi dan segitiga.

Sunting: -2 bytes berkat Lynn !

Laikoni
sumber
3

05AB1E , 35 29 27 byte

Disimpan 8 byte berkat Magic Octopus Guci

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

Cobalah online!

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

Emigna
sumber
Tampaknya gagal pada beberapa kode berantakan: Coba online!
Dom Hastings
@DomHastings: Terima kasih sudah menangkapnya. Saya pikir golf agak rapuh. Seharusnya tidak apa-apa sekarang.
Emigna
Cobalah online! - 19 bytes - 1 (Rectangle), 2 (Triangle), 5 (Square) dan 0 (Mess) [Menggunakan angka biner]. Mungkin tidak bisa diterima lol. gs€g©QP®¥ ÄP®1å&®ËJCdapat menambahkan ruang char dan Cuntuk 21 sekalipun.
Magic Octopus Urn
@MagicOctopusUrn: Masih perlu memeriksa panjang / tinggi> = 2, tetapi masih harus menyimpan byte. Trik cerdas membangun nomor keluaran dari biner!
Emigna
1
@ MagicOctopusUrn: Saya menggunakan trik delta dan biner Anda untuk menyimpan beberapa byte pada versi asli saya. Mungkin bisa menyimpan lebih banyak menulis ulang sedikit lebih banyak.
Emigna
2

R , 101 byte

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

1 = Kotak
2 = Kotak
3 = Kotak
4 = Acak

Kode tidak dapat menangani 'NEGATIF ​​ACKNOWLEDGE' (U + 0015) atau kuadrat dalam kode di atas. Byte ini dapat dialihkan ke sesuatu yang berbeda jika input membutuhkan berisi byte ini

Cobalah online!

Vlo
sumber
mungkin Anda bisa menggunakan readLines()bukan scan()?
Giuseppe
@Giuseppe Tidak bisa / terlalu noob untuk membaca readLines bekerja
Vlo
Hmm, sepertinya Anda harus menentukan file("stdin")untuk membacanya dari konsol (daripada baris kode berikutnya). Itu berarti mungkin akan kurang golf. ah baiklah
Giuseppe
2

Siput, 29 byte

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

Kunci output:

  • 0 - Mess
  • 3 - Segitiga
  • 6 - Persegi Panjang
  • 7 - Kotak

Itu akan menjadi 23 byte tanpa tata letak sumber:

zA
.2,dun!(t.rf~)z.+~o~
feersum
sumber
Saya selalu tertarik untuk bermain dengan bahasa ini sejak membaca pertanyaan yang melahirkannya!
Dom Hastings
1

Bahasa Wolfram (Mathematica) , 119 byte

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

Penggunaan Replace /.dan pencocokan pola pada jumlah karakter per baris. Replaceakan mengeluarkan RHS pertama dari aturan yang cocok, sehingga urutannya adalah untuk menguji input 1 karakter, lalu kuadrat, persegi panjang, segitiga, dan kegagalan untuk kekacauan.

kuadrat = 0, persegi panjang = 1, segitiga = 2, mess = 3

Cobalah online!

Kelly Lowder
sumber
@Hum, sudah diperbaiki.
Kelly Lowder
1

Merah , 209 byte

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]

Cobalah online!

0 Kekacauan

1 Kotak

2 Empat persegi panjang

3 Segi tiga

Galen Ivanov
sumber
1

AWK , 119 byte

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

Cobalah online!

Keluaran:

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

Robert Benson
sumber
1

Ruby , 115 111 byte

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

Cobalah online!

Lambda anonim. Output:

  1. Kotak
  2. Empat persegi panjang
  3. Segi tiga
  4. Kekacauan
Kirill L.
sumber
Ini tampaknya gagal pada beberapa yang harus ditandai sebagai berantakan: Coba online!
Dom Hastings
Aduh, saya kira ini harus diperbaiki cepat. Mungkin perlu mencoba bermain golf sedikit lebih ...
Kirill L.
1

C (gcc) , 125 123 byte

Berkat ceilingcat untuk -2 byte.

f(L,n)int**L;{int i,l,c,F=strlen(*L),s=-F;for(l=i=0;i<n;l=c)c
=strlen(L[i++]),s+=c-l;s=n>1?s||F<2?~abs(s)+n?0:3:n^F?2:1:0;}

Cobalah online!

gastropner
sumber