Dado um dos seguintes como entrada:
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
(com aspas)
"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"
Gere e produza uma matrícula aleatória (uniformemente) do formato correspondente à entrada. Se houver vários formatos (separados por vírgula), use um formato aleatório (uniformemente):
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
Onde A
significa um caractere aleatório no alfabeto maiúsculo menos IOQ
e 0
significa um número aleatório de um dígito ( 0
para 9
).
Toda a informação da Wikipedia . Esses (estados) eram todos os que eu entendia e que não tinham regras instáveis.
Isso é código-golfe , então a resposta mais curta em bytes vence!
code-golf
random
generation
Stephen
fonte
fonte
IN
. Escolhemos uniformemente um formato (um de 000A, 000AA, 000AAA ou AAA000) e, em seguida, escolhemos um número desse formato (cada formato com o mesmo peso). Ou consideramos o espaço numérico para todos os formatos desse estado e escolhemos todo esse espaço numérico (formatos maiores com peso maior)?Respostas:
Perl 6 ,
492350 bytesExperimente online!
Eu estava tão à frente depois da minha primeira tentativa, que não fiz um grande esforço para analisar o código. Agora eu tenho.
Na minha codificação dos padrões das placas, os números de 1 a 4 indicam uma sequência de tantos dígitos aleatórios, e os números de 5 a 7 indicam uma sequência de letras permitidas aleatórias, com comprimento quatro menor que o número.
fonte
Python3,
861821819714678674670662661658596591561555551536 bytes.-8 bytes graças a @DestructibleLemon (
b=a+
... ed=B
...), -15 bytes graças a @Felipe Nardi Batista (lambda e variável inúteis)E obrigado a todos no bate-papo que ajudaram no golfe!
Experimente online
Todas as sugestões de golfe são bem-vindas (e desejadas). E, por favor, se você encontrar algum erro, é só me dizer pelos comentários!
fonte
IA
alist[0]
ou algo assim (eu não sei python)b= a+"0"
? d poderia ser = B [1:]?b
não pode sera+'0'
, como eu estraguei as placas.JavaScript (ES6),
374368 bytesFormatado e comentado
No código a seguir, as seções de dados foram truncadas. As peças ausentes estão marcadas com
(...)
.Demo
Mostrar snippet de código
fonte
T-SQL,
11041100797657bytesEDIT 1: Salvo mais de 300 bytes, alterando
VALUES()
paraSTRING_SPLIT()
(disponível apenas no SQL 2016 e posterior)EDIT 2: salvou outros 140 bytes usando a compactação GZIP, conforme descrito aqui . Já nos restringimos ao SQL 2016 e posterior, portanto, essas funções estão disponíveis.
A entrada é via tabela preexistente t com o código de estado na coluna s , de acordo com nossos padrões de IO .
Depois de expandir a sequência compactada, eis o código formatado, com a super longa lista de estados cortados:
Então, criei uma enorme tabela na memória que consiste em todos os pares possíveis de (estado, padrão). Observe que não estou combinando linhas, cada estado é separado e estados como IN terão 4 linhas, uma para cada padrão.
Quando associo a tabela na memória à tabela de entrada, classifico por
NEWID()
, que randomiza a ordem e retorna um padrão de correspondência aleatória para a variável@
.Depois, substituo cada
&
uma por uma letra aleatória e cada#
uma por um dígito aleatório e retorno o resultado.fonte
> <> ,
967860851 bytesExperimente online ou assista no playground de peixes !
Esse código possui duas partes: correspondendo o estado ao padrão e substituindo o padrão pelos caracteres aleatórios. Nenhuma dessas coisas é fácil em> <>.
Antes de tudo, lemos em dois caracteres e computamos 2 c 1 - 9 c 2 + 533, onde c 1 e c 2são os dois códigos de caracteres. Os 2 e os 9 foram escolhidos de modo que a fórmula atribuísse a cada estado um valor único, e o deslocamento de 533 foi escolhido para maximizar o número desses valores que podem ser feitos usando apenas 3 instruções <> - acabou sendo 28 de 41 deles. Em seguida, enviamos o peixe zig-zagging para baixo através do código até encontrar o valor certo; nesse momento ele escapa do zig-zag, lê o padrão apropriado e entra no fluxo rápido na coluna mais à esquerda até a Parte 2. Alguns dos Os estados, particularmente aqueles com uma escolha de vários padrões, precisavam de uma consideração especial, mas consegui reutilizar algumas partes do código para economizar alguns bytes.
Em seguida, também conhecida como Parte 2, precisamos substituir os "A" se "0" s por letras e números aleatórios, respectivamente. O único comando aleatório em> <> é
x
, que define a direção do peixe aleatoriamente para cima, para baixo, esquerda e direita - não é propício para escolher algo uniformemente entre 10 dígitos ou 23 letras. Vejamos os números pouco para ver como o peixe faz isso:O peixe entra a partir do canto superior direito. O peixe configura uma pilha vazia -
0[
- então empurra aleatoriamente1
ou0
com igual probabilidade até que a pilha tenha comprimento 4:Em seguida, combina os quatro se
1
es0
como se fossem dígitos binários -l1=?\2*+
- fornecendo um número de 0 a 15. Se o resultado for maior que 9, ele descarta todo o trabalho que acabou de fazer e tenta novamente; caso contrário, imprime o número e continua:Fazer as letras aleatórias é a mesma coisa, exceto que também verificamos se o resultado não é "I", "O" ou "Q"
::8-:6-:2-**
.fonte
Mathematica,
635507470 bytes-165 bytes de @JungHwanMin
formulário de entrada
fonte
\[PlusMinus]
: pastebin.com/cGHvSJRiPHP, 609 bytes
A idéia principal é codificar o padrão da placa com dígitos que indicam quantas repetições de um dígito ou letra seguem. 1 a 5 se referem ao número de dígitos, enquanto 7, 8 e 9 se referem a 1, 2 ou 3 letras, respectivamente. Vários padrões são separados por um X, espaços e traços são mantidos como estão. A pesquisa de estado é uma pesquisa simples de chave de matriz, seqüências redundantes são colocadas em variáveis para economizar espaço.
Ungolfed:
fonte
PHP ( Phar ), 495 bytes
O arquivo binário Phar pode ser baixado aqui e pode ser executado com
php uslic.phar <state code>
.O código base usado para gerar o Phar é o seguinte (820 bytes):
Se você deseja gerar o Phar a partir desse código, precisará fazer o seguinte:
Curiosamente, isso comprime melhor do que uma versão mais golfe .
O hexdump do arquivo é:
fonte
Clojure,
502501 bytesO argumento de entrada é um símbolo , não uma sequência. Isso me permite evitar muitas aspas duplas.
B
-D
codificar repetiçõesA
-AAA
,1
-4
codificar repetições0
-0000
.fonte
Python 2 , 438 bytes
Experimente online!
Versão legível: Experimente online!
Observe como a
states
string tem apenas 49 letras. Dobrei as letras sobrepostas em uma o máximo possível (MD
→DC
→CA
→AS
→SC
…) e omiti oNY, NC, PA, TX, VA, WI
que, assim, é mapeado-1
.Na lista de
codes
,12345
significa que muitos dígitos e678
(que −5) significam muitas letras.fonte
C (gcc) ,
473469 bytesObrigado ao ceilingcat por -4 bytes.
Uma primeira tentativa fraca. Eu suspeito que existe uma maneira de encurtar as cordas substancialmente.
Experimente online!
fonte