Biorąc pod uwagę jeden z następujących danych wejściowych:
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
(z cytatami)
"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"
Wygeneruj i wyprowadź (jednolicie) losową tablicę rejestracyjną formatu zgodnego z danymi wejściowymi. Jeśli istnieje wiele formatów (oddzielonych przecinkami), użyj (równomiernie) formatu losowego:
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
Gdzie A
oznacza losowy znak wielkimi literami minus IOQ
i 0
oznacza losową liczbę jednocyfrową ( 0
do 9
).
Wszystkie informacje z Wikipedii . Te (stany) były wszystkie te, które zrozumiałem i które nie miały dziwnych zasad.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
code-golf
random
generation
Stephen
źródło
źródło
IN
. Czy jednolicie wybieramy format (jeden z 000A, 000AA, 000AAA lub AAA000), a następnie wybieramy liczbę z tego formatu (każdy format ważony równo). Czy też rozważamy przestrzeń liczbową dla wszystkich formatów dla tego stanu i wybieramy z całej tej przestrzeni liczbowej (większe formaty ważone większe)?Odpowiedzi:
Perl 6 ,
492350 bajtówWypróbuj online!
Byłem tak daleko przed moją pierwszą próbą, że nie poczyniłem wielkiego wysiłku, aby obniżyć kod. Teraz mam.
W moim kodowaniu wzorów tablic rejestracyjnych cyfry 1-4 oznaczają serię tak wielu losowych cyfr, a cyfry 5-7 wskazują serię losowo dozwolonych liter o długości cztery mniejszej niż liczba.
źródło
Python3,
861821819714678674670662661658596591561555551536 bajtów.-8 bajtów dzięki @DestructibleLemon (
b=a+
... id=B
...), -15 bajtów dzięki @Felipe Nardi Batista (bezużyteczna lambda i zmienna)I dzięki wszystkim na czacie, którzy pomogli w grze w golfa!
Wypróbuj online
Wszelkie sugestie dotyczące gry w golfa są mile widziane (i potrzebne). I proszę, jeśli zauważysz jakieś błędy, po prostu powiedz mi za pomocą komentarzy!
źródło
IA
tolist[0]
lub coś w tym stylu (nie znam Pythona)b= a+"0"
? d może być = B [1:]?b
nie może byća+'0'
, bo spieprzyłem tablice rejestracyjne.JavaScript (ES6),
374368 bajtówSformatowane i skomentowane
W poniższym kodzie sekcje danych zostały obcięte. Brakujące części są oznaczone symbolem
(...)
.Próbny
Pokaż fragment kodu
źródło
T-SQL,
1104 1100 797657 bajtówEDYCJA 1: Zapisano ponad 300 bajtów, zmieniając
VALUES()
naSTRING_SPLIT()
(dostępne tylko w SQL 2016 i nowszych)EDYCJA 2: Zaoszczędzono kolejne 140 bajtów, używając kompresji GZIP jak opisano tutaj . Już ograniczyliśmy się do SQL 2016 i późniejszych, więc te funkcje są dostępne.
Wprowadzanie odbywa się za pomocą istniejącej tabeli t z kodem stanu w kolumnie s , zgodnie z naszymi standardami we / wy .
Po rozwinięciu skompresowanego ciągu, oto sformatowany kod, z wycinaną bardzo długą listą stanów:
Stworzyłem więc ogromną tabelę w pamięci składającą się ze wszystkich możliwych par (stan, wzorzec). Zauważ, że nie łączę wierszy, każdy stan jest osobny, a stany takie jak IN będą miały 4 wiersze, po jednym dla każdego wzorca.
Kiedy dołączam tę tabelę w pamięci do tabeli wejściowej, sortuję według
NEWID()
, co losuje kolejność i zwraca losowy wzorzec dopasowania do zmiennej@
.Następnie po prostu zastępuję każdą
&
losową literą, a każdą#
losową cyfrą i zwracam wynik.źródło
> <> ,
967860851 bajtówWypróbuj online lub obejrzyj na placu zabaw dla ryb !
Ten kod składa się z dwóch części: dopasowanie stanu do wzorca, a następnie zastąpienie wzorca losowymi znakami. Żadna z tych rzeczy nie jest łatwa w> <>.
Przede wszystkim czytamy dwoma znakami i obliczamy 2 c 1 - 9 c 2 + 533, gdzie c 1 i c 2to dwuznakowe kody. 2 i 9 zostały wybrane tak, że formuła nadaje każdemu stanowi unikalną wartość, a przesunięcie 533 zostało wybrane, aby zmaksymalizować liczbę tych wartości, które można wykonać za pomocą tylko 3 instrukcji <> - ostatecznie wyszło 28 z 41 z nich. Następnie wysyłamy rybę zygzakowatą w dół przez kod, aż znajdzie odpowiednią wartość, w którym to momencie ucieka zygzakowatym, odczytuje odpowiedni wzorzec i wchodzi do szybkiego strumienia w lewej kolumnie do części 2. Niektóre z stany, szczególnie te z wyborem wielu wzorców, wymagały szczególnej uwagi, ale udało mi się ponownie użyć niektórych fragmentów kodu, aby zaoszczędzić kilka bajtów.
Następnie, aka Część 2, musimy zastąpić litery „A” i „0” odpowiednio losowymi literami i cyframi. Jedynym losowym poleceniem w> <> jest to
x
, że losowo ustawia kierunek ryby z góry, dołu, lewej i prawej - nie sprzyja wybieraniu czegoś jednorodnie z 10 cyfr lub 23 liter. Spójrzmy na bit liczb, aby zobaczyć, jak robi to ryba:Ryba wchodzi od prawego górnego rogu. Ryba ustawia pusty stos -
0[
- następnie losowo przepycha1
lub0
z jednakowym prawdopodobieństwem, aż stos osiągnie długość 4:Następnie łączy cztery
1
si0
razem, jak gdyby były cyframi binarnymi -l1=?\2*+
- dając liczbę od 0 do 15. Jeśli wynik jest większy niż 9, odrzuca całą pracę, którą właśnie wykonał i próbuje ponownie; w przeciwnym razie drukuje numer i kontynuuje:Tworzenie losowych liter jest prawie takie samo, z tym wyjątkiem, że sprawdzamy również, czy wynikiem nie jest „I”, „O” lub „Q” z
::8-:6-:2-**
.źródło
Mathematica,
635507470 bajtów-165 bajtów od @JungHwanMin
formularz wejściowy
źródło
\[PlusMinus]
: pastebin.com/cGHvSJRiPHP, 609 bajtów
Główną ideą jest zakodowanie wzoru tablicy rejestracyjnej za pomocą cyfr wskazujących, ile powtórzeń cyfry lub litery następuje. Od 1 do 5 odnoszą się do liczby cyfr, a 7, 8 i 9 odnoszą się odpowiednio do 1, 2 lub 3 liter. Wiele wzorów jest oddzielonych znakiem X, spacje i myślniki są zachowywane bez zmian. Wyszukiwanie stanu to proste wyszukiwanie klucza tablicy, nadmiarowe ciągi znaków są umieszczane w zmiennych w celu zaoszczędzenia miejsca.
Nie golfowany:
źródło
PHP ( Phar ), 495 bajtów
Binarny plik Phar można pobrać tutaj i uruchomić go
php uslic.phar <state code>
.Kod podstawowy użyty do wygenerowania Phara jest następujący (820 bajtów):
Jeśli chcesz sam wygenerować Phara z tego kodu, musisz wykonać następujące czynności:
Co ciekawe, kompresuje się lepiej niż wersja bardziej golfowa .
Zrzut heksowy pliku to:
źródło
Clojure,
502501 bajtówArgument wejściowy jest symbolem , a nie ciągiem. Pozwoliło mi to uniknąć wielu podwójnych cudzysłowów.
B
-D
kodowanie powtórzeńA
-AAA
,1
-4
kodowanie powtórzeń0
-0000
.źródło
Python 2 , 438 bajtów
Wypróbuj online!
Wersja do odczytu: Wypróbuj online!
Zwróć uwagę, że
states
ciąg ma tylko 49 liter. Złożyłem nakładające się litery w jak najwięcej (MD
→DC
→CA
→AS
→SC
…) i pominąłemNY, NC, PA, TX, VA, WI
wszystkie, które w ten sposób odwzorowują-1
.Na liście
codes
,12345
oznacza to, że wiele cyfr i678
średnie (that-5) wiele listów.źródło
C (gcc) ,
473469 bajtówDzięki pułapowi cat na 4 bajty.
Pierwsza słaba próba. Podejrzewam, że istnieje sposób na znaczne skrócenie strun.
Wypróbuj online!
źródło