Thạch , 14 12 byte
J’ƲœṗZ⁻¦µU⁼
Hãy thử trực tuyến!
Lý lịch
Chúng tôi bắt đầu bằng cách xem xét các chỉ số dựa trên 0 của chuỗi đầu vào.
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Để có được các hàng của tam giác, chúng ta có thể chia chuỗi trước các chỉ số 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 và 1 + 3 + 5 + 7 = 16 . Vì (n + 1) ² = n² + (2n + 1) , các khoản tiền này chính xác là các hình vuông dương, hoàn hảo trong danh sách chỉ mục. Nếu chúng ta cũng chia chuỗi trước 0 , thì điều này cũng đơn giản như chia tách trước tất cả các chỉ số dựa trên 0 là các ô vuông hoàn hảo.
Sau khi tách, chúng ta nhận được các chuỗi sau.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Tiếp theo, chúng tôi thay thế chuỗi trống ở đầu bằng tất cả các ký tự trong cột đầu tiên.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Bây giờ tác vụ được giảm xuống để kiểm tra xem việc đảo ngược tất cả các chuỗi có mang lại cùng một chuỗi chuỗi hay không.
Làm thế nào nó hoạt động
Đầu tiên J
tạo tất cả các chỉ mục dựa trên 1 của chuỗi đầu vào J
, sau đó giảm chúng ’
để tạo ra tất cả các chỉ mục dựa trên 0. Ʋ
kiểm tra tất cả các chỉ số dựa trên 0 cho độ vuông. Ví dụ của chúng tôi ở trên, điều này mang lại mảng Boolean sau.
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Tiếp theo, chúng tôi gọi œṗ
để phân vùng chuỗi đầu vào, ví dụ,
H H e H H e l e H H e l l l e H H e l l o l l e H
trước tất cả 1 (thực ra, tất cả các yếu tố trung thực). Ví dụ của chúng tôi, điều này mang lại mảng chuỗi sau.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
được cho là phần thú vị nhất của câu trả lời này. Hãy phân tích đơn giản hơnZ1¦
.
¦
là sự thưa thớt nhanh chóng. Nó tiêu thụ hai liên kết từ ngăn xếp, cụ thể 1
và Z
trong trường hợp này. Đầu tiên Z
được áp dụng cho đối số của nó: mảng chuỗi từ trước. Z
là nguyên tử zip và đọc mảng chuỗi / mảng ký tự 2D theo các cột, mang lại
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
Những gì từng là bên trái của chuỗi đầu vào và cột đầu tiên của mảng chuỗi bây giờ trở thành chuỗi đầu tiên .
Bây giờ nhìn ¦
trộm 1
và tìm thấy một chỉ số duy nhất: 1 . Do đó, chuỗi đầu tiên trong mảng chuỗi gốc được thay thế bằng chuỗi đầu tiên trong giá trị trả về của Z
; chuỗi tại các chỉ số khác vẫn không bị ảnh hưởng.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Hãy gọi mảng này Một .
Chúng tôi đã sử dụng Z⁻¦
thay vì Z1¦
, nhưng điều này không có gì khác biệt: ⁻
so sánh mảng chuỗi với chuỗi đầu vào cho bất đẳng thức, mang lại 1 vì chúng không bằng nhau. Sự khác biệt giữa hai là Z⁻¦
dyadic bởi vì ⁻
, cho phép chúng ta viết œṗZ⁻¦
thay vì œṗ¹Z1¦
. Điều này là do một dyad ( œṗ
) theo sau là một monad (œṗ¹Z1¦
) là một ngã ba (đơn vị được áp dụng cho đối số của chuỗi / chuỗi đầu vào và giá trị được trả về được chuyển thành đối số đúng œṗ
), trong khi một dyad theo sau bởi một dyad khác (hoặc ở cuối chuỗi) là một cái móc , tức là, đối số đúng của nó là đối số của chuỗi.
Tất cả những gì còn lại phải làm là kiểm tra độ ngon miệng. µ
bắt đầu một (monadic) chuỗi mới, những người là đối số là Một . Nguyên tử upendU
đảo ngược tất cả các chuỗi trong A (nhưng không phải chính A ), sau đó ⁼
so sánh kết quả với A cho đẳng thức. Boolean 1 được trả về chỉ ra một tam giác hoàn toàn palindromic; các chuỗi khác sẽ trả về 0 .