숫자를 바꾸는 가장 짧은 방법


31

단일 정수 값 인수를 허용하는 함수 (또는 동등한 서브 프로그램)를 작성하고 인수의 10 자리 숫자의 순서를 반대로하여 찾은 (유사한 유형) 값을 리턴하십시오.

예를 들어 76543은 34567을 반환합니다.


6
숫자가 문자열 인 시간으로 되돌아 간 다음 문자열을 되
— 돌리십시오

2
"가장 짧은 알고리즘"이라는 개념은 특히 "모든 언어"를 허용 할 경우 다소 특이합니다. 알고리즘을 생각해 보면 적절한 "~"연산자를 사용하여 DSL을 제공 할 것입니다.

3
주의 사항 : 0으로 끝나는 숫자는 반대로 할 때 더 짧은 자릿수가됩니다.
— powtac

44
전혀 시간 이 걸리지 않지만 회문 숫자에서만 작동 하는 알고리즘을 알고 있습니다.)
— schnaader

다시 써야 할 시간을 찾았습니다. 나는 이것이 엘튼 드가 포즈를 취한 퍼즐로 남아 있기를 바랍니다.
— dmckee

답변:


85

HTML 21 7 문자 (건방진 경우 1 문자 ...)

‮n

n당신의 번호로 교체


1
이것은 평범한 천재입니다. 나는 하나의 문자를 갈 것입니다. 또는 2, UTF-16으로 2 바이트로 인코딩 할 때 : P
— tomsmeding

17
하하하 그 태그에 대해 Google 검색을 수행하여 보상을 받았습니다 Your search -‮ . 어떤 문서와도 일치하지 않습니다.
— JoeFish

: U 브라우저에서이 링크를 시도해 볼 수도 있습니다data:text/html,&%238238;egnahcxEkcatS olleH
— F. 하우리

3
구글 에서 재미 있음 도 번역 합니다. @JoeFish : 복제 할 수 없습니다. 링크를 게시하십시오!
— F. 하우리

1
@JoeFish 댓글을 보면 사용자 이름이 바뀌고 그 뒤에 텍스트가 있습니다. emtxet emos si ereH
— Stefnotch

32

파이썬

int(str(76543)[::-1])

편집하다:

@gnibbler가 제안한 더 짧은 솔루션 :

int(`76543`[::-1])

또는 위의 내용이 명확하지 않은 경우 :

x=76543
int(`x`[::-1])

4
s[::-1]보다 빠른 속도''.join(reversed(s))
— riza

4
대신 str을 사용하는 (에 repr에 대한) 역 따옴표를 사용할 수 있습니다
— gnibbler을

@gnibbler 제안 해 주셔서 감사합니다. 내 답변을 업데이트했습니다.
— Vader

2
TBH, 그것은 함수 / 절차 / 호출하려는 것이 아니며 사양에 필요합니다.
— 토머스 에딩

또한, 그것은 가치도 받아들이지 않습니다 ...
— Exelian

28

범용 (언어 불가지론 / 독립적 )

숫자 만 사용 하고 (숫자를 문자열로 변환 하지 마십시오 ) 특정 라이브러리 를 사용 하지 않으려는 경우 (모든 언어에 보편적 인) :

x = 76543 # or whatever is your number
y = 0
while x > 0:
    y *= 10
    y += ( x %10 )
    x /= 10 # int division 

이것은 파이썬이지만 수학 방법 일뿐이므로 모든 언어로 수행 할 수 있습니다.


당신이 바꿀 경우 mod에 %, 그것은 유효한 파이썬의)
— phihag

당신은 맞습니다, 실제로 :) 10x

3
가장 짧지는 않지만 가장 일반적이며 보편적입니다.
— Kiril Kirov

3
y=y*10+x%10....
— st0le

1
BrainFuck은 계산할 수 없지만 계산할 수는 없습니다. 이 언어가없는 언어는 a - (n * int(a/n))대신 사용할 수 있습니다 a mod n. 또한 여기 를 보면 모듈러스 연산이 모든 언어에서 다르게 구현됩니다. (오른쪽 표 참조)
— mbomb007

13

펄 6

+$n.flip

또는:

$n.flip

동적으로 입력 된 코드

언어 디자인으로 인해 숫자에 문자열 메서드가 있습니다.


10

J-6 자 + 변수

".|.":y

여기서 y는 귀하의 가치입니다.


2
함수로서 : |.&.":" 역할을한다 "는 작업의 문자 그대로의 번역입니다.
— FireFly


8

PHP, 9 자

(int)strrev(123);

N상수가있는 곳에서 짧게하려면 :

strrev(N)

8

펀지 (3 자)

완전한 실행 가능한 프로그램 :

N.@

N전화 번호는 어디에 있습니까 ? 규칙은 " 단일 정수 값 인수를 허용 합니다 "라고 말합니다 . Befunge에서는 0에서 9까지의 정수만 입력 할 수 있습니다.


3
그것들은 유일한 리터럴 이지만 다른 숫자는 분명히 표현 될 수 있습니다. 그렇지 않으면 빈 답을 가진 Brainfuck이 이길 것입니다. ;-)
— FireFly

8

언어 독립적 / 수학

Kiril Kirov의 답변에서 영감을 얻었습니다. 나는 숫자를 뒤집는 수학적 특성에 대해 궁금해서 조금 조사하기로 결정했습니다.

일부 base에서 n - rev(n)자연수 의 차이 를 플로팅하면 다음 과 같은 패턴이 나타납니다 ( , for , 열로 감싸서 빨간색은 음수를 나타냅니다).nr(n - rev(n)) / (r - 1)r=10r

차이점 표

이 시퀀스는 다음과 같이 생성 될 수 있습니다 (의사 코드).

for i=1 to r:
  output 0

for m=0, 1, …
  for k=1 to (r-1):
    for d=1 to r^m:
      for i=0 to (r-1):
        output (r-1) * (r+1)^m * (k - i)

이 값을 목록 / 배열에 저장 n - arr[n]하면의 반대 형식을 얻을 수 있습니다 n. 이제 수학적으로 "수학적으로 골프를 치기"위해서는 시퀀스에서 n : 번째 값을 제공하는 닫힌 형태의 표현이 이상적이므로 전체 작업을 해결하기위한 닫힌 형태의 표현을 가질 수 있습니다. 불행히도, 나는 그런 표현을 찾을 수 없었지만 가능할 것 같습니다. :(

수학적으로 호기심이 많은 코드 골프는 아니지만 위의 시퀀스에 닫힌 형식의 표현이 있으면 실제로 PL 골프 제출에 유용 할 수 있습니다.


7

하스켈, 28 24 자

f=read.reverse.show.(+0)

2
어때요 f=read.reverse.show.(+0)?
— FUZxxl

2
(+0): 합법적 인 사람! 비록 기술적으로 당신이 필요하지 않은 .(+0)로, 전혀를 f문제가 요구하는 것보다 더 많은 다형성 것 ( '유사 입력'결과를 반환 할 수있다). 나는 그 5자를 깎을 것이다.
— Thomas Eding

7

정력

17 자

:se ri<CR>C<C-R>"

vim에 직접 명령을 입력하면 10 자 (키 입력)라고 말하고 싶습니다. Btw, 오늘 vim에서 새로운 것을 배웠습니다. 감사합니다 :)
— daniero

6

스칼라-33 문자

def r(a:Int)=(a+"").reverse.toInt

1
scala의 경우 +1, python / ruby ​​/ perl 이외의 것을 볼 수있어 기쁘다
— lhk

음수 Int에서 실패합니다. -123은 -321을 반환해야 함
— samach

6

루비 (14)

x = 13456
x.to_s.reverse

3
"아니오"는 정의되어 있지 않습니다. 나는 당신이 거기에 "x"를 넣을 생각이었다.
— David Rivers

3
123456.to_s.reverse가 더 짧습니다.
— Steffen Roller

@mmdemirbas - 오타 수정 주셔서 감사합니다
— 훌륭 했어

3
할 필요가 .to_s.reverse.to_i사양을 준수 할 수 있습니다.
— histocrat

0으로 시작하는 숫자가 작동하지 않는 것 같습니다. 0112.to_s.reverse.to_i => 47
— Joel

5

숫자를 문자열로 변환 한 다음 문자열을 뒤집은 다음 해당 문자열을 다시 숫자로 변환 할 수 있습니다. 이러한 종류의 기능은 모든 언어로 제공 될 수 있습니다. 더 수학적 방법을 찾고 있다면 다음과 같이 도움이 될 수 있습니다.

int n = 76543;
int r = 0;

while (n > 0) {
    r *= 10;
    r += n % 10;
    n /= 10;
}

5
광산은 절대적으로 동일합니다 (:

예, 차이점은 코드가 Python처럼 보입니다.

이 방법 오버플로는 정밀도가 제한적인 언어에서 사용됩니다. 시도1111111119
— st0le

5

파이썬 3+

기능 형태 : 28 자

r=lambda i:int(str(i)[::-1])

(서브) 프로그램 형식 : 25 자

print(input()[::-1])

다른 Python 예제 중 일부는 하드 코딩 된 입력을 사용하거나 요구 사항을 완전히 충족시키지 못하여 부정 행위이거나 적어도 저렴하다고 생각합니다.


5

골프 스크립트, 5 자

`-1%~

스택에 인수를 사용하여 스택에 결과를 남깁니다. 나는 사양에서 "서브 프로그램"옵션을 이용하고 있습니다. 함수를 고집하면 스택에 4 문자가 더 남습니다.

{`-1%~}:r

나는 당신이 `-1%~오히려 의미를 가져야한다고 생각합니다 `-1$~(그리고 나는 그렇게 말하기 위해 당신의 대답을 자유롭게 편집했습니다).
— Ilmari Karonen

5

쉘 스크립팅에서 :

  echo "your number"|rev

이것이 도움이 되었기를 바랍니다 :)


좋은 것! 배쉬도 그럴 수 있다는 것을 몰랐다!
— Pranit Bauva

1
기술적으로 는 비슷한 유형의 "숫자"를 반환 한다고 생각합니다 rev<<<yournumber. 예를 들어 rev<<<132(POSIX가 아닌 bash / zsh의 경우)
— FireFly

1
다만 rev문제는이 말을하지 않습니다, 충분 이 함수가 될 수 있습니다. rev내장 함수가 아닌 경우에도 내장 함수와 비교할 수 있습니다.
— nyuszika7 시간

'rev'는 내장 된 것이 아니라 외부 프로그램 호출입니다.
— Bastian Bittorf

67 바이트 순수 POSIX 셸 : X = $ 1; [$ X! = 0]; do Y = $ ((Y * 10 + X % 10)); X = $ ((X / 10)); 완료; 에코 $ Y
— 바스티안 비 토프

3

늦었지만

APL, 3

⍎⌽⍞

기능을 고집한다면

⍎∘⌽∘⍕

위의 사본을 찾을 수없는 것 같습니다 ... (두 번째 페이지에 있기 때문에)
— TwiNight

슬프다. 아무도 brainfu * k 또는 공백 솔루션을 제공하지 않았다. ((한 번 더 투표하면 첫 페이지에 있음)
— Kiril Kirov

@KirilKirov 나는 brainfu * k 솔루션을 가지고 있습니다 : codegolf.stackexchange.com/a/32826/24829
— rpax

3

수학, 14 바이트

IntegerReverse

이 기능은 지난 주 10.3 릴리스에서만 추가 되었기 때문에 경쟁하지는 않지만 완벽을 기하기 위해이 작업에 내장 된 유일한 (제 생각에는?)을 추가 할 것이라고 생각했습니다.


2

Java에서 다음을 수행 할 수 있습니다. 이것은 String으로 변환하고 다시 수학적인 솔루션이 아닙니다.

public class test {
    public static int reverseInt(int i) {
        return Integer.valueOf((new StringBuffer(String.valueOf(i))).reverse().toString());
    }

    public static void main(String[] args) {
        int i = 1234;
        System.out.println("reverse("+i+") -> " + reverseInt(i));
    }
}

2
수학적 솔루션입니다. 수학은 숫자가 아니며 산술이 아닙니다. 수학은 또한 일련의 기호를 다룹니다. 그리고이 특별한 경우, 문자열로의 변환은 10 진법으로의 변환입니다.
— R. Martinho Fernandes

"수학적 해결책이 아니라"는 우리 스스로 수학을하지 않는다는 것입니다. 방법은 우리를 위해 모든 파싱과 수학을 수행하고 있습니다. 예를 들어 Kiril Kirov의 대답과 반대입니다.
— Victor

오버플로 것입니다 ...
— st0le

2

루아

숫자와 문자열은 서로 바꿔서 사용할 수 있습니다.

string.reverse(12345)

2

이것은 나머지 일부와 달리 실제로 입력을받습니다.

print`input()`[::-1]

파이썬 btw.


2

액션 스크립트

43 자 함수의 매개 변수로 num :

num.toString().split('').reverse().join('')

2

그루비

r={"$it".reverse() as BigDecimal}

assert r(1234) == 4321
assert r(345678987654567898765) == 567898765456789876543
assert r(345346457.24654654) == 45645642.754643543

2

펄, 11 자

p카운트에 포함 된 플래그가 작동하려면 이 플래그가 필요합니다.

용법:

$ echo 76543 | perl -pE '$_=reverse'

나는 10 개의 문자를 세었다
— F. Hauri

이 p깃발은 카운트에 포함됩니다
— Zaid

2

클로저 (42 문자)

#(->> % str reverse(apply str)read-string)

사용법 예 :

(#(->> % str reverse(apply str)read-string) 98321)

12389를 반환


2

일반 리스프-60 자

(first(list(parse-integer(reverse(write-to-string '4279)))))

당신에게 9724를 얻을 것이다.


왜 (first(list? parse-integer이미 숫자를 반환합니다.
— Florian Margaine

2

K, 3 바이트 :

.|$

문자열 ( ) 로 캐스팅 .의 역순 ( |)을 평가하십시오 ( $).

사용 예 :

  .|$76543
34567

2

rs , 20 바이트

#
+#(.*)(.)/\2#\1
#/

엄밀히 말하면 이것은 계산에 포함되지 않지만 (rs는 올해 초에 만들어졌습니다) 다른 정규 표현식 기반 답변을 보지 못했고 이것이 깔끔하다고 생각했습니다.

라이브 데모.

설명:

#

문자열의 시작 부분에 파운드 문자를 삽입하십시오. 마커로 사용됩니다.

+#(.*)(.)/\2#\1

문자가 남지 않을 때까지 메인 문자열의 마지막 문자를 마커 앞 영역에 계속해서 추가합니다.

#/

마커를 제거하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.