Desafio
Dados dois dígitos de 0 a 9 como entrada, produza um dominó (do conjunto de nove dominós ) com esse número de pips (pontos) nas duas faces. As dez faces possíveis são assim (separadas por tubos):
| | o| o|o o|o o|o o o|o o o|o o o|o o o
| o | | o | | o | | o |o o|o o o
| |o |o |o o|o o|o o o|o o o|o o o|o o o
Ou em linhas separadas:
-----
o
-----
o
o
-----
o
o
o
-----
o o
o o
-----
o o
o
o o
-----
o o o
o o o
-----
o o o
o
o o o
-----
o o o
o o
o o o
-----
o o o
o o o
o o o
Formatos de entrada
Você pode receber informações em qualquer formato razoável, incluindo, entre outros:
- Dois inteiros, cadeias de caracteres ou matrizes singleton separadas;
- Um único número inteiro de 0 a 99;
- Uma matriz de dois números inteiros;
- Uma sequência de dois dígitos.
Formatos de saída
- As duas faces podem estar alinhadas horizontalmente, separadas por tubos da seguinte maneira:
o|o o
| o
o |o o
- Ou eles podem estar alinhados verticalmente, separados por hífens da seguinte forma:
o
o
-----
o o
o
o o
- Você pode enviar uma borda ao redor do dominó, se desejar.
- Você também pode optar por imprimir uma lista de linhas, uma lista das duas faces ou uma combinação delas.
- Você pode usar qualquer caractere que não seja um espaço em branco para os pips (eu usei
o
). - Se você realmente deseja, pode usar
0
para espaço em branco e1
para os pips, ouFalse
/True
(ou o equivalente do seu idioma) se estiver produzindo uma matriz. - Você pode remover o espaço em branco entre as colunas; esta é uma saída válida para 7, 7:
ooo|ooo
o | o
ooo|ooo
- Qualquer uma das faces pode ser girada em 90 graus. Essa também é uma saída válida para 7, 7:
o o|o o o
o o o| o
o o|o o o
- Você pode ter o espaço em branco inicial / final desejado, contanto que a parte principal da saída ainda se enquadre nas outras restrições.
- Cada face deve ter 3 linhas de altura, mesmo se as linhas estiverem vazias. Para 0, 1, você não pode emitir isso:
-----
o
Mas você pode gerar isso:
-----
o
Da mesma forma, se você estivesse produzindo uma lista de duas listas de linhas, poderia fazer [["", "", ""], ["", " o", ""]]
, mas não [[""], [" o "]]
.
Pontuação
Isso é código-golfe , então o código mais curto em bytes em cada idioma vence.
[2, 1]
, eu poderia produzir[[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]
?[0,5,21,29,31]
são todos números importantes aqui, meus amigos.Respostas:
Python 2 ,
10197926864 bytesExperimente online!
Créditos
fonte
0
eFalse
são iguais em Python, portanto deve estar OK).C (gcc) ,
252242269262241235220 bytesEu estava no estouro de pilha para soquetes em python, quando isso apareceu, disse por que não? primeiro código de golfe, então não tenho certeza se segui as regras 100% (e se não, e alguém quer roubar meu proverbial cookie e corrigi-lo, que assim seja). Com 'o' e '',
255 245 272 265 244 238228 bytes. substitua +48 por * 79 + 32.Experimente online!
Como funciona:
eu uso um deslocamento de bits e bit a bit e para descobrir se um ponto deve ser limpo ou um pip, depois desloque o 0 ou 1 para o valor ASCII correto. ele estraga em 4 e 5, então eles precisavam de alguma correção. realmente adicionou alguns bytes. conseguiu remover vários bytes removendo uma máscara e usando apenas 1 (doh)
Agradecimentos especiais ao Sr. Xcoder pelos menos 7 bytes removendo um excesso de #define
Changes: removeu o memset -21 bytes. refez a lógica do bit para 6, 4, 2 para depender de 8 | 4 e 2, 8 | 4, 8 | 4 | 2, respectivamente. -6 bytes. removeu novas linhas extras usando put em vez de printf, que também é mais curto. reduziu a matriz para 11, removendo a atribuição extra. -15 bytes. Agora acho que é o melhor que posso fazer.
fonte
'\n'
pode ser substituído por10
. (porque em C, os tipos de dados char também são tipos de dados inteiros).char
Provavelmente, alguns podem ser substituídos porint
. (ou omitir inteiramente) #Gelatina , 20 bytes
Experimente online!
Versão alternativa, saída original,
333231 bytesGraças a @ user202729 por jogar fora 1 byte!
Experimente online!
Como funciona
Primeiro,
“¤o.ƤẸʠṚ’
- um literal inteiro na base bijetiva 250 - define o valor de retorno para 1086123479729183 .Em seguida,
B¬
converte o valor de retorno em binário e pega o NOT lógico de cada dígito, produzindo a matrizEm seguida,
s5ŒB
divide essa matriz em pedaços de comprimento 5 e depois salta cada pedaço, transformando abcde em abcdedcba , produzindoAgora,
ị@
recupera o j th e k th item desse array, onde j, k é o primeiro argumento do programa. Observe que a indexação é baseada em 1 e modular, portanto, o elemento zeroth também é o décimo.Finalmente,
s€3
divide cada pedaço de comprimento nove em três pedaços de comprimento três.fonte
3
está usando0
para os pips, não1
como todos os outros.“¤o.ƤẸʠṚ’
Deveria trabalhar.Gelatina , 13 bytes
Experimente online!
Combinando a idéia de Dennis de usar
ŒB
(rejeição) nesta resposta e a observação de Xcali nesta resposta para obter 13 bytes.Gelatina , 28 bytes
(com impressão bonita)
Só agora eu sei que o literal da string Jelly é automaticamente encerrado ...
Experimente online!
fonte
⁽½ÑD
leva a menos número de bytes do que a resposta de EriktheOutgolfer“¤¦¢¬‘
aquiPHP
155, 150 bytesÉ preciso uma matriz de números inteiros como entrada. Para teste:
Formato de saída:
Confira ao vivo aqui
Minha solução
Para minha solução, usei uma matriz composta por números bit a bit (potências de 2). Pode ser visualizado assim:
E, em seguida, uma matriz de armazenamento que consiste nas posições de bits dos pips de cada dominó correlacionados pelo índice numerado:
Então, só para esclarecer:
0
ou valor0
seria o dominó em branco, que é sempre falso.1
ou valor16
seria o dominó número um e na matriz que está no centro16
.2
ou valor68
seria o dominó número dois e na matriz que é superior direita4
e inferior esquerda64
ou4|64
5
ou valor341
seria o dominó número cinco e na matriz que é1|4|16|64|256
9
ou valor511
seria o número nove no dominó e na matriz é a combinação de todos os bits.Uma vez estabelecido, é uma questão bastante simples de fazer um loop para as 9 posições na matriz e definir
$x
a2
ao poder de$i
Então fazemos um pouco e
&
, ao percorrermos esses pontos. Portanto, para exemplos, o sake usará o exemplo 2 acima e, emx
vez disso, utilizarei os espaços para maior clareza visual:68 & 1 ? 0 : 'x'
que resulta em'x'
68 & 2 ? 0 : 'x'
que resulta em'x'
68 & 4 ? 0 : 'x'
que resulta em0
68 & 8 ? 0 : 'x'
que resulta em'x'
68 & 16 ? 0 : 'x'
que resulta em'x'
68 & 32 ? 0 : 'x'
que resulta em'x'
68 & 64 ? 0 : 'x'
que resulta em0
68 & 128 ? 0 : 'x'
que resulta em'x'
68 & 256 ? 0 : 'x'
que resulta em'x'
Quando o loop está completo, terminamos com essa string
"xx0xxx0xx"
.Em seguida, adicionar o limite
"---xx0xxx0xx"
para ele (eu realmente começar com a fronteira, mas qualquer que seja) .E finalmente nós chunk_split () em 3's para:
Sinta-se livre para me falar o que você pensa.
fonte
**
introduzido no PHP 5.6 em vez depow()
php.net/manual/en/language.operators.arithmetic.php^
mas é a XOR bit a bit ... lol$argv
. A sobrecarga da função no PHP geralmente é de 13 bytes.Perl 5 ,
107 7670+ 1 (= 70 bytes-a
)Perl 5 , 70 bytes
Experimente online!
Usa 0 para espaços em branco e 1 para pips. Método bastante simples: observe que, à medida que o dígito sobe, uma vez que um pip está "ligado", ele nunca "apaga", exceto o do meio. Na posição do meio, está ativado para todos os números ímpares. Assim, para cada posição, é simples verificar se o dígito é maior que o último dígito para o qual está desativado. A
||0
saída cria quando a condição é falsa. No Perl, false é oundef
resultado que é nulo.fonte
JavaScript (ES6),
7978 bytesGuardado 1 byte graças a @ETHproductions
Recebe entrada na sintaxe de curry
(a)(b)
e gera um dominó ASCII vertical.Demo
Mostrar snippet de código
Versão horizontal,
8079 bytesGuardado 1 byte graças a @ETHproductions
Recebe a entrada como uma matriz de 2 números inteiros e gera um dominó ASCII horizontal.
Demo
Mostrar snippet de código
fonte
n>d|0
ou(+d?n>d:n)&1
APL (Dyalog) , 25 bytes
Experimente online!
-2 graças a ngn .
O formato de saída é um pouco estranho: essa função retorna uma matriz contendo duas matrizes de formato 3,3, cada uma contendo 0s e 1s.
fonte
2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
C (gcc) , 115 bytes
Experimente online!
fonte
Javascript (ES6), 87 bytes
fonte
Haskell - 88 caracteres
Pega uma lista de dois números indicando as faces, retorna uma lista de lista de lista de bool. Não é tão curto, mas acho a solução interessante.
fonte
map
vez derepeat
ezipWith
:map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)
Experimente online!Pip ,
32272421 bytes-3 bytes graças a @DLosc
Experimente online!
Explicação:
fonte
3517
vez de uma lista[3 5o7]
. ;)> <> , 57 + 3 = 60 bytes
Experimente Online . Saídas como dominó vertical com 1s para pontos, 0s para espaço em branco e 9s para separadores da seguinte forma:
Tecnicamente, isso pode ser estendido para até 12 valores introduzidos.
Versão antiga:
> <> , 76 + 3 = 79 bytes
Experimente Online . Saídas como um dominó vertical com 1s para pontos e 0s para espaço em branco da seguinte maneira:
fonte
Carvão ,
46444339 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Leia dois números inteiros e mapeie-os na tabela de pesquisa. Em seguida, mapeie o resultado. (Isso efetivamente captura o resultado de forma temporária.)
Os resultados são impressos implicitamente em linhas separadas, com uma linha em branco extra entre cada face, porque os resultados estão aninhados.
Mova para cima e desenhe a linha divisória entre as faces.
Versão horizontal anterior de 43 bytes:
Experimente online! Link é a versão detalhada do código. Explicação:
Trabalhe verticalmente.
Imprima a linha divisória.
Posição para o início da primeira face.
Leia dois números inteiros e mapeie-os na tabela de pesquisa.
Prepare para produzir até 9
o
s.Mas comece uma nova coluna a cada três
o
segundos.Converta os 5 bits inferiores do código ASCII em binário e espelhe a saída pelos 4
o
s restantes .fonte
Gelatina , 16 bytes
Experimente online!
Usava estratégia de Neil e a descompressão de base para gerar os valores; saídas como uma matriz binária. Leva uma lista como entrada.
Explicação:
fonte
APL + WIN,
4947 bytesEditado de acordo com o comentário de Adam, obrigado, para ser executado com a origem zero do índice.
Solicita a entrada na tela como um vetor de números inteiros um para cada face.
A saída é da forma:
para uma entrada de
7 3
e0 5
Explicação:
fonte
⎕IO←0
para salvar a si mesmo1+
?Python 2 , 121 bytes
Experimente online!
Reduzido para 121 usando um lambda depois de voltar e reler as regras. Agora gera uma lista de linhas.
Versão anterior com saída bem formatada:
Python 2 ,
156153147141 141 bytesExperimente online!
-3 com graças a @NieDzejkob
Recebe a entrada como 2 números inteiros e as saídas no formato vertical com 0 = espaço e 1 = ponto.
fonte
Pyt ,
220154 bytesSegunda tentativa (154 bytes)
Explicação:
Primeira tentativa (220 bytes):
Explicação:
Experimente online!
fonte
05AB1E , 34 bytes
Experimente online!
Isso foi difícil porque 05AB1E tem preenchimento ruim.
Explicação básica:
fonte
SmileBASIC,
9269 bytesExemplo:
É o que acontece quando suas regras não são suficientemente rígidas.
fonte
FALSO,
116807870696663615958 bytesainda trabalhando nisso ...
fonte
Lasca ,
142135 bytesExperimente online!
Entrada é uma sequência de dígitos. Usa zeros como os pips. Desenha os pips para um número, lê o próximo byte de entrada. Se nenhum próximo byte terminar, desenhe o divisor e comece.
Cada
Z
(ouz
) corresponde a um caractere de saída, eles são posicionados para disparar na ordem de cima para baixo. O capitalizadoA
,B
,C
, eD
correspondem aos baixos quatro bits de entrada (que é tudo o que olhar, de modo"34" == "CD" == "st" ...
). A minúsculab
,d
,e
,f
correspondem a vários bits de saída.Também pode fazer dominós de comprimento infinito; tente dar
0123456789
como entrada.fonte
PHP, 116 bytes
requer PHP 5.5 ou posterior. Corra com
-nr
ou experimente online .fonte
C (gcc) ,
150146 bytesExperimente online!
fonte