"Escreva" uma calculadora simples sem escrever uma única linha de código


25

É muito fácil:

Crie um programa sem escrever uma única linha de código. O código pode consistir apenas em perguntas e respostas existentes no Stack Overflow.

O programa deve criar dois números aleatórios e gerar os números

  • Adicionado a,
  • subtraído de,
  • multiplicado por e
  • dividido por

entre si.

Regras

Você deve incluir links para as perguntas / respostas usadas na sua resposta. Você não pode modificar o código encontrado, com as seguintes exceções:

  1. Você pode renomear variáveis, funções e métodos. (Isso não significa que você pode alterar uma invocação de método, alterando, diga scanner.nextInt () para scanner.nextLine () e afirmando que você está alterando o nome de um método. A alteração deve estar na definição ou na referência ao mesma entidade.). A solução ainda deve funcionar se variáveis, funções ou métodos forem renomeados novamente.

  2. Você pode ajustar o recuo adequadamente.

  3. Você pode assumir que os módulos apropriados foram carregados para que os trechos de código funcionem. (por exemplo, instruções de importação para Java e Python, usando instruções para C # e C ++ e seus equivalentes em todos os idiomas) Se o snippet de código incluir as importações para você, você poderá movê-las para a parte superior do código.

  4. Se a linguagem exigir que o código esteja em algum tipo de corpo de método a ser executado (por exemplo, public static void main(String[] args)para Java, static int Main(string[] args)C # e assim por diante), você poderá agrupar seu código no método apropriado. Mas o conteúdo desse método principal deve permanecer inalterado.

  5. Você deve fornecer uma lista explícita de qualquer renomeação de variável / método / função / classe executada.

  6. Você não pode usar trechos de trechos (ou seja, se você pegar um bloco de código de uma postagem, você pega tudo) Forneça uma breve descrição do que o código faz para pessoas que não têm intimidade com o idioma que você está usando. Você deve usar trechos publicados antes que esse desafio tenha sido iniciado.

Concurso de popularidade, para que os mais votados ganhem!

Data limite

Aceitarei a submissão que tiver mais votos no final de 6 de agosto.


Olá Michael, e bem-vindo ao PPCG stack exchange! Uma das regras para os desafios de código neste site é que eles devem ter uma condição de vitória objetiva, portanto, você deve escolher essa condição para esta. Esse é um desafio semelhante que pode lhe dar algumas idéias.
Isaacg

Oi @isaacg, obrigado. Vou dar uma olhada e excluir / editar este.
chris p toucinho

@isaacg, espero que esteja tudo bem agora. Você é mais experiente do que eu aqui, o prazo é muito próximo / distante?
chris p toucinho

É muito melhor. O prazo é muito próximo, no entanto, o padrão é de cerca de 1-2 semanas.
Isaacg

Ok, obrigado novamente.
chris p toucinho

Respostas:


17

J, 7 perguntas / respostas, nenhuma sobre J

echo a%b[echo a*b[echo a-b[echo a+b[b=:?2147483647 [a=:?2147483647

É uma maneira bem barata de fazer isso, eu não vou mentir. Aqui estão as respostas que usei:

Renomeei a variável foocomo ae bno código.


Eu imagino que adotar essa abordagem seria muito mais difícil no APL, mas ainda há uma boa chance de encontrar os caracteres em um bloco de código sozinhos.
Johne

1
@JohnE Essa é a vantagem de ser ruído ASCII!
Fatalize 26/07

1
Eu gosto dessa resposta, mas a pergunta diz "Você não pode pegar trechos de trechos" - o que está fazendo, certo?
Unclemeat

3
@unclemeat "se você pega um bloco de código de uma postagem, pega a coisa toda". Para mim, parece que, se houver vários blocos de código em uma postagem, você pode usar apenas um, mas não pode fazer parte de um bloco de código.
Fatalize

Tudo isso vem de blocos de código completos - dê uma olhada nas fontes.
Sean Latham

7

Python 2, 7 6 referências

Criar esta solução não foi tão fácil quanto parecia. Pesquisando o estouro de pilha para obter um código específico é difícil, pois os símbolos não estão incluídos na pesquisa.

Eu havia encontrado uma maneira de fazer isso com números aleatórios de 2000 bits, usando uma resposta diferente no lugar da referência nº 1, mas não pude testá-la nos ambientes on-line que uso, pois envolve getrandbits, que chama os.urandom, dando-me uma NotImplementedError, então eu fui por esse caminho. Na verdade, isso poderia ser usado agora, com o TIO.

Experimente online

#assumed to be loaded
import random

n1 = []
n1.append(random.randint(1, 100))

n2 = []
n2.append(random.randint(1, 100))

r1 = map(sum, zip(n1, n2))
r2 = map(lambda t: t[0] - t[1] ,zip(n1, n2))

ab = [n1[i]*n2[i] for i in range(len(n1))]

r1, last = r1[0], r1[-1]
r2, last = r2[0], r2[-1]
ab, last = ab[0], ab[-1]
n2, last = n2[0], n2[-1]

print r1
print r2
print ab
ab = float(ab) / n2
ab = float(ab) / n2
print ab

Referências

import random é assumido como carregado, já que a pergunta diz que é permitido.

  1. lst = []e lst.append(random.randint(1, 100))- aqui

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1, E r2- Aqui

  3. result = float(a) / b- Aqui

  4. ab = [a[i]*b[i] for i in range(len(a))]- Aqui

  5. first, last = some_list[0], some_list[-1]- Aqui

  6. print x- Aqui

Renomeado

  1. lstrenomeado para n1e n2(Ref # 1: usei o código inteiro duas vezes)

  2. r1e r2renomeado para n1e n2(Ref # 2: usei as variáveis ​​separadas posteriormente, para atribuir os mapas e dividir na última impressão, já que a resposta os incluía.)

  3. resulte arenomeado para abe brenomeado para n2(Ref # 3)

  4. ae brenomeado para n1e n2(Ref # 4)

  5. firste some_listambos renomeado para r1, r2, abou n2, dependendo de qual linha. (Ref. 5: usei isso quatro vezes. Observe que apenas a primeira tarefa é usada, por isso não renomeio last)

  6. xé renomeado para r1, r2ou ab, dependendo da linha. (Ref # 6)


1

Decimal , 2 referências

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Comandos usados:

  • 0 SET (índice de pilha padrão)
  • 1 EMPURRAR
    • 2 CARACTERES
  • 2 POP
  • 3 I / O
    • 00 pilha duplicada
    • 01 da pilha para STDOUT
  • 4 MATEMÁTICA
    • 1 ADICIONAR
    • 2 SUBTRAIR
    • 3 MULTIPLICAR
    • 4 DIVIDIR
  • 8 CONSTRUÍDAS EM
    • 2 empurre um número inteiro aleatório para empilhar

Versão explicada:

82D       ; push random INT    - stack contains {r1}
82D       ; push random INT    - stack contains {r1, r2}

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
41D       ; math +             - stack contains {r1, r2, r1+r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
42D       ; math -             - stack contains {r1, r2, r1-r2}
301       ; print from stack to output
2         ; pop                - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
43D       ; math *             - stack contains {r1, r2, r1*r2}
301       ; print from stack to output
2         ;                    - stack contains {r1, r2}

12010D3012; print newline

00D300    ; duplicate stack[0] - stack contains {r1, r2, r1}
01D300    ; duplicate stack[1] - stack contains {r1, r2, r1, r2}
44D       ; math /             - stack contains {r1, r2, r1/r2}
301       ; print from stack to output

Fontes:

Experimente online! Você precisará desativar o cache de saída se ele não estiver desativado automaticamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.