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.

talex
sumber
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

Burlesque , 10 byte

{11 ~ [n!} FO

Versi yang lebih lama:

ro{11~[n!}f[

ro{Sh"11"~=n!}f[
mroman
sumber
Silakan tambahkan tautan bahasanya :)
mınxomaτ
selesai Sudah ada sejak 2012, ada juga artikel tentang RosettaCode dan esowiki juga.
mroman
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
LukStorms
sumber
7

Utilitas Bash + GNU, 36

seq $1$1|grep -v 11|sed -n "$1{p;q}"
Trauma Digital
sumber
Tentunya 1$1sudah cukup, bukan $1$1?
Neil
6

Pyth, 13 11 byte

e.f!}`hT`ZQ

Disimpan 2 byte berkat @FryAmTheEggman.

Demo langsung dan uji kasus.

Versi 13 byte

e.f!}"11"+ZkQ
kirbyfan64sos
sumber
Konteks: Pyth , Pyth , dan Pyth .
Peter Mortensen
@PeterMortensen Yang ketiga tidak terkait dengan Pyth digunakan di sini - itu dari 8 tahun sebelum Pyth ini dibuat, sebenarnya. Pyth hanyalah nama populer untuk bahasa yang terinspirasi Python.
isaacg
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]
Mwr247
sumber
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
Tidak
sumber
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.

Morgan Thrapp
sumber
2

Perl 5, 47 byte

@_[$_]=++$i!~/11/?$i:redo for 1..<>;print$_[-1]
msh210
sumber
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')))

edc65
sumber
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
nimi
sumber
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)

senshin
sumber
0

PHP, 43 byte

while(preg_match('/11/',$i)){$i++;}print$i;
leymannx
sumber
-1

Ruby, 24 byte

Tugas yang disalahartikan, akan dikerjakan ulang nanti!

$><<gets.gsub('11','12')
Peter Lenkefi
sumber
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