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.


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

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




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

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.


2

Perl 5, 47 bajtów

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

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


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

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)



-1

Rubinowy, 24 bajty

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.