Erstellen Sie ein US-Nummernschild

16

Als Eingabe wird eine der folgenden Angaben verwendet:

AK,AR,AS,AZ,CA,CT,DC,FL,GA,IL,IN,IA,KS,KY,LA,MD,MI,MN,MS,NV,NH,NJ,NM,NY,NC,ND,MP,OH,OK,OR,PA,PR,RI,SC,TN,TX,UT,VT,VA,WA,WI

(mit Anführungszeichen)

"AK","AR","AS","AZ","CA","CT","DC","FL","GA","IL","IN","IA","KS","KY","LA","MD","MI","MN","MS","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PA","PR","RI","SC","TN","TX","UT","VT","VA","WA","WI"

Erzeugen Sie ein (einheitlich) zufälliges Kennzeichen mit dem zur Eingabe passenden Format und geben Sie es aus. Wenn es mehrere (durch Kommas getrennte) Formate gibt, verwenden Sie ein (einheitliches) Zufallsformat:

AK, IA, MS, MP, VT: AAA 000
AS: 0000
AZ, GA, WA: AAA0000
AR, KS, KY, LA, ND, OR: 000 AAA
CA: 0AAA000
CT: AA-00000
DC: AA-0000
FL: AAA A00
IL: AA 00000
IN: 000A,000AA,000AAA,AAA000
MD: 0AA0000
MI: AAA 0000,0AA A00,AAA 000
MN: 000-AAA
NV: 00A-000
NH: 000 0000
NJ: A00-AAA
NM: 000-AAA,AAA-000
NY, NC, PA, TX, VA, WI: AAA-0000
OH: AAA 0000
OK: 000AAA
PR: AAA-000
RI: 000-000
SC: AAA 000,000 0AA
TN: A00-00A
UT: A00 0AA

Wobei Aein zufälliges Zeichen im Großbuchstaben minus IOQund 0eine zufällige einstellige Zahl ( 0bis 9) bedeutet.

Alle Informationen aus Wikipedia . Dies waren alles diejenigen, die ich verstand und die keine Wonky-Regeln hatten.

Das ist , also gewinnt die kürzeste Antwort in Bytes!

Stephen
quelle
2
@MagicOctopusUrn heh, darüber, verschiedene Zustände mit dem gleichen Format behalten einander nicht im Auge, so dass beide die gleiche Nummer ausgeben können, und Polizisten müssten nachsehen, aus welchem ​​Zustand die Platte stammt
Stephen
1
Der Größen-Nummernraum für jeden Zustand variiert. Betrachten wir 1) den kombinierten Zahlenraum für alle Zustände und wählen Sie einheitlich den aus (der Zustände mit größeren Zahlenräumen stärker gewichtet)? Oder wählen wir 2) zuerst einheitlich einen der 50 Zustände aus und wählen dann einheitlich eine Zahl aus dem Nummernraum dieses Zustands aus (wodurch alle Zustände gleich gewichtet werden)?
Digital Trauma
1
Oh, tut mir leid, ich habe es nicht richtig gelesen. Zustand wird eingegeben.
Digital Trauma
1
Ok, ähnliche Frage für Staaten, die mehrere Formate haben, z IN. Wählen wir einheitlich ein Format aus (eines von 000A, 000AA, 000AAA oder AAA000) und wählen dann eine Zahl aus diesem Format aus (jedes Format wird gleich gewichtet). Oder betrachten wir den Nummernraum für alle Formate für diesen Zustand und wählen aus dem gesamten Nummernraum (größere Formate werden stärker gewichtet)?
Digital Trauma
2
Ich denke, Sie haben "AR" und "OR" aus der Liste der Eingänge ausgelassen, obwohl Sie unten die Plattenformate beschreiben.
Kein Baum

Antworten:

3

Perl 6 , 492 350 Bytes

{$_=('AKIAMSMPVT:7 3AS:4AZGAWA:74ARKSKYLANDOR:3 7CA:173CT:6-5DC:6-4FL:7 52IL:6 5IN:35,36,37,73MD:164MI:7 4,16 52,7 3MN:3-7NV:25-3NH:3 4NJ:52-7NM:3-7,7-3NYNCPATXVAWI:7-4OH:7 4OK:37PR:7-3RI:3-3SC:7 3,3 16TN:52-25UT:52 16'~~/$^a
[..]*?\:(<[\d]+[-\ ]>+)+%\,/)[0].pick;s:g/<[567]>/{[~]
(('A'..'Z')∖<I O Q>).pick xx($/-4)}/;S:g/\d/{[~] (^10).pick xx$/}/}

Probieren Sie es online!

Nach meinem ersten Versuch war ich so weit vorne, dass ich mich nicht sehr bemühte, den Code zu reduzieren. Jetzt habe ich.

Bei meiner Kodierung der Nummernschildmuster geben die Zahlen 1 bis 4 eine Folge von so vielen zufälligen Ziffern an, und die Zahlen 5 bis 7 geben eine Folge von zufällig zulässigen Buchstaben an, die vier weniger lang sind als die Zahl.

Sean
quelle
Behandelst du die Räume?
Zacharý
Ah, nein, ich habe vorher zu enthusiastisch Leerzeichen aus dem Rest des Textes entfernt. Ich habe die Leerzeichen für zwölf zusätzliche Bytes zurückgesetzt.
Sean
6

Python3, 861 821 819 714 678 674 670 662 661 658 596 591 561 555 551 536 Bytes.

-8 Bytes dank @DestructibleLemon ( b=a+... und d=B...), -15 Bytes dank @Felipe Nardi Batista (nutzloses Lambda und Variable)

Und danke an alle im Chat, die beim Golfen geholfen haben!

from random import*
C=choice
Z='000'
A='AAA'
B=A+'-0'+Z
a=A+' '+Z
b=A+'0'+Z
c=a[::-1]
d=B[1:]
print(C(''.join(C(['ABCDEFGHJKLMNPRSTUVWXYZ','0123456789',i]['A0'.find(i)])for i in([a]*5+[Z+'0',b,b,b]+[c]*6+['0'+A+Z,d,d+'0',A+' A00','AA 00'+Z,Z+'A,000AA,000AAA,'+A+Z,'0AA0'+Z,a+'0,0AA A00,'+a,Z+'-'+A,'00A-'+A,Z+' 0'+Z,'A00-'+A,Z+'-AAA,AAA-'+Z]+[B]*6+[a+'0',Z+A,B[:-1],Z+'-'+Z,a+','+c,'A00-00A','A00 0AA'])[[*zip('AIMMVAAGWAKKLNOCDCFIIMMMNNNNNNPTVWOOPRSTU','KASPTSZAARSYADRACTLLNDINVHJMYCAXAIHKRICNT')].index(tuple(input()))]).split(',')))

Probieren Sie es online aus

Anregungen zum Golfen sind willkommen (und erwünscht). Und wenn Sie Fehler entdecken, teilen Sie mir dies bitte über die Kommentare mit!

Zacharý
quelle
Gibt es eine Möglichkeit, ein Element in einer Python-Liste auf das vorherige Element oder ein anderes Element in der Liste festzulegen? Wie, eingestellt IAzu list[0]oder so ähnlich (ich weiß nicht , Python)
Stephen
Nein. Es ist ein Wörterbuch, und ich habe dem Wörterbuch keinen Namen zugewiesen. Es gibt also keine Möglichkeit, darauf zu verweisen.
Zacharý
1
Könnte eine Zuordnung nicht sein b= a+"0"? d könnte sein = B [1:]?
Destructible Lemon
bkann nicht sein a+'0', da ich die Nummernschilder vermasselt habe.
Zacharý
1
561 bis 541 Bytes durch Entfernen des Lambda und Hinzufügen von Wiederholungen zu Listen
Felipe Nardi Batista
6

JavaScript (ES6), 374 368 Byte

s=>(P=n=>parseInt(n,36),R=Math.random,g=F=>F?(' -'+(R()*10|0)+'ABCDEFGHJKLMNPRSTUVWXYZ'[R()*23|0])[F&3]+g(F>>2):'')(P('8cf,4q,8fz,ch6,8hq,xpb,8f3,8jj,xov,6i|ru|356|24f,8fy,xmn|8ji|8cf,ciy,8e2,xm2,ciz,ciy|8e7,xof,xmn,356,8e7,8dm,8cf|ca2,bjf,ca3'.split`,`[P('1k3600d2mha35h7bi00jc000o03000000809l002003n0h3032e0fh4g0h'[P(s)%159%131%70%58])].split`|`.sort(_=>R()-.5)[0]))

Formatiert und kommentiert

Im folgenden Code wurden Datenabschnitte abgeschnitten. Fehlende Teile sind mit gekennzeichnet (...).

s => (                                  // given the state s
  P = n => parseInt(n, 36),             // P = base-36 parsing function
  R = Math.random,                      // R = random generator
  g = F =>                              // g = recursive function taking an encoded format F
    F ?                                 // if the format has not been yet fully processed:
      (                                 //   build a string consisting of:
        ' -' +                          //     0: space, 1: hyphen
        (R() * 10 | 0) +                //     2: a random digit
        'ABCD(...)YZ'[R() * 23 | 0]     //     3: a random uppercase letter (minus I, O, Q)
      )[F & 3] +                        //   pick the next character from this string
      g(F >> 2)                         //   recursive call, dropping the 2 consumed bits
    :                                   // else:
      ''                                //   stop recursion
  )(                                    // initial call to g():
    P(                                  //   base-36 decoding of a format picked from
      '8cf,4q,(...),ca3'.split`,`[      //     a list of binary encoded formats
        P(                              //       accessed through a base-36 decoded index
          '1k36(...)0h'[                //         picked from a lookup-table of 58 entries
            P(s) % 159 % 131 % 70 % 58  //           based on a hash of the state
          ]                             //         end of lookup-table access
        )                               //       end of lookup-table index decoding
      ].split`|`                        //     end of list access / split it on '|'
      .sort(_ => R() - .5)[0]           //     randomly pick a format from this list
    )                                   //   end of format decoding
  )                                     // end of call

Demo

Arnauld
quelle
5

T-SQL, 1104 1100 797 657 Bytes

DECLARE @ CHAR(8)SELECT @=STUFF(value,1,2,'')FROM STRING_SPLIT(CAST(DECOMPRESS(CAST('H4sIAAAAAAAEAEWPUQ6DMAiGr2JCwlM9BKnZ7LTV2E7n7n+QlRbYC3yl8PNDCyIOAOACKcVstCudRYkytPSthUZPUrqM6KhxqC+3ZKNbaSWlNCltNuEJuozzdekITXDygu6xshNkx2u3xJhqREmWGUQqTiDWYpBLGEGkrOgij47N21k1eKdLM3trI+mF+h2tMSJK441qM3nDnQzLx/D8V69guM3mblvkiP1Q/SPwTqbs1XD2zVztKwnbL7p3wV77AcxSbMHfAQAA'as XML).value('.','varbinary(max)'))AS varchar(max)),','),t WHERE s=LEFT(value,2)ORDER BY NEWID()WHILE CHARINDEX('&',@)>0SET @=STUFF(@,CHARINDEX('&',@),1,SUBSTRING('ABCDEFGHJKLMNPRSTUVWXYZ',CAST(1+23*RAND()AS INT),1))WHILE CHARINDEX('#',@)>0SET @=STUFF(@,CHARINDEX('#',@),1,CAST(10*RAND()AS INT))PRINT @

EDIT 1: Über 300 Bytes durch Ändern VALUES()von gespeichert STRING_SPLIT()(nur in SQL 2016 und höher verfügbar)

BEARBEITEN 2: Weitere 140 Bytes mit der hier beschriebenen GZIP-Komprimierung gespeichert . Wir haben uns bereits auf SQL 2016 und höher beschränkt, daher sind diese Funktionen verfügbar.

Die Eingabe erfolgt über die bereits vorhandene Tabelle t mit dem Statuscode in Spalte s . je unsere IO - Standards .

Nach dem Erweitern der komprimierten Zeichenfolge sehen Sie den formatierten Code mit der superlangen Liste der Status, die weggelassen wurden:

DECLARE @ CHAR(8)
SELECT @=STUFF(value,1,2,'')
FROM STRING_SPLIT('AK&&& ###,IA&&& ###,MS&&& ###,...
                         (long string continues)
                   ...,SC### #&&,TN&##-##&,UT&## #&&',','),t
WHERE s=LEFT(value,2)ORDER BY NEWID()

WHILE CHARINDEX('&',@)>0
    SET @=STUFF(@,CHARINDEX('&',@),1,
        SUBSTRING('ABCDEFGHJKLMNPRSTUVWXYZ',CAST(1+23*RAND()AS INT),1))

WHILE CHARINDEX('#',@)>0
    SET @=STUFF(@,CHARINDEX('#',@),1,
        CAST(10*RAND()AS INT))

PRINT @

Also habe ich eine riesige In-Memory-Tabelle erstellt, die aus allen möglichen Paaren von (state, pattern) besteht. Beachten Sie, dass ich keine Zeilen kombiniere, jeder Status separat ist und dass Status wie IN 4 Zeilen haben, eine für jedes Muster.

Wenn ich diese speicherinterne Tabelle mit der Eingabetabelle verbinde, sortiere ich nach NEWID() , wodurch die Reihenfolge randomisiert wird und ein zufälliges Übereinstimmungsmuster für die Variable zurückgegeben wird@ .

Ich ersetze dann einfach jedes &mit einem zufälligen Buchstaben und jedes #mit einer zufälligen Ziffer und gebe das Ergebnis zurück.

BradC
quelle
4

> <> , 967 860 851 Bytes

</b:++d**d85-*i9*i2
v\+?\"00A AAA"
 /5:/
v\+?\"00000 AA"
 /4:/\
v\+?\x"000-AAA"
 /f:/
v\+?\>"AAA-000"
 /1:/
v\+ ?\"A00-00A"
v/cb:/\/"A000"
v\++?\xx"AA000"
v/88:/\x"000AAA"
v\+-?\ >"AAA000"
 /2f:/v\
v\*-?\xx"0000 AAA"
v/8c:/\x"00A AA0"
v\*-?\x>"000 AAA"
v/7c:/\"AA0 000"
v\*+?\"0000"
 /6b:/
v\*-?\"0000-AA"
 /5f:/
v\*-?\"0000AA0"
 /bc:/
v\+-?\"AAA-00A"
 /59:/
v\*+?\"000-AAA"
 /4a:/
v\*- ?\"000-000"
 /*a8:/
v\2+-?\"000AAA0"
 /*a8:/
v\9++?\"00000-AA"
 /*a8:/
v\5++?\"000-A00"
 /*a4:/
v\1+-?\"0000 000"
 /*a4:/
v\3+-?\"0000 AAA"
 /*a5:/
v\3++?\"AA0 00A"
 :63*+\:9a*4+-:aa*6++:73*+
 /*+9:/
v\***?\"000 AAA"
 8*-*$\::9a*-:4
 /7*ae/
v\++*?\"0000AAA"
 :4a*3\:aa*-:cb++:ca*4++:a7++:b+
v/**++/"0000-AAA"
v\***?/"AAA 000"
<ov?="A":v?="0":;?=1l
~!/0\v[0<
 l<1x/?=]!5
 +*2_/?= 1l
 -8::/*(~!*d2$**-2:-6:
^    >?!^"A"+o]
]~</0\v[0<
 l <1x/?=4
 + *2_<v?=1l
^n^?)9:<

Probieren Sie es online aus oder schauen Sie es sich auf dem Fischspielplatz an !

Dieser Code besteht aus zwei Teilen: Anpassen des Status an das Muster und Ersetzen des Musters durch die zufälligen Zeichen. Keines dieser Dinge ist in> <> einfach.

Zunächst lesen wir zwei Zeichen ein und berechnen 2  c 1 - 9  c 2 + 533, wobei c 1 und c 2sind die beiden Zeichencodes. Die 2 und die 9 wurden so gewählt, dass die Formel jedem Zustand einen eindeutigen Wert verleiht, und der Versatz von 533 wurde gewählt, um die Anzahl dieser Werte zu maximieren, die mit nur 3> <> Anweisungen vorgenommen werden können - am Ende waren es 28 von 41 von ihnen. Wir schicken den Fisch dann im Zick-Zack durch den Code, bis er den richtigen Wert findet. An diesem Punkt verlässt er den Zick-Zack, liest das entsprechende Muster und tritt in den schnellen Strom in der äußersten linken Spalte bis zu Teil 2 ein Zustände, insbesondere diejenigen mit einer Auswahl von mehreren Mustern, erforderten einige besondere Überlegungen, aber ich konnte einige Teile des Codes wiederverwenden, um ein paar Bytes zu sparen.

Als nächstes, auch bekannt als Teil 2, müssen wir die "A" und "0" durch zufällige Buchstaben bzw. Zahlen ersetzen. Der einzige zufällige Befehl in> <> ist x, der die Richtung des Fisches nach dem Zufallsprinzip nach oben, unten, links und rechts festlegt - was nicht dazu beiträgt, aus 10 Ziffern oder 23 Buchstaben einheitlich etwas auszuwählen. Schauen wir uns das Zahlenbit an, um zu sehen, wie der Fisch das macht:

]~</0\v[0<
 l <1x<v?=4
 l 1=_?\2*+
^n^?)9:<

Der Fisch kommt von oben rechts herein. Der Fisch baut einen leeren Stapel auf - 0[- dann drückt er zufällig 1oder 0mit gleicher Wahrscheinlichkeit, bis der Stapel die Länge 4 hat:

   /0\v
 l <1x<v?=4
     _

Es kombiniert dann die vier 1s und 0s miteinander, als wären sie Binärziffern - l1=?\2*+- und gibt eine Zahl von 0 bis 15. Wenn das Ergebnis größer als 9 ist, verwirft es alle gerade geleistete Arbeit und versucht es erneut. Andernfalls wird die Nummer gedruckt und fortgesetzt:

]~<   v[0<
     x<

^n^?)9:<

Die Zufallsbuchstaben sind ähnlich, außer dass wir überprüfen, ob das Ergebnis nicht "I", "O" oder "Q" ist ::8-:6-:2-**.

Kein Baum
quelle
3

Mathematica, 635 507 470 Bytes

p=RandomChoice;a_±b_:=a<>b;r=""±Characters@"ABCDEFGHJKLMNPRSTUVWXYZ"~p~#&;j=""±ToString/@0~Range~9~p~#&;m=r@3;o=j@3;x=r@2;u=j@2;z=r@1;t=j@1;k=z±u±"-";w=m±" ";AS=y=j@4;AZ=GA=WA=m±y;CT=x±"-"±j@5;DC=x±"-"±y;FL=w±z±u;IL=x±" "±j@5;IN=p@{o±z,o±x,OK=o±m,s=m±o};CA=t±s;MD=t±x±y;MI=p@{OH=w±y,t±x±" "±z±u,AK=IA=MS=MP=VT=w±o};NV=u±z±"-"±o;NH=o±" "±y;NM=p@{MN=o±"-"±m,PR=m±"-"±o};NY=NC=PA=TX=VA=WI=m±"-"±y;RI=o±"-"±j@3;SC=p@{AR=KS=KY=LA=ND=OR=o±" "±m,VT};NJ=k±m;TN=k±u±z;UT=k±t±x;#&

-165 Bytes von @JungHwanMin

Eingabeformular

[NV]

J42161217
quelle
1
Ich habe Alphabet [] nicht verwendet, da wir 3 Buchstaben (IOQ) ausschließen müssen
J42161217
Hoppla, mein letzter hat nicht funktioniert. Arbeitsversion: 507 Bytes: pastebin.com/4YkkkQrC
JungHwan Min
470 Bytes (CP-1252) unter Verwendung von \[PlusMinus] von : pastebin.com/cGHvSJRi
JungHwan Min
1

PHP, 609 Bytes

<?$k='9 3';$l='3 9';$m='9-4';$f=[AK=>$k,IA=>$k,MS=>$k,MP=>$k,VT=>$k,'AS'=>4,AZ=>94,GA=>94,WA=>94,AR=>$l,KS=>$l,KY=>$l,LA=>$l,ND=>$l,'OR'=>$l,CA=>193,CT=>'8-5',DC=>'8-4',FL=>'9 72',IL=>'8 5',IN=>'37X38X39X93',MD=>184,MI=>'9 31X18 72X9 3',MN=>'3-9',NV=>'27-3',NH=>'3 4',NJ=>'72-9',NM=>'3-9X9-3',NY=>$m,NC=>$m,PA=>$m,TX=>$m,VA=>$m,WI=>$m,OH=>"$k1",OK=>39,PR=>'9-3',RI=>'3-3',SC=>"$kX3 18",TN=>'72-27',UT=>'72 18'];$a=str_split(ABCDEFGHJKLMNPRSTUVWXYZ);$n=range(0,9);$p=explode(X,$f[$argv[1]]);shuffle($p);for(;$c=$p[0][$i++];){if($c<1)echo$c;else for($j=0;$j<$c%6;$j++){echo$c>5?$a[rand(0,22)]:$n[rand(0,9)];}}

Die Hauptidee besteht darin, das Nummernschildmuster mit Ziffern zu codieren, die angeben, wie viele Wiederholungen einer Ziffer oder eines Buchstabens folgen. 1 bis 5 beziehen sich auf die Anzahl der Ziffern, während 7, 8 und 9 sich auf 1, 2 oder 3 Buchstaben beziehen. Mehrere Muster werden durch ein X getrennt, Leerzeichen und Bindestriche bleiben unverändert. Die Statussuche ist eine einfache Suche nach Array-Schlüsseln. Aus Platzgründen werden redundante Zeichenfolgen in Variablen eingefügt.

Ungolfed:

<?php
$f=[
    AK=>'9 3',
    IA=>'9 3',
    MS=>'9 3',
    MP=>'9 3', 
    VT=>'9 3',
    'AS'=>4,
    AZ=>94,
    GA=>94,
    WA=>94,
    AR=>'3 9',
    KS=>'3 9',
    KY=>'3 9',
    LA=>'3 9',
    ND=>'3 9',
    'OR'=>'3 9',
    CA=>193,
    CT=>'8-5',
    DC=>'8-4',
    FL=>'9 72',
    IL=>'8 5',
    IN=>'37X38X39X93',
    MD=>184,
    MI=>'9 31X18 72X9 3',
    MN=>'3-9',
    NV=>'27-3',
    NH=>'3 4',
    NJ=>'72-9',
    NM=>'3-9X9-3',
    NY=>'9-4',
    NC=>'9-4',
    PA=>'9-4',
    TX=>'9-4',
    VA=>'9-4',
    WI=>'9-4',
    OH=>'9 31',
    OK=>39,
    PR=>'9-3',
    RI=>'3-3',
    SC=>'9 3X3 18',
    TN=>'72-27',
    UT=>'72 18'
];
$a=str_split(ABCDEFGHJKLMNPRSTUVWXYZ);
$n=range(0,9);
$p=explode('X',$f[$argv[1]]);
shuffle($p);
for ($i = 0; $i < strlen($p[0]); $i++) {
    $c=$p[0][$i];
    if ($c < 1)
        echo $c;
    else {
        for ($j = 0; $j < $c % 6; $j++){
            echo $c > 5 ? $a[rand(0,22)] : $n[rand(0,9)];
        }
    }
}
YetiCGN
quelle
1

PHP ( Phar ), 495 Bytes

Die binäre Phar - Datei kann heruntergeladen werden hier und kann mit ausgeführt werden php uslic.phar <state code>.

Der zur Generierung des Phar verwendete Basiscode lautet wie folgt (820 Byte):

<?$f=[AK=>'AAA 111',IA=>'AAA 111',MS=>'AAA 111',MP=>'AAA 111',VT=>'AAA 111','AS'=>'1111',AZ=>'AAA1111',GA=>'AAA1111',WA=>AAA1111,AR=>'111 AAA',KS=>'111 AAA',KY=>'111 AAA',LA=>'111 AAA',ND=>'111 AAA','OR'=>'111 AAA',CA=>'1AAA111',CT=>'AA-11111',DC=>'AA-1111',FL=>'AAA A11',IL=>'AA 11111',IN=>'111AX111AAX111AAAXAAA111',MD=>'1AA1111',MI=>'AAA 1111X1AA A11XAAA 111',MN=>'111-AAA',NV=>'11A-111',NH=>'111 1111',NJ=>'A11-AAA',NM=>'111-AAAXAAA-111',NY=>'AAA-1111',NC=>'AAA-1111',PA=>'AAA-1111',TX=>'AAA-1111',VA=>'AAA-1111',WI=>'AAA-1111',OH=>'AAA 1111',OK=>'111AAA',PR=>'AAA-111',RI=>'111-111',SC=>'AAA 111X111 1AA',TN=>'A11-11A',UT=>'A11 1AA'];$a=str_split(ABCDEFGHJKLMNPQRSTUVWXYZ);$n=range(0,9);$p=explode(X,$f[$argv[1]]);shuffle($p);for(;$i<strlen($p[0]);){$c=$p[0][$i++];echo$c==A?$a[rand(0,22)]:($c>0?$n[rand(0,9)]:$c);}

Wenn Sie den Phar selbst aus diesem Code generieren möchten, müssen Sie Folgendes tun:

<?php
$phar = new Phar('uslic.phar', 0, 'u');
$phar->setSignatureAlgorithm(Phar::MD5);
$phar->addFile('s');
$phar['s']->compress(Phar::GZ);
$phar->setStub('<?include"phar://u/s";__HALT_COMPILER();');

Interessanterweise komprimiert dies besser als eine Golfversion .

Der Hexdump der Datei lautet:

3C 3F 69 6E 63 6C 75 64 65 22 70 68 61 72 3A 2F 
2F 75 2F 73 22 3B 5F 5F 48 41 4C 54 5F 43 4F 4D 
50 49 4C 45 52 28 29 3B 20 3F 3E 0D 0A 30 00 00 
00 01 00 00 00 11 00 00 00 01 00 01 00 00 00 75 
00 00 00 00 01 00 00 00 73 34 03 00 00 26 C8 A9 
59 76 01 00 00 E3 82 AE C9 B6 11 00 00 00 00 00
00 55 90 5D 6F 82 30 14 86 FF 8A 17 4D 0A B1 26 
E2 9D 43 34 1D 4C 45 04 19 20 A2 84 2C 04 41 4D 
0C 12 74 CB 92 65 FF 7D A5 AD A3 DC 34 7D CE C7 
FB 9E 73 26 33 50 68 31 B6 B4 29 C4 18 F7 14 45 
81 C8 C4 22 D9 7E 87 5C 91 C2 40 24 88 7D 48 58 
A1 80 0F 2C C5 68 81 45 DA 11 E2 80 B0 C7 5A 7A 
24 00 91 E5 77 68 2F D2 1A 8B E4 18 22 C1 8D 07 
45 D6 69 2D F3 20 C4 C6 1C 28 CC DE D0 5B 84 68 
BE E6 3B 60 BA 3B A3 1E 2F 35 1D A6 8A A3 E6 E1
2F 8E 9E C2 B6 C1 6C 58 B1 6D B6 D7 50 22 85 49 
46 ED E9 B8 D6 80 CD 1F 52 A2 53 10 5A F2 E9 99    
92 B3 6A 94 FE 4B ED B6 B1 91 E3 2D 7B E6 C6 D7 
70 F4 0E BA B8 83 41 D4 C1 B0 9B DD 99 1D DC 2C
85 3D 08 5A FC 06 CD 2C AE D7 96 42 E4 99 7C 32
4A BE DE F6 45 74 99 A6 23 70 F8 2E 44 01 A2 6D
C0 88 E6 12 15 A4 DA FD 51 7F DC AB EB E5 21 E1 
57 DD 78 9B 2F 96 2B 6B 6D 3B EE BB E7 07 DB 70
17 ED 0F B2 0A 4A AD 4E CB 53 2E 0D D1 98 50 A5 
E5 DF D5 F5 76 CC A5 08 81 22 06 69 7D FA 8A 95 
24 91 D5 FB F9 B3 28 AE B9 04 2A 59 2D 6E B5 A4 
82 CB 84 18 5C F3 92 84 E2 21 A9 90 7F 40 A6 D1 
7F 0C 2E FD 7E A2 E6 D9 F9 46 42 1A 9E 81 34 26 
2E 47 62 32 1A C9 C9 8B 04 B2 E9 70 06 CA 67 70 
4C 62 20 93 D5 DF 3F A0 DB 74 9C 07 ED A5 F7 4D 
BA 32 97 A2 E7 9C 83 01 00 00 00 47 42 4D 42 
YetiCGN
quelle
1

Clojure, 502 501 Bytes

#(apply str(for[E[repeatedly]c(rand-nth(cond('#{AK IA MS MP VT}%)["D 3"]('#{AR KS KY LA ND OR}%)["3 D"]('#{AZ GA WA}%)["D4"]1(case % AS["4"]CA["1D3"]CT["C-5"]DC["C-3"]FL["D B1"]IL["C 4"]IN["3B""3C""3D""D2"]MD["1C3"]MI["D 4""1C B2""D 2"]MN["3-C"]NV["2B-2"]NH["3 3"]NJ["B2-C"]NM["3-D""D-2"]OH["D 3"]OK["3C"]PR["D-2"]RI["3-2"]SC["D 3""3 1B"]TN["B2-2"]UT["B2 1B"]["D-4"])))r(cond((set"BCD")c)(E(-(int c)65)(fn[](rand-nth"ABCDEFGHJKLMNPRSTUVWXYZ")))((set"1234")c)(E(-(int c)48)(fn[](rand-int 10)))1[c])]r))

Das Eingabeargument ist ein Symbol , keine Zeichenfolge. So vermeide ich viele Anführungszeichen. B- DWiederholungen codieren A- AAA, 1- 4Wiederholungen codieren 0- 0000.

NikoNyrh
quelle
1

Python 2 , 438 Bytes

import re,random
lambda s,R=range,C=random.choice:re.sub('\d',lambda c:''.join(C(['0123456789','ABCDEFGHJKLMNPRSTUVWXYZ'][c.group()>'4'])for _ in R(int(c.group())%5+1)),C("063;6-3;072;3;7 2,2 06;6-4;51-15;2-7,7-2;7 2;;7 3;;6 4;2 7;2 7;2-2;25,26,27,72;2 7;;7 3,06 51,7 2;7 2;73;;2 3;;7 51;;73;7 2;2 7;;27;2 7;;7 2;7-2;;73;;51-7;;51 06;;2-7;15-2;7 2;;7-3".split(";")["MDCASCTNMSOHILARINDMIAZNHFLWAKSOKYMPRGANJUTMNVTOR".find(s)].split(",")))

Probieren Sie es online!

Lesbare Version: Probieren Sie es online!

Beachten Sie, dass die statesZeichenfolge nur 49 Buchstaben lang ist. Ich habe überlappende Buchstaben so weit wie möglich zu einem zusammengefaltet ( MDDCCAASSC…) und ausgelassen, NY, NC, PA, TX, VA, WIwas damit alle abbilden -1.

In der Liste der codes, 12345bedeutet , dass viele Stellen und 678Mittel (das-5) viele Briefe.

Lynn
quelle
1

C (gcc) , 473 469 Bytes

Danke an ceilingcat für -4 Bytes.

Ein erster schwacher Versuch. Ich vermute, dass es eine Möglichkeit gibt, die Saiten erheblich zu verkürzen.

n,c,d,i;f(char*s){n=0;for(s=strstr("AKnIAnMSnMPnVTnAS`AZrGArWArARfKSfKYfLAfNDfORfCAlCTtDCsFLpILmINbcdqMDkMInojMNhNViNHgNJuNMhxNYyNCyPAyTXyVAyWIyOHoOKdPRxRIaSCoeTNvUTw",s)+2;s[n]>90;n++);for(s="4    3-3  3A   3B   3C   3 1B 3 C  3 4  3-C  2A-3 1B A21B4  1BA3 B 5  C 3  C 4  C A2 C3   C4   B-4  B-5  A2-C A2-2AA2 1BC-3  C-4  "+(s[rand()%n]-96)*5,n=5;d=c=*s++,n--;)for(c>57?i=c-64,c=65:c>47?i=c-48,c=48:(i=1);i--;putchar(d))while(i&&index("IOQ",d=rand()%(c>57?26:10)+c));}

Probieren Sie es online!

Gastropner
quelle
@ceilingcat Schön, Prost!
Gastropner