Niemand, bitte!

20

Ich hasse die Ziffer absolut 1. Also brauche ich Ihre Hilfe, um Zahlen in ihre "richtigen Formen" umzuwandeln.

Zahlen in der richtigen Form haben niemals zwei 1s hintereinander. 101ist okay, aber 110abscheulich.

Überspringen Sie zum Konvertieren einfach alle falschen Zahlen und zählen Sie normal. Zum Beispiel...

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

und so weiter.

Ihr Programm sollte eine Ganzzahl annehmen und diese in der richtigen Form ausgeben. Das ist , also gewinnt der kürzeste Code in Bytes.

Talex
quelle
1
Gibt es eine Obergrenze für die Eingabe?
Lirtosiast
2
Ich bekomme die 109 -> 120Konvertierung nicht ...
kirbyfan64sos
4
@ kirbyfan64sos Da 108 zu 109 zugeordnet sind, würde 109 zur nächsten Nummer zugeordnet werden, nämlich 110. Aber diese hat zwei Einsen hintereinander, sodass sie zur nächsten Nummer weitergeht, bis sie eine erreicht, die dies nicht tut. Welches ist 120, da alle 110-119 ausgeschlossen sind.
Reto Koradi
3
@ Corey Ogburn Es geht nicht um Binairy. Sehen Sie sich an, wie eine Liste von Zahlen
aussehen
2
@leymannx Die Zahl links steht für die Nummer in der Reihe. Der erste Wert in der Serie ist also 1, der zweite Wert in der Serie ist 2, yadda yadda (Hummerbiskuit), der zehnte Wert in der Serie ist 10 und der elfte Wert in der Serie ist 12, weil wir 11 als übersprungen haben Talex findet es ein Greuel für den Herrn. Diese Idee geht weiter, daher ist der 108. Wert in der Reihe 109 und der 110. Wert in der Reihe 120, da wir alles von 110 bis 119 überspringen. Ich hoffe, ich habe es gut genug geklärt.
Ahall

Antworten:

8

Burlesque , 10 Bytes

{11 ~ [n!} FO

Ältere Versionen:

ro{11~[n!}f[

ro{Sh"11"~=n!}f[
mroman
quelle
Bitte fügen Sie einen Link die Sprache :)
mınxomaτ
getan. Es gibt es seit 2012, es gibt auch einen Artikel über RosettaCode und das Esowiki.
mroman
8

Perl 5 , 34 Bytes

Einen Zähler schleifen und gelegentlich den doppelten austauschen.

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

Prüfung

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

Bash + GNU-Utils, 36

seq $1$1|grep -v 11|sed -n "$1{p;q}"
Digitales Trauma
quelle
Sicherlich 1$1genügt das eher als $1$1?
Neil
6

Pyth, 13 11 Bytes

e.f!}`hT`ZQ

2 Bytes dank @FryAmTheEggman gespart.

Live-Demo und Testfälle.

13-Byte-Version

e.f!}"11"+ZkQ
kirbyfan64sos
quelle
Kontext: Pyth , Pyth und Pyth .
Peter Mortensen
@PeterMortensen Der dritte Pyth hat nichts mit dem hier verwendeten Pyth zu tun - er stammt eigentlich aus 8 Jahren, bevor dieser Pyth erstellt wurde. Pyth ist nur ein beliebter Name für Python-inspirierte Sprachen.
Isaacg
5

JavaScript, 53 Byte

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

Alternative (unter Verwendung von Verstehen, gleicher Länge):

n=>[for(i of Array(n*2).keys())if(!/11/.test(i))i][n]
Mwr247
quelle
Schön zu sehen, aber übertrieben für diese Aufgabe. 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]

Eine anonyme Funktion, die die nicht 11in der nrichtigen Reihenfolge enthaltenen Zahlen auflistet und die th-te nimmt . Der Fehler der Null-Indizierung (1: 1) bricht mit der Aufnahme 0in die Liste ab.

Theoretisch wird dies für ausreichend hohe Zahlen fehlschlagen f(n)>2*n, aber dies sollte nicht geschehen, bis nes mindestens so weit ist 10**50.


51 Bytes:

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

Zählt Zahlen, ibis die Quote nohne Zahlen erreicht 11ist.

Eine Funktion hat dieselbe Länge, da Korrekturen nur einmal erforderlich sind.

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

Python 3 74

Brauchen noch ein bisschen Golf.

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

Im Moment ist es ziemlich brachiale Gewalt.

Morgan Thrapp
quelle
2

Perl 5, 47 Bytes

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

JavaScript (ES6) 41

Als anonyme Funktion

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

Hinweis: Der einfachste Weg wäre 44:

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

Testen Sie das folgende Snippet.

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

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

edc65
quelle
2

Haskell, 51 Bytes

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

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

Wie es funktioniert:

[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
quelle
1

MUMPS, 37 Bytes

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

Ziemlich einfach. Das einzig "interessante" ist hier das Konstrukt j'[11- '[ist der Operator "enthält nicht", also "abc"'["ab"ist das falsch und "abc"'["cd"wahr. Obwohl beide Operanden j'[11Zahlen sind, bleibt MUMPS unberührt. Es wird beide Operanden glücklich automatisch in Strings umwandeln und mit seinem Leben weitermachen. Hurra!

(Übrigens, wenn Sie in Ordnung sind mit dem Programm nie endet, können wir dies auf 35 Bytes verkürzen: t2(i) f j=1:1 s:j'[11 k=k+1 w:k=i j)

Senshin
quelle
0

PHP, 43 Bytes

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

Ruby, 24 Bytes

Die Aufgabe falsch interpretiert, wird später überarbeitet!

$><<gets.gsub('11','12')
Peter Lenkefi
quelle
Funktioniert nicht bei Eingaben, die nicht enthalten sind 11. Zum Beispiel 12sollte es 13nicht geben 12.
DLosc
@ DLosc Oh mein Gott, ich habe die Aufgabe falsch interpretiert! Ich überarbeite es später!
Peter Lenkefi