Створіть номерний знак США


16

Дано одне з наступних вхідних даних:

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

(з цитатами)

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

Створіть та виведіть (рівномірно) випадковий номерний знак формату, що відповідає вводу. Якщо є кілька форматів (розділених комами), використовуйте (рівномірно) випадковий формат:

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

Де Aозначає випадковий символ у великому алфавіті мінус IOQі 0означає випадкове одноцифрове число ( 0до9 ).

Вся інформація з Вікіпедії . Ці (штати) були всі ті, що я зрозумів і які не мали химерних правил.

Це , тому найкоротша відповідь у байтах виграє!


2
@MagicOctopusUrn, так, про те, що різні держави з однаковим форматом не тримають вкладки один на одного, тому вони можуть видавати однакову кількість, а поліцейські повинні дивитись, у якому стані знаходиться табличка
Stephen

1
Простір чисельних чисел для кожного стану змінюється. Ми вважаємо, що 1) розглянемо комбінований простір чисел для всіх станів і рівномірно виберемо з цього (що призведе до більш важких станів із більшими пробілами чисел)? Або ми 2) спочатку рівномірно вибираємо одне з 50 станів, а потім рівномірно вибираємо число з простору чисел цього штату (що зважуватиме всі стани однаково)?
Цифрова травма

1
Пробачте, я не прочитав це належним чином. Стан - це вхід.
Цифрова травма

1
Гаразд, подібне питання для держав, які мають кілька форматів, наприклад IN. Ми рівномірно вибираємо формат (один із 000A, 000AA, 000AAA або AAA000), а потім вибираємо число з цього формату (кожен формат зважується однаково). Або ми вважаємо простір чисел для всіх форматів для цього стану і вибираємо з цього всього простору чисел (більші формати зважуються більше)?
Цифрова травма

2
Я думаю, що ви залишили "AR" та "АБО" зі списку входів, навіть якщо ви описуєте їх формати таблиць нижче.
Не дерево

Відповіді:


3

Perl 6 , 492 350 байт

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

Спробуйте в Інтернеті!

Я був так далеко вперед після моєї першої спроби, я не доклав великих зусиль, щоб спустити код. Тепер я.

У моєму кодуванні шаблонів номерних знаків цифри 1-4 вказують на пробіг такої кількості випадкових цифр, а цифри 5-7 вказують на пробіг випадкових дозволених літер довжиною на чотири менше, ніж число.


Ви обробляєте пробіли?
Zacharý

А, ні, справді, я видаляв пробіли з решти тексту надто захоплено раніше. Я повернув пробіли на дванадцять зайвих байтів.
Шон

6

Python3, 861 821 819 714 678 674 670 662 661 658 596 591 561 555 551 536 байт.

-8 байт завдяки @DestructibleLemon ( b=a+... іd=B ...), -15 байт завдяки @Felipe Nardi Batista (марні лямбда та змінна)

І дякую всім, хто спілкувався в чаті, хто допоміг у цьому гольфу!

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

Спробуйте в Інтернеті

Будь-які пропозиції щодо гольфу вітаються (і бажаються). І, будь ласка, якщо ви помітили якісь помилки, просто скажіть мені через коментарі!


Чи є спосіб встановити елемент у списку python до попереднього або іншого елементу у списку? Мовляв, налаштований IAна list[0]щось подібне (не знаю пітона)
Стівен

Ні. Це словник, і я не призначив ім'я словнику, тому немає способу посилання на нього.
Zacharý

1
не міг бути призначення b= a+"0"? d міг бути = B [1:]?
Руйнуючий лимон

bне може бути a+'0', як я накрутив номерні знаки.
Zacharý

1
561 до 541 байта , видаливши лямбда та додавши повторення до списків
Феліпе Нарді Батіста

6

JavaScript (ES6), 374 368 байт

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]))

Відформатовано та прокоментовано

У наступному коді розділи даних усічені. Відсутні частини позначені знаком (...).

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

Демо


5

T-SQL, 1104 1100 797 657 байт

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: Збереження понад 300 байт шляхом зміни VALUES() на STRING_SPLIT()(доступно лише у SQL 2016 та новіших версіях)

EDIT 2: Збережено ще 140 байт за допомогою стиснення GZIP як описано тут . Ми вже обмежилися SQL 2016 і пізнішими версіями, тому ці функції доступні.

Введення здійснюється через попередньо існуючу таблицю t із кодом стану у стовпці s , в відповідно з нашими стандартами IO .

Після розширення стисненого рядка, ось відформатований код із надрукованим списком станів:

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 @

Тому я створив величезну таблицю пам'яті, що складається з усіх можливих пар (стан, шаблон). Зауважте, що я не поєдную рядки, кожен стан є окремим, і такі стани, як IN, матимуть 4 ряди, по одному для кожного шаблону.

Коли я приєдную цю таблицю пам'яті до таблиці введення, я сортую за NEWID() , який рандомізує порядок і повертає до змінної випадковий шаблон відповідності @.

Потім я просто замінюю кожну &випадкову букву, а кожну #випадковою цифрою і повертаю результат.


4

> <> , 967 860 851 байт

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

Спробуйте в Інтернеті або подивіться це на рибному майданчику !

Цей код має дві частини: відповідність стану до шаблону, а потім заміна шаблону випадковими символами. Жоден із цих речей не є простим в <<>.

Перш за все, ми читаємо в двох символах і обчислюємо 2  c 1 - 9  c 2 + 533, де c 1 і c 2є двома символьними кодами. 2 і 9 були вибрані таким чином, що формула надає кожному стану унікальне значення, і зміщення 533 було вибрано для максимального збільшення кількості цих значень, які можна зробити, використовуючи лише 3> <> інструкції - в кінцевому підсумку це було 28 з з 41 з них. Потім ми надсилаємо рибу зигзагу через код до тих пір, поки вона не знайде потрібне значення, і в цей момент вона уникає зигзагу, зчитує відповідний зразок і вводить швидкий потік у крайньому лівому стовпчику до частини 2. Деякі з держави, зокрема ті, що мають вибір декількох шаблонів, потребували особливого розгляду, але мені вдалося повторно використати деякі фрагменти коду, щоб зберегти кілька байт.

Далі, також як частина 2, ми повинні замінити "A" s і "0" на випадкові букви та цифри відповідно. Єдиною випадковою командою в <<> є те x, що задає напрямок риби випадковим чином вгору, вниз, вліво та вправо - не сприяє вибору рівномірного з 10 цифр або 23 букв. Давайте подивимося на цифри, щоб побачити, як це робить риба:

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

Риба заходить зверху праворуч. Риба встановлює порожній стек - 0[- потім випадковим чином натискає 1або 0з однаковою ймовірністю, поки стек не набере довжину 4:

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

Потім він поєднує чотири 1s і 0s разом, ніби вони двійкові цифри - l1=?\2*+- даючи число від 0 до 15. Якщо результат більший за 9, він відкидає всю роботу, яку тільки що зробив, і повторює спробу; в іншому випадку він друкує номер і продовжує:

]~<   v[0<
     x<

^n^?)9:<

Створення випадкових літер майже однакове, за винятком того, що ми також перевіряємо, що результат не є "Я", "О" чи "Q" ::8-:6-:2-**.


3

Математика, 635 507 470 байт

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 байт від @JungHwanMin

форма введення

[NV]


1
Я не використовував алфавіт [], тому що ми повинні виключити 3 букви (IOQ)
J42161217

Ой, останній мій не працював. Робоча версія: 507 байт: pastebin.com/4YkkkQrC
JungHwan Min

470 байт (CP-1252), використовуючи \[PlusMinus]: pastebin.com/cGHvSJRi
JungHwan Min

1

PHP, 609 байт

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

Основна ідея полягає в кодуванні шаблону номерних знаків цифрами, які вказують на кількість повторень цифри чи літери. 1 - 5 посилається на кількість цифр, тоді як 7, 8 і 9 посилаються на 1, 2 або 3 літери відповідно. Кілька візерунків розділені знаком X, пробіли та тире зберігаються як є. Пошук стану - це простий пошук ключа масиву, надлишкові рядки розміщуються в змінні для економії місця.

Безголівки:

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

1

PHP ( Phar ), 495 байт

Бінарний файл Phar можна завантажити тут і з ним можна запустити php uslic.phar <state code>.

Базовий код, що використовується для створення Phar, наступний (820 байт):

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

Якщо ви хочете генерувати Phar самостійно з цього коду, вам потрібно зробити наступне:

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

Цікаво, що цей компрес краще, ніж більш гольф-версія .

Шістнадцятковий файл файлу:

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 

1

Clojure, 502 501 байт

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

Вхідний аргумент - це символ , а не рядок. Це дозволило мені уникати багатьох подвійних цитат. B- Dкодувати повтори A- AAA, 1- 4кодувати повтори 0- 0000.


1

Python 2 , 438 байт

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

Спробуйте в Інтернеті!

Читаема версія: Спробуйте в Інтернеті!

Зверніть увагу, як statesрядок завдовжки всього 49 літер. Я склав букви, що перекриваються, в одну якнайбільше ( MDDCCAASSC...) і пропустив, NY, NC, PA, TX, VA, WIщо таким чином все відображає -1.

У списку codes, 12345означають , що багато цифр і 678середні (що-5) багато листів.


1

C (gcc) , 473 469 байт

Завдяки стельовій коті на -4 байти.

Перша немічна спроба. Я підозрюю, що є спосіб істотно скоротити струни.

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

Спробуйте в Інтернеті!


@ceilingcat Приємно, ура!
гастропнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.