W jednym z naszych projektów w pracy niedawno odkryliśmy szczególnie dużą metodę generowania ciągu 6 znaków z 15 znaków alfabetu. Kilku z nas twierdziło: „Założę się, że możemy uzyskać to w jednej linii”, co rozpoczęło małą wewnętrzną grę w golfa kodowego.
Twoim zadaniem jest pokonanie nas, co bez wątpienia nie potrwa długo!
Oryginalny algorytm używał alfabetu 0-9A-E, ale eksperymentowaliśmy z innymi alfabetami. Istnieją zatem trzy podzadania.
- Wygeneruj
6
ciąg znaków losowo, wybierając dowolny dowolny15
alfabet zakodowany na stałeABC123!@TPOI098
. (To tylko przykład i powinien być dostosowywany bez wpływu na liczbę bajtów). - Wygeneruj
6
ciąg znaków losowo wybierając z15
alfabetu znaków0123456789ABCDE
. - Wygeneruj
6
ciąg znaków losowo wybierając z wybranego15
alfabetu znaków (tylko znaki do wydruku).
Każda postać powinna mieć równe szanse wyboru, a powtórzenie powinno być możliwe.
Najlepsze, jakie udało nam się wykonać dla każdego podzadania, to:
- „ABC123! @ TPOI098” -
24 bytes
- „0123456789ABCDE” -
21 bytes
- Alfabet niestandardowy -
13 bytes
Twój wynik to suma bajtów w rozwiązaniu każdego podzadania. tzn. nasz wynik wynosi obecnie 58.
Próbowaliśmy używać między innymi CJam i Ruby. Oryginał był w C #. Używaj dowolnego języka, który ci się podoba, ale będziemy zainteresowani rozwiązaniem w tych językach
źródło
Odpowiedzi:
Galaretka , 38 bajtów
TryItOnline łączy A , B i C .
Odp . :
ABC123!@£POI098
22 bajtów(myśląc o kompresji, aby ją zmniejszyć)
B :
0123456789ABCDE
, 8 bajtów:C :
123456789ABCDEF
(wybór), 8 bajtów:W jaki sposób?
źródło
CJam (23 + 14 + 10 = 47 bajtów)
Dowolny alfabet: 23 bajty ( demo online )
Alfabet szesnastkowy: 14 bajtów ( demo online )
Niestandardowy alfabet
ABCDEFGHIJKLMNO
:, 10 bajtów ( demo online )Sekcja
Interesujący jest układ szesnastkowy:
Sześć znaków pozostawia się na stosie i drukuje automatycznie.
źródło
AbHb
jest genialny. Myślałem o tym ogólnym podejściu, ale_9>7*+
było za długo.Perl, 46 + 26 + 26 = 98 bajtów
Wiele zasługa @Dom Hastings za uratowanie 13 bajtów!
3 programy są prawie identyczne, z wyjątkiem zmieniającego się alfabetu.
Alfabet zakodowany na stałe (
ABC123!@)POI098
w tym przykładzie) -> 46 bajtów:say map{substr"ABC123!@)POI098",15*rand,1}1..6
Naprawiono alfabet
0123456789ABCDE
-> 26 bajtów:printf"%X",rand 15for 1..6
0123456789ABCDE
W takim przypadku niestandardowy alfabet -> 26 bajtów:printf"%X",rand 15for 1..6
Możesz umieścić je wszystkie w pliku, aby je uruchomić:
(
say "";
są tutaj, aby poprawić format wyjściowy)źródło
say
:say map{("ABC123!@)POI098"=~/./g)[rand 15]}1..6
isay map{(A..O)[rand 15]}1..6
. Po drugie możesz użyćprintf
:printf"%X",rand 15for 1..6
aby zapisać 11 ponad wszystko! Jestem pewien, że Ton może doradzić ci magiczną magię, aby zaoszczędzić więcej!substr
zapisuje inny:say map{substr"ABC123!@)POI098",15*rand,1}1..6
printf"%X"
,substr..rand
imap
, to jest trochę mniej oczywiste, więc pozwalam ludziom cieszyć się perlową magią bez spoilerów! : DR, 33 + 43 + 59 = 135 bajtów
Arbitralny alfabet na stałe (zmień ciąg, aby zmienić alfabet):
Alfabet
[0-9A-E]
:Alfabet zdefiniowany przez użytkownika od standardowego:
Wszystkie przypadki wypisują słowo wyjściowe na standardowe wyjście.
źródło
JavaScript (ES6),
167166164163 bajtówZapisano 1 bajt dzięki Neilowi
Zapisano 2 bajty dzięki ETHproductions
Zapisano 1 bajt dzięki premek.v
Na stałe:
"ABC123!@TPOI098"
(58 bajtów)Naprawiono:
"0123456789ABCDE"
(5857 bajtów)Niestandardowy:
"()+.1=>?M[afhnt"
(514948 bajtów)źródło
(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''
oszczędza bajt.1/8+Math
jest świetne :).1+JSON
jest lepiej;)JSON+f
([object JSON](n
=>" (JNOS[]bcejnot"
)JavaScript (ES6), 184 bajty
Alfabet niestandardowy: 66 bajtów
0–9 A – E: 63 bajty
0–9 a – e: 55 bajtów
(Odejmij 6 bajtów, jeśli dopuszczalna jest przypadkowość oparta na dacie).
źródło
**
:_=>((Math.random()+1)*15**6|0).toString(15).slice(1)
f=
liczbę bajtówq, 42 bajty
ZA
19 bajtów
b
14 bajtów
do
9 bajtów
(używa pierwszych piętnastu liter alfabetu)
źródło
Julia (36 + 26 + 21 = 83)
źródło
CJam, 48 bajtów
Dowolny alfabet, 23 bajty:
Wypróbuj online!
Cyfry szesnastkowe, 15 bajtów:
Wypróbuj online!
Alfabet
ABCDEFGHIJKLMNO
, 10 bajtów:Wypróbuj online!
źródło
~c
zamiast'A+
zwraca coś technicznie możliwego do wydruku.Rubinowy 47 + 37 + 31 = 115
Na stałe: „ABC123! @ TPOI098” (47)
Naprawiono: „0123456789ABCDE” (37)
Niestandardowe: „ABCDEFGHIJKLMNO” (31)
źródło
05AB1E , 43 bajty
Alfabet arbitrażowy (
ABC123!@TPOI098
), 23 bajty Wypróbuj onlinePrawie alfabet szesnastkowy (
0123456789ABCDE
), 10 bajtów Wypróbuj onlineNiestandardowy alfabet (
abcdefghijklmno
), 10 bajtów Wypróbuj onlineźródło
Python 2, 70 + 70 + 64 = 204 bajty
Niestety drugi przykład jest łatwiejszy przy pierwszej metodzie niż coś podobnego
choice([randint(48,57)),choice(65,69)])
źródło
from random import*
? Myślę, że możesz użyćimport random
irandom.choice
przynajmniej w pierwszych dwóch przykładach.import random random.choice
ma 27 lat, alefrom random import* choice
ma 26 lat, a takżeimport random as r r.choice
27format(randrange(8**8),'X')
.F
Vitsy, 27 +
2422 +1310 =646259 bajtów# 1:
Wypróbuj online!
# 2:
Wypróbuj online!
# 3:
Gdzie są dostępne postacie:
Wypróbuj online!
źródło
J, 24 + 24 +
1810 = 58 bajtów8 bajtów zapisanych dzięki milom!
Tak, drugi ciąg nie jest łatwo kompresowalny w J:
Jeśli alfabet szesnastkowy jest w porządku, oznacza to, że istnieje
,hfd?6#15
9 bajtów, jak zauważył @miles.W każdym razie
?6#15
jest 6 liczb losowych od 0 do 15;{~
jest na wynos.u:
konwertuje liczby na znaki. Ostatni przykład kodujeABCDEFGHIJKLMNOP
.Bonus: ogólny przypadek
{~6?@##
jest z grubsza:źródło
hfd
który konwertuje do h ex f rom d ecimal. Możesz uzyskać rozwiązanie 9-bajtowe za pomocą,hfd?6#15
. Ostatni przypadek, żeby coś łatwo odczytać, używa alfabetu od'A'
10-bajtowego rozwiązaniau:65+?6#15
, co daje w sumie 24 + 9 + 10 = 45.PHP, 46 + 36 + 35 = 117 bajtów
Na stałe (46 bajtów)
(47 bajtów)Szesnastkowy (małe litery) (36 bajtów)
Dla wielkich liter 46 bajtów w wersji na stałe.
Niestandardowy (AO) (35 bajtów)
źródło
Scala, 154 bajtów
Alfabet na stałe (54 bajty):
Alfabet szesnastkowy (54 bajty):
Alfabet niestandardowy
ABCDEFGHIJKLMNO
(47 bajtów):Wyjaśnienie:
'A'to'O'
tworzy sekwencję 15 znaków, od A do Oźródło
Pypeć , 42 bajty
Alfabet na stałe, 22 bajty:
Cyfry szesnastkowe, 11 bajtów:
Pierwsze 15 małych liter, 9 bajtów:
Wyjaśnienie
Wszystkie trzy programy rozpoczynają się od
L6O
: zapętlają 6 razy i wyświetlają dane wyrażenie.RC"..."
: Losowy wybór znaku z zakodowanego ciąguRR15TB16
: RandRange (15), przekonwertowany na bazę 16z@RR15
: małe literyz
, indeksowane RandRange (15)Wypróbuj online!
źródło
Skript / skQuery , 108 bajtów
Na stałe (43 bajty):
0123456789ABCDE (34 bajty):
Wybór (31 bajtów):
źródło
`
w lewo?Jolf, 26 + 14 + 13 = 51 bajtów
Alfabet niestandardowy, 24 bajty. Wypróbuj tutaj!
Alfabet 0-9A-E, 14 bajtów. Wypróbuj tutaj!
lp^0wά
tolp
(0-Z) plastry (l
) od0
do15
(wά
).Alfabet 1-9A-F, 13 bajtów. Wypróbuj tutaj!
lp^1ά
jest taki sam jak powyżej, z wyjątkiem od1
do16
.Ogólna metoda:
Inne próby (przy użyciu kompresji ciągów):
źródło
PowerShell v2 +, 45 + 44 + 37 = 126 bajtów
Naprawiono alfabet, 45 bajtów
Alfabet prawie szesnastkowy, 44 bajty
Alfabet niestandardowy (od A do O), 37 bajtów
Wszystkie mają ten sam wzorzec - pętla od
0
do5
, każda iteracja wybieraRandom
znak lub wartość ASCII, wchar
razie potrzeby rzutuje ją na tablicę i-join
łączy w ciąg. Ten ciąg jest pozostawiony w potoku, a dane wyjściowe są niejawne.Przykłady
źródło
Pyke, 35 bajtów
Dowolny alfabet, 20 bajtów
Wypróbuj tutaj!
Alfabet szesnastkowy, 8 bajtów
Wypróbuj tutaj!
Niestandardowy alfabet, 7 bajtów
Wypróbuj tutaj!
Wybrany alfabet:
abcdefghijklmno
źródło