- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
// p2.cpp : Defines the entry point for the console application.
// Язык Visual C++ 7.0
// Консольное приложение
// 13.07.2016
#include "stdafx.h"
#include <conio.h>
int aa (int, int, int);
void ab (int);
int _tmain(int argc, _TCHAR* argv[])
{
int a, b, c, d, e;
int f;
for (a = 0; a < 4; a++)
for (b = 0; b < 4; b++)
for (c = 0; c < 4; c++)
for (d = 0; d < 4; d++)
for (e = 0; e < 4; e++)
{
f = aa (1, a, 2);
f = aa (f, b, 3);
f = aa (f, c, 4);
f = aa (f, d, 5);
f = aa (f, e, 6);
if (f == 35)
{
printf ("((((1 "); ab (a);
printf ("2) "); ab (b);
printf ("3) "); ab (c);
printf ("4) "); ab (d);
printf ("5) "); ab (e);
printf ("6 = 35.\n");
}
}
getch ();
return 0;
}
int aa (int a, int b, int c)
{
switch (b)
{
case 0: return a + c;
case 1: return a - c;
case 2: return a * c;
case 3: return a / c;
}
return 0;
}
void ab (int a)
{
switch (a)
{
case 0: printf ("+ "); break;
case 1: printf ("- "); break;
case 2: printf ("* "); break;
case 3: printf ("/ "); break;
}
}
Задача: В написанном выражении ((((1 ? 2) ? 3) ? 4) ? 5) ? 6 вместо каждого знака ? вставить знак одного из четырёх арифметических действий: +, -, *, / так, чтобы результат вычислений равнялся 35.
А у автора богатое воображение.
> методы
З.Ы. А ну раз ещё и методы - то майкрософт и его друзья.
С джавы, походу.
я сделялъ
(вспомнился анекдот "и шапочку")
я зделяль
В сишечке же. Вы что, не знали, что сишечка испокон веков поддерживала логическое программирование?
Даже на Питоне, и то лучше выглядит.
> printf
Пожалуй, это самый сишный говнокод, который я видел в разделе C++. Где, ну вот где, во имя всех святых хуёв, здесь C++, FrontlineReporter?!
Хотя это чистая интуиция, пруфов не будет.
Фи! Не барское это дело. Пускай сольвер сам программирует на брейнфаке (подбирая код под тесткейсы).
26 символов, как заказано.
З.Ы. И я его таки нашёл: ????????????????? но ideone на нём таймаутится. Есть где-нибудь на примете ещё интерпретаторы?
З.Ы. Я там количество вопросиков от балды вбивал, не подумайте, что я специально забрил большинство наивных решений (которые почему-то получаются по 27 символов, как назло).
Ткни меня носом в строчку в стандарте брейнфака, где написано, что это UB.
Эта хрень с ML синтаксисом (типа всяких там хачкелей). http://why3.lri.fr/stdlib-0.87.1/ можно довольно легко разобраться синтаксисом к этой хрени, если ковырялись с ML-ями (хачкель, F#, Standard ML, OCaml и проч)
Оно эту свою хрень переводит в язык для всяких разных SMT солверов. Еще умеет в Coq транслировать это говно (в Agda вроде нет).
Z3 выдает ответ
http://rise4fun.com/Z3/luIN
ite это if then else, остальное думаю и так понятно
мне чет это сразу в голову пришло, но не могу придумать как заанролить весь набор комбинаций =\
Функция скомпилится только если будет существовать какой-то вариант реализации, выдающий 35, а остальные варианты попросту откинет
интересная штука, но я пока по быстрому сделал в лоб через рекурсию и специализацию
https://ideone.com/AVSQa6
раскрывается в 3 вызова Print и ужасное количество кода (сборку строки выхлопа бы в комплай-тайм вынести, на макросах как нибудь, но хз)
http://rextester.com/TPMIJ98478 - даже печать на этапе конпиляции.