Proszę nikt!

20

Absolutnie nienawidzę cyfry 1. Potrzebuję twojej pomocy w konwersji liczb na ich „właściwe formularze”.

Liczby w odpowiedniej formie nigdy nie mają dwóch 1s z rzędu. 101jest w porządku, ale 110jest ohydne.

Aby przekonwertować, po prostu pomiń wszystkie niepoprawne liczby i policz normalnie. Na przykład...

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

i tak dalej.

Twój program powinien przyjąć liczbę całkowitą i wyprowadzić ją w odpowiedniej formie. To jest , więc wygrywa najkrótszy kod w bajtach.

bajk
źródło
1
Czy na wejściu jest górna granica?
lirtosiast
2
Nie dostaję 109 -> 120konwersji ...
kirbyfan64sos,
4
@ kirbyfan64sos Ponieważ 108 odwzorowuje na 109, 109 odwzorowuje na następny numer, czyli 110. Ale ten ma dwa 1 z rzędu, więc przechodzi do następnego numeru, dopóki nie osiągnie tego, który nie. Który wynosi 120, ponieważ wszystkie 110-119 są wykluczone.
Reto Koradi,
3
@Corey Ogburn Nie chodzi o binairy. Zobacz, jak wyglądałaby lista liczb, jeśli
policzysz
2
@leymannx Liczba po lewej stronie reprezentuje liczbę w serii. Tak więc pierwsza wartość w szeregu to 1, druga wartość w szeregu to 2, yadda yadda (homar bisque), dziesiąta wartość w szeregu to 10, a jedenasta wartość w szeregu to 12, ponieważ pominęliśmy 11 jako talex uważa to za obrzydliwość dla pana. Pomysł ten jest kontynuowany, dlatego 108. wartość w serii wynosi 109, a 110. wartość w serii to 120, ponieważ pomijamy wszystko od 110 do 119. Mam nadzieję, że wyjaśniłem to wystarczająco dobrze.
ahall

Odpowiedzi:

8

Burleska , 10 bajtów

{11 ~ [n!} FO

Starsza wersja:

ro{11~[n!}f[

ro{Sh"11"~=n!}f[
mroman
źródło
Dodaj link do języka :)
mınxomaτ
gotowy. Jest już od 2012 roku, jest też artykuł na temat RosettaCode i esowiki.
mroman
8

Perl 5 , 34 bajtów

Zapętlanie licznika i zmienianie okazjonalnego double-one.

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

Test

$ perl -M5.012 -e 'map{$i++;$i=~s/11/12/}1..pop;say$i' 111
$ 122
LukStorms
źródło
7

Narzędzia Bash + GNU, 36

seq $1$1|grep -v 11|sed -n "$1{p;q}"
Cyfrowa trauma
źródło
Z pewnością 1$1wystarczy, niż $1$1?
Neil
6

Pyth, 13 11 bajtów

e.f!}`hT`ZQ

Zaoszczędź 2 bajty dzięki @FryAmTheEggman.

Prezentacje na żywo i przypadki testowe.

Wersja 13-bajtowa

e.f!}"11"+ZkQ
kirbyfan64sos
źródło
Kontekst: Pyth , Pyth i Pyth .
Peter Mortensen
@PeterMortensen Trzeci nie ma związku z używanym tutaj Pythem - tak naprawdę minęło 8 lat, zanim ten Pyth został stworzony. Pyth to popularna nazwa języków inspirowanych Pythonem.
isaacg
5

JavaScript, 53 bajty

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

Alternatywnie (przy użyciu wyrażeń o tej samej długości):

n=>[for(i of Array(n*2).keys())if(!/11/.test(i))i][n]
Mwr247
źródło
Miło to widzieć, ale przesada w tym zadaniu. codegolf.stackexchange.com/a/61594/21348
edc65
4

Python 2, 50

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

Anonimowa funkcja, która wyświetla liczby niezawierające 11po kolei, i bierze tę n. Błąd „zero-by-one” przy zerowaniu indeksowania anuluje się po włączeniu 0do listy.

Teoretycznie nie powiedzie się to w przypadku wystarczająco wysokich liczb f(n)>2*n, ale nie powinno to się zdarzyć, dopóki nprzynajmniej nie będzie 10**50.


51 bajtów:

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

Zlicza liczby, idopóki nie zostanie przekroczony przydział nliczb bez 11.

Funkcja ma tę samą długość z powodu koniecznych korekt indywidualnych.

f=lambda n,i=0:n+1and f(n-('11'not in`i`),i+1)or~-i
xnor
źródło
3

Python 3 74

Nadal potrzebuję trochę gry w golfa.

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

Teraz jest dość brutalna siła.

Morgan Thrapp
źródło
2

Perl 5, 47 bajtów

@_[$_]=++$i!~/11/?$i:redo for 1..<>;print$_[-1]
msh210
źródło
2

JavaScript (ES6) 41

Jako funkcja anonimowa

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

Uwaga: najprostszym sposobem byłoby 44:

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

Przetestuj poniższy fragment kodu.

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

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

edc65
źródło
2

Haskell, 51 bajtów

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

Przykład użycia: ([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!) 110-> 121.

Jak to działa:

[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
nimi
źródło
1

MUMPS, 37 bajtów

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

Całkiem proste. Jedyną „interesującą” rzeczą jest tutaj konstrukcja j'[11- '[operator „nie zawiera”, więc "abc"'["ab"jest to fałsz i "abc"'["cd"prawda. Pomimo obu argumentów j'[11bycia liczbami, MUMPS pozostaje nienaruszony. Z radością będzie automatycznie ustawiać oba operandy na sznurkach i kontynuować życie. Brawo!

(Nawiasem mówiąc, jeśli jesteś w porządku z programu nigdy nie kończące możemy skrócić to do 35 bajtów: t2(i) f j=1:1 s:j'[11 k=k+1 w:k=i j)

senshin
źródło
0

PHP, 43 bajty

while(preg_match('/11/',$i)){$i++;}print$i;
leymannx
źródło
-1

Rubinowy, 24 bajty

Źle zinterpretowane zadanie, przeróbka później!

$><<gets.gsub('11','12')
Peter Lenkefi
źródło
Nie działa na wejściach, które nie zawierają 11. Na przykład 12powinien dać 13, nie 12.
DLosc
@DLosc O rany, źle zinterpretowałem to zadanie! Przerobię to później!
Peter Lenkefi