Em um de nossos projetos em andamento, recentemente descobrimos um método particularmente grande para gerar uma sequência de 6 caracteres a partir de um alfabeto de 15 caracteres. Alguns de nós alegaram "eu aposto que podemos colocar isso em uma linha", que iniciou um pequeno jogo interno de código de golfe.
Sua tarefa é nos vencer, o que, sem dúvida, não vai demorar!
O algoritmo original usava o alfabeto 0-9A-E, mas experimentamos outros alfabetos. Existem, portanto, três subtarefas.
- Gere uma
6
sequência de caracteres selecionando aleatoriamente a partir de um15
alfabeto arbitrário de caracteres codificados comoABC123!@TPOI098
. (Este é apenas um exemplo e deve ser personalizável sem afetar a contagem de bytes.) - Gere uma
6
sequência de caracteres selecionando aleatoriamente a partir de um15
alfabeto de caracteres0123456789ABCDE
. - Gere uma
6
sequência de caracteres selecionando aleatoriamente a partir de um15
alfabeto de caracteres de sua escolha (somente caracteres imprimíveis).
Cada personagem deve ter chances iguais de seleção e repetição deve ser possível.
O melhor que conseguimos gerenciar para cada uma das subtarefas é:
- "ABC123! @ TPOI098" -
24 bytes
- "0123456789ABCDE" -
21 bytes
- Alfabeto personalizado -
13 bytes
Sua pontuação é a soma dos bytes na solução de cada subtarefa. ou seja, nossa pontuação é atualmente 58.
Tentamos usar, entre outros, CJam e Ruby. O original estava em c #. Use qualquer idioma que você quiser, mas estaremos interessados em ver soluções nesses idiomas, particularmente
fonte
Respostas:
Gelatina , 38 bytes
TryItOnline liga A , B , e C .
R :
ABC123!@£POI098
22 bytes(pensando em uma compressão para diminuir esta)
B :
0123456789ABCDE
8 bytes:C :
123456789ABCDEF
(escolha), 8 bytes:Quão?
fonte
CJam (23 + 14 + 10 = 47 bytes)
Alfabeto arbitrário: 23 bytes ( demonstração online )
Alfabeto hexadecimal: 14 bytes ( demonstração online )
Alfabeto personalizado:,
ABCDEFGHIJKLMNO
10 bytes ( demonstração online )Dissecação
O hexadecimal é o interessante:
Os seis caracteres são deixados na pilha e impressos automaticamente.
fonte
AbHb
é brilhante. Eu pensei sobre essa abordagem geral, mas_9>7*+
foi muito longo.Perl, 46 + 26 + 26 = 98 bytes
Muito do crédito vai para @Dom Hastings por economizar 13 bytes!
Os 3 programas são praticamente idênticos, exceto pelo alfabeto que muda.
Alfabeto codificado (
ABC123!@)POI098
neste exemplo) -> 46 bytes:say map{substr"ABC123!@)POI098",15*rand,1}1..6
Alfabeto fixo
0123456789ABCDE
-> 26 bytes:printf"%X",rand 15for 1..6
Alfabeto personalizado
0123456789ABCDE
nesse caso -> 26 bytes:printf"%X",rand 15for 1..6
Você pode colocá-los todos em um arquivo para executá-los:
(
say "";
estão aqui apenas para melhorar o formato de saída)fonte
say
:say map{("ABC123!@)POI098"=~/./g)[rand 15]}1..6
esay map{(A..O)[rand 15]}1..6
. Para o segundo você pode usarprintf
:printf"%X",rand 15for 1..6
economizar 11 no total! Tenho certeza que Ton também pode aconselhar sobre alguma magia arcana para economizar mais!substr
salva outro:say map{substr"ABC123!@)POI098",15*rand,1}1..6
printf"%X"
,substr..rand
emap
, é apenas um pouco menos óbvio, então eu deixo as pessoas aproveitarem a magia perl sem spoilers! : DR, 33 + 43 + 59 = 135 bytes
Alfabeto codificado arbitrário (altere a string para alterar o alfabeto):
Alfabeto de
[0-9A-E]
:Alfabeto definido pelo usuário de stdin:
Todos os casos imprimem a palavra de saída em stdout.
fonte
JavaScript (ES6),
167166164163 bytesGuardado 1 byte graças a Neil
Salvo 2 bytes graças a ETHproductions
Salvo 1 byte graças a premek.v
Codificado:
"ABC123!@TPOI098"
(58 bytes)Fixo:
"0123456789ABCDE"
(5857 bytes)Personalizado:
"()+.1=>?M[afhnt"
(514948 bytes)fonte
(n=6)=>n?f(n-1)+("ABCDE"[n=Math.random()*15|0]||n-5):''
economiza um byte.1/8+Math
é ótimo :).1+JSON
é melhor;)JSON+f
([object JSON](n
=>" (JNOS[]bcejnot"
)JavaScript (ES6), 184 bytes
Alfabeto personalizado: 66 bytes
0-9A-E: 63 bytes
0-9a-e: 55 bytes
(Subtraia 6 bytes se a aleatoriedade com base na data for permitida.)
fonte
**
:_=>((Math.random()+1)*15**6|0).toString(15).slice(1)
f=
na contagem de bytesq, 42 bytes
UMA
19 bytes
B
14 bytes
C
9 bytes
(usa as primeiras quinze letras do alfabeto)
fonte
Julia (36 + 26 + 21 = 83)
fonte
CJam, 48 bytes
Alfabeto arbitrário, 23 bytes:
Experimente online!
Dígitos hexadecimais, 15 bytes:
Experimente online!
Alfabeto
ABCDEFGHIJKLMNO
, 10 bytes:Experimente online!
fonte
~c
vez de'A+
retornar algo tecnicamente imprimível.Ruby 47 + 37 + 31 = 115
Codificado permanentemente: "ABC123! @ TPOI098" (47)
Corrigido: "0123456789ABCDE" (37)
Costume: "ABCDEFGHIJKLMNO" (31)
fonte
05AB1E , 43 bytes
Alfabeto arbitrário (
ABC123!@TPOI098
), 23 bytes Experimente onlineAlfabeto quase hexadecimal (
0123456789ABCDE
), 10 bytes Experimente onlineAlfabeto personalizado (
abcdefghijklmno
), 10 bytes Experimente onlinefonte
Python 2, 70 + 70 + 64 = 204 bytes
Infelizmente, o segundo exemplo é mais fácil com o primeiro método do que algo como
choice([randint(48,57)),choice(65,69)])
fonte
from random import*
? Eu acho que você pode usarimport random
erandom.choice
pelo menos nos dois primeiros exemplos.import random random.choice
é 27, masfrom random import* choice
é 26, tambémimport random as r r.choice
é 27format(randrange(8**8),'X')
, eu acho.F
Vitsy, 27 +
2422 +1310 =646259 bytes# 1:
Experimente online!
# 2:
Experimente online!
# 3:
Onde os caracteres disponíveis estão:
Experimente online!
fonte
J, 24 + 24 +
1810 = 58 bytes8 bytes economizados graças às milhas!
Sim, a segunda string não é facilmente compactável em J:
Se um alfabeto hexadecimal em letras minúsculas estiver bom, haverá
,hfd?6#15
9 bytes, como observou @miles.De qualquer forma,
?6#15
são 6 números aleatórios entre 0 e 15;{~
é retirada.u:
converte números em caracteres. O último exemplo codificaABCDEFGHIJKLMNOP
.Bônus: caso geral
{~6?@##
é aproximadamente:fonte
hfd
que se converte em h ex f rom d ecimal. Você pode obter uma solução de 9 bytes usando,hfd?6#15
. O último caso, apenas para ter algo ler facilmente, usa o alfabeto a partir'A'
de uma solução de 10 byteu:65+?6#15
, perfazendo um total de 24 + 9 + 10 = 45.PHP, 46 + 36 + 35 = 117 bytes
Codificado (46 bytes)
(47 bytes)Hexadecimal (minúscula) (36 bytes)
Para maiúsculas, 46 bytes com a versão codificada.
Personalizado (AO) (35 bytes)
fonte
Scala, 154 bytes
Alfabeto codificado (54 bytes):
Alfabeto hexadecimal (54 bytes):
Alfabeto personalizado
ABCDEFGHIJKLMNO
(47 bytes):Explicação:
'A'to'O'
cria uma sequência de 15 caracteres, de A a Ofonte
Pip , 42 bytes
Alfabeto codificado, 22 bytes:
Dígitos hexadecimais, 11 bytes:
Primeiras 15 letras minúsculas, 9 bytes:
Explicação
Todos os três programas começam com
L6O
: loop 6 vezes e produz a expressão especificada.RC"..."
: Escolha aleatória de um caractere da sequência codificadaRR15TB16
: RandRange (15), convertido em Base 16z@RR15
: alfabeto em minúsculasz
, indexado com RandRange (15)Experimente online!
fonte
Skript / skQuery , 108 bytes
Codificado (43 bytes):
0123456789ABCDE (34 bytes):
Escolha (31 bytes):
fonte
`
para a esquerda?Jolf, 26 + 14 + 13 = 51 bytes
Alfabeto personalizado, 24 bytes. Experimente aqui!
Alfabeto 0-9A-E, 14 bytes. Experimente aqui!
lp^0wά
élp
(0-Z) fatiado (l
) de0
até15
(wά
).Alfabeto 1-9A-F, 13 bytes. Experimente aqui!
lp^1ά
é o mesmo que acima, exceto de1
para16
.Método geral:
Outras tentativas (usando compactação de string):
fonte
PowerShell v2 +, 45 + 44 + 37 = 126 bytes
Alfabeto fixo, 45 bytes
Alfabeto quase hexadecimal, 44 bytes
Alfabeto personalizado (A a O), 37 bytes
Todos eles seguem o mesmo padrão - loop de
0
para5
, cada iteração selecionando umRandom
caractere ou valor ASCII, lançando-o como umachar
matriz, se necessário, e-join
reunindo-o em uma string. Essa sequência é deixada no pipeline e a saída é implícita.Exemplos
fonte
Pyke, 35 bytes
Alfabeto arbitrário, 20 bytes
Experimente aqui!
Alfabeto hexadecimal, 8 bytes
Experimente aqui!
Alfabeto personalizado, 7 bytes
Experimente aqui!
Alfabeto escolhido:
abcdefghijklmno
fonte