Ich muss Ziffern aus Pappe vorbereiten, um eine Nummer anzuzeigen ( Beispiel ). Ich weiß vorher nicht, welche Zahl ich anzeigen soll - das einzige, was ich weiß, ist, dass es nicht größer als ist n
.
Wie viele Pappziffern soll ich vorbereiten?
Beispiel: n = 50
Um eine beliebige Zahl im Bereich von 0 bis 50 anzuzeigen, benötige ich die folgenden Ziffern:
- Eine Null zum Anzeigen der Zahl 0 oder einer anderen runden Zahl
- Zwei Kopien der Ziffern 1, 2, 3 und 4 zur Anzeige der entsprechenden Nummern
- Eine Kopie der Ziffern 5, 6, 7 und 8, für den Fall, dass sie als niedrigstwertige Ziffer in der Zahl erscheinen
- Die Ziffer 9 wird nie benötigt, da ich stattdessen die invertierte Ziffer 6 verwenden kann
Insgesamt: 13 Stellen
Testfälle (jede Zeile ist ein Testfall im Format "Eingabe; Ausgabe")
0 1 1 2 9 9 11 10 50 13 99 17 100 18 135 19 531 22 1000 27 8192 34 32767 38
Antworten:
Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
0rDŒr€ẎQṪÞẎḟ9ĠẎL
.Python 2 , 49 Bytes
Probieren Sie es online!
Eine ungeschickte Rechenformel. Angenommen, das
n
passt in eine,int
so dass eineL
nicht angehängt wird.Dank Neil für 5 Byte Speicher mit dem Hinweis darauf , dass 9 die nicht verwendeten werden , indem Sie behandelt werden könnte
n*9+8
stattn*9+9
, so dass, sagen sie,999*9+8=8999
rollt nicht bis 9000 über.quelle
33333
erfordert fünf 3er,22222
erfordert aber nur vier.n*9
[0] ist verlockend, scheitert aber bei Zahlen, die mit1
und weniger beginnen111..
.(n*9+8)/10**len(`n`)
vermeidenmin
.Haskell ,
11711410895898887848263 Bytes6 Bytes dank Laikoni gespart
146 Bytes gespart dank nimiProbieren Sie es online!
quelle
maximum[a,b]
ist dasselbe wiemax a b
. 2.) Listenverständnisse sind oft kürzer alsfilter
:max d$sum[1|x<-show a,x==b]
g
mit einem pointfree Funktionsliteral:sum.(#[-9..])
.length[x|x<-...]
istsum[1|x<-...]
.g=
(aber möglicherweise möchten Sie sie in die TIO-Version aufnehmen).Mathematica, 49 Bytes
quelle
JavaScript (ES6),
6053 ByteEine Art hacky rekursive Lösung. Dies erzeugt die Zahlen, für die eine Ziffer hinzugefügt werden muss:
und zählt dann, wie viele weniger als die Eingabe sind. Durch ein glückliches Wunder, die Ziffer Entfernen
9
tatsächlich beseitigt mehrere Bytes von der Funktion, da die Sequenz dann wie so erzeugt werden kann (unter der Annahme ganzzahlige Division):Wir müssen berücksichtigen, dass Zahlen unter 10 immer noch die Null erfordern, aber das ist so einfach wie das Hinzufügen
n > 9 ? 0 : 1
zum Ergebnis.Testfälle
Code-Snippet anzeigen
quelle
n>9^1
kann wahrscheinlich seinn<10
true
Input0
, also zögere ich ein bisschen, das zu tun.0>9
ist falsch,false^1
ist 1 ...?true
1
Batch, 67 Bytes
In der Standardformulierung dieses Problems benötigen Sie separate
6
und9
Ziffern, müssen diese jedoch nicht anzeigen0
. Wenn der maximaln
erforderliche Wert zunimmt, nimmt die Anzahl der erforderlichen Ziffern jedes Mal zu, wenn Sie eine Nachkommastelle erreichen (weil Sie nicht genug von dieser Zahl haben) und jedes Mal,10
wenn Sie eine Potenz von erreichen (wenn Sie eine zusätzliche Null benötigen). Insgesamt jeder Kraft der10
Bedürfnisse10
mehr Ziffern als die vorherige, die als caluclated werden kannfloor(log10(n))*10
. Für Werten
zwischen Zehnerpotenzen kann dann die Anzahl der Zwischenwiederholungen alsfloor(n/((10**floor(log10(n))*10-1)/9))
oder alternativ berechnet werdenfloor(n*9/(10**floor(log10(n))*10-1))
.Ich berechne
floor(log10(n))
mit Hilfe der Schleife in der ersten Zeile. Jedes Mal%2
erhält ein Extra0
und%3
ein Extra-~
. Das heißt das10%2
ist10*10**floor(log10(n))
und%30
istfloor(log10(n))
.Die Vervielfältigung von
6
und9
hat zwei Auswirkungen: Erstens sind9
für jede Potenz von nur Ziffern erforderlich10
, und zweitens muss die Umstellerkennung die Umstellziffern ignorieren9
. Glücklicherweise sind sie eins weniger als eine Potenz von 10, was durch Ändern der Formel erreicht werden kannfloor((n*9+8)/(10**floor(log10(n))*10))
.Der Umgang mit der Null ist relativ einfach: Dies erfordert nur eine zusätzliche Ziffer, wenn
n<10
, dhfloor(log10(n))==0
.quelle
Mathematica, 83 Bytes
quelle
Python 3 , 75 Bytes
Probieren Sie es online!
quelle
PHP , 60 Bytes
Probieren Sie es online!
quelle