"Напишіть" простий калькулятор без написання жодного рядка коду


25

Це дуже просто:

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

Програма повинна створити два випадкових числа і вивести числа

  • додано до,
  • відняти,
  • помножено на і
  • ділиться на

один одного.

Правила

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

  1. Ви можете перейменовувати змінні, функції та методи. (Це не означає, що ви можете змінити виклик методу, змінивши, скажімо, сканер.nextInt () на scanner.nextLine () і заявляючи, що ви змінюєте ім'я методу. Зміна повинна бути у визначенні чи посиланні на те саме.). Рішення все ще має працювати, якщо змінні, функції або методи будуть перейменовані знову.

  2. Ви можете відповідним чином відрегулювати відступ.

  3. Можна припустити, що належні модулі завантажуються для роботи фрагментів коду. .

  4. Якщо мова вимагає, щоб код був у якомусь тілі методу для виконання (наприклад, public static void main(String[] args)для Java, static int Main(string[] args)для C # тощо), ви можете перетворити свій код у відповідний метод. Але зміст цього основного методу повинен залишатися незмінним.

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

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

Конкурс популярності, тому виграє найбільше грошей!

Кінцевий термін

Я прийму подання, яке має найбільше голосів наприкінці серпня, 6.


Привіт Майкл, і ласкаво просимо до обміну стеками PPCG! Одне з правил кодових викликів на цьому веб-сайті - це те, що вони повинні мати об'єктивну умову виграшу, тому ви повинні вибрати таку умову для цього. Це подібний виклик, який може дати вам кілька ідей.
isaacg

Привіт @isaacg, дякую Я буду дивитись та видаляти / редагувати цей.
chris p bacon

@isaacg, сподіваюся, що це нормально. Ви тут досвідченіші за мене, занадто близький / далекий термін?
chris p bacon

Це набагато краще. Кінцевий термін занадто близький, однак, стандартний - близько 1-2 тижнів.
isaacg

Добре, ще раз дякую.
chris p bacon

Відповіді:


17

J, 7 питань / відповідей, жодної щодо J

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

Це досить чортово дешевий спосіб це зробити, я не буду брехати. Ось відповіді, які я використав:

Я перейменував змінну fooяк aі bв код.


Я думаю, що застосовувати такий підхід було б набагато складніше в APL, але все ж є хороший шанс знайти символи в кодовому блоці самостійно.
JohnE

1
@JohnE Це перевага в тому, що шум ASCII!
Фаталізувати

1
Мені подобається ця відповідь, але в питанні сказано: "Ви не можете взяти фрагменти фрагментів" - що це робить, правда?
нечисте м'ясо

3
@unclemeat "якщо ви берете кодовий блок з посади, ви берете всю справу". Мені це здається, що якщо у публікації є кілька блоків коду, ви можете взяти лише один, але ви не можете взяти частину кодового блоку.
Фаталізувати

Усі вони походять із повних блоків коду - погляньте на джерела.
Шон Латем

7

Python 2, 7 6 посилань

Створити це рішення було не так просто, як виглядало. Пошук Переповнення стека для конкретного коду є важким, оскільки символи не включаються до пошуку.

Я знайшов спосіб зробити це з 2000-бітовими випадковими числами, використовуючи іншу відповідь замість Ref # 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)


1

Десяткові знаки , 2 посилання

82D82D00D30001D30041D301212010D301200D30001D30042D301212010D301200D30001D30043D301212010D301200D30001D30044D30122

Використані команди:

  • 0 SET (індекс стека за замовчуванням)
  • 1 ПІСЛЯЙТЕ
    • 2 ЗАРАЗ
  • 2 POP
  • 3 I / O
    • 00 дублікат стека
    • 01 від стека до STDOUT
  • 4 МАТ
    • 1 ДОДАТИ
    • 2 ПОДІБ
    • 3 МНОГО ВІДПОВІДНО
    • 4 ДИВІД
  • 8 БУЛЬТИН
    • 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

Джерела:

Спробуйте в Інтернеті! Вам потрібно буде вимкнути кеш-вихід, якщо він не відключений автоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.