কোনও সংখ্যা বিজোড় বা এমনকি মোড-বিটওয়াইজ অপারেশন ব্যতীত কীভাবে তা নির্ধারণ করবেন? [বন্ধ]


19

কোনও সংখ্যা বিজোড় বা এমনকি মোড-বিটওয়াইজ অপারেশন ব্যতীত কীভাবে তা নির্ধারণ করবেন?

এই চ্যালেঞ্জটি চূড়ান্তভাবে অক্ষম, তবে বাক্সের বাইরে সৃজনশীল সমাধানের জন্য চিন্তা করার ক্ষমতাকে চ্যালেঞ্জ জানায়।

সম্পাদনা :

দয়া করে একটি ফাংশন তৈরি করুন। এছাড়াও, যখন রেজেক্স একটি মজাদার সাড়া, ফাংশনটি কোনও বৈধ সংখ্যা গ্রহণ করবে should

ব্যাকগ্রাউন্ড : এই প্রশ্নটি আমার প্রথম প্রোগ্রামিংয়ের দিন থেকেই শুরু হয়েছে। আমাদের প্রথম দিনের ক্লাসের হোমওয়ার্কটি ছিল একটি সাধারণ প্রোগ্রাম লিখতে যা 'বিজোড়' বা 'এমনকি' মুদ্রিত হয়েছিল। আমি যে ব্রেট ছিলাম, আমি আমাদের কাছে ক্লাসের জন্য যে বইটি পড়েছিলাম তা পড়েনি যেখানে এটি কেবল এটি%নির্ধারণকরতে কীভাবে ব্যবহারকরতে হবে তাআমাদের দেখিয়েছিল। আমি আমার রুমে প্রায় আধা ঘণ্টা পেছনে পেছনে কাটিয়েছি এটি করার একটি উপায় চিন্তা করার চেষ্টা করে এবং বক্তৃতা থেকে মনে পড়েছিল যে সংখ্যাগুলি হারাতে পারে এবং নির্ভুলতা অর্জন করতে পারে কারণ তারা এক আদিম ধরণের থেকে অন্যটিতে ফেলে দেওয়া হয়। অতএব, আপনি যদি সংখ্যাটি নিয়ে থাকেন, এটি দুটি দ্বারা বিভক্ত করেছেন এবং তারপরে এটি আবার সংখ্যাটির সাথে সংখ্যাটি বেঁধেছেন, তবে আপনি জানতে পারবেন যে সংখ্যাটি বিজোড়।

পরের দিন আমি হতবাক হয়ে গেলাম, যখন আমাদের প্রশিক্ষক আমাদের প্রোগ্রামগুলি মূল্যায়ন করছিলেন, তিনি ভেবেছিলেন যে সমস্যাটি সমাধানের উপায়টি এটি সবচেয়ে আসল, যদি অকার্যকর হয় তবে solving


3
আমাদের একটি ফাংশন বা একটি প্রোগ্রাম তৈরি করা উচিত? আমাদের যদি কোনও প্রোগ্রাম করতে হয় তবে কীভাবে আইও হওয়া উচিত? দয়া করে আরও বিস্তারিত বলুন।
জুয়ান

2
কোন উদ্দেশ্য মানদণ্ড গৃহীত উত্তর নির্ধারণ করবে? কোডের আকার? অন্যকিছু?
প্লিজস্ট্যান্ড

এটি অবশ্যই একটি সংখ্যা? এটি একটি স্ট্রিং জন্য মিথ্যা ইতিবাচক দেওয়া উচিত?
উইলিয়াম

এটি প্রায় দীর্ঘকাল ধরে রয়েছে, তবে কোনওরকম বিজয়ী শর্ত বলে মনে হচ্ছে না, এটি আমার মনে হ'ল এখানে কোনও খেলা নেই।
ডিএমকেেকে

উত্তর:


40

বেশিরভাগ প্রোগ্রামিং ভাষায় বিভাগটি পূর্ণসংখ্যার জন্য ভাগফল দেয় quot সুতরাং আপনি কেবল এটি পরীক্ষা করতে পারেন

(i/2)*2==i

6
অগত্যা বেশিরভাগেরই নয়, আমি বলব। অনেক, হতে পারে।
জোয়

1
এটি সঠিকভাবে চলেছে তা নিশ্চিত করার জন্য, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি সমস্ত কিছু একটি int/ longটাইপের মধ্যে ফেলে দিয়েছেন
ওয়ারেন

@warren প্রোগ্রামিং ভাষা / সংকলক অপ্টিমাইজেশন / ইত্যাদি উপর নির্ভর করে। অতিরিক্তভাবে, আপনি ব্যবহার করতে পারেন floor()। এটি সি এবং সি ++ এ পুরোপুরি কাজ করে।
মতিন উলহাক

1
0 একটি সমান সংখ্যা?
ব্যবহারকারী অজানা

4
@ ব্যবহারকারী-অজানা: হ্যাঁ, শূন্য সমান।
কিথ থম্পসন

71

পাইথন

print('even' if (-1)**n==1 else 'odd')

10
গণিতের সাধারণ সৌন্দর্য / সুন্দর সরলতা ... খুব সুন্দর!
jscs

আমি এটা অনেক পছন্দ করি.
রব

ধীর অথচ সৃজনশীল।
মতিন উলহাক

21

ব্রেইনফ *** (179)

শর্তাধীন যুক্তি জড়িত এটি আরও আকর্ষণীয় সমস্যাগুলির মধ্যে একটি যা আমি বিএফ-এ করেছি।

+[>,]<--------------------------------------->>+++++[>+++++++
++++++>+++++++++++++++<<-]>++++>++++<<+<+<-[>-<-[>+<-[>-<-[>+<-[>-<-[>
+<-[>-<-[>+<-[>-<[-]]]]]]]]]]>[>>>.<<-<-]>[>.<-]

এটি একটি সংখ্যার সাথে একটি পাঠ্য ইনপুট নেয়। যদি সংখ্যাটি সমান হয় Eতবে এটি আউটপুট হয় এবং যদি এটি বিজোড় হয় তবে এটি আউটপুট করে O

আমি এতে যথেষ্ট গর্বিত যে আমি আরও বেশি মানব পাঠযোগ্য ফর্মটি প্রদর্শন করব:

+[>,]                                                   steps through input until it reaches eof.
<---------------------------------------                gets the numerical value of the last digit
>>+++++[>+++++++++++++>+++++++++++++++<<-]>++++>++++    store E and O
<<+<+<                                                  store a bit indicating parity, and a temporary bit
-[>-<                                                   !1
  -[>+<                                                 && !2
    -[>-<                                               && !3
      -[>+<                                             && !4
        -[>-<                                           && !5
          -[>+<                                         && !6
            -[>-<                                       && !7
              -[>+<                                     && !8
                -[>-<[-]]                               && !9
              ]
            ]
          ]
        ]
      ]
    ]
  ]
]
>[>>>.<<-<-]>[>.<-]                                     Display E or O based on the value of the parity bit.

21

ম্যাথামেটিকাল

SawtoothWave[x / 2] == 0
Exp[I Pi x] - 1 == 0
Sin[5 x / Pi] == 0

2
আপনি কি এই দুটি সমাধানকে বিভিন্ন উত্তরে ভাগ করতে পারবেন?
FUZxxl

এই চারটি সমাধান কি নয়?
জো

আসলে, সব বিল্ট-ইন নাম ম্যাথামেটিকাল মূলধনী, তাই হিসাবে মজার যেমন দেখায়, আপনি ব্যবহার করা উচিত Iএবং Piপরিবর্তে iএবং pi
ডেভিড জাং

15

সি

সীমাবদ্ধ আকারের পূর্ণসংখ্যার জন্য কয়েক বার নিজে থেকে কয়েক বার সংখ্যাবৃদ্ধি হবে এবং যে কোনও বিজোড় সংখ্যায় কমপক্ষে কমপক্ষে উল্লেখযোগ্য বিট সেট থাকবে set

#include "stdio.h"
long long input=123;
int main(){
    int a;
    for(a=6;a;a--){
        input*=input;
    }
    if(input){
        printf("Odd");
    }
    else{
        printf("Even");
    }
    return 0;
}

সম্পাদনা করুন: একটি সাধারণ ফাংশন হিসাবে:

int isOdd(long long input){
    int a;
    for(a=6;a;a--){
        input*=input;
    }
    return !!input;
}

স্বাক্ষরবিহীন পূর্ণসংখ্যার ব্যবহার নিশ্চিত করুন। স্বাক্ষরিত পূর্ণসংখ্যার ওভারফ্লো সি এর মধ্যে অপরিজ্ঞাত আচরণ, সুতরাং অপ্টিমাইজেশন চাইলে অদ্ভুত কিছু করতে পারে।
জোয়ে অ্যাডামস

13

পাইথন (ধীর)

n=1234
while n > 1: n -= 2 #slow way of modulus.
print "eovdedn"[n::2]

1
ইতিবাচক জন্য কাজ করে ... আমি মনে করি আমি abs()শুরুতে একটি কল যোগ করতে পারতাম ।
st0le

@ জোশ: সেই কৌশলটি এখানে ইতিমধ্যে কয়েকবার উপস্থিত হয়েছিল :)
জো

Gnibblr ক্রেডিট :)
st0le

@ জোয়ি: আমি বুঝতে পারি নি যে এটি নতুন ছিল, তবে শৈলীটি মূল হতে হবে না। :)
jscs

12

জাভাস্ক্রিপ্ট

/[02468]$/.test(i)

trueএকটি এমনকি সংখ্যার জন্য ফলন । এটি কেবল যুক্তিসঙ্গত আকারের পূর্ণসংখ্যার সাথে কাজ করে (উদাহরণস্বরূপ বৈজ্ঞানিক স্বরলিপি যখন স্ট্রিংয়ে রূপান্তরিত হয় এবং ভগ্নাংশের অংশ না থাকে))


2
"ফাংশন" প্রয়োজনীয়তা পূরণের জন্য আপনি এটিকে সহজভাবে পরিবর্তন করতে পারেন /[02468]$/.test
Ry-

এটি প্রশ্নে একেবারে পরিষ্কার ছিল না তবে এটি সম্ভব হতে পারে যে ইনপুটটি মোটেও একটি সংখ্যা নয় /[02468]$/.test('I am a fake even number 0'),। /^[0-9].[02468]$/.test(i)
উইলিয়াম

/-?^\d*[02468]$/আপনার regex তুলনায় একটু কঠোর হতে হবে। বৈজ্ঞানিক স্বরলিপি ব্যবহার করে স্ট্রিং'ড সংখ্যার জন্য সঠিকভাবে কাজ করার জন্য আপনাকে আরও কাজ করতে হবে।
টমাস এডিং

12

পাইথন

যেহেতু আমি সত্যিই স্কোরিং মানদণ্ড কী তা নিশ্চিত নই, তাই বিনোদনের জন্য আমি এখানে বেশ কয়েকটি সমাধান নিয়ে এসেছি। তাদের বেশিরভাগ abs(n)নেতিবাচক সংখ্যার সমর্থন করার জন্য ব্যবহার করে। বেশিরভাগ, সমস্ত না থাকলে এগুলির মধ্যে কখনও আসল গণনার জন্য ব্যবহার করা উচিত নয়।

এটি এক ধরণের বিরক্তিকর:

from __future__ import division
def parity(n):
    """An even number is divisible by 2 without remainder."""
    return "Even" if n/2 == int(n/2) else "Odd"

def parity(n):
    """In base-10, an odd number's last digit is one of 1, 3, 5, 7, 9."""
    return "Odd" if str(n)[-1] in ('1', '3', '5', '7', '9') else "Even"

def parity(n):
    """An even number can be expressed as the sum of an integer with itself.

    Grossly, even absurdly inefficient.

    """
    n = abs(n)
    for i in range(n):
        if i + i == n:
            return "Even"
    return "Odd"

def parity(n):
    """An even number can be split into two equal groups."
    g1 = []
    g2 = []
    for i in range(abs(n)):
        g1.append(None) if len(g1) == len(g2) else g2.append(None)
    return "Even" if len(g1) == len(g2) else "Odd"

import ent # Download from: http://wstein.org/ent/ent_py
def parity(n):
    """An even number has 2 as a factor."""
    # This also uses modulo indirectly
    return "Even" if ent.factor(n)[0][0] == 2 else "Odd"

এবং এটি আমার প্রিয় যদিও এটি দুর্ভাগ্যক্রমে কাজ করে না (যেমন নীচে মার্চ হো দ্বারা চিহ্নিত করা হয়েছে: কেবলমাত্র সমস্ত এমনকি সংখ্যার দুটি প্রাইমের যোগফলের অর্থ এই নয় যে সমস্ত বিজোড় সংখ্যাটি নয়)।

import itertools
import ent    # Download from: http://wstein.org/ent/ent_py
def parity(n)
    """Assume Goldbach's Conjecture: all even numbers greater than 2 can
    be expressed as the sum of two primes.

    Not guaranteed to be efficient, or even succeed, for large n.

    """
    # A few quick checks
    if n in (-2, 0, 2): return "Even"
    elif n in (-1, 1): return "Odd"
    if n < 0: n = -n    # a bit faster than abs(n)
    # The primes generator uses the Sieve of Eratosthenes
    # and thus modulo, so this is a little bit cheating
    primes_to_n = ent.primes(n)
    # Still one more easy way out
    if primes_to_n[-1] == n: return "Odd"
    # Brutish!
    elif n in (p1+p2 for (p1, p2) in itertools.product(primes_to_n, primes_to_n)):
        return "Even"
    else:
        return "Odd"

সুন্দর সমাধান :-)
জোয়

2
সত্যিই একটি পুরানো নেক্রো, তবে আপনার গোল্ডবাচের অনুমানের উত্তরটি 9 এর জন্যও প্রিন্ট করে না? ফলস্বরূপ মিথ্যাচারটি নিশ্চিত করার ক্ষেত্রে বলে মনে হয়
মার্চ হো

হ্যাঁ, আপনি একেবারে, একশো শতাংশ সঠিক, @ মার্চহো। আমার মুখে ডিম।
jscs

10

Haskell,

এটি অবশ্যই কোনওভাবে সৃজনশীল, চিন্তা-ভাবনা-বাইরে-বাক্স সমাধানটি সন্ধান করছেন না, তবে গল্ফস্ক্রিপ্টের চেয়ে সংক্ষিপ্ত একটি হাস্কেল উত্তর পোস্ট করার জন্য আমি কতবার যাচ্ছি? সত্যিই লজ্জার বিষয় এটি কোনও কোড গল্ফ নয়।

odd

তবে আরও গুরুতর:

data Parity = Even | Odd
            deriving (Show)

parity = p evens odds
  where p (x:xs) (y:ys) i | i == x = Even
                          | i == y = Odd
                          | otherwise = p xs ys i
        evens = interleave [0,2..] [-2,-4..]
        odds = interleave [1,3..] [-1,-3..]
        interleave (x:xs) ys = x : interleave ys xs

আমার কাছে গল্ফস্ক্রিপ্ট উত্তরের চেয়ে লম্বা দেখায়
ওয়ারেন

2
আমি প্রথম ব্লক ( odd) উল্লেখ করছিলাম যা একটি বিল্টিন ফাংশন যা সংখ্যাটি বিজোড় হলে সত্য প্রদান করে। এটি তার নিজের একটি সম্পূর্ণ উত্তর এবং বর্তমান গল্ফস্ক্রিপ্ট উত্তরের চেয়ে ছোট (এটি লেখার সময় এটি 10 ​​টি অক্ষর, তবে আমি আশা করি যে এটি নিচে নামবে)। প্রশ্নটিও কিছুটা অপ্রকাশিত, যার কারণেই আমি দৃsert়ভাবে দাবি করি যে oddযথেষ্ট। সেটিও বদলে যেতে পারে।

1
আপনার উত্তরে প্রথম উত্তরটি মিস করেছেন :)
ওয়ারেন

1
খুব কমপক্ষে parityঅ্যালগোরিদমটি Numপূর্ণসংখ্যার সমস্ত দৃষ্টিতে কাজ করে । এটা গরম! যদিও আমি সম্ভবত করতাম evens = [0,2..] >>= \n -> [-n, n]। মতভেদ জন্য একই।
থমাস এডিং

7

"একটি সংখ্যা বিজোড় বা এমনকি এমনকি কীভাবে নির্ধারণ করবেন" এই প্রশ্নের ইচ্ছাকৃত বিকৃত পঠন ব্যবহার করে এখানে একটি সি বাস্তবায়ন হয়েছে (ধরে নিও boolএবং trueযথাযথভাবে সংজ্ঞায়িত করা হয়েছে):

bool is_odd_or_even(int n)
{
    return true;
}

প্রশ্নটিতে সংখ্যার উল্লেখ রয়েছে, পূর্ণসংখ্যা নয়। 0.5রিটার্নের মতো সংখ্যা trueযখন এটি করা উচিত নয়।
কনরাড বোরোস্কি

6

কি, এখনও এলোমেলোভাবে কোন অ্যালগরিদম নেই ??

সি

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

void prt_parity_of(int n){
  int i,j=2;
  char o[]="eovdedn"
     , f[n=abs(n)]; for(i=n;i-->0;f[i]=1);

  while(j>1){
    while((i=rand()%n)
       == (j=rand()%n)
       || (f[i]&f[j]>0)
       && (f[i]=f[j]=0)
    );for(i=j=0; ++i<n; j+=f[i])
  ;}for(;j<7;j+=2)putchar(o[j]);
}

0 .. n -1 সীমাতে এলোমেলোভাবে 2 টিরও কম সংখ্যা অবধি জোড় জোড় করে । এটা বেশ বিস্ময়করভাবে অদক্ষ আছে: হে ( 3 )।


সম্পূর্ণ ভিন্ন:

Haskell,

import Data.Complex

ft f = (\ω -> sum[ f(t) * exp(0:+2*pi*ω*t) | t<-[-1,-0.9..1] ] )

data Parity = Even | Odd deriving (Show)

parity n
  | all (\(re:+im) -> abs re > abs im) [ft ((:+0).(^^n)) ω | ω<-[0..20]]  = Even
  | otherwise                                                             = Odd

এমনকি \x->x^^4বৈকল্পিকের ফুরিয়ার রূপান্তরটি কাল্পনিক হলেও এই সত্যটি ব্যবহার করে যে কোনও সমান ফাংশনের ফুরিয়ার রূপান্তর (যেমন ) বাস্তব।


5

উইন্ডোজ পাওয়ারশেল

function OddOrEven([long]$n) {
  if (0,2,4,6,8 -contains "$n"[-1]-48) {
    "Even"
  } else {
    "Odd"
  }
}
  1. স্ট্রিংয়ে রূপান্তর করুন
  2. শেষ অক্ষরটি (অঙ্ক) চয়ন করুন (মূলত একটি মডড 10)।
  3. এটি 0, 2, 4, 6 বা 8 হয় কিনা তা পরীক্ষা করুন।

অনুরোধ অনুসারে কোনও বিটওয়াইজ অপারেটর, কোনও মডুলাস নেই।


5

কক, 103

Fixpoint even n:=match n with O=>true|S n=>odd n end with odd n:=match n with O=>false|S n=>even n end.

যতদূর আমি বলতে পারি এটি কোডগল্ফের প্রথম কোক এন্ট্রি।

এমনকি ছোট (59):

Fixpoint even n:=match n with O=>true|S n=>negb(even n)end.

4

চুনি

n.odd?

আপনি যদি ফলাফলটি মুদ্রণ করতে চান:

f[n] = ->(n){puts n.odd?? 'odd' : 'even'}

আমি .odd?সংজ্ঞাতে মোটামুটিভাবে রুবি ইউজ মোড ব্যবহার করছি ।
মিঃজান্ডার

4

Unlambda

বিশ্বের আরও উলাম্বদা দরকার।

আনলম্বদার এখানে একটি হত্যাকারী সুবিধা রয়েছে: এটির ডিফল্ট ( আহেম) সংখ্যার জন্য ) প্রতিনিধিত্ব হ'ল চার্চ সংখ্যাগুলি, সুতরাং যা প্রয়োজন তা কেবল তাদের বাইনারি ফাংশনে প্রয়োগ করা হয় - সত্য কাজ করতে না। সহজ!

PS: মার্কডাউন এবং উলাম্বদা অবশ্যই একে অপরের জন্য তৈরি হয় না।

true  = i
false = `ki
not   = ``s``s``s`k``s``si`k`kk`k`kii`k`ki`ki
even? = ``s``si`k``s``s``s`k``s``si`k`kk`k`kii`k`ki`ki`ki

প্রথম কয়েকটি পূর্ণসংখ্যার জন্য যাচাইকরণ:

```s``si`k``s``s``s`k``s``si`k`kk`k`kii`k`ki`ki`ki`ki                   => i
```s``si`k``s``s``s`k``s``si`k`kk`k`kii`k`ki`ki`kii                     => `ki
```s``si`k``s``s``s`k``s``si`k`kk`k`kii`k`ki`ki`ki``s``s`kski           => i
```s``si`k``s``s``s`k``s``si`k`kk`k`kii`k`ki`ki`ki``s``s`ksk``s``s`kski =>`ki


3

পাইথন

print (["even"] + (["odd", "even"] * abs(n)))[abs(n)]

আগের সংস্করণে অনুরূপ পারফরম্যান্স। এখন 0 জন্য কাজ করে।

ভুল পূর্ববর্তী সংস্করণ:

print ((["odd", "even"] * abs(n))[:abs(n)])[-1]

বিশেষভাবে দক্ষ নয়; সময় এবং মেমরি উভয় স্পষ্টতই O (n): 1,000,000 এর জন্য 32 ম্যাসি; 100000 এর জন্য 2.3 মেসি; 100 এর জন্য 3.2 ইউজেক। নেতিবাচক সংখ্যা নিয়ে কাজ করে। 0 এর জন্য একটি ত্রুটি নিক্ষেপ করে, কারণ 0 টি সমান বা বেআইনীও নয়।


3
জিরো অবশ্যই। আরও দেখুন: en.wikipedia.org/wiki/Parity_of_zero

@ জ্লো: অ্যাও, ক্রেপ আমি ভেবেছিলাম এটি "একটি বৈশিষ্ট্য, কোনও বাগ নয়"। আরও সংশোধনী ...
jscs

3

Fractran

[65/42,7/13,1/21,17/7,57/85,17/19,7/17,1/3]

আবেদন করা

63*2^abs(n)

উৎপাদনের পারেন 5যদি nবিজোড় হয় বা 1যদিn এমনকি হল।

আপডেট : অনেক খাটো তবে এত আকর্ষণীয় নয়:

[1/4](2^abs(n))

হয় 2বিজোড় জন্য nএবং 1এমনকি n


3

এমএমআইএক্স (4 বাইট)

এটি এক ধরণের প্রতারণা। আমি মোড বা বিট ফিডলিং অপারেশন ব্যবহার করি না। বরং এটি যে বিজোড় / এমনকি সংখ্যার জন্য পরীক্ষার অন্তর্নির্মিত। ধরে নিচ্ছি যে $3পরীক্ষার জন্য সংখ্যাটি রয়েছে এবং ফলাফলটি প্রবেশ করে$2 :

ZSEV $2,$3,1

যদি হয় এবং যদি না হয় সেট $2করে । স্তন্যপায়ী অর্থ শূন্য-সেট এমনকি1$30ZSEV এবং নিম্নলিখিত শব্দার্থবিজ্ঞান রয়েছে:

ZSEV a,b,c: if (even b) a = c; else a = 0;

উপরের লাইনের জন্য, mmixalএই চারটি বাইট সমাবেশ সংগ্রহ করে:

7F 02 03 01


3

পার্ল

কি সম্পর্কে

use Math::Trig;
print(cos(pi*@ARGV[0])>0?"even":"odd")

2

জাভাস্ক্রিপ্ট, 36

function(i){while(i>0)i-=2;return!i}

রিটার্নস trueযদি এমনকি falseযদি না।



2

পাইথন

zip((False, True)*(i*i), range(i*i))[-1][0]

i এর বর্গক্ষেত্র পরীক্ষা করে, তাই এটি নেতিবাচক সংখ্যার জন্যও কাজ করে


2

এফ #

জয়ের জন্য পারস্পরিক পুনরাবৃত্তি।

শূন্য বা (এন -১) বিজোড় হলেও একটি সংখ্যা এন হয়।

শূন্যের সাথে অসম এবং (n-1) সমান হলে একটি সংখ্যা n বিজোড় হয়।

(নেতিবাচক সংখ্যার সমতুল্যে আগ্রহী হলে অ্যাবস যোগ করা হবে)

let rec even n = n = 0 || odd (abs n - 1) 
    and odd n = n <> 0 && even (abs n - 1)


2

বিটওয়াইজ অপারেশন হিসাবে কি যোগ্যতা অর্জন করে? হুডের অধীনে, 2 দ্বারা পূর্ণসংখ্যা বিভাগটি একটি বিট-শিফট হিসাবে কার্যকর হওয়ার সম্ভাবনা রয়েছে।

ধরে নেওয়া বিট শিফ্টগুলি আউট নেই:

সি / সি ++

(unsigned char)((unsigned char)(n > 0 ? n : -n) << 7) > 0 ? "odd" : "even"

সম্পাদনাটি কিছু বন্ধনী মিস করেছে এবং শেষ পর্যন্ত কোনও শিফটকে আরও কম করার জন্য মুছে ফেলার জন্য পরিবর্তিত হয়েছে। আপনি নিম্নলিখিত (* নিক্সে) দিয়ে এটি পরীক্ষা করতে পারেন:

echo 'main(){ std::cout<< (unsigned char)((unsigned char)(n > 0 ? n : -n) << 7) > 0 \
        ? "odd\n" : "even\n";}' \
  | gcc --include iostream -x c++ -o blah -
./blah

... যদিও লিনাক্স / টিসিএস-তে, আমাকে ব্যাকস্ল্যাশ থেকে বাঁচতে \nহয়েছিল যদিও এটি একক-কোটায় ছিল। আমি লিটল এবং বিগ-এন্ডিয়ানতে পরীক্ষা করেছি, এটি উভয় ক্ষেত্রেই সঠিকভাবে কাজ করে। এছাড়াও, আমি এটির হাত-অনুলিপি করেছি; আমি যে কম্পিউটারটি দিয়ে পোস্ট করছি তাতে সংকলক নেই, সুতরাং এতে ভুল থাকতে পারে।

x86 asm

            mov eax, n          # Get the value
            cmp eax,0           # Is it zero?
            jge pos_label       # If >= 0, skip the next part
            neg eax
pos_label:

            imul al, 128

অথবা

            shl  al, 7

অথবা

            lea  eax, [eax*8]    # Multiply by 2^3 (left-shift by 3 bits)
            lea  eax, [eax*8]    # ... now it's n*2^6
            lea  eax, [eax*2]    # ... 2^7, or left-shift by 7 bits

... অনুসরণ করেছে:

            cmp al,  0          # Check whether the low byte in the low word is zero or not
            jz  even_label      # If it's zero, then it was an even number
            odd_label           # ... otherwise it wasn't

বিকল্পভাবে, শিফট এবং তুলনা স্টাফ পাশাপাশি করা যেতে পারে:

            sar al,1            # signed integer division by 2 on least-significant byte
            jc  odd_label       # jump if carry flag is set


2

একটি 68000 প্রসেসরের মাধ্যমে আপনি পরীক্ষার মান দ্বারা সংজ্ঞায়িত ঠিকানা থেকে একটি শব্দের মান সরিয়ে নিতে পারেন:

 move.l <number to test>,a0
 move.w (a0),d0
 ; it's even if the next instruction is executed

এবং ঠিকানার ত্রুটির জন্য হার্ডওয়্যার ট্র্যাপটিকে মানটির বিজোড় / এমনকি প্রকৃতিটি নির্ধারণ করতে দিন - যদি ব্যতিক্রমটি উত্থাপিত হয় তবে মানটি বিজোড় ছিল, যদি না হয় তবে মানটিও ছিল:

 <set up address error trap handler>
 move.l <pointer to even string>,d1
 move.l <number to test>,a0
 move.w (a0),d0
 <reset address error trap handler>
 <print string at d1>
 <end>

 address_error_trap_handler:
 move.l <pointer to odd string>,d1
 rte

ইন্টেল x86 সিপিইউগুলিতে কাজ করে না কারণ এগুলি ডেটা অ্যাক্সেস সম্পর্কে আরও নমনীয়।


2

পাইথন

আমি সিদ্ধান্ত নিয়েছিলাম কুরুচিপূর্ণ, সবচেয়ে বিভ্রান্তিকর সমাধানের জন্য চেষ্টা করে যাব যা আমি ভাবতে পারি:

n=input();r=range(n+1)
print [j for i in zip(map(lambda x:str(bool(x))[4],[8&7for i in r]),
map(lambda x:str(x)[1],[[].sort()for x in r])) for j in i][n]

প্রিন্ট ই যদি এমনকি, হে বিজোড়।


2

প্রশ্নঃ

X <2 অবধি 2 কে বিয়োগ করতে থাকুন তারপর বুলে রূপান্তর করুন

{1b$-[;2]/[2<=;abs x]}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.