«Напишите» простой калькулятор, не написав ни одной строки кода

25

Это очень просто:

Создайте программу без написания одной строки кода. Код может состоять только из существующих вопросов и ответов о переполнении стека.

Программа должна создать два случайных числа и вывести числа

  • добавлен к,
  • вычитается из,
  • умножается на и
  • деленное на

друг друга.

правила

Вы должны включить ссылки на вопросы / ответы, которые вы использовали в своем ответе. Вы не можете изменять код, который вы найдете, за следующими исключениями:

  1. Вы можете переименовывать переменные, функции и методы. (Это не означает, что вы можете изменить вызов метода, изменив, скажем, scanner.nextInt () на scanner.nextLine () и заявив, что вы меняете имя метода. Это изменение должно быть в определении или ссылке на та же сущность.) Решение все еще должно работать, если переменные, функции или методы будут переименованы снова.

  2. Вы можете отрегулировать отступ соответствующим образом.

  3. Вы можете предположить, что для работы фрагментов кода загружены соответствующие модули. (например, операторы импорта для Java и Python, используя операторы для C # и C ++ и их эквиваленты на всех языках). Если фрагмент кода включает в себя импорт для вас, вы можете переместить их в начало кода.

  4. Если язык требует, чтобы код был в каком-либо теле метода для выполнения (например, public static void main(String[] args)для Java, static int Main(string[] args)для C # и т. Д.), Вы можете заключить код в соответствующий метод. Но содержание этого основного метода должно оставаться неизменным.

  5. Вы должны предоставить явный список всех выполненных переименований переменных / методов / функций / классов.

  6. Вы не можете брать фрагменты фрагментов (то есть, если вы берете блок кода из сообщения, вы берете все это). Предоставьте краткое описание того, что код делает для людей, которые не знакомы с языком, который вы используете. Вы должны использовать фрагменты, опубликованные до начала этого испытания.

Конкурс популярности, так что большинство побед выигрывает!

Крайний срок

Я приму представление, которое получит большинство голосов в конце августа, 6.

Baao
источник
Привет, Майкл, и добро пожаловать в обмен стеками PPCG! Одним из правил для вызовов кода на этом сайте является то, что они должны иметь объективное условие выигрыша, поэтому вы должны выбрать такое условие для этого. Это аналогичная задача, которая может дать вам некоторые идеи.
Исаак
Привет @isaacg, спасибо. Я посмотрю и удалю / отредактирую этот.
baao
@isaacg, надеюсь, теперь все в порядке. Вы здесь более опытный, чем я, крайний срок слишком близок / далеко?
Бао
Это намного лучше. Срок слишком близко, однако, стандарт составляет около 1-2 недель.
Исаак
Хорошо, еще раз спасибо.
Бао

Ответы:

17

J, 7 вопросов / ответов, ни один о J

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

Это чертовски дешевый способ сделать это, я не буду лгать. Вот SO ответы, которые я использовал:

Я переименовал переменную fooкак aи bв коде.

Fatalize
источник
Я полагаю, что использовать такой подход в APL будет гораздо сложнее, но все же есть хороший шанс найти символы в блоке кода самостоятельно.
JohnE
1
@JohnE В этом преимущество ASCII-шума!
Фатализировать
1
Мне нравится этот ответ, но вопрос гласит: «Вы не можете брать фрагменты фрагментов» - что это делает, верно?
unclemeat
3
@unclemeat "если вы берете блок кода из поста, вы берете все это". Для меня это звучит так: если в посте несколько блоков кода, вы можете взять только один, но не можете принять участие в блоке кода.
Фатализировать
Все они происходят из законченных блоков кода - взгляните на источники.
Шон Лэтэм
7

Python 2, 7 6 ссылок

Создание этого решения было не так просто, как казалось. Поиск переполнения стека для конкретного кода затруднен, так как символы не включены в поиск.

Я нашел способ сделать это с помощью 2000-битных случайных чисел, используя другой ответ вместо ссылки № 1, но я не смог протестировать его в онлайн-средах, которые я использую, поскольку он включает в себя getrandbits, что вызывает os.urandom, давая мне NotImplementedError, поэтому я пошел по этому пути вместо этого. Это на самом деле может быть использовано сейчас, с TIO.

Попробуйте онлайн

#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

Ссылки

import random предполагается, что загружен, так как вопрос говорит, что это разрешено.

  1. lst = []и lst.append(random.randint(1, 100))- здесь

  2. map(sum, zip(r1, r2)), map(lambda t: t[0] - t[1] ,zip(r1, r2)), r1, И r2- Здесь

  3. result = float(a) / b- Здесь

  4. ab = [a[i]*b[i] for i in range(len(a))]- Здесь

  5. first, last = some_list[0], some_list[-1]- Здесь

  6. print x - Здесь

переименованный

  1. lstпереименован в n1иn2 (ссылка № 1: я использовал весь код дважды)

  2. r1и r2переименован в n1иn2 (ссылка № 2: позже я использовал отдельные переменные, чтобы назначить карты и разделить в последнем отпечатке, так как ответ включал их.)

  3. resultи aпереименован в ab, и bпереименован в n2(ссылка № 3)

  4. aи bпереименован в n1и n2(ссылка № 4)

  5. firstи some_listкак переименовано в r1, r2, ab, или n2, в зависимости от того, какой линии. (Ссылка № 5: я использовал это четыре раза. Обратите внимание, что используется только первое назначение, поэтому я не переименовываю last)

  6. xпереименовывается в r1, r2или ab, в зависимости от того, какая строка. (Ссылка № 6)

mbomb007
источник
1

Десятичный , 2 ссылки

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Используемые команды:

  • 0 SET (индекс стека по умолчанию)
  • 1 ОТ СЕБЯ
    • 2 CHAR
  • 2 POP
  • 3 I / O
    • 00 дубликат стека
    • 01 из стека в STDOUT
  • 4 МАТЕМАТИКА
    • 1 ДОБАВЛЯТЬ
    • 2 SUBTRACT
    • 3 УМНОЖЬТЕ
    • 4 ДЕЛИТЬ
  • 8 BUILTIN
    • 2 вставить случайное целое число в стек

Разъясненная версия:

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

Источники:

Попробуйте онлайн! Вам нужно будет отключить кэш вывода, если он не отключен автоматически.

MD XF
источник