forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Форумные конкурсы (http://forum.boolean.name/forumdisplay.php?f=42)
-   -   Простенький программерский конкурс... (http://forum.boolean.name/showthread.php?t=2752)

Taugeshtu 19.02.2007 14:34

Простенький программерский конкурс...
 
Предлагаю сделать серию простеньких форумных конкурсов.
Как вариант начала серии предлагаю вот такой конкурс:

Конкурс на самую оригинальную функцию toggle'a переменной (0/1).
Начальнай вариант:

Код:


Function toggle(a)
    a=1-a
end function

Можно сделать данный конкурс турнирным - лучшие 50 проходят во второй тур, оттуда лучшие 10 - в третий и т.д.
В качестве приза предлагаю либо медаль, либо награду "За оригинальность"

Ну, кто хочет подобную серию?

jimon 19.02.2007 15:54

Re: Простенький программерский конкурс...
 
Ize'g0re
такую toggle придумали уже давно
в бейсиках ето not ... типа a = not a
а в С++ ето "!" .. :) a = !a;

alcoSHoLiK 19.02.2007 17:55

Re: Простенький программерский конкурс...
 
Ize'g0re
Дай Бог, чтобы хоть один, кроме твоего, приудумали, а ты про 50 говоришь)

Serendipity 19.02.2007 19:38

Re: Простенький программерский конкурс...
 
Мда.. задачка не оригинальна.
может лучше предложить знак float/real/double/что-там-у-вас поменять ручками.
Мне пришлось однажды.. когда из-за неявных преобразования на выходе из функции я получал float с потеряным знаком..

HolyDel 20.02.2007 01:57

Re: Простенький программерский конкурс...
 
a xor $1000000000000000

Serendipity 21.02.2007 02:29

Re: Простенький программерский конкурс...
 
Да-да, я так и сделал.. я вспомнил.. попутно с этим я еще пытался вручную делить float на степень двойки...вот это уже задача поинтереснее.

кстати предложение Диплоимата еще ия вляется решением по конкурсу..
a=a xor 1
так как в компьютерах нет узла, вы полняющего операцию XOR, она заменима несколькими стандартными (И,ИЛИ,НЕ) - это к Имперсоналису

jimon 21.02.2007 10:51

Re: Простенький программерский конкурс...
 
Serendipity
xor ето самая быстрая операция, и по скорости она сравнима с И,ИЛИ,НЕ
узел есть :) в ALU

просто раньше ... a = a xor a был самый быстрый способ обнулить переменую
помойму даже в асемблере щиталось что сделать xor быстрее чем присвоить ноль

ps. дело в том что ALU обычно имеет частоту больше чем сам процессор
и даже если для операции требуется на 3 такта больше .. то разницы для программы как таковой нету
хотя в разных процесорах по разному

Taugeshtu 21.02.2007 13:50

Re: Простенький программерский конкурс...
 
я вообщето имел в виду ЛЮБУЮ ОРИГИНАЛЬНУЮ идею... можно даже через If Endif делать, да мало ли через какой ещё геморрой! главный и единственный критерий - ОРИГИНАЛЬНОСТЬ! скорость, доступность, прочиеусловия не учитываются...
Ну, кто ещё хочет предложить вариант тоггла?

Chrono Syndrome 21.02.2007 15:53

Re: Простенький программерский конкурс...
 
Ну, допустим, вот:
Код:

Procedure Toggle(a)
ProcedureReturn (A + 1) % 2
EndProcedure


Chrono Syndrome 21.02.2007 18:29

Re: Простенький программерский конкурс...
 
Все, ребята, встречайте победителя ...
Код:

#MemorySize = 2 - 1
Global Dim Memory.B(#MemorySize)
Procedure Interpret(Buffer.S)
Define I, Ptr, Mode, Level, *EndAddress = @Buffer + Len(Buffer) - 1
Enumeration
#Normal : #Skip : #ReverseSkip
EndEnumeration
For I = @Buffer To *EndAddress
Select PeekB(I)
Case '+' : If Mode = #Normal : Memory(Ptr) + 1 : EndIf
Case '-' : If Mode = #Normal : Memory(Ptr) - 1 : EndIf
Case '>' : If Mode = #Normal : Ptr + 1
If Ptr > #MemorySize : Ptr = 0 : EndIf
EndIf
Case '<' : If Mode = #Normal : Ptr - 1
If Ptr < 0 : Ptr = #MemorySize : EndIf
EndIf
Case '[' : Select Mode
Case #Normal : If Memory(Ptr) = 0 : Mode = #Skip : EndIf
Case #Skip : Level + 1
Case #ReverseSkip
If Level = 0 : Mode = #Normal : Else : Level - 1 : EndIf
EndSelect
Case ']' : Select Mode
Case #Normal : If Memory(Ptr) <> 0 : Mode = #ReverseSkip : EndIf
Case #Skip
If Level = 0 : Mode = #Normal : Else : Level - 1 : EndIf
Case #ReverseSkip : Level + 1
EndSelect
EndSelect
If Mode = #ReverseSkip
If I = *Buffer : Break : Else : I - 2 : EndIf
EndIf
Next I
EndProcedure
; -=-=-=-=-=-=-=-=-=-=-=-=-
Procedure Toggle(A)
Memory(0) = A
Interpret(">[-]<[[-]>]+")
ProcedureReturn Memory(0)
EndProcedure

P.S. Пока писала эту хрень, в голове родился еще один вариантик (поскромнее, конечно =)) ...
Код:

: Toggle
>R 0 1 R>
IF DROP ELSE NIP THEN
;


alcoSHoLiK 21.02.2007 18:40

Re: Простенький программерский конкурс...
 
Brainf**k) Да, его сложно переплюнуть.

Chrono Syndrome 21.02.2007 18:47

Re: Простенький программерский конкурс...
 
Цитата:

Да, его сложно переплюнуть.
Хех, сложно но можно =). Про Malbolge слышал ?

Taugeshtu 22.02.2007 13:40

Re: Простенький программерский конкурс...
 
А, пардон, на каком языке это писалось?(я с математикой практически не знаком, так что идентифицировать команды не смог...)
Я кроме select case ничего знакомого не увидел...

Chrono Syndrome 22.02.2007 14:06

Re: Простенький программерский конкурс...
 
Цитата:

А, пардон, на каком языке это писалось?(я с математикой практически не знаком, так что идентифицировать команды не смог...)
Я кроме select case ничего знакомого не увидел...
Первые 2 - PureBASIC v4.0
Последняя - Win32FORTH v6.11.10

HolyDel 23.02.2007 01:15

Re: Простенький программерский конкурс...
 
2Jimon
ИМХО:
a=a xor a , врядли будет работать быстрее чем a=0, т.к. в любрм соучае идет присваивание, а вто обнуление регистра процессора, типа
XOR EAX , будет наверняка быстрее чем любоке присваивание переменной ему.


Часовой пояс GMT +4, время: 02:47.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot