Tolong, jangan salah!


20

Saya benar-benar membenci digit 1. Jadi, saya butuh bantuan Anda untuk mengonversi angka ke "formulir yang tepat".

Angka dalam bentuk yang benar tidak pernah memiliki dua 1s berturut-turut. 101tidak apa-apa, tapi 110mengerikan.

Untuk mengkonversi, lewati saja semua angka yang tidak tepat dan hitung secara normal. Contohnya...

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

dan seterusnya.

Program Anda harus mengambil bilangan bulat dan mengeluarkannya dalam bentuk yang benar. Ini adalah , jadi kode terpendek dalam byte menang.


1
Apakah ada batas atas pada input?
lirtosiast

2
Saya tidak mendapatkan 109 -> 120konversi ...
kirbyfan64sos

4
@ kirbyfan64sos Sejak 108 peta ke 109, 109 akan memetakan ke nomor berikutnya, yaitu 110. Tapi yang satu memiliki dua 1s berturut-turut, jadi ia pergi ke nomor berikutnya hingga mencapai satu yang tidak. Yaitu 120, karena semua 110-119 dikecualikan.
Reto Koradi

3
@Corey Ogburn Ini bukan tentang binairy. Lihat seperti bagaimana daftar angka ketika Anda menghitung hingga angka yang diberikan dengan aturan no-11 untuk setiap angka dalam daftar
LukStorms

2
@leymannx Angka di sebelah kiri mewakili angka dalam seri. Jadi nilai pertama dalam seri adalah 1, nilai kedua dalam seri adalah 2, yadda yadda (lobster bisque), nilai kesepuluh dalam seri adalah 10, dan nilai kesebelas dalam seri adalah 12, karena kami melewatkan 11 sebagai talex menemukannya kekejian bagi tuan. Gagasan ini terus berlanjut, maka mengapa nilai 108 dalam seri adalah 109, dan nilai ke-110 dalam seri adalah 120, karena kami melewati semuanya dari 110 hingga 119. Semoga saya cukup jelas.
ahall

Jawaban:



8

Perl 5 , 34 Bytes

Looping counter dan sesekali ganti double-one.

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

Uji

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



5

JavaScript, 53 byte

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

Alternatif (menggunakan pemahaman, panjang yang sama):

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

Senang melihat, tetapi terlalu banyak melakukan tugas ini. 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]

Fungsi anonim yang mencantumkan nomor yang tidak 11berurutan, dan mengambil yang nke tiga. Kesalahan off-by-one dari pengindeksan nol dibatalkan dengan dimasukkannya 0dalam daftar.

Secara teori, ini akan gagal untuk jumlah yang cukup tinggi di mana f(n)>2*n, tetapi ini seharusnya tidak terjadi sampai nsetidaknya 10**50.


51 byte:

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

Menghitung angka isampai kuota nangka tanpa 11terpenuhi.

Suatu fungsi memiliki panjang yang sama karena diperlukan koreksi satu per satu.

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

3

Python 3 74

Masih perlu sedikit bermain golf.

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

Ini kekuatan yang sangat kasar sekarang.


2

Perl 5, 47 byte

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

2

JavaScript (ES6) 41

Sebagai fungsi anonim

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

Catatan: cara paling sederhana adalah 44:

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

Tes menjalankan cuplikan di bawah ini.

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

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


2

Haskell, 51 byte

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

Contoh penggunaan: ([x|x<-[0..],notElem('1','1')$zip=<<tail$show x]!!) 110-> 121.

Bagaimana itu bekerja:

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

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

Cukup mudah. Satu-satunya hal yang "menarik" di sini adalah konstruk j'[11- '[adalah operator "tidak mengandung", jadi itu "abc"'["ab"salah dan "abc"'["cd"benar. Meskipun kedua operan j'[11menjadi angka, MUMPS tetap tidak terganggu. Ini akan dengan senang hati melakukan autocommerce baik operan ke string dan melanjutkan hidupnya. Hore!

(Kebetulan, jika Anda baik-baik saja dengan program ini tidak pernah mengakhiri, kita dapat mempersingkat ini untuk 35 byte: t2(i) f j=1:1 s:j'[11 k=k+1 w:k=i j)


0

PHP, 43 byte

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

-1

Ruby, 24 byte

Tugas yang disalahartikan, akan dikerjakan ulang nanti!

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

Tidak bekerja pada input yang tidak mengandung 11. Misalnya, 12harus memberi 13, bukan 12.
DLosc

@Dosc. Ya ampun, saya salah mengartikan tugas! Saya akan mengerjakannya lagi nanti!
Peter Lenkefi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.