Französische Kennzeichen
Französische Kennzeichen werden nach einem bestimmten Muster aus Zahlen und Buchstaben in aufeinanderfolgender Reihenfolge angezeigt:AB-012-CD
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die für eine bestimmte Nummer das entsprechende französische Kennzeichen ausgibt . Ihr Programm sollte keine Sonderfälle behandeln, wie auf der verlinkten Seite angegeben. Es sollte in der Lage sein, alle 26*26*1000*26*26 => 456 976 000
möglichen Kennzeichen zu generieren , oder soweit Ihre Sprache dies unterstützt.
Das Nummerierungssystem sieht wie folgt aus:
- AA-000-AA bis AA-999-AA (Zahlen entwickeln sich zuerst);
- AA-000-AB bis AA-999-AZ (dann der letzte Buchstabe rechts);
- AA-000-BA bis AA-999-ZZ (dann der erste Buchstabe rechts);
- AB-000-AA bis AZ-999-ZZ (dann der letzte Buchstabe links);
- BA-000-AA bis ZZ-999-ZZ (dann der erste Buchstabe links).
Eingang
- Der Index der Kennzeichen als Ganzzahl
Ausgabe
- Das entsprechende französische Kennzeichen
Zusätzliche Information
- Buchstaben müssen in Großbuchstaben geschrieben werden
- Sie können sowohl eine 0-basierte als auch eine 1-basierte Indexierung verwenden, um die Platten zu generieren (dh AA-000-AA kann der Indexierung entsprechen
0
oder1
vorausgesetzt, alle anderen Testfälle verwenden dieselbe Indexierung.
Das ist Code-Golf , kürzeste Antwort in jeder Sprache gewinnt!
Testfälle (0-basierte Indizierung)
0 -> AA-000-AA
1 -> AA-001-AA
999 -> AA-999-AA
1000 -> AA-000-AB
675 999 -> AA-999-ZZ
676 000 -> AB-000-AA
456 975 999 -> ZZ-999-ZZ
Antworten:
Pure Bash (keine externen Utensilien), 64
Probieren Sie es online! - Es dauert ungefähr 10 Sekunden, um die 7 Testfälle zu durchlaufen.
eval
ist erforderlich, um sicherzustellen, dass die variable Expansion (von x) vor der Klammerexpansion erfolgt.quelle
Perl 5 (-ap), 47 Bytes
Probieren Sie es online!
PHP , 74 Bytes
Probieren Sie es online!
quelle
Python 3 ,
79 7877 BytesProbieren Sie es online!
Ich habe irgendwie nie bemerkt, dass die
f"string"
Formatverknüpfung existiert, bis ich die Antwort von Black Owl Kai gesehen habe.quelle
tuple
durch(*...,)
f"string"
die Verwendung von wird Ihre Antwort exklusiv für Python 3.6+, nur damit Sie sich dessen bewusst sind. Gute Arbeit!Ruby,
615955 BytesAuch 55 Bytes:
Probieren Sie es online!
Dies initialisiert einen Zähler auf
AA-AA000-
, erhöht ihnn
(durch Multiplizieren einer Zeichenfolge des Codes, der dies tut, mit n undeval
ing) und verschiebt dann die letzten 4 Zeichen nach dem 3. Zeichen.quelle
->n{s=('AA-AA000-'..?Z*9).step.take(n)[-1];s[2]+=s.slice!5,4;s}
ist länger, aber ich frage mich, ob es möglich ist, es zu verkürzen.->n{s=[*'AA-AA000-'..?Z*9][n];s[2]+=s.slice!5,4;s}
sollte es funktionieren und ist nur 50 Bytes lang, aber es generiert zuerst jede mögliche Platte. : - /PHP ,
968479 Bytes-5 Byte dank Ismael Miguels großartigen Kommentaren.
Probieren Sie es online!
Ich nutze die Tatsache, dass Sie Buchstaben in PHP erhöhen können! So
AAAA++
würde es werdenAAAB
undAAAZ++
würde es werdenAABA
. Ich berechne, wie oft die Buchstaben erhöht werden müssen, indem ein ganzzahliger Teil von erhalten wirdinput/1000
. Erhöhen Sie dann die Länge der vier Zeichen um das Vielfache, und die ersten beiden und letzten beiden Zeichen werden automatisch zur linken und rechten Seite der Platte.Zum Beispiel für die Eingabe der
675999
Anzahl der Buchstabeninkremente ist(int)(675999 / 1000) = 675
, soAAAA
wird es werdenAAZZ
.Schließlich wird die mittlere Zahl von berechnet
input%1000
und alles mit Hilfe von printf im angegebenen Format gedruckt .%.2s
druckt die ersten beiden Zeichen der Zeichenkette und%03u
füllt die Zahl links mit 3 Nullen auf.quelle
%0.2s
dir kannst du schreiben%.2s
. Das erspart Ihnen 1 Byte. (Ein kleiner Tipp: Wenn Sie eine Dezimalzahl mit einer bestimmten Anzahl von Dezimalstellen ausgeben möchten, können Sie%.2f
(oder einen anderen Modifikator) so vorgehen, wie es auch funktioniert.)0
. Edit: In den Dokumentationen scheint es, als hätte ich es überhaupt nicht$x++^$argn/1e3
stattdessen auch$x++<(0^$argn/1e3)
4 Bytes einsparen. Dies wird wiederholt, bis($x++^$argn/1e3) === 0
und es ist,0
wenn$x
und$argn/1e3
dieselbe ganze Zahl sind (mit^
wird die Zahl in eine ganze Zahl umgewandelt). Sie können dies auf sandbox.onlinephpfunctions.com/code/…C,
8886 BytesGanz einfach, es werden Division und Modul zum Extrahieren der Felder verwendet, 'A' für die Buchstaben hinzugefügt, um sie ASCII-Zeichen zuzuordnen, und printf-Formatierungen für die Zahlen.
Probieren Sie es online!
quelle
Haskell,
85817977 BytesProbieren Sie es online!
quelle
05AB1E ,
252220 Bytes-2 Bytes (und erhöhte die Leistung, indem nicht die gesamte Liste generiert wurde) dank @Grimy .
0-basierte Indizierung.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Der letzte Teil (
s₄‰`UèX₄+¦'-.øý
) könnteI₄÷èI₄+3.£.ý'-ý
eine Alternative mit gleichen Bytes sein:Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
quelle
Au2ããI₄‰`UèX₄+¦'-.øý
oderAu2ããI₄÷èI₄+3.£'-.øý
.J ,
564946 BytesProbieren Sie es online!
-3 Bytes dank FrownyFrog
Das Ganze sind nur 7 verschachtelte Züge - wenn das keinen Spaß macht, was ist das dann?
quelle
JavaScript (Node.js) , 82 Byte
Probieren Sie es online!
quelle
Ruby , 51 Bytes
Probieren Sie es online!
quelle
R 101 Bytes
Probieren Sie es online!
Führt nur die erforderlichen arithmetischen Berechnungen durch. Ich habe 5 Bytes gespart , indem ich
a
einen nutzlosen Wert bei in den Vektor aufgenommen habea[4]
, damit ich den Hilfsvektor wieder verwenden kannb
.B
AB-012-CD
n
n %/% 676000 %% 26
%/%
%%
quelle
Jelly ,
2622 BytesEin monadischer Link, der eine ganze Zahl (1-indiziert) akzeptiert, die eine Liste von Zeichen liefert ... Verrückt langsam, da alle Platten zuerst erstellt werden!
Probieren Sie es online! (wird nicht vervollständigt)
Oder versuchen Sie es mit einer reduzierten Alphabet-Version (nur "ABC" für die Buchstaben).
Für Code, der zeitnah fertiggestellt wird, gibt es hier ein 32-Byte-Vollprogramm (0-indexiert), das die einzelne Platte stattdessen mit modularer arithmetischer und numerischer Basisdekomprimierung erstellt:
Probier diese!
quelle
APL + WIN, 61 Bytes
Fordert zur Eingabe einer Ganzzahl auf:
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
quelle
Holzkohle , 33 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Geben Sie die Nummer ein.
Drucken Sie a
-
.Addieren Sie 1000 zu der Zahl, setzen Sie das Ergebnis in eine Zeichenfolge um und drucken Sie die letzten drei Ziffern.
Teilen Sie die Zahl durch 1000 und addieren Sie dann 26⁵, sodass bei der Konvertierung in eine benutzerdefinierte Basis mit dem Großbuchstaben eine Zeichenfolge mit der Länge 6 entsteht, die dann in Buchstabenpaare aufgeteilt wird.
Drucken Sie a
-
.Drucken Sie das letzte Buchstabenpaar.
Gehen Sie an den Anfang des Nummernschilds.
Drucken Sie den Rest der gewünschten Buchstaben.
quelle
Perl 6 , 42 Bytes
Probieren Sie es online!
Port of Grimy's Perl 5-Lösung. Langsam für große Eingabewerte.
quelle
Excel,
183167155147 Bytes-16 Bytes dank @Neil. (6 unter Verwendung von
E3
)-12 Bytes dank @Keeta. (
TRUNC
stattQUOTIENT
)-8 Bytes dank @Jonathan Larouche (
INT
anstelle vonTRUNC
)Verkettet 5 Teile:
quelle
MOD(QUOTIENT(A1,1E3),26)
nicht Auch warum1E3
für1000
aber nicht26E3
etc?456 975 996
->[Z-996-ZZ
CHAR(65+)
stumm Dezimalstellen bis zu abgeschnitten%.9999997614649
. Größer als das wird aufgerundet. VergleichenCHAR(65+24.9999997614649)
undCHAR(65+24.999999761465)
.Sauber , 107 Bytes
Probieren Sie es online!
Definiert die
$ :: Int -> [Char]
Angabe des n-ten Kennzeichens mit Index Null.quelle
Japt , 21 Bytes
Obszön langsam! Im Ernst, versuchen Sie nicht einmal, es auszuführen!
Ein Tipp an Kevin , der mir klar gemacht hat, wo ich falsch gelegen habe, als ich gestern Abend darum gekämpft habe, dass das funktioniert.
Probieren Sie es aus - begrenzt den Nummernkreis auf
000-005
.quelle
Viertens (gviertens) , 94 Bytes
Probieren Sie es online!
0-indiziert. Die Eingabe erfolgt von der Stapelspitze
Code Erklärung
quelle
T-SQL, 135 Byte
quelle
Python 2 , 88 Bytes
Probieren Sie es online!
quelle
Rot ,
130127 BytesProbieren Sie es online!
quelle
Python 3 , 89 Bytes
Probieren Sie es online!
-1 Byte dank mypetlion
quelle
chr(x//26000%26+65)+chr(x//1000%26+65)
zu'%c%c'%(x//26000%26+65,x//1000%26+65)
, um 1 Byte zu speichern.MATLAB , 113 Bytes
Erklärungen:
Die erste Zeile definiert eine Funktion, die aus 2 Eingängen ein Zeichen (von
A
bisZ
) erzeugt. Diex
zu konvertierende Indexnummer und eine Ganzzahlp
, die als Exponent für 26 (dh26^p
) verwendet wird. Mit dieser zweiten Eingabe können die Berechnungen für die erste alphanumerische Kennziffer (p=3
) bis zur letzten Ziffer ( ) angepasst werdenp=0
.Beispiel: Für die zweite Ziffer, die alle 1000 * 26 * 26 Iterationen durchlaufen wird, wird die folgende Operation ausgeführt: Es wird
mod(idivide(x,1000*26^2),26)
ein Index zwischen 0 und 25 zurückgegeben, der dann in ein ASCII-Format konvertiert wirdchar
durch Hinzufügen von 65 Format (da der Index0
basiert).Die zweite Zeile verkettet die Zeichen einfach miteinander. Jedes alphanumerische Zeichen wird mit der Funktion
c(x,p)
berechnet, das numerische Zeichen wird einfach mit a berechnetmodulo
Operation und in eine Zeichenfolge umgewandelt.Jede Komponente der Zeichenfolge, aus der die Kennzeichen bestehen, lautet wie folgt:
Da ich es nicht zulassen kann, dass Sie MATLAB online testen ( Bearbeiten: Sie können es tatsächlich online testen), werde ich den MATLAB-Benutzern die Möglichkeit geben, die Testfälle zu überprüfen:
Ausgänge:
Variante: Beachten Sie, dass die Option lassen
sprintf
oderfprintf
von der Anzahl an Zeichenkonvertierung kümmern uns möglich ist .c
Dies ermöglicht eine Vereinfachung der Funktion , führt jedoch insgesamt zu ein paar weiteren Bytes in dieser Implementierung (119 Bytes):quelle
q 78 Bytes
quelle
C (GCC) ,
136106105 BytesProbieren Sie es online!
-7 Bytes von celingcat ‚s Lösung , weitere -23 inspiriert
-1 Byte von der Lösung von ceilingcat durch Ändern der
char[]
inwchar_t[]
implizit umgewandeltint[]
Verwendet eine 0-basierte Indizierung.
Erklärung / Ungolfed:
quelle
a
undb
-Parameter aus dem Makro und erreichte 106 BytesJulia 1.0 , 86 Bytes
Probieren Sie es online!
quelle
Kotlin , 93 Bytes
Probieren Sie es online!
quelle
Python 3 , 161 Bytes
Probieren Sie es online!
quelle