Viết hàm lấy một số làm đối số và biến nó thành một bảng màu bằng cách nối thêm số chữ số tối thiểu. Số sẽ có tối đa 100 chữ số.
Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101
Viết hàm lấy một số làm đối số và biến nó thành một bảng màu bằng cách nối thêm số chữ số tối thiểu. Số sẽ có tối đa 100 chữ số.
Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101
Câu trả lời:
f=:{.@(,"1(-:|.)\.#|.@}:\)
ví dụ
f '12'
121
f '232'
232
f '2323'
23232
f '1012121'
101212101
y =: '1012121'
[\.y NB. Sub lists of y
1012121
012121
12121
2121
121
21
1
|.\. y NB> Reverses of sub lists of y
1212101
121210
12121
1212
121
12
1
([\. y) -:"1 (|. \. y) NB. Which of them are equal? (those are palindromes)
NB. ( -:"1 ) checks equality item by item
0 0 1 0 1 0 1
(-: |.)\. y NB. Shortcut of the above
0 0 1 0 1 0 1
(0 0 1 0 1 0 1) # }:\y NB. Choose (#) the palindrome prefixes (\)
10
1012
101212
y, |.'10' NB. Reverse and append the first prefix.
101212101
s/((.)(?1)\2|.?)$/$&.reverse$`/e
Cần Perl 5.10 trở lên cho các tính năng regex, nhưng không có công tắc dòng lệnh đặc biệt.
Sử dụng mẫu:
$ perl -pe 's/((.)(?1)\2|.?)$/$&.reverse$`/e' << EOT
> 12
> 232
> 2323
> 1012121
> EOT
121
232
23232
101212101
Sử dụng các phần mở rộng regex đệ quy của Perl 5.10 để phù hợp với bảng màu dài nhất như sau:
m/
( # paren 1 - a palindrome is either:
(.) # paren 2 - a character
(?1) # a palindrome as defined in paren 1
\2 # the same character as in paren 2
| # or:
.? # a 0- or 1-character string
)
$ # at end of string
/x
Sau đó, nó thay thế nó bằng chính nó ( $&
) và nối thêm bất cứ chuỗi nào bắt đầu bằng ( $`
), đảo ngược.
ẹ;AcB↔Bc
Hãy thử trực tuyến! Câu hỏi yêu cầu một chức năng, vì vậy tôi đã cung cấp một chức năng; liên kết TIO lấy một đối số chạy một chức năng như một chương trình đầy đủ.
ẹ;AcB↔Bc
ẹ Split {the input} into digits
;Ac Append {the shortest possible} list
B↔B to produce a palindrome
c then concatenate the resulting list of digits back into a number
chỉnh sửa: Rút ngắn dựa trên giải pháp @ gnibbler's
def p(n):s=str(n);r=s[::-1];l=len(s);return[int(s+r[l-i:])for i in range(l)if s[i:]==r[:l-i]][0]
Nguyên:
def p(n):
s=str(n);r=s[::-1];l=len(s)
for i in range(l):
if s[i:]==r[:l-i]:return int(s+r[l-i:])
n
.
s=n
giúp đỡ; Tôi cần s
phải là một chuỗi để tôi có thể đăng ký để có được phạm vi chữ số. Lý do ở đó là gì?
Dựa vào câu trả lời của Hoa :)
def p(n):s=str(n);r=s[::-1];l=len(s);return next(int(s+r[l-i:])for i in range(l)if s[i:]==r[:l-i])
return(...).next()
thường sẽ tốn thêm một char, nhưng tôi sẽ bỏ không gian sau return
. Dù sao đi nữa, Hoa đã cải thiện nó bằng cách sử dụng LC thay vì GE
f=->x{x=x.to_s.chars;99.times{|i|x.insert~i,x[i]if x!=x.reverse};x*''}
Dựa trên câu trả lời của BẠN , với các ký tự thay vì .split '' để đạt được 2 ký tự. Và tôi chắc chắn có cách để siết chặt hơn một chút> <
p=a=>{S=x=>x.split``.reverse();for(s=String(a),i=0;i<s.length;i++)if(x=s+S(s.substring(0,i)).join``,x==S(x).join``)return x}
Đã bình luận:
function palindrome(n){
s = String(n);
for(i=0;i<s.length;i++)
{
x=s+s.substring(0,i).split("").reverse().join("") //take first n characters, reverse and append to the end
if(x==x.split("").reverse().join("")) //is the number a palindrome?
return x;
}
}
x->{Function<String,String>r=t->new StringBuilder(t).reverse().toString();String y=r.apply(x),z=x;int m=x.length();while(!z.equals(r.apply(z)))z=x+y.substring(--m);return z;}
Ung dung:
x -> {
Function<String, String> r = t -> new StringBuilder(t).reverse().toString();
String y = r.apply(x), z=x;
int m = x.length();
while (!z.equals(r.apply(z))) z = x+y.substring(--m);
return z;
}
Tôi có cảm giác nó có thể chặt hơn rất nhiều nhưng nó không rõ ràng ngay lập tức với tôi như thế nào. Chức năng ngốn rất nhiều không gian nhưng tôi cần nó ở hai nơi.
Điều này hoạt động cho bất kỳ chuỗi, không chỉ số, và nó có thể là bất kỳ chiều dài.