Das Szenario: Sie sind ein Software-Designer, der für ein von der Regierung geführtes Unternehmen arbeitet, das Kennzeichen für Autos und andere Fahrzeuge entwirft. Sie wurden gebeten, Software zur Generierung von Kennzeichen zu entwickeln. Bevor Sie zur Arbeit gingen, legten Ihre Vorgesetzten diese Grundregeln fest.
Ein Kennzeichen darf nicht enthalten:
ASS
666
69<any number here>
<any number here>69
KKK
SHT
Regeln und Anforderungen:
- Das Kennzeichen muss zufällig generiert werden.
- Sobald ein zufälliges Kennzeichen generiert wurde, kann dasselbe Kennzeichen nicht erneut generiert werden.
- Sie müssen mindestens 200 eindeutige Kennzeichen ausgeben . Sie können mehr generieren, wenn Sie möchten .
- Sie können erzeugte Platten in einer Datei speichern, um sie zu "merken".
- Das Nummernschild enthält zwei Abschnitte, von denen einer nur drei Buchstaben und einer nur drei durch einen Bindestrich getrennte Ziffern enthält:
233-ADF
oderADF-233
. - Sie können nur Ziffern und Großbuchstaben verwenden.
- Kennzeichen können auf stdout oder in eine Datei geschrieben werden.
- Jede "Seite" eines Kennzeichens enthält entweder drei Zahlen oder Buchstaben.
- Dies ist ein Code-Golf , also gewinnt die kürzeste und beliebteste Antwort. Der Gewinner wird nach sieben Tagen ermittelt.
Allgemeine Regeln
- Die Antwort sollte Folgendes umfassen, ist jedoch nicht darauf beschränkt.
- Sprache Name.
- Zeichenanzahl.
- Dateigröße.
- Wie der Code ausgeführt wird.
- Der Code selbst.
- Beispiel: Python 234 Zeichen oder Python 23mb .
Wenn ich zusätzliche Details klären muss, erwähne dies bitte in den Kommentaren und ich werde es meinem Beitrag hinzufügen. Wie auch immer, viel Glück und generiere mir ein paar passende Nummernschilder!
Update 1: Der Gewinner wird etwas früher ausgewählt.
Es stellt sich heraus, dass ich bald auf eine Reise gehen muss, sodass ich gegen 00:00 UTC, den 25. Juli, einen Gewinner auswähle. Nachdem der Gewinner ausgewählt wurde, können Sie noch weitere Beiträge einreichen. Sie müssen nur wissen, dass ein Gewinner ausgewählt wurde. Bai.
Update 2: Gewinner!
Wir haben Gewinner! Yay! Käse und Wein an alle, die teilgenommen haben! Wer hat gewonnen?
- 1. Platz: Àngel - Bash (95 Zeichen)
- 2. Platz: Martin Büttner - Mathematica (182 Bytes)
- 2. Platz: Emilio M Bumachar - Pyg (92?)
- 2. Platz: Peter Taylor - Golfscript (98 Zeichen)
- 3. Platz: Mark Thomas - Ruby (127 Zeichen)
Wow, drei zweite Plätze. Beeindruckend. Der Wettbewerb ist vorbei, aber Sie können jederzeit Beiträge einreichen, wenn Sie möchten. Bai!
quelle
AAA-
Antworten:
Bash (95 Zeichen)
Speichern Sie das Skript
m
in einem Ordner in Ihrem PATH mit gesetztem Ausführungsbit.Führen Sie so
bash m
. Die Platten werden in der Datei p gespeichertDies entspricht der Ausführung von:
Vorsichtsmaßnahme: Das Finale
m
sollte eigentlichexec m
(+5 Zeichen) sein, um zu vermeiden, dass Prozesse auf den Abschluss warten (aber Sie können Tausende ohne große Probleme haben).Die Idee der Verwendung ist http://www.cyberciti.biz/faq/linux-random-password-generator/ zu verdanken
tr -dc
quelle
grep -v
schließt sowohl die Blacklist als auch die Liste der bereits generierten Platten aus (grep
erwartet, dass p ein Muster pro Zeile enthält, aber da die Platten keine Metazeichen mit regulären Ausdrücken enthalten, stimmen sie nur mit sich selbst überein). Wir generieren nur eine oder null Platten pro Iteration, daher wird nach jeder Iteration die vollständige (aktualisierte) Liste der auszuschließenden Platten von grep gelesen. : DPYG - 92
Es ist jetzt möglich, aus allen unbenutzten Platten einheitlich zu wählen, wobei die OP-Spezifikationen eingehalten werden. Gleichzeitig ist die Platte um 1 Zeichen kürzer.
Theoretisch ist es möglich, dass die Liste der 999 Tafeln genügend Wiederholungen enthält, sodass der zugeschnittene Satz weniger als 200 beträgt. Die Wahrscheinlichkeit dafür ist jedoch unendlich gering. In zehn Versuchen war die niedrigste Länge 994.
BEARBEITEN: 999 in K geändert (was pyg für 1000 ist), um zwei Zeichen auf Anraten von bitpwner zu speichern.
quelle
Mathematica, 182 Bytes
Ugh, das ist lang
Ungolfed
Ziemlich einfach. Erzeugt zufällige Platten und filtert Duplikate und verbotene heraus, bis 200 gefunden werden.
quelle
GolfScript (98 Zeichen)
Dies erzeugt alle möglichen Nummernschilder in zufälliger Reihenfolge unter Verwendung einer unschönen Basisumwandlung, gefolgt von einer Filterung. Es gibt viele davon. Erwarten Sie also nicht, dass es schnell ausgeführt wird, aber die Frage hat die Ausführungszeit nicht eingeschränkt.
quelle
JavaScript (ES6) - 213
Es kann wahrscheinlich verbessert werden. Getestet auf der Firefox-Konsole.
Ändern Sie diese Warnung in a,
console.log()
wenn Sie testen möchtenquelle
Ruby -
136133129 ZeichenAbscheulich. Denke, es gibt Raum für Verbesserungen. Gib den Code einfach in
irb
oder einpry
und drücke die Eingabetaste:quelle
Rubin, 127 Zeichen
Mein Versuch einer "lesbaren" Ruby-Version:
quelle
Python 2.7 - 258 Zeichen
Ich bin kein professioneller Programmierer oder so, also würde ich sagen, dass ich mit dem Ergebnis zufrieden bin.
Dateigröße ist 4.0 K, laufe mit
python file.py
!quelle
pass
ein seincontinue
? Sie können auch Zeichen sparen, indem Sie anstelle von 4 eine 1for i in range(0,200):
könnte mit ersetzt werdenfor i in range(200):
.continue
. Aberpass
habe den Trick gemacht. Außerdem ist es kürzer. Und wenn ich versuchtefor i in range(200)
, es habe nur 199 ^^ ich sie danach gezählt durch eine Herstellungduplicates
variabel und setzenduplicates += 1
vorpass
und die Vorkommen für das Zählen-
in der Liste / string.\t
und das Ersetzen durch 1 Leerzeichen hat die Zeichenanzahl nicht verändert ... Danke für die Vorschläge!if k in t: pass
, da er nichts tut.Python - 208
Hallo hier ist mein Stab an der Kfz-Kennzeichen-Generation. Diese Lösung ähnelt der Lösung von @ bitpwner, jedoch ohne das String-Modul. Statt einer Liste für das Nummernschild habe ich mich für die Verwendung eines Sets entschieden und erlaubt zuerst auch Nummern.
Beispielausgabe:
quelle
Python, 252 Bytes
Hier ist mein Beitrag. Ich bin beeindruckt, aber ich weiß, dass andere mit Python besser abschneiden.
quelle
Python - 165
Diese Einfuhren ...
Wenn es notwendig ist, willkürlich mit Zahlen oder Buchstaben zu beginnen, was ich nicht wirklich für nötig halte, dann 190.
quelle
PHP
341324320War das Beste, was ich tun konnte.
Um den Code auszuführen, speichern Sie ihn einfach als .php-Datei und suchen Sie ihn auf einem beliebigen Webserver. Es wird versucht, die Blacklist-Datei p.txt zu erstellen, falls diese noch nicht existiert. Möglicherweise müssen Sie jedoch einen vollständigen Serverpfad angeben, wenn Sie keinen Root-Zugriff haben.
Der Code selbst ist hier vor dem Golfspielen:
War so kurz wie ich es kriegen konnte :-(
Beispielausgabe
BEARBEITEN: Einige if-Anweisungen wurden aufgeräumt, um die Kurzform zu verwenden.
quelle
$string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
Delphi, 161 Bytes
Hier ist meine Meinung dazu. Es gibt Nummernschilder ohne Zeilenvorschub zwischen ihnen auf stdout aus. Wenn LF benötigt wird (in den Regeln nicht angegeben), werden dadurch zusätzliche 4 Bytes hinzugefügt.
Golf Version:
Ungolfed:
Wie läuft man:
quelle
PHP, 267
Dies ist ungefähr so kurz wie ich es bekommen kann.
Die Platten werden in der Datei "p" gespeichert.
quelle
R, 229 Zeichen
Ich bin sicher, dass dies verbessert werden könnte:
In der Konsole ausführen, druckt eine Liste der Nummernschilder.
quelle
Cobra - 198
quelle
ECMAScript 6 -
155168158Warnung : 200 Alarm - Dialoge (Änderung
alert
anconsole.log
zu Test)Edit : Ups. Originalversion gedruckt Duplikate ...
Edit 2 : Näher an der ursprünglichen Partitur - von einem Satz zu einem assoziativen Array gewechselt, mit einigen fehlerhaften doppelten Überprüfungen, die es ermöglichen, dass es während des Druckvorgangs gedruckt wird
Getestet in der Firefox-Konsole.
quelle
l=x=>String.fromCharCode(65+r()*26);
. Ich glaube, ich weiß nicht, was passiert mitl=x=>...
f=a=>b
ist eine ES6-Funktion, die im Grunde genommen eine Abkürzung istfunction f(a) { b }
und derzeit nur von Firefox (?) Unterstützt wird.JavaScript (ES6) 184
Testen Sie wie gewohnt in der FireFox-Konsole und wechseln Sie
alert
zuconsole.log
oder sind Sie bereit,escape
200-mal zu drücken .quelle
Python3, 257 Zeichen
Beispielausgabe:
quelle
;
anstelle von trennen\n
.PHP, 167
das sind 100 Zeichen weniger als die derzeit besten von PHP :)
hoffe du magst es. Falls es erlaubt ist:
beträgt nur 141 Zeichen, mischt jedoch keine Zeichen und Zahlen. Anregungen willkommen :)
quelle
F #, 264 Zeichen
Eigentlich keine Golfsprache, aber ich bin mir sicher, dass dies verbessert werden könnte. Die Verwendung von Seq.exists mit einem Lambda ist ziemlich ärgerlich, ebenso wie die vielen Parens und das Fehlen einer impliziten Konvertierung.
Verwendet Rekursion und bleibt für immer bestehen.
Kann in FSI ausgeführt werden.
quelle
Python 203
Ich bin mir nicht sicher, ob dies technisch zählt, aber ich mochte es und poste es trotzdem. Während ich die Antworten pseudozufällig generiere, habe ich, wie so ziemlich alle anderen, strategisch den Zufallssamen ausgewählt, damit ungültige Antworten nicht in der Ausgabe landen. Meine Antwort kann also nicht alle gültigen Antworten generieren, ohne auch die ungültigen zu generieren.
quelle
Perl - 123 Zeichen
Ungolfed:
Wenn jemand Ideen hat, um weiter Golf zu spielen, lass es mich wissen, ich bin interessiert. Wenn Sie weitere Erklärungen zu einem Teil des Codes wünschen, hinterlassen Sie einen Kommentar, und ich würde gerne weitere Erklärungen abgeben.
quelle
Javascript - 283
327ZeichenBearbeiten:
Nach der Umsetzung der Vorschläge von Alconja ist hier meine neue Version:
1) Entfernen Sie Variable: s und verwenden Sie Literal: "\ n" [-4] [323]
2) Entfernen Sie "var o =", i, r, n, l, "[-17] [306]
3) Entfernen Sie Variable: t und verwende Literal: "ASS | KKK | SHT | 666" [-4] [302]
4) Setze m = Math.random und verwende stattdessen "m" [-7] [296]
5) Verwende (m ( ) + "") anstelle von m (). toString () [-6] [290]
6) Entfernen Sie nicht benötigtes ";" [-7] [283]
Alte Version: Javascript - 327 Zeichen
Ich bin mir sicher, dass es noch Verbesserungspotential gibt ... Ich bin ziemlich unerfahren im Code-Golfen:
Hier ist eine formatierte "Ungolfed" -Version mit "nicht minimierten" Variablen- / Funktionsnamen:
Hier ist eine "Debug" -Version, die in die URL des Browser-Favoriten / Lesezeichens eingefügt werden kann. Die Ausgabe erfolgt in einer "TEXTAREA" in einem neuen "Fenster" anstelle von "alert ()":
Hier ist die "Debug" -Version, formatiert:
quelle
var
(nur das Zuweisen reicht aus, 323 ), es;
sei denn, es folgt eine andere Anweisung (zB das letzte Zeichen in der Zeile oder vor a}
, 316 ), achten Sie auf alles, was mehr Platz zum Deklarieren / Verwenden benötigt als nur Inline (zB Ihres
Variable, 312 ), ebenso auf das Umgekehrte, wenn etwas mehr als verwendet wird . einmal ( zum BeispielMath.random(...)
zur=Math.random ... r(...)
, 307 ,(x+"")
kürzer alsx.toString()
, 300