아무도 제발!


20

나는 숫자를 절대적으로 싫어한다 1. 따라서 숫자를 "적절한 형식"으로 변환하는 데 도움이 필요합니다.

올바른 형식의 숫자 1는 행에 두 개의 숫자를 갖지 않습니다 . 101괜찮지 만 110끔찍합니다.

변환하려면 모든 부적절한 숫자를 건너 뛰고 정상적으로 계산하십시오. 예를 들어 ...

1 -> 1
2 -> 2
...
10 -> 10
11 -> 12
12 -> 13
...
108 -> 109
109 -> 120
110 -> 121
111 -> 122

등등.

프로그램은 정수를 가져 와서 올바른 형식으로 출력해야합니다. 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


1
입력에 상한이 있습니까?
lirtosiast

2
나는 109 -> 120변환을 얻지 못한다 ...
kirbyfan64sos

4
@ kirbyfan64sos 108은 109에 매핑되기 때문에 109는 110 인 다음 숫자에 매핑됩니다. 그러나 그 중 하나는 행에 두 개의 1이 있으므로, 그렇지 않은 숫자에 도달 할 때까지 다음 숫자로갑니다. 110-119가 모두 제외되므로 120입니다.
Reto Koradi

3
@Corey Ogburn binairy가 아닙니다. 목록의 각 숫자에 대해 no-11 규칙을 사용하여 주어진 숫자까지 계산할 때 숫자 목록이 어떻게 나타나는지보십시오.
LukStorms

2
@leymannx 왼쪽의 숫자는 시리즈의 숫자를 나타냅니다. 따라서 시리즈의 첫 번째 값은 1이고, 시리즈의 두 번째 값은 2, yadda yadda (랍스터 비스크), 시리즈의 10 번째 값은 10, 시리즈의 11 번째 값은 12입니다. talex는 그것을 주님 께 가증 한 것을 안다. 이 아이디어는 계속됩니다. 따라서 시리즈의 108 번째 값이 109이고 시리즈의 110 번째 값이 120 인 이유는 110에서 119까지 모든 항목 을 건너 뜁니다 .
23:35에

답변:



8

펄 5 , 34 바이트

카운터를 루핑하고 가끔 더블 1을 변경합니다.

map{$i++;$i=~s/11/12/}1..pop;say$i

테스트

$ perl -M5.012 -e 'map{$i++;$i=~s/11/12/}1..pop;say$i' 111
$ 122


6

Pyth, 13 11 바이트

e.f!}`hT`ZQ

@FryAmTheEggman 덕분에 2 바이트를 절약했습니다.

라이브 데모 및 테스트 사례.

13 바이트 버전

e.f!}"11"+ZkQ

컨텍스트 : Pyth , PythPyth .
Peter Mortensen

@PeterMortensen 세 번째는 여기에서 사용 된 Pyth와 관련이 없습니다. 실제로이 Pyth가 만들어지기 8 년 전입니다. Pyth는 Python에서 영감을 얻은 언어로 널리 알려진 이름입니다.
isaacg

5

자바 스크립트, 53 바이트

n=>[...Array(n*2).keys()].filter(a=>!/11/.test(a))[n]

대안 (이해 길이를 동일하게 사용) :

n=>[for(i of Array(n*2).keys())if(!/11/.test(i))i][n]

만나서 반가 웠지만이 작업에는 너무 과도합니다. codegolf.stackexchange.com/a/61594/21348
edc65

4

파이썬 2, 50

lambda n:[i for i in range(n*2)if'11'not in`i`][n]

포함하지 않은 숫자 11를 순서대로 나열하고 n하나를 취하는 익명 함수입니다 . 0 인덱싱의 일대일 오류 0는 목록에 포함되어 취소 됩니다.

이론적으로 이것은 충분히 높은 숫자에 대해서는 실패 f(n)>2*n하지만 n적어도이 때까지는 일어나지 않아야합니다 10**50.


51 바이트 :

n=input();i=0
while n:i+=1;n-='11'not in`i`
print i

없는 숫자 i의 할당량 이 충족 될 때 까지 숫자를 계산합니다 .n11

한 번에 한 번의 수정이 필요하기 때문에 기능의 길이는 같습니다.

f=lambda n,i=0:n+1and f(n-('11'not in`i`),i+1)or~-i

3

파이썬 3 74

여전히 약간의 골프가 필요합니다.

n=int(input())
c=0
for x in ' '*n:
 c+=1
 while'11'in str(c):c+=1
print(c)

지금은 꽤 무력한 힘입니다.


2

펄 5, 47 바이트

@_[$_]=++$i!~/11/?$i:redo for 1..<>;print$_[-1]

2

자바 스크립트 (ES6) 41

익명의 기능으로

n=>eval('for(i=0;/11/.test(++i)||n--;)i')

참고 : 가장 간단한 방법은 44입니다.

n=>{for(i=0;/11/.test(i)||n--;i++);return i}

아래 스 니펫을 테스트하십시오.

f=n=>eval('for(i=0;/11/.test(++i)||n--;)i')

alert(f(+prompt('Enter number')))


2

하스켈, 51 바이트

([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!)

사용 예 : ([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!) 110-> 121.

작동 방식 :

[x|x<-[0..]                                   ]    -- take all x starting with 0
           ,                                       -- where
                   ('1','1')                       -- the pair of two chars '1'
            notElem                                -- is not part of
                             zip=<<tail            -- the list of pairs of neighbor elements of
                                        show x     -- the string representation of x
                                               !!  -- take nth element, where n is the parameter

1

MUMPS, 37 바이트

t(i) f j=1:1 s:j'[11 k=k+1 q:k=i
    q j

꽤 직설적 인. 여기에 전용 "흥미로운"것은 구조입니다 j'[11- '[즉 있도록 "가 포함되어 있지 않습니다"연산자 "abc"'["ab"거짓이고 "abc"'["cd"사실이다. 두 피연산자가 모두 j'[11숫자 임에도 불구하고 MUMPS는 그대로 유지됩니다. 두 피연산자를 모두 문자열로 자동 강제 변환하고 수명을 다할 것입니다. 만세!

(우연히 프로그램을 종료하지 않아도 괜찮다면 35 바이트로 줄일 수 있습니다. t2(i) f j=1:1 s:j'[11 k=k+1 w:k=i j)


0

PHP, 43 바이트

while(preg_match('/11/',$i)){$i++;}print$i;

-1

루비, 24 바이트

작업을 잘못 해석하여 나중에 다시 작업합니다!

$><<gets.gsub('11','12')

를 포함하지 않는 입력에서는 작동하지 않습니다 11. 예를 들어, not을 12제공해야합니다 . 1312
DLosc

@DLosc 오 세상에 나는 그 일을 잘못 해석했다! 나중에 다시 작업하겠습니다!
Peter Lenkefi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.