Lei de Equilíbrio
visão global
Dada uma entrada de 3 números inteiros positivos de um dígito, representando um conjunto de pesos, produz uma representação ASCII de uma gangorra com os pesos colocados nela, para que fique em equilíbrio em torno de um pivô central, levando em consideração os efeitos da alavanca.
Cada número tem um peso igual ao seu valor. O torque de cada número é o peso multiplicado pela distância do centro em caracteres. Para a gangorra estar em equilíbrio, o torque soma dos pesos do lado esquerdo da gangorra deve ser igual a daqueles à direita, como este .
Entrada
3 números inteiros no intervalo de 1 a 9. Você pode inserir os números inteiros, no entanto, é conveniente, por exemplo, uma tupla, 3 valores separados por vírgula etc. No entanto, seu programa deve ser capaz de lidar com números introduzidos em qualquer ordem (ou seja, sem assumir que os valores serão classificados). Números duplicados podem ser introduzidos (por exemplo, 2,3,2).
As entradas sempre permitirão matematicamente uma saída válida, caso contrário, a entrada não é válida.
Saída
A saída deve ser uma representação ASCII de 2 linhas da gangorra com os pesos colocados nela. Na primeira linha estão os dígitos, espaçados para equilibrá-los na gangorra.
Os números não podem ser colocados no centro da balança, onde a distância e, portanto, o torque seriam zero. As distâncias válidas do centro variam de 1 a 10 caracteres, inclusive à esquerda ou direita do pivô.
Nos espaços desocupados pelos números, há 18 caracteres sublinhados (um sublinhado central e 10 de cada lado, menos as 3 posições ocupadas pelos números). Na última linha, há um caractere de cursor único alinhado com o centro da escala, representando o pivô.
Exemplos
Entrada:
4,7,2
Saída:
________7___42_______
^
7 * 2 = 4 * 2 + 2 * 3
Os números podem ser impressos em ambos os lados, por exemplo, isso também seria válido:
_______24___7________
^
2 * 3 + 4 * 2 = 7 * 2
Os números podem ser colocados em qualquer lugar da balança, desde que equilibrados, por exemplo:
Entrada:
3,1,5
Saída:
_____5________1__3___
^
5 * 5 = 1 * 4 + 3 * 7
ou
____5________1_____3_
^
5 * 6 = 1 * 3 + 3 * 9
ou
____5___________1_3__
^
5 * 6 = 1 * 6 + 3 * 8
etc
Seu programa precisa apenas produzir uma das saídas válidas. Não é necessário gerar um erro se a entrada não for válida.
Notas
- Isso é código-golfe, então o programa mais curto em bytes vence
- O programa pode ser autônomo ou uma função que aceita os números como entrada e retorna uma string.
- Trailing newline e espaço em branco na última linha é opcional
- Se você não sabe o que é uma gangorra , ela também é conhecida como gangorra ou gangorra.
Respostas:
CJam,
403938 bytesExperimente online.
Como funciona
fonte
CJam,
4644 bytesTeste aqui.
Explicação
Primeiro, uma observação: nunca precisamos colocar dois dígitos nas extremidades da gangorra. Sempre que for uma solução válida, há pelo menos uma outra solução válida (de acordo com a pasta no comentário no desafio).
fonte
Java,
519414321 bytesMinha primeira tentativa de jogar golfe.
Você pode ligar com
f(a,b,c)
. Experimente aquiEDIT: método de verificação izlin usado
(a*i+b*j+c*k)==0
EDIT: Obrigado, J Atkin pelas sugestões de golfe.
fonte
p
paraObject a
e usando-a no lugar dos outros 2System.out.print(ln)
s.a
é usado apenas uma vez, você pode incorporá-lo.Pyth,
6758.5349 bytesIsso parece um pouco enorme para Pyth, mas eu não estou familiarizado o suficiente com o idioma para poder ficar muito menor.Sub 50 bytes, finalmente estou feliz com isso!A entrada é esperada como uma matriz de números inteiros, por exemplo
[1,2,3]
. Experimente aqui.Explicação:
E, finalmente, alguns exemplos de entradas e saídas:
fonte
C -
237228 bytesVocê pode ligar com
f(a,b,c)
.Experimente aqui .
Exemplo de saídas:
fonte
Python 2.7
235226219 bytesTestando -o com alguns exemplos básicos -
(1,1,1),(1,2,1),(3,1,5),(4,7,2)
resulta em:Saídas para todas as entradas possíveis coladas aqui
fonte
"".join(l) -> 'l'[2::5]
é um byte mais curto (substitua as aspas por backticks).repr
. :)PHP, 278 bytes
Uma solução de força bruta que usa um monte de loops aninhados e alguns testes.
Como sempre, coloque-o em um arquivo (vamos chamá-lo
seesaw.php
), junte-se às linhas (divida aqui para facilitar a leitura), coloque o marcador PHP (<?php
) no início do arquivo (tecnicamente, não faz parte do programa) e você ' é bom ir.Um exemplo de execução:
Ele gera e exibe todas as soluções (sem reflexos), mas não retira as duplicatas (quando os valores de entrada contêm duplicatas).
fonte
Julia, 154 bytes
Ungolfed + explicação:
fonte
C, 252 (214) bytes
Chame com a, b, c como argumentos na linha de comando.
Se main pode ser omitido, a contagem de bytes cai para 214 para uma função.
Ambos usam a mesma estratégia de colocar o primeiro peso à esquerda, depois digitalizar ao longo das possíveis posições do segundo peso e calcular o terceiro peso. Isso permite a remoção de um loop interno.
fonte