Chuỗi này có phải là hình vuông không?


44

Một chuỗi được coi là hình vuông nếu đáp ứng các điều kiện sau:

  • Mỗi dòng có cùng số ký tự
  • Số lượng ký tự trên mỗi dòng bằng số lượng dòng.

Nhiệm vụ của bạn là viết một chương trình hoặc hàm xác định xem một chuỗi đầu vào đã cho có phải là một hình vuông hay không.

Bạn có thể yêu cầu đầu vào được phân định bởi sự lựa chọn của bạn về LF, CR hoặc CRLF.

(Các) ký tự dòng mới không được coi là một phần của độ dài của dòng.

Bạn có thể yêu cầu phải có hoặc không có dòng mới trong đầu vào, không được tính là một dòng bổ sung.

Đầu vào là một chuỗi char hoặc 1D; nó không phải là một danh sách các chuỗi

Bạn có thể cho rằng đầu vào không trống và chỉ chứa ASCII có thể in, bao gồm cả khoảng trắng.

Bạn phải xuất ra một giá trị trung thực cho các chuỗi vuông và một giá trị giả cho các chuỗi khác.

Các trường hợp thử nghiệm thật:

foo
quán ba
baz
.
.S.
.ss
.S.
(s đại diện cho không gian)
ss
ss
(s đại diện cho không gian)
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa

Các trường hợp thử nghiệm giả:

..
.
.

.
....


....
4444
333
22
333
333
abc.def.ghi

Lưu ý thêm dòng trống trong một số trường hợp giả.

Đây là - ít byte thắng nhất!


Bản sao có thể có của Thiết kế ngôn ngữ: Kết hợp mẫu 2 chiều . Vấn đề # 5 giống như câu hỏi này.
mbomb007

1
@ mbomb007 Tôi cảm thấy như các tiêu chí chiến thắng khác nhau làm cho điều này không phải là một bản sao? "Golfiness" là một trong những tiêu chí bỏ phiếu nhưng tôi không nghĩ câu trả lời cho câu hỏi đó sẽ chủ yếu phản ánh những câu hỏi ở đây.
FryAmTheEggman

2
@ mbomb007 Tôi đang bỏ phiếu để bỏ ngỏ câu hỏi này bởi vì, trong khi nó là một tập hợp con của câu hỏi khác, câu hỏi khác được giới hạn trong các ngôn ngữ được tạo riêng cho câu hỏi đó.
Sản phẩm ETH

2
@ mbomb007: Đó không phải là một bản sao, bởi vì câu hỏi đó yêu cầu bạn thiết kế một ngôn ngữ cho mục đích trả lời câu hỏi, thay vì trả lời bằng ngôn ngữ hiện có. Rất ít câu trả lời ở đây sẽ hợp pháp ở đó.

1
@ mbomb007: Tuy nhiên, đó không phải là lý do để kết thúc thử thách này và không cho mọi người đăng câu trả lời của họ bằng các ngôn ngữ có sẵn. Nó có thể có khả năng là một đối số để kết thúc thử thách khác (vì đây chỉ là phiên bản hạn chế hơn của thử thách này), mặc dù tôi coi đó là một cuộc tranh luận kém và tin rằng cả hai nên bị bỏ ngỏ.

Câu trả lời:


19

Brachylog (2), 3 byte

ṇẹṁ

Hãy thử trực tuyến!

Chương trình đầy đủ. Đầu ra true.cho sự thật, false.cho falsey.

Giải trình

ṇẹṁ
ṇ     Split {standard input} into lines
 ẹ    Split {each line} into basic elements {in this case, characters}
  ṁ   Assert that the result is square

Tôi đã có một chút hoài nghi về tính hữu ích của nội dung khi nó được thêm vào, nhưng tôi thực sự không thể phủ nhận rằng nó hữu ích ở đây

Brachylog (2), 7 byte

ṇẹ.\l~l

Hãy thử trực tuyến!

Giải pháp không tích hợp. Vẫn đánh bại tất cả các mục khác, kể từ thời điểm viết. EDIT: Không hoàn toàn, mục Jelly có độ dài bằng nhau đã vào trong khi tôi đang viết bài này, và đánh bại nó thông qua việc bẻ khóa dấu thời gian.

Giải trình

ṇẹ.\l~l
ṇ         Split {standard input} into lines
 ẹ        Split {each line} into basic elements {in this case, characters}
   \l     Assert that the result is rectangular, and the number of columns
  .  ~l     is equal to the number of rows

1
Công cụ chính xác cho công việc!
Pavel

10
= "Khẳng định rằng kết quả là hình vuông" :(
Erik the Outgolfer

5
Có một thử thách khi tôi đang vật lộn để viết một hình vuông khẳng định (nó đã từng giống như .\l~llúc đó, ngoại trừ lệnh dấu gạch chéo ngược, trong số những thứ khác khẳng định rằng đầu vào của nó là một hình chữ nhật , đã bị hỏng; lưu ý rằng ngay cả khi chúng ta thay thế với .\l~l, đây là vẫn còn chương trình ngắn nhất đây; đến để suy nghĩ về nó, tôi sẽ thêm đó đến bưu điện). Lệnh dấu gạch chéo ngược đã được sửa, nhưng tác giả ngôn ngữ đã quyết định thêm một hình vuông khẳng định cùng một lúc. Tôi đã suy nghĩ "chắc chắn điều đó sẽ không bao giờ xuất hiện nữa". Rõ ràng tôi đã sai.

2
@Phoenix: Số phiên bản của ngôn ngữ, điều này sẽ không hoạt động trong Brachylog v1. Hầu hết mọi người chỉ nói "Brachylog" (giống như hầu hết mọi người nói "Perl" chứ không phải "Perl 5"), nhưng tôi đã có thói quen trở lại vì tôi thường sử dụng Brachylog v1 trong những dịp hiếm hoi.

2
@iFreilicht Thật tệ vì nó vượt xa mọi ngôn ngữ chơi gôn khác cho đến nay.
Erik the Outgolfer

21

Python 2 , 52 byte

x=input().split('\n')
print{len(x)}==set(map(len,x))

Hãy thử trực tuyến! hoặc Thử tất cả các trường hợp thử nghiệm


4
Tôi thích thực tế rằng điều này là cả golf và có thể đọc được.
jpmc26

Bạn không cần '\n', chỉ để trống (vì không có khoảng trắng và tab trong đầu vào).
12431234123412341234123

@ 12431234123412341234123 không, nó không hoạt động đối với các chuỗi vuông có chứa khoảng trắng !!!
Ông Xcoder

@ Mr.Xcoder Nó có phải hoạt động với không gian không? Theo tôi hiểu, không bao giờ có không gian trong đầu vào.
12431234123412341234123

Bạn đã hiểu nhầm thông số kỹ thuật: Bạn có thể cho rằng đầu vào không trống và chỉ chứa ASCII có thể in được. và khoảng trắng (``) có thể in ASCII
Ông Xcoder

14

JavaScript (ES6), 46 45 byte

s=>!(s=s.split`
`).some(x=>x.length-s.length)

Giải trình

  1. Chia chuỗi thành một mảng trên dòng mới.
  2. Vòng qua mảng.
  3. Trừ chiều dài của mảng từ chiều dài của mỗi dòng.
  4. Nếu một giá trị khác không (nghĩa là trung thực) được trả về cho bất kỳ dòng nào, chuỗi không phải là hình vuông.
  5. Phủ định kết quả của vòng lặp để có được truecho hình vuông và falsekhông.

Thử nó

f=
s=>!(s=s.split`
`).some(x=>x.length-s.length)
oninput=_=>o.innerText=f(i.value)
o.innerText=f(i.value=`foo
bar
baz`)
<textarea id=i></textarea><pre id=o>


3
Tôi nghĩ bạn có thể lưu một byte bằngs=>!(s=s.split`\n`).some(x=>x.length-s.length)
ETHproductions

Cảm ơn, @ETHproductions. Tôi có một thói quen khủng khiếp là gạt !somera khỏi tầm tay, đơn giản vì nó có cùng chiều dài every.
Xù xì

9

05AB1E , 10 8 byte

¶¡€gDgQP

Hãy thử trực tuyến!

-2 nhờ Riley, đây cơ bản là câu trả lời của anh ấy ._.

Code       # Explanation                  | Truthy Example          | Falsy Example
-----------#------------------------------+-------------------------+--------------
¶¡         # Split on newlines            | [['aaa','aaa','aaa']]   | [['aa']]
  €g       # Get length of each           | [[3,3,3]]               | [[2]]
    D      # Dupe                         | [[3,3,3],[3,3,3]]       | [[2],[2]]
     g     # Get length                   | [[3,3,3],3]             | [[2],1]
      Q    # Check equality               | [[1,1,1]]               | [[0]]
       P   # Take product                 | 1                       | 0

@Riley ahhh, bắt tốt đẹp, ý tưởng ban đầu của tôi là nhiều hơn những gì bạn có nhưng hơi khác nhau. Lặp lại hai lần nữa và không bắt lỗi toán học của tôi.
Bạch tuộc ma thuật Urn

Tôi không nghĩ "Tiêu đề" là một hình thức hợp lệ trên đầu vào.
Pavel

@Phoenix tốt hơn không?
Bạch tuộc ma thuật Urn

1
Đầu vào cũng có thể được thực hiện với ba dấu ngoặc kép, như thế này .
Ad Nam

1
Nếu bạn nhận được chiều dài của mỗi đầu tiên, bạn có thể tránh s. Như thế này¶¡€gDgQP
Riley


9

Haskell, 38 34 byte

l=length
(all=<<(.l).(==).l).lines

Hãy thử trực tuyến!

Phiên bản Pointfree của f s = all ((==length (lines s)).length) (lines s), tức là chia đầu vào thành các dòng và kiểm tra xem độ dài của mỗi dòng có bằng số lượng dòng không.

Chỉnh sửa: Cảm ơn @xnor cho 4 byte.


1
Tôi nghĩ rằng bạn có thể sử dụng allcho mapcắt and..
xnor

9

Thạch , 7 byte

ỴµL;L€E

Hãy thử trực tuyến!

Giải trình

Ỵµ       Split the input on newline and use as input in the second link     
  L      Get the number of list items
   ;     And append to that
    L€   A list with the legth of each list item
      E  Check to see if all items are equal.

1
Liên kết TIO của bạn dường như chỉ ra rằng không có dòng mới nào ở đó.
Pavel

@Phoenix đã sửa / hoàn nguyên ...
steenbergh

Điều này chỉ kiểm tra xem liệu tất cả các dòng có cùng độ dài hay không - thực sự nó không tính đến số lượng dòng mới. Khi bạn đạt đến nguyên tử E, bạn có một danh sách độ dài dòng và đó là tất cả.
phân tán

@Christian cố định và rút ngắn. Xin lỗi vì đã nhầm lẫn, tôi đoán có gì đó không ổn sau khi tôi có giải pháp hiệu quả và tôi đã cố gắng chơi golf đó ..
steenbergh

9

Japt , 9 byte

=Ur.Q)¥Uy

Kiểm tra nó trực tuyến!

Giải trình

 =Ur.Q)¥ Uy
U=Ur.Q)==Uy
             // Implicit: U = input string, Q = quotation mark
U=    )      // Set U to
  Ur.Q       //   U with each non-newline (/./g) replaced with a quotation mark.
       ==Uy  // Return U == U transposed. U is padded to a rectangle with spaces before
             // transposing; if U was not a rectangle before, or the sides are not of
             // equal length, the result will not be the same as U.
             // Implicit: output result of last expression

Sử dụng một số tính năng được triển khai ngay sau khi thử thách này được đăng, đây có thể là 6 byte:

r.Q
¥y

Kiểm tra nó trực tuyến!

Giải trình

       // Implicit: U = input string
r.Q    // Replace each non-newline (/./g) in U with a quotation mark.
       // Newline: set U to the result.
¥      // Return U ==
 y     //   U transposed.
       // Implicit: output result of last expression

Làm thế nào trên thế giới bạn rất nhanh?
hoàn toàn là

@totallyhuman Tôi tình cờ thấy câu hỏi ngay khi nó được đăng, và tôi mất hai phút để đưa ra một thuật toán. Sau đó nó chỉ được thực hiện và đăng. (Ngoài ra tôi có nhiều thứ để quay lại haha)
ETHproductions

Đẹp :) Tôi biết đó ylà giải pháp nhưng tôi đang đến ở một vài byte nữa.
Xù xì

" Sử dụng một số tính năng được triển khai ngay sau khi thử thách này được đăng " - Bây giờ bạn có thể đăng bài đó dưới dạng asnwer của mình.
Xù xì

7

Võng mạc , 33 31 byte

.
.
^(.(.)*)(?<-2>¶\1)*$(?(2).)

Hãy thử trực tuyến! Giải thích: Giai đoạn đầu tiên chỉ đơn giản là thay đổi tất cả ASCII có thể in thành cùng một ký tự để dễ khớp hơn. (Nó có thể được thực hiện mà không có, nhưng đây là mã golf, không phải mã thách thức.) Giai đoạn thứ hai sau đó khớp với ít nhất một ký tự trên dòng đầu tiên. Tuy nhiên, đối với mỗi ký tự bổ sung trên dòng đầu tiên, sau đó nó tùy ý khớp với một dòng mới theo sau là một bản sao của dòng đầu tiên. Phần cuối cùng của biểu thức làm cho kết quả khớp không thành công nếu có nhiều cột hơn hàng.


Thật không may, kết quả này đúng cho testcase này .
Kritixi Lithos

@KritixiLithos Tôi tin rằng việc gửi yêu cầu một dòng mới trong đầu vào, được phép.
Pavel

Ngoài ra tôi tin rằng việc sử dụng \S\n;thay vì dòng đầu tiên sẽ tiết kiệm được một byte
Kritixi Lithos

@KritixiLithos Thực tế thay thế .bằng .tiết kiệm hai, nhưng cảm ơn.
Neil

@Neil Điều đó thực sự thông minh!
Kritixi Lithos

6

Husk , 6 byte

S≡T'a¶

Lấy một chuỗi và in 1hoặc 0. Hãy thử trực tuyến! Dòng đầu tiên lặp lại trong các trường hợp thử nghiệm; loại bỏ nó nếu bạn muốn kiểm tra trên một giá trị duy nhất.

Giải trình

Husk là một ngôn ngữ golf chức năng mới được tạo ra bởi bản thân tôi và Leo . Nó thiếu rất nhiều tính năng và sự phát triển đang diễn ra. Tính năng chính của nó là một hệ thống loại cứng nhắc cho phép chúng ta quá tải các chức năng bậc cao hơn.

Ở cấp độ cao, chương trình hoạt động như thế này:

S≡T'a¶  Define a function:
     ¶  split on newlines,
  T'a   transpose and pad to rectangle using character 'a',
 ≡      check if this has the same shape as
S       the split input.

Hàm thực sự kiểm tra xem hai mảng có cùng hình dạng và cùng phân phối các phần tử trung thực không. Trong Husk, tất cả các ký tự ngoại trừ byte null đều là sự thật và điều đó sẽ không xảy ra trong các đầu vào của chúng tôi. Ngoài ra, SS-Combinator , một hàm mang theo như đầu vào hai chức năng, ở đây T'a, và trả về một chức năng mới mà bản đồ xđể ≡(x)(T'a x). Kết quả Sđược cấu thành với và hàm đó được áp dụng cho đầu vào ngầm.

Làm thế nào Husk biết rằng nó nên áp dụng Scho chức năng tiếp theo, nhưng nên được sáng tác với chức năng bên trái của nó? Đơn giản: nó chỉ thử mọi diễn giải và chọn một trong đó các kiểu có ý nghĩa. Điều này được giải thích chi tiết hơn trong tài liệu Husk .


5

Bash tinh khiết (không có tiện ích), 55

mapfile -t a
for l in ${a[@]};{
((c+=${#l}^${#a[@]}))
}
  • mapfile đọc đầu vào thành mảng a
  • sau đó số phần tử của mảng được XOR với mỗi độ dài dòng và tổng được lấy. Đối với một hình vuông hoàn hảo, mỗi kết quả XOR (và do đó tổng) sẽ là 0. Đối với bất kỳ điều gì khác, kết quả sẽ là> 0.

Ý nghĩa ngược lại của điều này được trả về dưới dạng mã trả về shell (kiểm tra với echo $?) - bình phương hoàn hảo là 1, bất cứ điều gì khác là 0.

Hãy thử trực tuyến (sự thật) .

Hãy thử trực tuyến (giả mạo) .


Câu trả lời trước bằng cách sử dụng địa ngục mở rộng eval, 78:

mapfile -t a
echo $[0$(eval eval echo +\\$\{#a[{0..$[${#a[@]}-1]}]}^${#a[@]})]

Hãy thử trực tuyến (sự thật) .

Hãy thử trực tuyến (giả mạo) .


5

Perl 6 , 27 byte

{.lines==all .lines».comb}

Kiểm tra xem số lượng dòng trong chuỗi đầu vào có bằng số lượng ký tự trên mỗi dòng hay không.


Điều này bỏ qua các nhân vật dòng mới?
Khaled.K

Có, dòng mới không được trả về theo .linesphương thức.
Sean

4

Bình thường, 7 byte

CImL1.z

Hãy thử nó ở đây

Yêu cầu không có dòng mới. Thay thế đầu vào bằng một mảng 2D là 1 trong đó 1 đại diện cho bất kỳ ký tự nào trong đầu vào ban đầu. Sau đó, chúng tôi kiểm tra xem mảng đó có thay đổi hay không sau khi hoán vị nó (thay thế các cột bằng các hàng). Chỉ có một hình vuông sẽ trở lại đúng trong tình huống như vậy.


4

Java (OpenJDK 8) ,96 91 90 87 byte

-5 byte nhờ @KevinCruijssen
-1 byte nhờ @TheLethalCoder
-2 byte nhờ @ OlivierGrégoire

a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)

Hãy thử trực tuyến!


1
Bạn có thể loại bỏ các không gian tại String[]svà bạn có thể loại bỏ các ,0trong .split("\\n");cho -3 byte. Và dấu chấm phẩy / ;cuối cùng bạn sẽ không phải đếm, vì vậy -1 khác. Ồ, và bạn phải bao gồm java.util.phía trước Arraystôi đang sợ. Nhập khẩu / sử dụng là một phần của số byte.
Kevin Cruijssen

1
Vì bạn đã quên bao gồm java.util., chỉ là một vòng lặp for thông thường như thế này for(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;dường như ngắn hơn return java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);.
Kevin Cruijssen

2
Có phải không chỉ \n?
TheLethalCoder

1
Lặp đi lặp lại a.split("\n")là thực sự ngắn hơn! a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
Olivier Grégoire

2
Hmmm ... một số nữa cũng có mặt giữa length(). Vì vậy, rõ ràng, chúng xuất hiện đầu tiên sau char thứ 60 sau đó cứ 20 ký tự.
Olivier Grégoire

3

05AB1E , 7 byte

|€gDgQP

Hãy thử trực tuyến!


Loại imo gian lận, về cơ bản là lấy nđầu vào thay vì 1 và tại sao câu trả lời ban đầu của tôi không hoạt động.
Bạch tuộc ma thuật Urn

@carusocomputing Không, |có nghĩa là "lấy phần còn lại của đầu vào và phân chia theo dòng mới", không có cách nào lấy nhiều đầu vào. Bạn chỉ cần coi STDIN là một đầu vào duy nhất.
Erik the Outgolfer

3

R , 57 byte

function(s)all(nchar(n<-strsplit(s,'
')[[1]])==length(n))

Một chức năng ẩn danh; Chia nhỏ trên dòng mới, tính toán độ dài của mỗi dòng và kiểm tra xem tất cả có giống với số lượng dòng không.

Hãy thử trực tuyến!


3

MATL , 14 12 byte

10H&XXot&n=h

Chuỗi đầu vào được xác định bằng cách sử dụng nối chuỗi ( [...]) và với điểm mã 10để đại diện cho LF. Ví dụ, ['aaa' 10 'bb']được diễn giải trong MATL dưới dạng chuỗi được 'aaa'nối với ký tự có điểm mã được 10nối với chuỗi 'bb'.

Đầu ra là một vectơ số không trống, điều này là đúng khi và chỉ khi tất cả các mục nhập của nó là khác không.

Hãy thử trực tuyến!

Giải trình

Xem xét đầu vào ['4444' 10 '333' 10 '22'].

10H   % Push 10 (code point of LF). Push 2
      % STACK: 10, 2
&XX   % Regexp with three arguments. First argument is implicit input (string);
      % second is 2, which indicates that we want to split the input; third is
      % 10, which is the character to split on. The result is a cell array of
      % matched strings
      % STACK: {'4444', '333', '22'}
o     % Concatenate into a numeric 2D array of code points, right-padding with
      % zeros if needed
      % STACK: [52 52 52 52; 51 51 51 0; 50 50 0 0]
t&n   % Duplicate. Push number of rows and number of columns
      % STACK: [52 52 52 52; 51 51 51 0; 50 50 0 0], 3, 4
=     % Are they equal?
      % STACK: [52 52 52 52; 51 51 51 0; 50 50 0 0], 0
h     % Concatenate into a row vector (in column-major order). Implicit display
      % STACK: [52 51 50 52 51 50 52 51 0 52 0 0 0]

3

R, 35 byte

all(nchar(x<-scan(,""))==length(x))

Lấy đầu vào từ stdin. Kiểm tra xem số lượng ký tự trong mỗi dòng bằng tổng số dòng. Trả về TRUEhoặc FALSEkhi thích hợp.


lưu ý rằng đầu vào cần được bọc trong dấu ngoặc kép hoặc điều này có thể phá vỡ khoảng trắng trong mỗi dòng.
Giuseppe

2

JavaScript (ES6), 48 byte

s=>(a=s.split`
`,a.every(l=>l.length==a.length))



2

Bình thường, 12 10 byte

!fnl.zlT.z

Đã lưu 2 byte nhờ @FryAmTheEggman.

Dùng thử trực tuyến

Giải trình

!fnl.zlT.z
 f     T.z     Filter lines of the input
  nl.zl        whose length is not the number of lines
!              and return whether there are no such lines.

2

QBIC , 43 byte

{_?~_lA||h=h+1┘g=g+_lA|~g%_lA||_Xp]\_xg/h=h

Tôi, tôi rất vui với việc phái sinh QBasic ngắn ngủi đã vượt qua thử thách này.

Giải trình:

{_?       DO infinitely: ask the user for input, store as A$
~    |    IF
 _lA|       The length of A$   (implicitly <> 0)
h=h+1     Add 1 to our line counter
┘         (syntactic linebreak)
g=g+_lA|  Add the length of this line to the running total of line lengths
~      |  IF
 g%_lA|     The length of the running total modulo the length of the last string
            yields anything but 0, there is a discrepancy between earlier line
            lengths and this one.
_Xp]      THEN QUIT, printing 0, end IF
\         ELSE (refers to the LEN(A$), user didn't input anything.
_xg/h=h   QUIT (the inf. loop) printing -1 if the root of the chars is the row count
            or 0 if not.


2

Ruby, 50 byte

s=$<.read.split $/,-1;p [s.size]==s.map(&:size)|[]

Hãy thử trực tuyến!

Giải trình

  1. Chia đầu vào thành mảng trên dòng mới.
  2. Khẳng định rằng một mảng chỉ chứa kích thước của mảng này bằng với một mảng chứa tất cả các kích thước uniq (set union với mảng trống) của tất cả các phần tử trong mảng này.

1
Lưu một nhân vật với .split($/,-1);->.split $/,-1;
Christopher Lates

Tiết kiệm nhiều hơn bằng cách sử dụng linesthay vì readvà sau đó split(nhưng sau đó bạn phải thêm 1 vào sizevì các dòng bao gồm dòng mới ở cuối)
GB


1

Clojure, 58 byte

#(let[s(re-seq #"[^\n]+"%)c count](apply =(c s)(map c s)))

Yêu cầu một dòng mới, mong muốn được nhìn thấy một cái gì đó kỳ diệu hơn.


1

APL (Dyalog) , 17 byte

Yêu cầu ⎕ML←3mặc định trên nhiều hệ thống. Sử dụng CR.

↓∘⎕FMT≡⎕TC[2]∘≠⊂⊢

Hãy thử trực tuyến!

↓∘⎕FMT [là] đối số phân chia thành F hoặc m a t ted-thành-a-vuông

 giống hệt

⎕TC[2]∘≠ các nhóm thành nhóm không phải là dòng mới *

 phân vùng

 tranh luận?

* phần tử thứ hai của danh sách các ký tự T erminal C ontrol.


Trong phiên bản 16.0, người ta có thể viết ↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢bằng ⎕ML←1.


Tò mò, cái gì ⎕ML?
Pavel

1
@Phoenix Trong Dyalog APL và APL +, M igration L Evel là một biện pháp thô cho phong trào biện chứng trong chỉ đạo của APL2 của IBM. Con số càng cao, ngôn ngữ càng trở nên giống APL2. Những người di chuyển từ APL2 sang các APL khác có xu hướng chạy với mức cao ⎕ML, trong khi những người bắt đầu với các APL khác có xu hướng chạy với mức thấp ⎕ML.
Adám

1

PowerShell, 64 byte

Cách tiếp cận tương tự (chia, độ dài đường, số dòng) như các câu trả lời khác của ngôn ngữ không phải là golf, nhưng không có bản đồ đẹp (), do đó, đó là một mảng có độ dài dòng với số dòng được gắn ở cuối, sau đó là mảng đó được nhóm lại. Hình vuông đi ra như thế nào 3,3,3,3 -> 1 group, all line lengths and line count were equalvà không hình vuông đi ra như thế 3,2,1 -> 3 groups, một cái gì đó không đồng đều trong hình vuông:

$f={@(@(($L="$args"-split"`n")|% le*)+$L.Count|group).Count-eq1}

Yêu cầu kết thúc dòng mới theo kiểu Linux, không có dòng mới. ví dụ

$Ttests = @(@'
foo
bar
baz
'@,
'.',
@'
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
'@
)
$Ttests = $Ttests | foreach {$_ -replace "`r"}

$Ttests | % { & $f $_ }

(Và bạn có thể làm tương tự cho các bài kiểm tra sai, nhưng tôi sẽ không đặt nó ở đây vì có nhiều bài kiểm tra hơn). Một vài @ký hiệu được yêu cầu khi đầu vào là một '.'phân tách khác, nó không tạo ra một mảng của một chuỗi mà nó chỉ tạo thành một chuỗi, và sau đó nối chuỗi không xuất 1,1ra đầu ra 2.

Tôi hy vọng có thể ngắn hơn để thay thế tất cả các ký tự bằng 'a', và sau đó dùng vũ lực từ 1 đến Độ dài đầu vào tất cả các ô vuông 'a' và xem liệu có khớp với đầu vào không. Khi tôi đã vượt qua param () và .Lipse và -join và -replace, nó sẽ kết thúc lâu hơn ở 81 byte:

$f={param($s)!!(1..$s.Length|?{,('a'*$_)*$_-join"`n"-eq($s-replace"[^`n]",'a')})}

1

Vết bẩn , 11 byte

e`.|_./+/.+

In 1cho hình vuông và 0cho hình vuông. Hãy thử trực tuyến!

Giải trình

Một lời giải thích chi tiết có thể được tìm thấy trên trang hướng dẫn Grime , trong đó có chứa chương trình chính xác này làm ví dụ.

e`.|_./+/.+
e`            Match entire input against pattern:
  .           A single character
   |          OR
    _         a recursive match of this pattern
     ./+      with one column of characters on its right
        /     and below that
         .+   one row of characters.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.