Никто, пожалуйста!


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 Это не о бинарии. Посмотрите, как будет выглядеть список чисел, если вы подсчитаете до заданного числа с правилом № 11 для каждого числа в списке
LukStorms

2
@leymannx Число слева представляет номер в серии. Таким образом, первое значение в ряду равно 1, второе значение в ряду равно 2, yadda yadda (лобстер-бисквит), десятое значение в ряду равно 10, а одиннадцатое значение в ряду равно 12, потому что мы пропустили 11 как Талекс считает это мерзостью для Господа. Эта идея продолжается, следовательно, почему 108-е значение в ряду равно 109, а 110-е значение в ряду - 120, так как мы пропускаем все со 110 до 119. Надеюсь, я достаточно хорошо разъяснил.
35

Ответы:



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.
Исаак

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

Python 2, 50

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

Анонимная функция, которая перечисляет номера, не содержащие 11в порядке, и принимает nодин. Непостоянная ошибка нулевой индексации отменяется при включении 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

Python 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

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)



-1

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

Неправильно истолковал задачу, буду переделывать позже!

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

Не работает на входах, которые не содержат 11. Например, 12должен дать 13, а не 12.
DLosc

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