Kimse lütfen!


20

Rakamdan kesinlikle nefret ediyorum 1. Yani, sayıları "doğru formlarına" dönüştürmek için yardımınıza ihtiyacım var.

Doğru formdaki sayılar hiçbir zaman 1arka arkaya iki s içermez. 101tamam, ama 110iğrenç.

Dönüştürmek için, tüm uygunsuz sayıları atlayın ve normal olarak sayın. Örneğin...

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

ve bunun gibi.

Programınız bir tamsayı almalı ve uygun biçimde çıktı almalıdır. Bu , bayt en kısa kod kazanır.


1
Girdi üzerinde bir üst sınır var mı?
lirtosiast

2
109 -> 120Dönüşümü alamıyorum ...
kirbyfan64sos

4
@ kirbyfan64sos 108'den 109'a eşleştiği için, 109 bir sonraki sayıya eşlenir, ki bu 110'dur. Ancak bu sırada art arda iki tane 1 vardır, bu yüzden olmayana ulaşana kadar bir sonraki sayıya gider. 110-119'un tamamı hariç tutulduğu için 120'dir.
Reto Koradi

3
@Corey Ogburn Binairy ile ilgili değil. Listedeki her sayı için no-11 kuralı ile verilen sayıya kadar saydığınızda sayıların bir listesi olarak görün
LukStorms

2
@leymannx Soldaki sayı serideki sayıyı temsil eder. Yani serinin ilk değeri 1, serinin ikinci değeri 2, yadda yadda (ıstakoz bisque), serinin onuncu değeri 10 ve serinin onbirinci değeri 12'dir, çünkü 11'i atladık talex onu efendiye iğrenç bulur. Bu fikir devam ediyor, bu yüzden serideki 108. değer 109 ve serideki 110. değer 120'dir, çünkü her şeyi 110'dan 119'a atlıyoruz . Umarım yeterince iyi açıkladım.
ahall

Yanıtlar:



8

Perl 5 , 34 Bayt

Bir sayacı döngü ve ara sıra çift olanı değiştirme.

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

Ölçek

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

7

Bash + GNU araçları, 36

seq $1$1|grep -v 11|sed -n "$1{p;q}"

Kesinlikle 1$1yeterli değil, yeterli $1$1mi?
Neil


5

JavaScript, 53 bayt

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

Alternatif (anlayışları kullanarak, aynı uzunlukta):

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

Görmek güzel, ama bu görev için abartılı. 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]

Listeleri sayılar içermeyen bu isimsiz fonksiyon 11sırayla ve alır ninci biri. Sıfır indekslemenin tek tek hatası 0, listeye dahil edildiğinde iptal edilir .

Teoride, bu yeterince yüksek sayılar için başarısız olacaktır f(n)>2*n, ancak bu nen azından olana kadar olmamalıdır 10**50.


51 bayt:

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

Olmayan sayılar ikotası karşılanıncaya kadar sayıları sayar .n11

Bir işlev, gerekli tek tek düzeltmeler nedeniyle aynı uzunluktadır.

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

3

Python 3 74

Yine de biraz golf gerek.

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

Şu anda oldukça kaba kuvvet.


2

Perl 5, 47 bayt

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

2

JavaScript (ES6) 41

Anonim bir işlev olarak

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

Not: en basit yol 44 olacaktır:

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

Aşağıdaki pasajı çalıştırmayı test edin.

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

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


2

Haskell, 51 bayt

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

Kullanım örneği: ([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!) 110-> 121.

Nasıl çalışır:

[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 bayt

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

Oldukça açık. Burada tek "ilginç" şey yapı j'[11- '["içermez" operatörü, bu yüzden "abc"'["ab"yanlış ve "abc"'["cd"doğrudur. Her iki j'[11sayının da işlenmesine rağmen , MUMPS bozulmadan kalır. Her iki işleneni de dizelere otomatik olarak zorlar ve hayatına devam eder. Yaşasın!

(Program asla sonlandırma için sorun değil eğer arada, biz 35 bayt bu kısaltabilir: t2(i) f j=1:1 s:j'[11 k=k+1 w:k=i j)


0

PHP, 43 bayt

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

-1

Yakut, 24 bayt

Görevi yanlış yorumladı, daha sonra tekrar çalışacak!

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

İçermeyen girdiler üzerinde çalışmaz 11. Örneğin, 12vermemeli 13, vermemeli 12.
DLosc

@DLosc Oh tanrım Görevi yanlış yorumladım! Daha sonra tekrar çalışacağım!
Peter Lenkefi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.