LINUX.ORG.RU
ФорумTalks

Кто хочет посоревноваться? Programmers challenge

 


0

2

Задача: выразить числа от 1 до 16 используя только 0 и все доступные математические/битовые операторы языка C/C++/C#/Java, максимально коротким способом. Пример:


#include <stdio.h>
int main()
{
        // 1
        printf("%d\n", -~0);
        // 2
        printf("%d\n", -~0-~0);
        // 3
        printf("%d\n", -~0-~0-~0);
        // 4
        printf("%d\n", -~0<<(-~0-~0));
        
        return 0;
}
★★

Последнее исправление: qrck (всего исправлений: 1)

10 LET STROKA$="0"
20 FOR I=1 TO 15
30 PRINT LEN STROKA$: STROKA$=STROKA$+"0"
40 NEXT

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

//ушел читать предыдущую тему

abraziv_whiskey ★★★★★
()
Последнее исправление: abraziv_whiskey (всего исправлений: 1)

Интересный челлендж. Писал почти не раздумывая, наверняка можно короче. Завтра ещё экзамен по ОП, кстати…

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n"
/* 1  (3  chars) */,			-~0
/* 2  (6  chars) */,			-~0-~0
/* 3  (9  chars) */,			-~0-~0-~0
/* 4  (13 chars) */,			-~0<<(-~0-~0)
/* 5  (18 chars) */,			(-~0<<(-~0-~0))-~0
/* 6  (16 chars) */,			(-~0-~0-~0)<<-~0
/* 7  (21 chars) */,			((-~0-~0-~0)<<-~0)-~0
/* 8  (18 chars) */,			(-~0-~0)<<(-~0-~0)
/* 9  (23 chars) */,			((-~0-~0)<<(-~0-~0))-~0
/* 10 (27 chars) */,			((-~0-~0)<<(-~0-~0))-~0-~0
/* 11 (30 chars) */,			((-~0-~0)<<(-~0-~0))-~0-~0-~0
/* 12 (21 chars) */,			(-~0-~0-~0)<<(-~0-~0)
/* 13 (27 chars) */,			((-~0-~0-~0)<<(-~0-~0))-~0
/* 14 (28 chars) */,			(((-~0-~0-~0)<<-~0)-~0)<<-~0
/* 15 (33 chars) */,			((-~0-~0-~0)<<(-~0-~0))-~0-~0-~0
/* 16 (24 chars) */,			(-~0-~0-~0-~0)<<(-~0-~0)
			);

	exit(EXIT_SUCCESS);
}
kalterfive ★★
()
Последнее исправление: kalterfive (всего исправлений: 5)
Ответ на: комментарий от Deleted

Логические операции можно?

Для честности, давайте без них. Т.к. тем, кто будет делать на C#/Java такой фокус не получиться сделать.

qrck ★★
() автор топика
Ответ на: комментарий от Deleted

Неплохо.

Щаз бы в -~!0К((-~!0<<-~!0)<<!0)+!0 в челленджах принимать участие…

kalterfive ★★
()
Последнее исправление: kalterfive (всего исправлений: 1)
Ответ на: комментарий от qrck

Задача решается перебором вариантов, на самом деле. Т.к. операций немного, можно испробовать все короткие строки. Отправлять на вход «tcc -run».

Deleted
()
Ответ на: комментарий от Deleted

0 и '0' это все-же разные вещи. Так что не надо читерить ;)

qrck ★★
() автор топика
Ответ на: комментарий от system-root

ну тогда как-то так

#include <iostream>
int main()
{
        for(int i=(-~0<<-~0<<-~0<<-~0<<-~0);i>0;std::cout<<i--<<"\n");
}

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)

если в скобках не запутался, то как-то так красноглазненько:

printf("%d\n",
printf("%d\n",
printf("%d\n",
printf("%d\n",-~0)
      -~0)
   -~0-~0)
   <<-~0-~0);
и так далее

MKuznetsov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.