Ніхто, будь ласка!


20

Я абсолютно ненавиджу цифру 1. Отже, мені потрібна ваша допомога для перетворення чисел у їх "належні форми".

Числа в належній формі ніколи не мають двох 1s підряд. 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-х рядів, тож він переходить до наступного числа, поки не досягне того, якого немає. Що становить 120, оскільки всі 110-119 виключені.
Рето Коради

3
@Corey Ogburn Справа не в бінарній справі. Подивіться на те, як
складеться

2
@leymannx Число зліва представляє число в серії. Отже, перше значення в серії - 1, друге значення в серії - 2, ядда ядда (омара біскві), десяте значення в серії 10, а одинадцяте значення в серії 12, тому що ми пропустили 11 як Талекс вважає це гидотою для пана. Ця ідея продовжується, отже, чому 108-е значення в серії дорівнює 109, а 110-е значення в серії - 120, оскільки ми пропускаємо все від 110 до 119. Сподіваюся, я досить уточнив.
ahall

Відповіді:



8

Perl 5 , 34 байт

Замикання лічильника та зміна випадкових подвійних.

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

Збережено 2 байти завдяки @FryAmTheEggman.

Демонстраційні демонстраційні та тестові приклади.

13-байтна версія

e.f!}"11"+ZkQ

Контекст: Pyth , Pyth і Pyth .
Пітер Мортенсен

@PeterMortensen Третій не має відношення до використовуваного тут Pyth - це вже за 8 років до створення цього Pyth. Pyth - просто популярна назва для мов, натхнених Python.
isaacg

5

JavaScript, 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по порядку, і приймає nth. Повторна помилка нульової індексації скасовується із включенням 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до тих пір, поки квота nчисел без 11буде виконана.

Функція має однакову довжину через необхідні поправки один за одним.

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

JavaScript (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

Haskell, 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

МУМПА, 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)



-1

Рубін, 24 байти

Помилково витлумачив завдання, пізніше переробимо!

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

Не працює на входах, які не містять 11. Наприклад, 12слід давати 13, а не 12.
DLosc

@DLosc О боже, я неправильно трактував завдання! Я перероблю це пізніше!
Пітер Ленкефі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.