দশমিক "এক্সওআর" অপারেটর


15

অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ বাইনারি (বেস -২) সংখ্যার অঙ্কগুলি পরিচালনা করার জন্য অপারেটরদের সরবরাহ করে। এই অপারেটরগুলিকে অন্যান্য ঘাঁটিতে সাধারণকরণের একটি উপায় এখানে রয়েছে:

যাক এক্স এবং ওয়াই বেস একক অঙ্ক সংখ্যার হতে বি । ইউনারী অপারেটর নির্ধারণ ~ও বাইনারি অপারেটর &, |এবং ^এই ধরনের যে:

  • ~ x = (বি - 1) - এক্স
  • x এবং y = মিনিট (x, y)
  • এক্স | y = সর্বোচ্চ (x, y)
  • x ^ y = (x & ~ y) | (y & ~ x)

মনে রাখবেন যে বি = 2, আমরা পরিচিত বিটওয়াইস নং, এবং, এবং, এবং এক্সওআর অপারেটরগুলি পাই।

বি = 10 এর জন্য, আমরা "দশমিক XOR" টেবিলটি পেয়েছি:

^ │ 0 1 2 3 4 5 6 7 8 9
──┼────────────────────
0 │ 0 1 2 3 4 5 6 7 8 9
1 │ 1 1 2 3 4 5 6 7 8 8
2 │ 2 2 2 3 4 5 6 7 7 7
3 │ 3 3 3 3 4 5 6 6 6 6
4 │ 4 4 4 4 4 5 5 5 5 5
5 │ 5 5 5 5 5 4 4 4 4 4
6 │ 6 6 6 6 5 4 3 3 3 3
7 │ 7 7 7 6 5 4 3 2 2 2
8 │ 8 8 7 6 5 4 3 2 1 1
9 │ 9 8 7 6 5 4 3 2 1 0

বহু-অঙ্কের সংখ্যার জন্য, একক-অঙ্কের অপারেটরের অঙ্ক-বাই-অঙ্ক প্রয়োগ করুন। উদাহরণস্বরূপ, 12345 ^ 24680 = 24655, কারণ:

  • 1 ^ 2 = 2
  • 2 ^ 4 = 4
  • 3 ^ 6 = 6
  • 4 ^ 8 = 5
  • 5 ^ 0 = 5

যদি অপারেন্ডগুলি পৃথক দৈর্ঘ্য হয়, তবে শীর্ষস্থানীয় শূন্যগুলির সাথে সংক্ষিপ্ততর প্যাড করুন।

চ্যালেঞ্জ

যতটা সম্ভব বাইটে লিখুন, এমন একটি প্রোগ্রাম বা ফাংশন যা ইনপুট হিসাবে দুটি পূর্ণসংখ্যার (যা 0 এবং 999 999 999 এর মধ্যে ধরা হতে পারে) হিসাবে নেয় এবং উপরে সংজ্ঞায়িত হিসাবে দুটি সংখ্যার "দশমিক এক্সওর" আউটপুট দেয়।

পরীক্ষার মামলা

  • 12345, 24680 → 24655
  • 12345, 6789 → 16654
  • 2019, 5779 → 5770
  • 0, 999999999 → 999999999
  • 0, 0 → 0

আমরা কি ইনপুট বা আউটপুটটিকে স্ট্রিং বা চর অ্যারে হিসাবে নিতে পারি?
অজ্ঞতার

6
কিভাবে একটি অঙ্ক অ্যারে সম্পর্কে? এটা কি গ্রহণযোগ্য?
অজ্ঞতার

1
কি 09একজন ইনপুট জন্য একটি গ্রহণযোগ্য ফলাফলের 90, 99?
নীল

1
আমি আশা করি যে কোনও জেনারেলাইজেশন বজায় ছিলA^B^B=A
ট্রাইকোপ্লাক্স

2
@trichoplax, আপনি উভয় থাকতে পারে না a^b=b^aএবং a^b^b=aএকটি বিজোড় মৌলিক গুণনীয়ক সঙ্গে ঘাঁটি জন্য
MIK

উত্তর:


3

জেলি , 14 বাইট

DUz0«9_ṚƊṀƊ€UḌ

এটি অনলাইন চেষ্টা করুন!

সমস্ত একক অঙ্কের জোড়ের গ্রিড

একটি মোনাডিক লিঙ্ক তার যুক্তি হিসাবে দুটি পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়।

ব্যাখ্যা

D               | Decimal digits
 U              | Reverse order of each set of digits
  z0            | Transpose with 0 as filler
          Ɗ€    | For each pair of digits, do the following as a monad:
    «   Ɗ       | - Minimum of the two digits and the following as a monad (vectorises):
     9_         |   - 9 minus the digits
       Ṛ        |   - Reverse the order
         Ṁ      | - Maximum
            U   | Reverse the order of the answer to restore the orignal order of digits
             Ḍ  | Convert back from decimal digits to integer

যদি একটি ডিজিট ম্যাট্রিক্স গ্রহণযোগ্য ইনপুট / আউটপুট:

জেলি , 12 বাইট

Uz0«9_ṚƊṀƊ€U

এটি অনলাইন চেষ্টা করুন!


2

পাইথ , 31 বাইট

LhS,hb-9ebjkmeS,ydy_d_.t_MjRTQ0

এটি অনলাইন চেষ্টা করুন!

LhS,hb-9eb             # Helper function, computes the (x & ~y) part
L                      # y = lambda b:
  S                    #               sorted(                )  
   ,                   #                       [    ,        ]
    hb                 #                        b[0]
      -9eb             #                              9-b[-1]
 h                     #                                       [0] # sorted(...)[0] = minimum

jkmeS,ydy_d_.t_MjRTQ0  # Main program (example input Q: [123, 45])
                jRTQ   # convert each input to a list of digits -> [[1,2,3],[4,5]]
              _M       # reverse each -> [[3,2,1],[5,4]]
            .t      0  # transpose, padding right with 0 -> [[3,5],[2,4],[1,0]]
           _           # reverse -> [[1,0],[2,4],[3,5]]
  m                    # map that over lambda d:
    S,                 #   sorted([    ,           ])
      yd               #           y(d)
        y_d            #                 y(d[::-1])         # reversed
   e                   #                             [-1]   # sorted(...)[-1] = maximum
jk                     # ''.join( ^^^ )


1

ফোরথ (গফার্থ) , 111 বাইট

: m 10 /mod rot ;
: t 9 swap - min ;
: f 2dup + 0> if m m recurse 10 * -rot 2dup swap t -rot t max + 1 then * ;

এটি অনলাইন চেষ্টা করুন!

কোড ব্যাখ্যা

: m          \ start a new word definition
  10 /mod    \ get quotient and remainder of dividing by 10
  rot        \ move item in 3rd stack position to top of stack
;            \ end word definition

\ word implementing "not" followed by "and"
: t          \ start a new word definition
  9 swap -   \ subtract top stack element from 9
  min        \ get the minimum of the top two stack elements
;            \ end word definition

: f          \ start a new word definition
  2dup +     \ duplicate top two stack elements and add them together
  0> if      \ if greater than 0
    m m      \ divide both by 10, move remainders behind quotients
    recurse  \ call self recursively
    10 *     \ multiply result by 10 (decimal left shift of 1)
    -rot     \ get remainders from original division
    2dup     \ duplicate both remainders 
    swap t   \ swap order and call t (b & !a)
    -rot t   \ move result back and call t on other pair (a & !b)
    max + 1  \ get the max of the two results and add to total. put 1 on top of stack
  then       \ end if block
  *          \ multiply top two stack results (cheaper way of getting rid of extra 0)
;            \ end word definition

1

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 75 বাইট

a=>b=>a.Select((x,y)=>Math.Max(9-x<(y=y<b.Count?b[y]:0)?9-x:y,9-y<x?9-y:x))

@ সোমোনকে ধন্যবাদ 6 বাইট সংরক্ষণ করা হয়েছে

এটি অনলাইন চেষ্টা করুন!


76 বাইট । আমি মনে করি এই প্রশ্নটি জিপ ব্যবহারের একটি অনন্য সুযোগ হতে পারে।
আমার সর্বনামটি

1
@ সোনার ধন্যবাদ! সম্পর্কিত Zip, আপনি এটি ব্যবহার করতে পারবেন না কারণ এটি স্বয়ংক্রিয়ভাবে দীর্ঘ সংক্ষিপ্ততর দৈর্ঘ্যের সংগ্রহকে
ছাঁটাই করে দেয়

0

পিএইচপি , 111 109 বাইট

for(;''<($a=$argv[1][-++$i]).$b=$argv[2][-$i];)$s=min($a<5?9-$a:$a,max($a<5?$a:9-$a,$a<5?$b:9-$b)).$s;echo$s;

এটি অনলাইন চেষ্টা করুন!

পরীক্ষা: এটি অনলাইনে চেষ্টা করে দেখুন!

আমরা যদি আমরা এক্সওআর করতে চাই এমন অঙ্কগুলি কল করি $aএবং $bআমি এটি পেয়েছি:

  • যখন $a5 এর কম হবে,XOR = min(9-$a, max($a, $b))
  • যখন $a5 এর সমান বা তার বেশি হয়,XOR = min($a, max(9-$a, 9-$b))

সুতরাং আমি এই লজিক প্লাস একটি হ্যাক বাস্তবায়িত বিভিন্ন দৈর্ঘ্য সহ সংখ্যা হ্যান্ডেল করতে। আমি প্রতিটি সংখ্যার ফর্ম উভয় ইনপুট সংখ্যার (যেমন ,, ... input[-1], নেতিবাচক সূচী সহ input[-2]) ফর্মটি গ্রহণ করি এবং এক্সওআর গণনা করি এবং ফলাফলটি বিপরীত ক্রমে ফলাফলটি প্রিন্ট করার জন্য একটি স্ট্রিংয়ে রাখি। যেহেতু আমি সংখ্যার শেষ থেকে অঙ্কগুলি নিয়েছি তাই এক্সওআর ফলাফলগুলি বিপরীত ক্রমে একসাথে রাখা উচিত। ইনপুটগুলির মধ্যে একটি যখন অন্যটির তুলনায় দীর্ঘ হয়, সংক্ষিপ্ত ইনপুটটিতে নেতিবাচক সূচকটি খালি স্ট্রিংয়ের ফল দেয় যা 0 এর সমান হয়।


0

রেটিনা , 85 59 বাইট

^'0P`.+
N$`.
$.%`
¶

/../_(`^
$"
T`d`Rd`.¶.
%N`.
^N`..
L`^.

এটি অনলাইন চেষ্টা করুন! আলাদা লাইন হিসাবে ইনপুট নেয়, তবে লিঙ্কটি এমন স্যুটটি পরীক্ষা করে যা কমা-বিভাজিত ইনপুটটিকে পুনরায় ফর্ম্যাট করে। ব্যাখ্যা:

^'0P`.+

জিরোসের সাথে দুটি দৈর্ঘ্যের একই দৈর্ঘ্যের বাম-প্যাড।

N$`.
$.%`
¶

প্রতিটি ডিজিটকে এর কলাম সূচী অনুসারে বাছাই করুন, তারপরে নতুন লাইনটি মুছুন। এটি ট্রান্সপোজের মতো একইভাবে ডিজিটগুলি জোড়া করার প্রভাব ফেলেছে।

/../_(`

ফলাফলগুলির একসাথে যোগদানের জন্য প্রতিটি সংখ্যায় পৃথকভাবে প্রয়োগ করুন।

^
$"

জুটির নকল করুন।

T`d`Rd`.¶.

প্রথম জোড়ের দ্বিতীয় অঙ্ক এবং দ্বিতীয়টির প্রথম অঙ্কটি বিপরীত করুন, সুতরাং আমাদের এখন x ~yএকটি লাইনে এবং ~x yঅন্যটিতে রয়েছে।

%N`.

প্রতিটি লাইনের অঙ্কগুলি ক্রম অনুসারে বাছাই করুন, যাতে প্রথম অঙ্কটি এখন x & ~yবা ~x & yযথাযথ হয়।

^N`..

বিপরীতে লাইনগুলি সাজান।

L`^.

এবং প্রথম অঙ্কটি বের করুন, যা পছন্দসই ফলাফল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.