Na AR jogo móvel baseado em localização modo de vida Ingress o jogador pode cortar coisas chamadas portais a fim de obter itens. (Se você está interessado no Ingress, pode me enviar um ping no bate-papo para obter mais informações. Confie em mim, é melhor que o Pokémon. Se você terminar o download, lembre-se de escolher a Resistência.)
Uma maneira de aumentar significativamente a saída de hack é o minijogo de hackers de glifos , no qual o jogador precisa desenhar glifos em uma grade hexagonal.
No total, existem cerca de 115 glifos com cerca de 130 nomes que são realmente usados no jogo.
Glifos
Para os propósitos deste desafio, numeraremos cada ponto da grade da seguinte maneira:
Aqui está a lista de todos os glifos para os propósitos deste desafio. A lista é um objeto JSON, contendo cada glifo como uma lista de arestas.
{
"ABANDON": [[1, 6], [3, 4], [4, 8], [6, 10], [8, 10]],
"ACCEPT": [[3, 7], [3, 8], [7, 8]],
"ADVANCE": [[0, 9], [4, 9]],
"AFTER": [[1, 2], [1, 6], [2, 7], [6, 10], [7, 10]],
"AGAIN": [[4, 9], [6, 7], [6, 10], [8, 9], [8, 10]],
"ALL": [[0, 1], [0, 5], [1, 2], [2, 3], [3, 4], [4, 5]],
"ANSWER": [[6, 7], [6, 9], [7, 10]],
"ATTACK": [[0, 6], [0, 9], [2, 6], [4, 9]],
"AVOID": [[0, 5], [0, 6], [1, 6], [1, 7]],
"BALANCE": [[0, 10], [2, 3], [2, 7], [3, 4], [4, 8], [7, 10], [8, 10]],
"BARRIER": [[0, 10], [2, 7], [7, 10]],
"BEFORE": [[4, 5], [4, 8], [5, 9], [8, 10], [9, 10]],
"BEGIN": [[0, 8], [3, 7], [3, 8]],
"BODY": [[6, 9], [6, 10], [9, 10]],
"BREATHE": [[1, 6], [5, 9], [6, 10], [9, 10]],
"CAPTURE": [[1, 7], [3, 4], [4, 8], [7, 10], [8, 10]],
"CHANGE": [[3, 7], [3, 10], [8, 10]],
"CHAOS": [[0, 1], [0, 5], [1, 6], [3, 8], [4, 5], [6, 10], [8, 10]],
"CIVILIZATION": [[1, 6], [5, 9], [6, 7], [7, 8], [8, 9]],
"CLEAR": [[0, 10], [3, 10]],
"CLEAR ALL": [[0, 1], [0, 5], [0, 10], [1, 2], [2, 3], [3, 4], [3, 10], [4, 5]],
"COMPLEX": [[6, 9], [8, 10], [9, 10]],
"CONFLICT": [[2, 6], [4, 9], [6, 7], [7, 8], [8, 9]],
"CONTEMPLATE": [[0, 1], [1, 2], [2, 3], [3, 8], [6, 10], [8, 9], [9, 10]],
"COURAGE": [[4, 9], [7, 8], [8, 9]],
"CREATE": [[1, 6], [4, 8], [6, 10], [8, 10]],
"DANGER": [[0, 9], [3, 10], [9, 10]],
"DATA": [[0, 6], [3, 8], [6, 10], [8, 10]],
"DEFEND": [[1, 7], [3, 7], [3, 8], [5, 8]],
"DESTINY": [[3, 8], [6, 7], [6, 10], [7, 8], [9, 10]],
"DESTROY": [[2, 7], [5, 9], [7, 10], [9, 10]],
"DETERIORATE": [[4, 8], [8, 10], [9, 10]],
"DIE": [[2, 7], [4, 8], [7, 10], [8, 10]],
"DIFFICULT": [[1, 6], [6, 7], [7, 10], [8, 10]],
"DISCOVER": [[1, 2], [2, 3], [3, 4]],
"DISTANCE": [[0, 5], [4, 5]],
"EASY": [[3, 8], [6, 10], [8, 10]],
"END": [[0, 1], [0, 10], [1, 7], [3, 7], [3, 10]],
"ENLIGHTENED": [[0, 1], [0, 9], [1, 2], [2, 3], [6, 9], [6, 10], [9, 10]],
"ENLIGHTENMENT": [[0, 1], [0, 9], [1, 2], [2, 3], [6, 9], [6, 10], [9, 10]],
"EQUAL": [[6, 7], [6, 9], [8, 9]],
"ESCAPE": [[0, 1], [1, 6], [6, 9], [8, 9]],
"EVOLUTION": [[0, 10], [8, 9], [9, 10]],
"FAILURE": [[0, 10], [6, 7], [6, 10]],
"FEAR": [[1, 7], [6, 7], [6, 9]],
"FOLLOW": [[0, 6], [1, 2], [1, 6]],
"FORGET": [[4, 8]],
"FUTURE": [[1, 6], [2, 7], [6, 7]],
"GAIN": [[5, 8]],
"GROW": [[4, 9], [8, 9]],
"HARM": [[0, 6], [0, 9], [2, 7], [6, 10], [7, 10], [9, 10]],
"HARMONY": [[0, 6], [0, 9], [3, 7], [3, 8], [6, 10], [7, 10], [8, 10], [9, 10]],
"HAVE": [[3, 8], [7, 10], [8, 10]],
"HELP": [[5, 9], [7, 8], [8, 10], [9, 10]],
"HIDE": [[1, 6], [1, 7], [6, 9], [7, 8]],
"HUMAN": [[3, 7], [3, 8], [6, 7], [6, 9], [8, 9]],
"IDEA": [[1, 2], [1, 6], [2, 7], [4, 5], [4, 8], [5, 9], [7, 10], [9, 10]],
"IGNORE": [[2, 7]],
"IMPERFECT": [[6, 8], [6, 10], [8, 9], [8, 10], [9, 10]],
"IMPROVE": [[1, 6], [6, 10], [7, 10]],
"IMPURE": [[3, 10], [8, 9], [8, 10], [9, 10]],
"INSIDE": [[6, 7], [6, 9]],
"INTELLIGENCE": [[1, 6], [4, 8], [6, 10], [8, 9], [9, 10]],
"INTERRUPT": [[0, 10], [3, 10], [4, 5], [4, 8], [5, 9], [8, 10], [9, 10]],
"JOURNEY": [[1, 6], [2, 3], [3, 4], [4, 5], [5, 9], [6, 10], [9, 10]],
"KNOWLEDGE": [[3, 6], [3, 9], [6, 10], [9, 10]],
"LEAD": [[0, 5], [3, 8], [4, 5], [4, 8]],
"LEGACY": [[0, 1], [0, 5], [1, 6], [2, 7], [4, 8], [5, 9], [6, 7], [8, 9]],
"LESS": [[6, 10], [9, 10]],
"LIBERATE": [[0, 1], [1, 6], [4, 9], [6, 10], [9, 10]],
"LIE": [[6, 7], [6, 10], [7, 10], [8, 9], [9, 10]],
"LOSE": [[1, 7]],
"MESSAGE": [[1, 7], [4, 9], [7, 10], [9, 10]],
"MIND": [[3, 8], [3, 10], [8, 9], [9, 10]],
"MORE": [[7, 10], [8, 10]],
"MYSTERY": [[0, 6], [0, 9], [5, 9], [6, 9], [8, 9]],
"N'ZEER": [[0, 6], [0, 9], [0, 10], [3, 10], [6, 10], [9, 10]],
"NATURE": [[2, 7], [4, 8], [6, 7], [6, 9], [8, 9]],
"NEW": [[2, 7], [6, 7]],
"NO": [[6, 7], [6, 9]],
"NOT": [[6, 7], [6, 9]],
"NOURISH": [[3, 4], [3, 10], [4, 8], [8, 10]],
"NOW": [[6, 7], [7, 8], [8, 9]],
"OLD": [[5, 9], [8, 9]],
"OPEN": [[3, 7], [3, 8], [7, 8]],
"OPEN ALL": [[0, 1], [0, 5], [1, 2], [2, 3], [3, 4], [3, 7], [3, 8], [4, 5], [7, 8]],
"OUTSIDE": [[0, 5], [4, 5]],
"PAST": [[4, 8], [5, 9], [8, 9]],
"PATH": [[0, 10], [4, 8], [8, 10]],
"PEACE": [[0, 6], [0, 9], [3, 7], [3, 8], [6, 10], [7, 10], [8, 10], [9, 10]],
"PERFECTION": [[0, 10], [2, 3], [2, 7], [3, 4], [4, 8], [7, 10], [8, 10]],
"PERSPECTIVE": [[0, 6], [0, 9], [2, 7], [4, 8], [6, 10], [7, 10], [8, 10], [9, 10]],
"PORTAL": [[1, 2], [1, 6], [2, 7], [4, 5], [4, 8], [5, 9], [6, 9], [7, 8]],
"POTENTIAL": [[0, 10], [1, 2], [2, 7], [7, 10]],
"PRESENT": [[6, 7], [7, 8], [8, 9]],
"PURE": [[0, 10], [6, 7], [6, 10], [7, 10]],
"PURSUE": [[0, 6], [0, 9], [5, 9]],
"QUESTION": [[0, 6], [6, 9], [8, 9]],
"REACT": [[2, 7], [6, 9], [7, 10], [9, 10]],
"REBEL": [[1, 2], [1, 6], [5, 8], [6, 10], [8, 10]],
"RECHARGE": [[0, 5], [0, 10], [5, 9], [9, 10]],
"REPAIR": [[0, 5], [0, 10], [5, 9], [9, 10]],
"REPEAT": [[4, 9], [6, 7], [6, 10], [8, 9], [8, 10]],
"RESISTANCE": [[0, 9], [0, 10], [3, 8], [3, 10], [6, 9]],
"RESTRAINT": [[2, 3], [2, 7], [5, 9], [7, 10], [9, 10]],
"RETREAT": [[0, 6], [2, 6]],
"SAFETY": [[2, 6], [4, 9], [6, 9]],
"SAVE": [[1, 7], [7, 10], [8, 10]],
"SEARCH": [[6, 9], [6, 10], [7, 8], [8, 9]],
"SEE": [[0, 9]],
"SEPARATE": [[2, 7], [5, 9], [6, 7], [6, 10], [8, 9], [8, 10]],
"SHAPER": [[0, 6], [0, 9], [2, 7], [4, 8], [6, 7], [8, 9]],
"SIMPLE": [[7, 8]],
"SOUL": [[3, 7], [3, 10], [6, 7], [6, 10]],
"STABILITY": [[2, 7], [4, 8], [7, 8]],
"STAY": [[2, 7], [4, 8], [7, 8]],
"STRONG": [[6, 7], [6, 9], [7, 8], [8, 9]],
"STRUGGLE": [[0, 9], [0, 10], [3, 8], [3, 10], [6, 9]],
"SUCCESS": [[0, 10], [8, 9], [9, 10]],
"TECHNOLOGY": [[1, 6], [2, 7], [6, 10], [7, 10], [8, 9], [8, 10], [9, 10]],
"THOUGHT": [[1, 2], [1, 6], [2, 7], [4, 5], [4, 8], [5, 9], [7, 10], [9, 10]],
"TOGETHER": [[4, 8], [6, 9], [6, 10], [8, 10], [9, 10]],
"TRUTH": [[6, 7], [6, 10], [7, 10], [8, 9], [8, 10], [9, 10]],
"UNBOUNDED": [[0, 1], [0, 5], [1, 7], [2, 3], [3, 4], [4, 5], [6, 9], [6, 10], [7, 8], [8, 9]],
"US": [[3, 6], [6, 9]],
"USE": [[1, 7], [7, 10]],
"WANT": [[3, 7], [3, 8], [4, 8]],
"WAR": [[0, 6], [0, 9], [2, 6], [4, 9]],
"WEAK": [[5, 9], [6, 7], [6, 9]],
"XM": [[6, 7], [6, 9], [7, 10], [8, 9], [8, 10]],
"YOU": [[0, 7], [0, 8], [7, 8]],
"YOUR": [[0, 7], [0, 8], [7, 8]]
}
Alguns glifos têm vários nomes (por exemplo NO, NOT, INSIDE
); você deve apoiar todos eles.
Isenção de responsabilidade: não consegui encontrar uma boa lista de todos os glifos, então combinei várias fontes e finalmente acabei desenhando todas elas em um aplicativo JS hackeado para obter a lista delas. Posso estar perdendo alguns e pode haver alguns apelidos não utilizados no jogo; Espero não ter desviado alguns dos glifos, no entanto.
Edite na manhã seguinte, quando não são 4 da manhã: já notei que VICTORY está ausente. Oh, bem, resta para o melhor jogador de golfe então.
Desafio
Sua tarefa é criar um programa ou função que considere o nome de um glifo e produza o glifo como uma imagem.
A imagem deve conter os pontos da grade e as linhas que conectam os pontos em questão.
Isso é código-golfe , então a resposta mais curta em bytes vence. Aplicam-se regras padrão.
I / O
Você terá como entrada, em um formato de sua escolha, um nome de um glifo exatamente como encontrado nas chaves do objeto JSON acima. Qualquer outra entrada é um comportamento indefinido.
Você produzirá uma imagem em qualquer formato comum com o glifo renderizado na grade.
Proporções de grade
Essas proporções devem ter precisão de cinco pixels (para permitir arredondamentos, etc.)
- Os pontos externos (0-5) devem formar um hexágono regular.
- O ponto central (10) deve estar no centro do hexágono.
- Os pontos intermediários (6-9) devem estar na metade do caminho entre o ponto central e os pontos externos correspondentes.
- A grade deve ser orientada como a original.
- A altura do hexágono externo deve ser de pelo menos 100 pixels.
Outras regras
- O plano de fundo deve ser transparente ou preenchido com uma cor sólida.
- As linhas e pontos devem ser claramente distintos do plano de fundo e um do outro; eles não podem ser da mesma cor sólida.
- Por exemplo, linhas azuis sólidas e pontos cor de rosa sólidos são bons.
- Linhas pretas sólidas e pontos brancos com bordas pretas são excelentes.
- Linhas listradas vermelhas e brancas e bolas de futebol como pontos estão bem.
- Linhas verdes sólidas e pontos verdes sólidos não são bons.
- O raio dos pontos deve ser maior que a largura das linhas.
- Você pode desenhar as linhas na frente ou atrás dos pontos.
- Você pode incluir qualquer quantidade de preenchimento (na cor de fundo) na imagem.
- Você pode combinar linhas consecutivas em uma linha, pois isso não afeta o resultado.
Exemplos
As cores e as larguras dos objetos nessas imagens são apenas exemplos que se assemelham à aparência do jogo.
NÃO LIMITADO
PAZ
RESISTÊNCIA
fonte
Respostas:
Mathematica, 228 + 184 + 365 + 13 = 790 bytes
O comando acima de 228 bytes define uma função sem nome que recebe como entrada um dos nomes de glifo acima e retorna uma imagem. Por exemplo, aqui está a saída para
"UNBOUNDED"
:O comando lê três arquivos binários
"a"
-"b"
, e"c"
- que possuem 184, 365 e 13 bytes, respectivamente. Uma versão mais fácil de ler:A linha 2 define uma função de descompactação manual: lê em um fluxo de bytes do arquivo
#
, converte-o em um número inteiro de base 256 e depois expande esse número inteiro em sua lista de dígitos na base#2
. As linhas 3 e 4 definem uma função (usando o terceiro arquivo binário) que converte um número inteiro de 0 a 10 nas coordenadas do ponto de grade correspondente; todas essas coordenadas foram escolhidas para serem inteiros entre –12 e 12, o que torna a compactação conveniente (embora não tão conveniente que eu a tenha visto na minha submissão inicial).A linha 5 desenha os pontos da grade (na cor preta padrão) e depois muda para a cor vermelha das linhas. A linha 7 cria uma associação (usando os dois primeiros arquivos binários) que converte certos números inteiros de entrada entre 0 e 2292 em uma lista de números inteiros em pontos de grade como
{2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}
, que representa um caminho que une os pontos 2 a 3 a 4 a ... a 10 (Esse é um "caminho euleriano", que visita cada extremidade exatamente uma vez; todos os glifos da tabela têm um caminho euleriano, portanto, essa representação é mais curta do que listar explicitamente o conjunto de bordas.)->
linha 7 cria essa lista de caminhos eulerianos, lendo um número inteiro de base 12 usandov
e dividindo-o em cada ocorrência do dígito 11.Finalmente, a linha 8 hashes a sequência de entrada convertendo todas as suas letras em seus códigos ASCII e utilizando o módulo 2293 do produto (o menor módulo para o qual as respostas são todas distintas). Esse número inteiro é alimentado na associação na linha acima, resultando no caminho euleriano apropriado, e a linha 6 desenha o caminho resultante sobre os pontos da grade.
Dumps hexadecimais dos arquivos "a", "b" e "c", nessa ordem:
fonte