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


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.