Buat Plat Lisensi AS

16

Diberikan salah satu dari yang berikut sebagai masukan:

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

(dengan kutipan)

"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"

Menghasilkan dan mengeluarkan plat nomor acak (seragam) dari format yang cocok dengan input. Jika ada beberapa format (dipisahkan koma), gunakan format acak (seragam):

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

Dimana Aartinya karakter acak dalam huruf kecil minus IOQdan0 berarti angka satu digit acak ( 0ke 9).

Semua informasi dari Wikipedia . Ini (negara bagian) adalah semua yang saya pahami dan yang tidak memiliki aturan yang salah.

Ini , jadi jawaban tersingkat dalam byte menang!

Stephen
sumber
2
@MagicOctopusUrn heh, tentang itu, negara-negara yang berbeda dengan format yang sama tidak saling mengawasi, sehingga mereka berdua bisa mengeluarkan nomor yang sama, dan polisi harus melihat untuk melihat dari negara mana pelat itu berasal
Stephen
1
Ruang nomor ukuran untuk setiap negara bervariasi. Apakah kita 1) mempertimbangkan ruang angka gabungan untuk semua negara bagian dan secara seragam memilihnya (yang akan lebih berat menyatakan dengan ruang angka lebih besar)? Atau apakah kita 2) pertama-tama secara seragam memilih satu dari 50 negara bagian dan kemudian secara seragam memilih angka dari ruang angka negara bagian tersebut (yang akan memberi bobot semua negara bagian secara setara)?
Digital Trauma
1
Oh maaf saya tidak membacanya dengan benar. Negara adalah input.
Digital Trauma
1
Oke, pertanyaan serupa untuk negara yang memiliki banyak format, mis IN. Apakah kita secara seragam memilih format (salah satu dari 000A, 000AA, 000AAA atau AAA000), lalu memilih angka dari format tersebut (masing-masing format memiliki bobot yang sama). Atau apakah kita mempertimbangkan ruang angka untuk semua format untuk keadaan itu dan memilih dari seluruh ruang angka (format yang lebih besar berbobot lebih besar)?
Digital Trauma
2
Saya pikir Anda meninggalkan "AR" dan "ATAU" dari daftar input, meskipun Anda menggambarkan format pelat mereka di bawah ini.
Bukan pohon

Jawaban:

3

Perl 6 , 492 350 byte

{$_=('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$/}/}

Cobalah online!

Saya jauh di depan setelah upaya pertama saya, saya tidak melakukan banyak upaya untuk memangkas kode. Sekarang sudah.

Dalam penyandian saya pada pola plat nomor, angka 1-4 menunjukkan jangka dari banyak digit acak, dan angka 5-7 menunjukkan run dari huruf yang diizinkan secara acak, dengan panjang empat kurang dari nomor.

Sean
sumber
Apakah Anda menangani spasi?
Zacharý
Ah, tidak, memang, saya menghapus spasi dari sisa teks terlalu antusias sebelumnya. Saya telah mengembalikan spasi untuk dua belas byte tambahan.
Sean
6

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

-8 byte berkat @DestructibleLemon ( b=a+... dand=B ...), -15 byte terima kasih kepada @Felipe Nardi Batista (lambda dan variabel tidak berguna)

Dan terima kasih kepada semua orang yang mengobrol yang membantu golf ini!

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(',')))

Cobalah online

Setiap saran bermain golf disambut (dan diinginkan). Dan, tolong, jika Anda menemukan kesalahan, katakan saja melalui komentar!

Zacharý
sumber
Apakah ada cara untuk mengatur item dalam daftar python ke item sebelumnya, atau item lain dalam daftar? Seperti, set IAke list[0]atau sesuatu seperti itu (saya tidak tahu python)
Stephen
Tidak. Ini kamus, dan saya tidak memberikan nama ke kamus, jadi tidak ada cara untuk merujuknya.
Zacharý
1
tidak bisakah penugasan itu b= a+"0"? d bisa = B [1:]?
Lemon Destructible
b tidak mungkin a+'0' , karena saya mengacaukan plat nomor.
Zacharý
1
561 ke 541 byte dengan menghapus lambda dan menambahkan pengulangan ke daftar
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]))

Diformat dan dikomentari

Dalam kode berikut, bagian data telah terpotong. Bagian yang hilang ditandai dengan (...).

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
sumber
5

T-SQL, 1104 1100 797 657 byte

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: Disimpan lebih dari 300 byte dengan mengubah VALUES()ke STRING_SPLIT()(hanya tersedia di SQL 2016 dan yang lebih baru)

EDIT 2: Menyimpan 140 byte lainnya dengan menggunakan kompresi GZIP seperti dijelaskan di sini . Kami telah membatasi diri untuk SQL 2016 dan yang lebih baru, jadi fungsi-fungsi ini tersedia.

Input melalui tabel yang sudah ada t dengan kode Negara di kolom s , sesuai standar IO kami .

Setelah memperluas string terkompresi, inilah kode yang diformat, dengan daftar status super panjang yang terpotong:

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 @

Jadi saya membuat tabel besar di memori yang terdiri dari semua pasangan yang mungkin (status, pola). Perhatikan bahwa saya tidak menggabungkan baris, setiap negara bagian terpisah, dan negara bagian seperti IN akan memiliki 4 baris, satu untuk setiap pola.

Ketika saya bergabung dengan tabel di memori ke tabel input, saya urutkan berdasarkan NEWID() , yang mengacak urutan dan mengembalikan pola pencocokan acak ke variabel @.

Saya kemudian hanya mengganti masing &- masing dengan huruf acak, dan masing #- masing dengan angka acak dan mengembalikan hasilnya.

BradC
sumber
4

> <> , 967 860 851 byte

</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:<

Cobalah online , atau tonton di taman bermain ikan !

Kode ini memiliki dua bagian: mencocokkan keadaan dengan pola, lalu mengganti pola dengan karakter acak. Tak satu pun dari hal-hal ini mudah di> <>.

Pertama-tama, kita membaca dalam dua karakter, dan menghitung 2  c 1 - 9  c 2 + 533, di mana c 1 dan c 2adalah dua kode karakter. 2 dan 9 dipilih sehingga rumus memberikan masing-masing negara nilai unik, dan offset 533 dipilih untuk memaksimalkan jumlah nilai-nilai ini yang dapat dibuat hanya menggunakan 3> <> instruksi - itu akhirnya menjadi 28 keluar dari 41 dari mereka. Kami kemudian mengirim ikan zig-zag ke bawah melalui kode sampai menemukan nilai yang tepat, pada titik itu lolos dari zig-zag, membaca pola yang sesuai dan memasuki aliran cepat di kolom paling kiri ke Bagian 2. Beberapa dari menyatakan, terutama yang dengan pilihan beberapa pola, memerlukan beberapa pertimbangan khusus, tetapi saya berhasil menggunakan kembali beberapa bagian dari kode untuk menyimpan beberapa byte.

Selanjutnya, alias Bagian 2, kita harus mengganti "A" dan "0" masing-masing dengan huruf dan angka acak. Satu-satunya perintah acak dalam> <> adalah x, yang menetapkan arah ikan secara acak dari atas, bawah, kiri dan kanan - tidak kondusif untuk memilih sesuatu yang seragam dari 10 digit atau 23 huruf. Mari kita lihat angka-angkanya untuk melihat bagaimana ikan melakukannya:

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

Ikan masuk dari kanan atas. Ikan menyiapkan tumpukan kosong - 0[- lalu mendorong secara acak 1atau 0dengan probabilitas yang sama hingga tumpukan tersebut memiliki panjang 4:

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

Ini kemudian menggabungkan keempat 1dan 0bersama-sama seolah-olah mereka adalah digit biner - l1=?\2*+- memberikan angka dari 0 hingga 15. Jika hasilnya lebih besar dari 9, itu membuang semua pekerjaan yang baru saja dilakukan dan mencoba lagi; jika tidak, ia mencetak nomor dan melanjutkan:

]~<   v[0<
     x<

^n^?)9:<

Membuat huruf acak hampir sama, kecuali kami juga memeriksa bahwa hasilnya tidak "I", "O" atau "Q" dengan ::8-:6-:2-**.

Bukan pohon
sumber
3

Mathematica, 635 507 470 byte

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 byte dari @JungHwanMin

formulir input

[NV]

J42161217
sumber
1
Saya tidak menggunakan Alphabet [] karena kami harus mengecualikan 3 huruf (IOQ)
J42161217
Ups, yang terakhir tidak berfungsi. Versi kerja: 507 bytes: pastebin.com/4YkkkQrC
JungHwan Min
470 byte (CP-1252) dengan menggunakan \[PlusMinus]: pastebin.com/cGHvSJRi
JungHwan Min
1

PHP, 609 byte

<?$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)];}}

Gagasan utamanya adalah menyandikan pola pelat nomor dengan angka yang menunjukkan berapa banyak pengulangan angka atau huruf yang diikuti. 1 hingga 5 mengacu pada jumlah digit sementara 7, 8 dan 9 merujuk pada 1, 2 atau 3 huruf, masing-masing. Banyak pola dipisahkan oleh tanda X, spasi dan garis dijaga apa adanya. Pencarian status adalah pencarian kunci array sederhana, string redundan dimasukkan ke dalam variabel untuk menghemat ruang.

Tidak Terkumpul:

<?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
sumber
1

PHP ( Phar ), 495 byte

File Phar biner dapat diunduh sini dan dapat dijalankan dengan php uslic.phar <state code>.

Kode dasar yang digunakan untuk menghasilkan Phar adalah sebagai berikut (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);}

Jika Anda ingin membuat Phar sendiri dari kode itu, Anda harus melakukan yang berikut:

<?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();');

Cukup menarik, kompres ini lebih baik daripada versi yang lebih golf .

Hexdump dari file tersebut adalah:

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
sumber
1

Clojure, 502 501 byte

#(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))

Argumen input adalah simbol , bukan string. Ini biarkan saya menghindari banyak tanda kutip ganda. B- Dencode repetitions A- AAA, 1- 4encode repetitions 0- 0000.

NikoNyrh
sumber
1

Python 2 , 438 byte

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(",")))

Cobalah online!

Versi yang dapat dibaca: Coba online!

Perhatikan bagaimana statesstring hanya 49 huruf. Saya melipat huruf yang tumpang tindih menjadi satu sebanyak mungkin ( MDDCCAASSC...) dan menghilangkan NY, NC, PA, TX, VA, WIsemua peta-1 .

Dalam daftar codes, 12345berarti banyak digit dan 678rata - rata (− 5) banyak huruf.

Lynn
sumber
1

C (gcc) , 473 469 byte

Berkat ceilingcat untuk -4 byte.

Upaya lemah pertama. Saya menduga ada cara untuk mempersingkat string secara substansial.

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));}

Cobalah online!

gastropner
sumber
@ceilingcat Bagus, tepuk tangan!
gastropner