숫자 회문 만들기 함수를 작성하십시오. 숫자는

숫자를 인수로 사용하고 최소 자릿수를 추가하여 회문으로 만드는 함수를 작성하십시오. 숫자는 최대 100 자리입니다.

Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101


답변

J, 50 , 32 26 자!

f=:{.@(,"1(-:|.)\.#|.@}:\)

예 :

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

답변

펄, 32 자

s/((.)(?1)\2|.?)$/$&.reverse$`/e

정규식 기능에는 Perl 5.10 이상이 필요하지만 특수 명령 줄 스위치는 필요하지 않습니다.

샘플 사용 :

$ perl -pe 's/((.)(?1)\2|.?)$/$&.reverse$`/e' << EOT
> 12
> 232
> 2323
> 1012121
> EOT
121
232
23232
101212101

Perl 5.10의 재귀 정규 표현식 확장을 사용하여 가장 긴 후행 회문과 일치시킵니다.

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

그런 다음 $&문자열 을 자체 ( ) 로 바꾸고 문자열 (( $`)로 시작하는 모든 것을 역순으로 추가합니다.


답변

Brachylog 2, 8 바이트, 언어 날짜 도전 과제

ẹ;AcB↔Bc

온라인으로 사용해보십시오! 질문은 기능을 요구하기 때문에 하나를 제공했습니다. TIO 링크는 전체 프로그램처럼 함수를 실행하는 인수를 사용합니다.

설명

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

답변

파이썬, 88 자

def f(x):
 x,y=list(str(x)),[]
 while x!=x[::-1]:y+=x.pop(0)
 return''.join(y+x+y[::-1])

답변

파이썬 ( 101 96)

편집 : @gnibbler의 솔루션에 따라 단축

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]

기발한:

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:])

답변

파이썬-98 자

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])