Der Umrechner der Basisgebäude-Nummer des Professors

12

Der verrückte Mathematikprofessor möchte all seine Forschungen mit einem System verschlüsseln, das selbst die schlauesten seiner Konkurrenten erfasst!

Zu diesem Zweck hat der Professor beschlossen, die Basis nicht nur der Zahl, die er schreibt, sondern jeder einzelnen Ziffer in dieser Zahl zu ändern, je nachdem an welcher Stelle sich die Ziffer befindet (von rechts beginnend, beginnend mit 1). Beispielsweise:

Die Zahl 0 hat eine Ziffer und wird daher in Basis 1: 0 dargestellt

Die Zahl 1 hätte eine Ziffer in der Basis 10, aber in unserem Professorsystem ist das nicht gültig. Der erste Platz ist nur für Ziffern der Basis 1 reserviert! Dies bedeutet, dass es an die zweite Stelle gestoßen werden muss, an der Basis 2 zulässig ist: 10

Für die Zahl 2 muss mindestens die Basis 3 geschrieben sein: 100

Aber jetzt kann die Zahl 3 geschrieben werden, indem die Ziffer an zweiter Stelle geändert wird: 110

und 4 als so: 200

Hier einige weitere Beispiele, die Ihnen helfen, sich ein Bild zu machen:

5: 210

6: 1000

7: 1010

8: 1100

9: 1110

10: 1200

11: 1210

12: 2000

13: 2010

14: 2100

15: 2110

16: 2200

17: 2210

18: 3000

Mit diesem System ergeben die Notizen des Professors für niemanden einen Sinn, und sie können endlich die Welt erobern !!!! Nachts gut schlafen.

Natürlich muss die Codierungsmethode so dunkel wie möglich sein.


Ihre Aufgabe ist es, 10 Codeausschnitte zu schreiben, die jeweils eine der 10 Basisziffern darstellen

0 1 2 3 4 5 6 7 8 9

Die Kombination in der Reihenfolge der umzurechnenden Zahl ergibt eine Zahl, die im teuflischen Nummerierungssystem des Professors geschrieben ist.

Zum Beispiel, wenn meine Schnipsel sind:

0 = AFFE 1 = BEISPIEL, 2 = CODE, 3 = GOLF und 9 = TEST

dann

19 = BEISPIELTEST -> 3010

20 = CODEMONKEY -> 3100

21 = CODEEXAMPLE -> 3110

22 = CODECODE -> 3200

23 = CODEGOLF -> 3210

Es müssen keine Eingabenummern mit mehr als 10 Stellen oder negativen Zahlen berücksichtigt werden. Wenn Sie jedoch den Code für zusätzliche Stellen schreiben möchten, erhalten Sie ein zusätzliches Lob. Dies ist Codegolf, daher gewinnt die kürzeste Antwort (unter Verwendung der kombinierten Bytesumme aller Snippets) und die Standardlücken sind nicht zulässig.

ADDENDUM: Bevor jemand damit anfängt, ob 0 die richtige Darstellung von 0 in Basis 1 ist, möchte ich Sie daran erinnern, dass dieser Professor verrückt ist. Lebe damit.

Max Mustermann
quelle
1
Hinweis: Das Professorensystem wird auch als Fakultätszahlensystem bezeichnet .
ETHproductions
Es ist auch OEIS A124252
Kritixi Lithos
@ETHproductions Ich habe nie gesagt, dass die Kodierung des Professors gut ist .
Joe Bloggs
@KritixiLithos Danke dafür! Ich habe danach gesucht, um es als Bestätigung zu verwenden.
Joe Bloggs
4
Willkommen übrigens bei PPCG :-)
ETHproductions

Antworten:

1

Mathematica (REPL-Umgebung), 858 Gesamtbytes

Hier ist das 86-Byte-Code-Snippet für die Ziffer 9:

1;ValueQ@a||(a=0;b=3);a=10a+9;b++;FromDigits[a~IntegerDigits~MixedRadix@Range[b,1,-1]]

Die Codefragmente für die Ziffern 1 bis 8 sind identisch, mit der Ausnahme, dass die Ziffer 9 durch die entsprechende Ziffer ersetzt wird. Das Code-Snippet für die Ziffer 0 ist identisch, nur dass +9es einfach gelöscht wird.

a~IntegerDigits~MixedRadix@Range[b,1,-1]berechnet die Liste der Stellen des Fakultätszahlensystems von a, solange sie bmindestens so groß ist wie die Anzahl der Stellen; FromDigitskonvertiert diese Ziffernliste zu Ausgabezwecken in eine reguläre Ganzzahl zur Basis 10. (Wenn eines der Listenelemente 9 überschreitet, passiert etwas Lustiges.)

In der REPL-Umgebung von Mathematica können Berechnungen mit Semikolons abgeschlossen werden, um die Ausgabe zu unterdrücken. Daher wird nur die letzte Ausgabe in einer durch Semikolons getrennten Kette angezeigt. Wir definieren rekursiv die Ganzzahl, adie durch die Ausschnitte bezeichnet wird, und auch eine Grenze bfür die Anzahl der benötigten Stellen des Fakultätsystems. Der Befehl ValueQ@a||(a=0;b=3)initialisiert diese Variablen, wenn sie nicht initialisiert sind (dh im ersten Snippet) und lässt sie ansonsten in Ruhe. dann a=10a+9;b++trägt die Rekursion geführt. Schließlich dient die Initiale 1;zum Zusammenkleben der Schnipsel: Sie multipliziert Zwischenberechnungen mit 1 (was wir sowieso nie sehen).

Greg Martin
quelle
Ich genieße den Semikolonmissbrauch.
Joe Bloggs
0

Goruby, 790 810 980

Hier ist ein zweiter Versuch, der sich auf die Tatsache stützt, dass das Drucken eines Wagenrücklaufs ("\ r") ohne eine neue Zeile ("\ n") in praktisch jeder Shell die zuvor gedruckte Zeile überschreibt und letztendlich sicherstellt, dass nur das letzte Bit gedruckt wird (das heißt, das Endergebnis) wird angezeigt.

Dies muss in einer Shell ausgeführt werden, z ruby name_of_file.rb.

Es funktioniert für positive Zahlen von unbeschränkter Länge.

Der Code besteht aus zehn Kopien des folgenden Snippets, wobei X(oben) durch die Ziffern von 0 bis 9 ersetzt wird, eine pro Snippet.

->*t{n,d,o="X#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

Das heißt, das Snippet, das (zum Beispiel) 8 darstellt, würde folgendermaßen aussehen:

->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

Die Herausforderung besagt, dass die Ausschnitte "kombiniert" werden müssen, um eine mehrstellige Zahl darzustellen. Um also eine Ziffer an eine Zahl anzuhängen, setzen Sie sie einfach in die eckigen Klammern am Ende der Zahl. Die Zahl 103 (dezimal) wäre also:

->*t{n,d,o="1#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="0#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[]]]
Tutleman
quelle
Du meinst die Nummer 108.
user75200