Задачка на логику

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by LynXzp, 2 Oct 2008.

  1. LynXzp

    LynXzp Elder - Старейшина

    Joined:
    21 Oct 2007
    Messages:
    147
    Likes Received:
    22
    Reputations:
    0
    Задание:
    Решил обойтись совсем без дополнительных переменных и констант.
    Сходу написал
    I:=i--?i++:i++,i++
    но на мое удивление этот код назаработал... а только вот это заработало:
    I=--i?i++:i+=2;
    без "+=" не смог обойтись - хотелось использовать как можно меньше переменных, но через 45 минут сдался.. и решил написать.

    Подскажите как правильно?
     
    1 person likes this.
  2. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Это че вобще за язык и каракули какиета?
     
  3. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    без переменных только битовые операции, по идее будет ппц быстрой, на С)
    I=(I>>1)+((I^2)&2);

    edit
    Даже так можно
    I=(I>>1)|((I^2)&2); //чтоб уж точно только битовые операции были
     
    #3 VERte][, 2 Oct 2008
    Last edited: 2 Oct 2008
    2 people like this.
  4. Dian

    Dian Elder - Старейшина

    Joined:
    2 Sep 2008
    Messages:
    57
    Likes Received:
    11
    Reputations:
    4
    Думаю самый правильный вариант - это самый простой вариант:
    l ^= 3;
     
    4 people like this.
  5. da_ff

    da_ff Elder - Старейшина

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    еще вариант без условия - это вычесть 2, взять модуль, увеличить на 1
     
  6. Dian

    Dian Elder - Старейшина

    Joined:
    2 Sep 2008
    Messages:
    57
    Likes Received:
    11
    Reputations:
    4
    Тогда лучше уж просто из 3 вычесть
    l = 3 - l
     
  7. da_ff

    da_ff Elder - Старейшина

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    тогда становится похоже на предыдущий вариант =)

    еще вариант: i = (int)i%2+1;
    или i = 4 >> i;
     
    #7 da_ff, 6 Oct 2008
    Last edited: 31 Oct 2008
  8. UnPazz

    UnPazz Elder - Старейшина

    Joined:
    30 Aug 2008
    Messages:
    95
    Likes Received:
    43
    Reputations:
    6
    это не язык, а мат.логика - развивает логику. только не понятно, как это все записывать нужно.
    через рекурсивность должно решаться.
     
  9. LynXzp

    LynXzp Elder - Старейшина

    Joined:
    21 Oct 2007
    Messages:
    147
    Likes Received:
    22
    Reputations:
    0
    Супер! Гениально (особенно смотря на оригинальные убогие по сравнению с этими решения)
    Ответа нет, т.к. это небольшая модификация:
    Взял не помню от куда, но это разошлось и можно найти много копий.

    Тут нет конечно вариантов 11, 12, 13.. они забыли про НАС ;)
     
    #9 LynXzp, 26 Oct 2008
    Last edited: 26 Oct 2008