Scenariusz: jesteś projektantem oprogramowania pracującym dla rządowej firmy, która projektuje tablice rejestracyjne samochodów i innych pojazdów. Zostałeś poproszony o opracowanie oprogramowania, które generuje tablice rejestracyjne. Zanim zaczniesz pracować, twoi szefowie ustanowili te podstawowe zasady.
Tablica rejestracyjna nie może zawierać:
ASS
666
69<any number here>
<any number here>69
KKK
SHT
Zasady i wymagania:
- Tablica rejestracyjna musi być generowana losowo.
- Po wygenerowaniu losowej tablicy rejestracyjnej nie można ponownie wygenerować tej samej tablicy rejestracyjnej.
- Musisz wydać co najmniej 200 unikalnych tablic rejestracyjnych. Możesz wygenerować więcej, jeśli chcesz .
- Możesz przechowywać wygenerowane płytki w pliku, aby je „zapamiętać”.
- Tablica rejestracyjna zawiera 2 sekcje, jedna zawiera tylko trzy litery, a druga zawiera tylko trzy cyfry, oddzielone myślnikiem, jak poniżej:
233-ADF
lubADF-233
. - Możesz używać tylko cyfr i wielkich liter.
- Tablice rejestracyjne można zapisać na stdout lub w pliku.
- Każda „strona” tablicy rejestracyjnej będzie zawierać trzy cyfry lub litery.
- To jest gra w golfa kodowego , więc najkrótsza, najpopularniejsza odpowiedź wygrywa. Zwycięzca zostanie wybrany po siedmiu dniach.
Główne zasady
- Odpowiedź powinna zawierać, ale nie wyłącznie, następujące.
- Nazwa języka.
- Liczba znaków.
- Rozmiar pliku.
- Jak działa kod.
- Sam kod.
- Przykład: znaki Python 234 lub Python 23mb .
Jeśli muszę wyjaśnić wszelkie dodatkowe szczegóły, proszę wspomnieć o tym w komentarzach i dodam je do mojego postu. W każdym razie, powodzenia i wygeneruj mi odpowiednie tablice rejestracyjne!
Aktualizacja 1: Zwycięzca zostanie wybrany nieco wcześniej.
Okazuje się, że muszę wkrótce wybrać się na wycieczkę, więc wybiorę zwycięzcę około 00:00 UTC, 25 lipca. Po wybraniu zwycięzcy możesz nadal przesyłać zgłoszenia, wiedz tylko, że zwycięzca został wybrany. Bai
Aktualizacja 2: Zwycięzcy!
Mamy zwycięzców! Tak! Ser i wino dla wszystkich, którzy wzięli udział! Oto kto wygrał.
- 1. miejsce: Àngel - Bash (95 znaków)
- 2 miejsce: Martin Büttner - Mathematica (182 bajty)
- 2 miejsce: Emilio M Bumachar - Pyg (92?)
- 2 miejsce: Peter Taylor - Golfscript (98 znaków)
- 3 miejsce: Mark Thomas - Ruby (127 znaków)
Wow, trzy remisy na drugim miejscu. Łał. Konkurs się zakończył, ale jeśli chcesz, możesz przesłać zgłoszenia. Bai!
źródło
AAA-
Odpowiedzi:
bash (95 znaków)
Zapisz skrypt jak
m
w folderze ŚCIEŻKI z ustawionym bitem wykonania.Uruchom jako
bash m
. Płytki są przechowywane w pliku pJest to równoważne z uruchomieniem następujących czynności:
Uwaga: Ostatecznie
m
powinno byćexec m
(+5 znaków), aby uniknąć pozostawienia procesów oczekujących na zakończenie (ale możesz mieć tysiące bez większego problemu)Kredyt trafia do http://www.cyberciti.biz/faq/linux-random-password-generator/ za pomysł użycia
tr -dc
źródło
grep -v
Wyklucza zarówno czarną listę, jak i listę płytek, które już wygenerowaliśmy (grep
oczekuje, że p będzie zawierać jeden wzór na linię, ale ponieważ płytki nie zawierają metaznaków wyrażeń regularnych, pasują tylko do siebie). Generujemy tylko jedną lub zero płyt na iterację, więc po każdej iteracji pełna (zaktualizowana) lista płytek do wykluczenia zostanie odczytana przez grep. : DPYG - 92
Teraz jest w stanie wybierać równomiernie ze wszystkich nieużywanych płyt, zachowując specyfikację OP, jednocześnie będąc krótszym o 1 dodatkową postać.
Teoretycznie możliwe jest, że lista 999 płyt będzie zawierać wystarczającą liczbę powtórzeń, tak że przycięty zestaw będzie mniejszy niż 200. Ale szanse na to są nieskończenie małe. W dziesięciu próbach najniższa długość, jaką otrzymałem, wyniosła 994.
EDYCJA: zmieniono 999 na K (czyli pyg dla 1000), aby zapisać dwa znaki za radą bitpwner.
źródło
Mathematica, 182 bajty
Ugh, to długo
Nie golfił
Całkiem proste. Generuje losowe tabliczki i odfiltrowuje duplikaty i zabronione, aż do znalezienia 200.
źródło
GolfScript (98 znaków)
To generuje wszystkie możliwe tablice rejestracyjne w losowej kolejności przy użyciu jakiejś brzydkiej konwersji bazy, a następnie filtrowania. Jest ich wiele, więc nie oczekuj, że wykona się szybko, ale pytanie nie nałożyło żadnych ograniczeń na czas wykonania.
źródło
JavaScript (ES6) - 213
Prawdopodobnie można to poprawić. Testowany na konsoli Firefox.
Zmień ten alert na
console.log()
jeśli chcesz przetestowaćźródło
Rubin -
136133129 znakówOhydny. Myślę jednak, że jest miejsce na ulepszenia. Po prostu upuść kod w
irb
lubpry
wciśnij Enter, aby uruchomić:źródło
Ruby, 127 znaków
Moja próba „czytelnej” wersji Rubiego:
źródło
Python 2.7 - 258 znaków
Nie jestem profesjonalnym programistą ani nic, więc powiedziałbym, że jestem zadowolony z wyniku.
Rozmiar pliku to 4.0 K, uruchom z
python file.py
!źródło
pass
byćcontinue
? Możesz także zapisać niektóre znaki, wcinając je 1 spacją zamiast 4.for i in range(0,200):
może być zastąpionyfor i in range(200):
.continue
.. Ale załatwiłem sprawępass
. Plus jest krótszy. A kiedy próbowałemfor i in range(200)
, zrobiłem tylko 199 ^^, policzyłem je później, tworzącduplicates
zmienną, umieszczającduplicates += 1
przedpass
i licząc wystąpienia dla-
w liście / ciągu.\t
a zastąpienie ich 1 spacją nie zmieniło liczby znaków ... Dzięki za sugestie!if k in t: pass
, ponieważ nic nie robi.Python - 208
Cześć, oto mój problem w generowaniu tablic rejestracyjnych. To rozwiązanie jest podobne do rozwiązania @ bitpwner, ale bez modułu ciągów i zamiast listy na tablicę rejestracyjną zdecydowałem się użyć zestawu, który również pozwala na liczby.
Przykładowe dane wyjściowe:
źródło
Python, 252 bajty
Oto mój wkład. Jestem pod wrażeniem tego, ale wiem, że inni radzili sobie lepiej z Pythonem.
źródło
Python - 165
Ten import ...
Jeśli istnieje potrzeba losowego rozpoczęcia od cyfr lub alfabetów, co nie wydaje mi się, że jest to naprawdę potrzebne, to 190.
źródło
PHP
341324320To było najlepsze, co mogłem zrobić.
Aby uruchomić kod, po prostu zapisz jako plik .php i przejdź do niego na dowolnym serwerze WWW. Spróbuje utworzyć plik czarnej listy p.txt, jeśli jeszcze nie istnieje. Jednak może być konieczne zdefiniowanie go za pomocą pełnej ścieżki serwera, jeśli nie masz dostępu do konta root.
Sam kod jest tutaj przed golfifikacją:
Był tak krótki, jak tylko mogłem go zdobyć :-(
Przykładowe dane wyjściowe
EDYCJA: uporządkowałem kilka instrukcji if, aby użyć krótkiej formy.
źródło
$string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
Delfy, 161 bajtów
Oto moje zdanie na ten temat. Wysyła tablice rejestracyjne do standardowego wyjścia bez linii między nimi. Jeśli LF jest potrzebny (nie jest określony w regułach), to dodaje dodatkowe 4 bajty.
Wersja golfowa:
Nie golfowany:
Jak uruchomić:
źródło
PHP, 267
To jest tak krótkie, jak tylko mogę.
Płytki są przechowywane w pliku „p”.
źródło
R, 229 znaków
Jestem pewien, że można to poprawić:
Uruchom w konsoli, drukuje listę tablic rejestracyjnych.
źródło
Kobra - 198
źródło
ECMAScript 6 -
155168158Ostrzeżenie : 200 dialogi alert (zmiana
alert
doconsole.log
do testu)Edycja : Ups. Oryginalne wersje drukowane duplikaty ...
Edycja 2 : Bliżej oryginalnej partytury teraz - zmieniono z zestawu na tablicę asocjacyjną z kilkoma niezmiernie powielonymi testami, które pozwalają drukować w miarę upływu czasu
Testowany w konsoli Firefox.
źródło
l=x=>String.fromCharCode(65+r()*26);
. Chyba nie wiem, co się dziejel=x=>...
f=a=>b
jest to funkcja ES6, która jest w zasadzie skróconafunction f(a) { b }
i jest obecnie obsługiwana tylko przez (?) Firefox.JavaScript (ES6) 184
Jak zwykle, w teście FireFox konsoli i zmiany
alert
doconsole.log
lub być przygotowany do drukuescape
200 razy.źródło
Python3, 257 znaków
Przykładowe dane wyjściowe:
źródło
;
zamiast\n
.PHP, 167
to 100 znaków mniej niż obecne PHP :)
mam nadzieję że ci się spodoba. W przypadku, gdy jest to dozwolone:
ma tylko 141 znaków, ale nie przetasowuje znaków i liczb. Wszelkie sugestie mile widziane :)
źródło
F #, 264 znaków
Nie jest to język przeznaczony do gry w golfa, ale jestem pewien, że można to poprawić. Używanie Seq.exists z lambda jest dość denerwujące, podobnie jak wiele parenów i brak niejawnej konwersji.
Korzysta z rekurencji, działa wiecznie.
Może być uruchamiany w FSI.
źródło
Python 203
Nie jestem pewien, czy to się liczy technicznie, ale mi się podobało, więc i tak to publikuję. Podczas gdy generuję odpowiedzi pseudolosowo, podobnie jak wszyscy inni, strategicznie wybrałem losowe ziarno, aby nieprawidłowe odpowiedzi nie trafiły do wyniku. Tak więc moja odpowiedź nie jest w stanie wygenerować całego zestawu prawidłowych odpowiedzi, bez wygenerowania nieprawidłowych.
źródło
Perl - 123 znaków
Nie golfowany:
Jeśli ktoś ma pomysły na grę w golfa, daj mi znać, jestem zainteresowany. Jeśli chcesz uzyskać dodatkowe wyjaśnienie części kodu, zostaw komentarz, a ja chętnie wyjaśnię więcej.
źródło
JavaScript - 283
327znakówEdytować:
Po wdrożeniu sugestii Alconja , oto moja nowa wersja:
1) Usuń zmienną: si użyj literału: "\ n" [-4] [323]
2) Usuń "var o =" ", i, r, n, l," [-17] [306]
3) Usuń Zmienna: ti użyj literału: „ASS | KKK | SHT | 666” [-4] [302]
4) Ustaw m = Math.random i użyj zamiast tego „m” [-7] [296]
5) Użyj (m ( ) + „”) zamiast m (). toString () [-6] [290]
6) Usuń niepotrzebne „;” [-7] [283]
Stara wersja: JavaScript - 327 znaków
Jestem pewien, że jest miejsce na ulepszenia ... Jestem dość niedoświadczony w Code-golfing:
Oto sformatowana wersja „Ungolfed” z nazwami „niezminimalizowanych” zmiennych / funkcji:
Oto wersja „debugowania”, którą można wkleić do adresu URL ulubionych / zakładek przeglądarki. Dane wyjściowe są umieszczane w „TEXTAREA” w nowym „oknie” zamiast „alert ()”:
Oto sformatowana wersja „debugowania”:
źródło
var
(wystarczy przypisanie, 323 ), nie potrzebujesz;
s, chyba że pojawi się następna instrukcja (np. ostatni znak w wierszu lub przed a}
, 316 ), uważaj na wszystko, co wymaga więcej miejsca do zadeklarowania / użycia niż tylko wstawianie (np. twojas
zmienna, 312 ), podobnie jak na odwrót, jeśli coś jest używane więcej niż raz (np.Math.random(...)
dor=Math.random ... r(...)
, 307 ,(x+"")
jest krótszy niżx.toString()
, 300