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.
sumber
All shapes must have a height and width of >= 2.
['abc','cfd','fgh']
?Jawaban:
Jelly , 35 byte
Cobalah online!
0
= Mess1
= Rectangle2
= Square3
= Trianglesumber
Brachylog , 45 byte
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:
sumber
Java 10,
231221219217213211207 byteFungsi adalah persegi panjang itu sendiri.
1
= Kotak;2
= Persegi Panjang;3
= Segitiga;0
= Mess.-14 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Cobalah online.
sumber
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 setelahvar
, line break sesudahnyaD=L-l;
.D==-1|D==1
keD>-2|D<2
. Yang satu dan yangl==1|L==1
mungkin lebih golf dengan beberapa operasi bitwise, tapi itu bukan keahlian saya.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 afterD=L-l;++
) Masih bisa bermain golf dengan menggabungkan loop dan pernyataan setelahnya menjadi satu, tapi saya tidak mengerti bagaimana sekarang.Python 2 ,
129114109107113 byteCobalah online!
Cetakan
0
=Mess
1
=Triangle
2
=Square
3
=Rectangle
sumber
Jelly ,
3227 byteCobalah online!
Sekarang mengambil input pada daftar baris dan beralih
>1×
dengan’a
dan menggunakanSƲ
setelahL€
alih-alihFLƲƊ
. 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]
= TriangleZL«L
dapatkan 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:
,U
menghasilkan daftar panjang garis yang dipasangkan dengan itu terbalik.J
adalahrange(number of lines)
dan⁼€
memeriksa apakah masing-masing sama dengan hasilJ
.Ẹ
(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 angka0
atau1
menunjukkan 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
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.sumber
arctan2
persis apa yang saya butuhkan.Java 10,
274323298229 bytePengiriman segitiga pertama.
0
Kekacauan1
Empat persegi panjang3
Kotak4
Segi tigaCobalah online di sini .
Diedit beberapa kali agar golf sedikit lebih.
Tentu saja saya bisa menyimpan banyak byte dengan mengubahnya menjadi persegi panjang juga (
281267259200 byte, lihat di sini ).Hasil identifikasi dimanipulasi menggunakan bitwise AND, menghasilkan bitmask sebagai berikut:
Versi tidak disatukan:
sumber
Javascript 125 byte
sumber
Perl 5
-p
, 83 byteCobalah online!
sumber
PHP,
195205 byteSegitiga 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.
sumber
?>
sajaT
untukcccc\na\naa\ncccc
Coba online!Perl 6 , 81 byte
Cobalah online!
Pengembalian
True
untuk persegi,False
untuk persegi panjang,3
untuk segitiga,Nil
untuk kekacauan.sumber
$_ Z- .skip
?Stax , 39 byte
Jalankan dan debug online!
Sejauh ini hanya jawaban ASCII terpendek.
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.
sumber
Haskell ,
113107103101 byteCobalah online!
Mengembalikan 0, 1, 2 dan 3 masing-masing untuk kekacauan, persegi panjang, persegi dan segitiga.
Sunting: -2 bytes berkat Lynn !
sumber
05AB1E ,
352927 byteDisimpan 8 byte berkat Magic Octopus Guci
Cobalah online!
0
= Mess4
= Triangle1
= Rectangle3
= Squaresumber
gs€g©QP®¥ ÄP®1å&®ËJC
dapat menambahkan ruang char danC
untuk 21 sekalipun.R , 101 byte
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!
sumber
readLines()
bukanscan()
?file("stdin")
untuk membacanya dari konsol (daripada baris kode berikutnya). Itu berarti mungkin akan kurang golf. ah baiklahSiput, 29 byte
Kunci output:
Itu akan menjadi 23 byte tanpa tata letak sumber:
sumber
Bahasa Wolfram (Mathematica) , 119 byte
Penggunaan
Replace
/.
dan pencocokan pola pada jumlah karakter per baris.Replace
akan 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!
sumber
Merah , 209 byte
Cobalah online!
0
Kekacauan1
Kotak2
Empat persegi panjang3
Segi tigasumber
AWK , 119 byte
Cobalah online!
Keluaran:
0
= Square1
= Rectangle2
= Triangle3
= Messsumber
Ruby ,
115111 byteCobalah online!
Lambda anonim. Output:
sumber
C (gcc) ,
125123 byteBerkat ceilingcat untuk -2 byte.
Cobalah online!
sumber