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.
quelle
Antworten:
Mathematica (REPL-Umgebung), 858 Gesamtbytes
Hier ist das 86-Byte-Code-Snippet für die Ziffer 9:
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
+9
es einfach gelöscht wird.a~IntegerDigits~MixedRadix@Range[b,1,-1]
berechnet die Liste der Stellen des Fakultätszahlensystems vona
, solange sieb
mindestens so groß ist wie die Anzahl der Stellen;FromDigits
konvertiert 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,
a
die durch die Ausschnitte bezeichnet wird, und auch eine Grenzeb
für die Anzahl der benötigten Stellen des Fakultätsystems. Der BefehlValueQ@a||(a=0;b=3)
initialisiert diese Variablen, wenn sie nicht initialisiert sind (dh im ersten Snippet) und lässt sie ansonsten in Ruhe. danna=10a+9;b++
trägt die Rekursion geführt. Schließlich dient die Initiale1;
zum Zusammenkleben der Schnipsel: Sie multipliziert Zwischenberechnungen mit 1 (was wir sowieso nie sehen).quelle
Goruby, 790
810980Hier 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.Das heißt, das Snippet, das (zum Beispiel) 8 darstellt, würde folgendermaßen aussehen:
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:
quelle