সমতা অদলবদল


22

কার্য

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া n, আউটপুট n+1যদি nবিজোড় হয়, এবং আউটপুট n-1যদি nএমনকি হল।

ইনপুট

একটি ধনাত্মক পূর্ণসংখ্যা। আপনি ধরে নিতে পারেন যে পূর্ণসংখ্যাটি ভাষার হ্যান্ডলিং সক্ষমতার মধ্যে রয়েছে।

আউটপুট

একটি ধনাত্মক পূর্ণসংখ্যা, উপরে উল্লিখিত।

Testcases

input output
    1      2
    2      1
    3      4
    4      3
    5      6
    6      5
    7      8
    8      7
  313    314
  314    313

স্কোরিং

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।

স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

তথ্যসূত্র


আমরা কি একা হিসাবে ইনপুট নিতে পারি?
ক্রিটসি লিথোস


3
@ মিস্টাফিগিনস এটি যথেষ্ট পরিচিত যে আমি নিশ্চিত যে ওপি এটি উদ্দেশ্যমূলকভাবে এটি করেছে।
janর্জন জোহানসেন

উত্তর:


24

সি, 20 বাইট

f(x){return-(-x^1);}

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


7
@ লিক্যনুন আমি রিটার্নের বিবৃতি না পেয়ে কোনও ফাংশন লিখছি না।
ফেয়ারসাম

18
নিবন্ধন করুন নূহ-আহ। নং
feersum

10
@ সিসিফাস তবে এটি কোড-গল্ফ এবং এটি আমার টিআইও লিঙ্কে কাজ করে, সুতরাং এটি বৈধ।
এরিক দি আউটগল্ফার

7
@ এরিকথ আউটগল্ফার আমি যা বলছি তা হ'ল আপনার বক্তব্য ("প্রথম যুক্তির জন্য নির্ধারণ করা কোনও রিটার্ন স্টেটমেন্টের সমতুল্য") সত্যই ভুল। এই জাতীয় কোডটি নির্দিষ্ট পরিস্থিতিতে একটি কার্যকরী উত্তর উত্পন্ন করতে পারে কিনা তা অন্য প্রশ্ন (যা আমি আমার প্রথম মন্তব্যে এ জাতীয় কোড পোস্ট না করার পরিকল্পনা করছি বলে উল্লেখ করে)।
ফেয়ারসাম

8
@ এরিকথ আউটগলফার যদি কোনও উত্তর কার্যকরভাবে নির্দিষ্ট আচরণের উপর নির্ভর করে, তবে এটি একটি বাস্তবায়ন নির্দিষ্ট করতে হবে। এই উত্তরটি দেয় না, সুতরাং কোডটি অবৈধ হবে।
সিসিফাস

17

স্ট্যাক বিড়াল , 3 + 3 ( -n) = 6 বাইট

-*-

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

-nসংখ্যার ইনপুট এবং আউটপুট নিয়ে কাজ করার জন্য পতাকাটির প্রয়োজন ।

ব্যাখ্যা

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

-   Multiply the input by -1.
*   Toggle the least significant bit of the value (i.e. take it XOR 1).
-   Multiply the result by -1.

ইনপুট এবং আউটপুট প্রোগ্রামের শুরু এবং শেষের দিকে অন্তর্নিহিত, কারণ ইনপুট নেওয়া এবং আউটপুট উত্পাদন করা কোনও বিপরীত ক্রিয়াকলাপ নয়, সুতরাং সেগুলি আদেশ হতে পারে না।


1
পতাকাগুলি কি সর্বদা অতিরিক্ত স্থানের সাথে গণনা করা হয়, আমি মনে করি না যে আমি পতাকাগুলি ব্যবহার করে অন্যান্য উত্তর দেখেছি (পার্লের মতো) তা কি করে? সম্পাদনা: ঠিক আছে এনভিএম, সম্পর্কিত মেটা পোস্ট খুঁজে পেয়েছে । " আমি এগুলিকে ছাড়াই স্বল্পতম সমতুল্য প্রার্থনা হিসাবে চরিত্রের গণনার পার্থক্য হিসাবে গণনা করি। " ... "এর perl -nle 'stuff'চেয়ে 2 টি অক্ষর বেশি perl -e 'stuff', সুতরাং এটি আরও 2 টি চরিত্রের জন্য গণনা করে "। তাই (space)-n3 বাইট পতাকা ছাড়া বেশী।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসসেন এটি আপনাকে নির্ভর করে যে সাধারণ বায়োতে ​​আপনাকে কতগুলি বাইট যুক্ত করতে হবে তা নির্ভর করে। পার্ল এবং অন্যান্য অনেক উত্পাদন ভাষায়, আপনি কোডটির সাথে অনুরোধ করতে পারেন -e "code"এবং তারপরে e, উদাহরণস্বরূপ অতিরিক্ত ফ্ল্যাগ sert োকাতে পারেন -pe "code"। তারপরে -pপতাকাটি কেবল একটি বাইট। যাইহোক, স্ট্যাক বিড়ালদের এ জাতীয় কোনও -eযুক্তি নেই, তাই আপনাকে সর্বদা <sp>-nকমান্ডটিতে পূর্ণ যোগ করা প্রয়োজন , এবং তাই এটি তিনটি বাইট।
মার্টিন এন্ডার

12

x86 বিধানসভা, 9 বাইট (প্রতিযোগিতার প্রবেশের জন্য)

যারা উচ্চ-স্তরের ভাষাগুলিতে এই চ্যালেঞ্জটির চেষ্টা করছেন তারা কাঁচা বিটগুলিতে হেরফেরের আসল মজাদার অনুপস্থিত । এটি করার উপায়গুলিতে অনেকগুলি সূক্ষ্ম প্রকরণ রয়েছে, এটি উন্মাদ — এবং ভাবতে অনেক মজাদার। এখানে কয়েকটি সমাধান রয়েছে যা আমি 32-বিট x86 সমাবেশের ভাষায় তৈরি করেছি।

আমি আগে থেকে ক্ষমা চেয়ে নিচ্ছি যে এটি সাধারণ কোড-গল্ফ উত্তর নয়। আমি পুনরাবৃত্তিমূলক অপ্টিমাইজেশনের চিন্তার প্রক্রিয়া (আকারের জন্য) সম্পর্কে প্রচুর ঝাঁকুনি দিতে যাচ্ছি। আশা করি এটি বৃহত্তর দর্শকদের কাছে আকর্ষণীয় এবং শিক্ষামূলক তবে আপনি যদি টিএল; ডিআর টাইপ হন তবে আপনি যদি শেষ দিকে না যান তবে আমি বিরক্ত হব না।

সুস্পষ্ট এবং দক্ষ সমাধান হ'ল মানটি বিজোড় বা এমনকি (যা সর্বনিম্ন-তাত্পর্যপূর্ণ বিটটি দেখে দক্ষতার সাথে করা যেতে পারে) তা পরীক্ষা করা এবং তারপরে n + 1 বা n − 1 এর মধ্যে নির্বাচন করুন । ধরে নিচ্ছি যে ইনপুটটি ECXনিবন্ধের পরামিতি হিসাবে পাস হয়েছে এবং ফলাফলটি EAXরেজিস্টারে ফিরে আসে , আমরা নিম্নলিখিত ফাংশনটি পাই:

F6 C1 01  |  test  cl, 1                      ; test last bit to see if odd or even
8D 41 01  |  lea   eax, DWORD PTR [ecx + 1]   ; set EAX to n+1 (without clobbering flags)
8D 49 FF  |  lea   ecx, DWORD PTR [ecx - 1]   ; set ECX to n-1 (without clobbering flags)
0F 44 C1  |  cmovz eax, ecx                   ; move in different result if input was even
C3        |  ret

(১৩ বাইট)

তবে কোড-গল্ফের উদ্দেশ্যে, সেই LEAনির্দেশাবলী দুর্দান্ত নয়, যেহেতু তারা এনকোড করতে 3 বাইট নেয়। এর একটি সাধারণ DECপুনর্নির্মাণগুলি ECXআরও সংক্ষিপ্ত হবে (কেবলমাত্র একটি বাইট), তবে এটি পতাকাগুলি প্রভাবিত করে, তাই আমরা কোডটি কীভাবে সাজিয়ে তুলি সে সম্পর্কে আমাদের কিছুটা চালাক হতে হবে। আমরা প্রথমে হ্রাস এবং বিজোড় / এমনকি দ্বিতীয়টি পরীক্ষা করতে পারি , তবে তারপরে আমাদের বিজোড় / এমনকি পরীক্ষার ফলাফলটি উল্টাতে হবে।

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

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

    48     |  dec  eax          ; decrement first
    A8 01  |  test al, 1        ; test last bit to see if odd or even
    75 02  |  jnz  InputWasEven ; (decrement means test result is inverted)
    40     |  inc  eax          ; undo the decrement...
    40     |  inc  eax          ; ...and add 1
  InputWasEven:                 ; (two 1-byte INCs are shorter than one 3-byte ADD with 2)

(ইনলাইনড: 7 বাইট; ফাংশন হিসাবে: 10 বাইট)

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

10 বাইটে আমরা আর কী করতে পারি? আমরা যদি পারফরম্যান্স সম্পর্কে কিছুটা যত্ন নিই (অন্তত, অনুমানযোগ্য পারফরম্যান্স), তবে এই শাখাটি থেকে মুক্তি পেয়ে ভাল লাগবে। এখানে একটি শাখাবিহীন, বিট-টুইডলিং সমাধান যা বাইটগুলির মধ্যে একই আকার। মৌলিক ভিত্তিটি সহজ: আমরা শেষ বিটটি ফ্লিপ করতে একটি বিটওয়্যার এক্সওআর ব্যবহার করি, একটি বিজোড় মানকে একটিতে রূপান্তর করি এবং তদ্বিপরীত। তবে একটি নিগল রয়েছে od বিজোড় ইনপুটগুলির জন্য, যা আমাদের এন -1 দেয় , এমনকি ইনপুটগুলির জন্যও এটি আমাদের এন + 1 দেয় - আমরা যা চাই তার সম্পূর্ণ বিপরীতে। সুতরাং, এটি ঠিক করতে, আমরা কার্যকরভাবে সাইনটি উল্টিয়ে একটি নেতিবাচক মানের উপর অপারেশন সঞ্চালন করি।

8B C1     |  mov eax, ecx   ; copy parameter (ECX) to return register (EAX)
          |
F7 D8     |  neg eax        ; two's-complement negation
83 F0 01  |  xor eax, 1     ; XOR last bit to invert odd/even
F7 D8     |  neg eax        ; two's-complement negation
          |
C3        |  ret            ; return from function

(ইনলাইনড: 7 বাইট; ফাংশন হিসাবে: 10 বাইট)

বেশ স্লিট; এটি কীভাবে উন্নত করা যায় তা দেখা মুশকিল। একটা জিনিস আমার নজর কেড়েছে, যদিও: এই দুটি 2 বাইট NEGনির্দেশাবলী। সত্য কথা বলতে গেলে, দুটি বাইট মনে হয় একটি সাধারণ বেনিফিটকে এনকোড করার জন্য অনেকগুলি বাইটের মতো, তবে এটি আমাদের সাথে কাজ করতে হবে এমন নির্দেশিকা সেট। কোন workaround আছে? নিশ্চিত! যদি আমরা XOR-2-এর দ্বারা, আমরা দ্বিতীয় tionিশনকে NEGএকটি INCপুনঃস্থাপনের সাথে প্রতিস্থাপন করতে পারি:

8B C1     |  mov eax, ecx
          |
F7 D8     |  neg eax
83 F0 FE  |  xor eax, -2
40        |  inc eax
          |
C3        |  ret

(ইনলাইনড: 6 বাইট; ফাংশন হিসাবে: 9 বাইট)

এক্স 86 টি নির্দেশের সেটগুলির আরও একটি অদ্ভুততা হ'ল বহুমুখী LEAনির্দেশ , যা একটি নিবন্ধ-নিবন্ধক পদক্ষেপ, একটি রেজিস্টার-রেজিস্টার সংযোজন, একটি ধ্রুবক দ্বারা অফসেট করে এবং সমস্ত একক নির্দেশায় স্কেলিং করতে পারে!

8B C1        |  mov eax, ecx
83 E0 01     |  and eax, 1        ; set EAX to 1 if even, or 0 if odd
8D 44 41 FF  |  lea eax, DWORD PTR [ecx + eax*2 - 1]
C3           |  ret

(10 বাইট)

ANDনির্দেশ মত হল TEST, নির্দেশ আমরা পূর্বে ব্যবহৃত উভয় যে অনুযায়ী একটি bitwise-এবং এবং সেট পতাকা না, কিন্তু ANDআসলে গন্তব্য আপডেট অপার্যান্ড। LEAনির্দেশ তারপর 2 দ্বারা এই দাঁড়িপাল্লা, 1. করে মূল ইনপুট মান, এবং decrements যোগ তাহলে ইনপুট মান বিজোড় ছিল, subtracts 1 - তা থেকে (2 × 0 থেকে 1 = -1); যদি ইনপুট মানটি সমান হয় তবে এটি এতে 1 (2 × 1 - 1 = 1) যোগ করে।

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


সুতরাং, চূড়ান্ত প্রতিযোগিতামূলক প্রবেশের জন্য, আমাদের কাছে একটি 9-বাইট ফাংশন রয়েছে যা নিবন্ধরে ইনপুট মান ECX( 32-বিট x86-তে একটি আধা-মানের রেজিস্টার-ভিত্তিক কলিং কনভেনশন ) গ্রহণ করে এবং EAXরেজিস্টারে ফলাফল ফেরত দেয় (যেমনটি সমস্ত x86 কলিং কনভেনশন):

           SwapParity PROC
8B C1         mov eax, ecx
F7 D8         neg eax
83 F0 FE      xor eax, -2
40            inc eax
C3            ret
           SwapParity ENDP

এমএএসএমের সাথে একত্রিত হতে প্রস্তুত; সি থেকে কল করুন:

extern int __fastcall SwapParity(int value);                 // MSVC
extern int __attribute__((fastcall)) SwapParity(int value);  // GNU   

শুধু dec eax; xor eax, 1; inc eaxকাজ করে আরও একটি বাইট সংরক্ষণ করবেন না ?
ইলমারি করোনেন

11

জেলি , 3 বাইট

-*ạ

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

pseudocode: abs((-1)**n - n)


আমি আসলে (আব) ব্যবহার করার পরিকল্পনা করছিলাম -1
এরিক আউটগল্ফার

তার জন্য দুঃখিত।
ফুটো নুন

কোনও দুঃখ নেই, ভাল হয়েছে! কীভাবে তাড়াতাড়ি করা যায় তা আমি বুঝতে পারি নি ...
এরিক দি আউটগল্ফার

11

পাইথন 3, 20 18 বাইট

lambda n:n-1+n%2*2

বেশ সহজ. প্রথমে আমরা n-1 গণনা করি এবং সিদ্ধান্ত নিই যে এটিতে 2 যুক্ত করা যায় কিনা।

যদি এন সমান হয় -> এন গেলিক ভাষার 2 0 যেতে পারে যার ফলে আমরা যুক্ত করতে হবে 2 * 0 থেকে এন -1 , ফলে এন -1

যদি এন বিজোড় হয় -> এন মোড 2 1 হবে, সুতরাং আমরা 2 * 1 কে n-1 যুক্ত করব , যার ফলে n + 1 হবে

আমি এমএস পেইন্ট এবং একটি ল্যাপটপ টাচপ্যাড দিয়ে তৈরি একটি ব্যাখ্যা পছন্দ করি ... ভিজ্যুয়াল ব্যাখ্যা


10

পাইথন, 16 বাইট

lambda x:-(-x^1)

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


3
ব্রুট ফোর্সিংয়ে অক্ষরগুলি ব্যবহার করে কোনও সংক্ষিপ্ত সমাধান খুঁজে পাওয়া যায় না "x+-012~|&^()*/%"
xnor

@xnor ভাল জিনিস আমি পেয়েছিলাম তখন!
sagiksp

1
এবং দেখে মনে হচ্ছে তুচ্ছ পুনঃস্থাপন ব্যতীত আর কোনও সম-দৈর্ঘ্যের সমাধান নেই -(1^-x)
xnor

8

এমএটিএল , 7 বাইট

Q:HePG)

এটি কোনও গাণিতিক ক্রিয়াকলাপ এড়ায়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

4উদাহরণ হিসাবে ইনপুট বিবেচনা করুন ।

Q    % Implicit input. Add 1
     % STACK: 5
:    % Range
     % STACK: [1 2 3 4 5]
He   % Reshape with 2 rows in column-major order. Pads with a zero if needed
     % STACK: [1 3 5;
               2 4 0]
P    % Flip vertically
     % STACK: [2 4 0;
               1 3 5]
G    % Push input again
     % STACK: [2 4 0;
               1 3 5], 4
)    % Index, 1-based, in column major order. Implicitly display
     % STACK: 3

1
নিস! পছন্দ করি !
স্টিভি গ্রিফিন

6

ব্রেনলফ v0.1 , 11 10 বাইট

.1>2,%?+:-

এটি অনলাইন চেষ্টা করুন! (দ্বিতীয় যুক্তি হ'ল ব্রেনল্ফ কোড, তৃতীয় যুক্তি হ'ল ইনপুট)

নীলকে ধন্যবাদ জানিয়ে একটি বাইট সংরক্ষণ করা হয়েছে

প্রথমবারের মতো প্রতিদ্বন্দ্বী ব্রেনগল্ফ উত্তর: ডি

ব্যাখ্যা:

.            Duplicate the top of the stack
 1>          Push 1 to the bottom of the stack
   2         Push 2 to stack
    ,%       Pop last 2 items, mod them and push result
      ?      If last item > 0
       +     Add the 1 to the input
        :    Else
         -   Subtract the 1 from the input

             No semicolon in code so print last item

ব্রেনল্ফ v0.2 , 9 বাইট [অ-প্রতিদ্বন্দ্বী]

.2%?1+:1-

এটি অনলাইন চেষ্টা করুন!(দ্বিতীয় যুক্তি হ'ল ব্রেনল্ফ কোড, তৃতীয় যুক্তি হ'ল ইনপুট)

ব্যাখ্যার জন্য উপরে দেখুন। কেবলমাত্র পার্থক্য ব্রায়ানল্ফ v0.2, ডায়াডিক অপারেটরগুলির ডিফল্ট আচরণ এবং এর কার্যকারিতা is, বিপরীত হয়, যার অর্থ v0.1 উত্তরের 2 টি কমা দরকার নেই।

তবে v0.2 চ্যালেঞ্জের পরে প্রকাশিত হয়েছিল, সুতরাং এটির প্রতিযোগিতা নেই


5
আপনার নতুন ভাষায় অভিনন্দন!
ফাঁস নুন

নেই .1<2,%?+:-আমার মনে এটা আছে না?
নীল

@ নিল ঠিক নয়, আপনার -চারপাশে সঠিকভাবে অপারেশনটি সম্পাদন করার আগে আপনার একটি কমা দরকার ছিল, সেক্ষেত্রে এটি আমার উত্তরের সমান দৈর্ঘ্য হবে
স্কিডসদেব

@ মায়ুব আমি প্রত্যাশা করছিলাম নীচে ইনপুটটি <ঘোরানো 1হবে, যাতে এটি ইতিমধ্যে সঠিক জায়গায় উপস্থিত হয়।
নীল

@ নিল যদি ইনপুটটি একটি সমান সংখ্যা হয়, -এটি স্ট্যাকের কাছে পৌঁছানোর [n,1]সময়টির মতো দেখায়: ব্রাইংলফ অপারেটরগুলি বিপরীত হয়, সুতরাং এটি সম্পাদন করে 1 - n, যার ফলস্বরূপ -(n-1)কাঙ্ক্ষিত ফলাফলটি কেবলn-1
স্কিডদেব


4

পাইথন, 68 বাইট

lambda x:[m.floor(x-m.cos(m.pi*x)) for m in [__import__('math')]][0]

একটি অনন্য পদ্ধতির চেতনায়। নিম্নলিখিত গ্রাফটি ফাংশনটি দেখায় (বেগুনি বিন্দুর সাথে প্রথম 10 টি ক্ষেত্রে প্রতিনিধিত্ব করে)। বেশিরভাগ (সমস্ত?) পর্যায়ক্রমিক ফাংশন (যেমন পাপ, টান, সেকেন্ড) এর উপর ভিত্তি করে তাত্ত্বিকভাবে এই প্রশ্নের সমাধান সমাধান করা সম্ভব উচিত। আসলে, কোডটিতে সেকেন্ডের জন্য কোস প্রতিস্থাপনের মতো কাজ করা উচিত।

গ্রাফ প্রদর্শন ফাংশন


3

পিএইচপি, 15 বাইট

<?=-(-$argn^1);

2
আমি কীভাবে এটি চালাব? আমি ;প্রয়োজনীয় কিনা তা পরীক্ষা করে দেখার চেষ্টা করছি এবং একটি .phpফাইল ব্যবহার করার চেষ্টা করেছি এবং সরাসরি পিএইচপি (পিএইচপি 7 ক্লিপ) তে প্রতিধ্বনিত করছি প্রতিবার যখন আমাকে বলা হয় যে $argnএটি একটি অপরিবর্তিত ভেরিয়েবল।
আন্ডারাকিস

2
সঙ্গে @Andrakis Fপতাকা এবং একটি পাইপলাইন: echo 42 | php -F script.php
ব্যবহারকারী 63956

3

জাভাস্ক্রিপ্ট, 17 12 বাইট

x=>x-(-1)**x

f=x=>x-(-1)**x;
<input id=i oninput=o.innerText=f(this.value) type=number><pre id=o>

আর একটি পদ্ধতি, সি উত্তর থেকে 10 বাইট চুরি হয়েছে (এসএসএসএইচএসএইচ)

x=>-(-x^1)

f=x=>-(-x^1)
<input id=i oninput=o.innerText=f(this.value) type=number><pre id=o>


1. আপনাকে সেমিকোলনটি অন্তর্ভুক্ত করার দরকার নেই; 2.x=>x-(-1)**x
ফাঁস নুন

কেন |0? উভয় সমাধানগুলি দেখে মনে হয় যেন তারা স্বয়ংক্রিয়ভাবে স্ট্রিংগুলিকে সংখ্যায় রূপান্তর করে। (প্রথম সমাধানের জন্য, আপনি যদি দশমিক এড়াতে চান তবে ব্যবহার করুন<input type=number>
নীল

@ নীল আমাকে অবহিত করার জন্য ধন্যবাদ!
ম্যাথু রোহ

3

জাভাস্ক্রিপ্ট (ES6), 14 13 12 10 বাইট

n=>-(-n^1)
  • 1 বাইট লুকের জন্য ধন্যবাদ সংরক্ষণ করেছে ।
  • ফেয়ারসামের সি দ্রবণটি পোর্ট করে 2 বাইট সংরক্ষণ করা হয়েছে । (যদি এটি ভ্রান্ত হয় তবে দয়া করে আমাকে জানান এবং আমি নীচের আমার পূর্ববর্তী সমাধানটিতে ফিরে যাব)

এটি চেষ্টা করুন

f=
n=>-(-n^1)
i.addEventListener("input",_=>o.innerText=f(+i.value))
<input id=i type=number><pre id=o>


আসল, 12 বাইট

n=>n-1+n%2*2

2

পাইথন, 20 বাইট

lambda n:n+(n%2or-1)

n%2or-1 এটি বিজোড় হলে 1 ফিরে আসবে, তবে এটি সমান হলেও, n%2 "মিথ্যা" (0) হয়, সুতরাং এটি পরিবর্তে -1 প্রদান করে। তারপরে আমরা কেবল এটিতে যুক্ত করবn

পূর্ববর্তী সমাধান, 23 বাইট

lambda n:[n-1,n+1][n%2]

n%2n2 দ্বারা বিভক্ত হয়ে গেলে বাকী অংশ গণনা করে যদি এটি সমান হয় তবে এটি 0 দেয় এবং এই তালিকার উপাদান 0 হয় n-1। যদি এটি বিজোড় হয় তবে এটি 1 প্রদান করে এবং এই তালিকার 1 টি উপাদান n+1


1
একটি ল্যাম্বডা ব্যবহার করুন:lambda n:[n-1,n+1][n%2]
ফুটো নুন

হ্যাঁ হ্যাঁ, তাই এই ক্ষেত্রে এটি খাটো ছিল। হয়েছে, ধন্যবাদ!
নম্বরমানিয়াক

2

রেটিনা , 21 বাইট

.+
$*
^11(?=(11)*$)


এটি অনলাইন চেষ্টা করুন! আমার দুটি রেটিনা উত্তর নতুন দুটি লাইনের সাথে! ব্যাখ্যা: প্রথম দুটি লাইন দশমিক থেকে আনারিতে রূপান্তর করে। তৃতীয় এবং চতুর্থ লাইন সমান সংখ্যা থেকে দুটি বিয়োগ করে। শেষ লাইনটি দশমিকের দিকে ফিরে রূপান্তরিত করে, তবে এটি একটি যুক্ত করে।



2

কিউবিক্স , 11 বাইট

u%2!I(/+@O<

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

ব্যাখ্যা

নেট সংস্করণ:

    u %
    2 !
I ( / + @ O < .
. . . . . . . .
    . .
    . .

অক্ষরগুলি নিম্নলিখিত ক্রমে কার্যকর করা হয়:

I(2%!+O@
I        # Take a number as input
 (       # Decrement it
  2%     # Take the parity of the decremented number
         # (0 if the input is odd, 1 if it's even)
    !    # If that number is zero:
     +   #   Add 2
      O  # Output the number
       @ # Terminate the program

2

মস্তিষ্ক-ফ্লাক , 36 বাইট

(({})(())){({}[()]<([{}])>)}{}({}{})

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

আমি ব্যক্তিগতভাবে এই উত্তরটির সাথে সত্যই খুশি কারণ এই সমস্যাটি সমাধানের একটি traditionalতিহ্যগত পদ্ধতির চেয়ে আমি এটির চেয়ে অনেক ছোট orter

ব্যাখ্যা

কোড প্রথম বিট

(({})(()))

শুধু থেকে স্ট্যাকের পরিবর্তিত nকরতে

n + 1
  1
  n

তারপরে যখন স্ট্যাকের শীর্ষটি শূন্য নয়, আমরা এটি হ্রাস করব এবং এর নীচে সংখ্যার চিহ্নটি ফ্লিপ করব

{({}[()]<([{}])>)}

আমরা শূন্যটি অপসারণ করি এবং বাকি দুটি সংখ্যা যুক্ত করি

{}({}{})

2

গণিত, 22 19 বাইট

গ্রেগ মার্টিনকে 3 বাইট সংরক্ষণ করা!

#-1[-1][[#~Mod~2]]&

পূর্ববর্তী উত্তর, 22 বাইট

#+{-1,1}[[#~Mod~2+1]]&

ব্যাখ্যা (পূর্ববর্তী উত্তরের জন্য)

গাণিতিকের এমন দুর্দান্ত বৈশিষ্ট্য রয়েছে যা গাণিতিকের মতো ক্রিয়াকলাপগুলি স্বয়ংক্রিয়ভাবে তালিকার উপরে থ্রেড করে।

এই ক্ষেত্রে, আমরা Mod[#,2]যা নেব 0 বা 1 ফিরে আসবে, তবে আমাদের 1 যুক্ত করতে হবে কারণ ম্যাথমেটিকাল তালিকাগুলি 1-সূচকযুক্ত। তাহলে এটা এমনকি , এই 1 থেকে আসে আউট, তাই #-1ফিরিয়ে দেওয়া হয়। যদি এটি বিজোড় হয় তবে এটি 2 এ বেরিয়ে আসে, তাই #+1ফিরে আসে।


2
আপনি ম্যাথামেটিকাল এর অপব্যবহারের দ্বারা তিনটি বাইট সংরক্ষণ করতে পারবেন [[0]]সামর্থ্য: #-1[-1][[#~Mod~2]]&
গ্রেগ মার্টিন

এটা পাগল, কখনই তা ভেবে দেখেনি। হয়েছে, ধন্যবাদ!
নম্বরমানিয়াক

2

বুদ্ধিমান , 8 বাইট

-::^~-^-

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

ব্যাখ্যা

যদি এটি অন্যভাবে হয়, (বিজোড় হলে হ্রাস, এমনকি যদি বৃদ্ধিও), এটি করা বেশ সহজ হবে।

আমরা শুধু শেষ বিট উল্টানো হবে।

::^~-^

এখানে ফিক্সটি হ'ল আমরা নেতিবাচক অবস্থায় শেষ বিটটি ফ্লিপ করি। Theণাত্মক সংখ্যাগুলি নাম্বার থেকে 1 টি বন্ধ ~তাই এটি সমস্যার সমাধানকারী একটি অফসেট তৈরি করে।

সুতরাং আমরা কেবল প্রোগ্রামটি বের করে এটিকে গুটিয়ে রাখি -

-::^~-^-

1

জাভা 8, 16 10 বাইট

n->-(-n^1)

জাভা 7, 34 28 বাইট

int c(int n){return-(-n^1);}

@ ফেয়ারসামের বিস্ময়কর সি উত্তরের বোরিং বন্দর ।
এখানে চেষ্টা করুন।


পুরানো উত্তর:

জাভা 8, 16 বাইট

n->n%2<1?n-1:n+1

জাভা 7, 34 বাইট

int c(int n){return--n%2>0?n:n+2;}

ব্যাখ্যা (পুরানো জাভা 7 টি উত্তর):

এখানে চেষ্টা করুন।

উপরের উত্তরটি int c(int n){return n%2<1?n-1:n+1;}স্থান থেকে মুক্তি পেয়ে সংক্ষিপ্ত রূপটি ।

int c(int n){     // Method with integer parameter and integer return-type
  return--n%2>0?  //  If n-1 mod-2 is 1:
    n             //   Return n-1
   :              //  Else:
    n+2;          //   Return n+1
}                 // End of method



1

বেফঞ্জ 93 , 18 বাইট

&:2%#v_1+.@
@.-1 <

আমি এখনও এটি গল্ফ করা হয়নি (আমি আশা করি)।


গল্ফিংয়ের টিপস: বেফুঞ্জ 98 এর পরিবর্তে kv(বা jvএটি কঠোরভাবে 1 বা 0 হয়) ব্যবহারের ক্ষমতা রাখে #v_। এছাড়াও, যদি আপনি এটি অনলাইনে ব্যবহার করে দেখুন (এবং আমি এটির প্রস্তাব দিই) তবে আপনি প্রোগ্রামটি অন্যটির সাথে শেষ করতে পারেন &(যদিও এটি 60 সেকেন্ড সময় নেবে), আপনি @যদি এটি ব্যবহার করেন তবে প্রথম লাইনেই মুক্তি পেতে পারেন । এখানে বেফুঞ্জ -৮৮-এর জন্য কমান্ডের সম্পূর্ণ তালিকা রয়েছে , যদিও এগুলি সমস্ত টিওতে সঠিকভাবে প্রয়োগ করা যেতে পারে না, যেমন ইওএফ-তে উল্টো& পরিবর্তনের পরিবর্তে প্রোগ্রামটি শেষ করা।
মাইল্ডলি মিল্কয়েটস্টে

এছাড়াও, দেখে মনে হচ্ছে আপনি 98 এর পরিবর্তে 93 টি বেফঞ্জ ব্যবহার করছেন, এতে কম কম্যান্ড রয়েছে। আপনি যদি আপনার লিঙ্কটির নামটি সত্যই 93 এবং
নাহয়

@ মিস্টাফিগিনস, আহ হ্যাঁ আপনি ঠিক বলেছেন আমি 93 ব্যবহার করছিলাম।
ড্যানিয়েল


1

আর, 17 বাইট

(n=scan())-(-1)^n

যেখানে n=scan()ডিজিটের মান লাগে।


আমার তোমাকে দরকার মনে -(-1)^nবদলে +(-1)^nযেহেতু আমরা ফিরে যাওয়ার প্রয়োজন n-1হলে nএমনকি
: Giuseppe

@ জিউসেপ ওহ, হ্যাঁ, অবশ্যই বোকা ভুল
নিউ 18

1

ক্যাসিও-বেসিক, 27 বাইট

piecewise(mod(n,2),1,-1)+n

ফাংশনটির জন্য 26 বাইট, nপরামিতি বাক্সে প্রবেশ করতে +1 ।




0

ব্যাচ, 20 বাইট

@cmd/cset/a"-(1^-%1)

@ ফেয়ারসামের অ্যালগরিদম স্বাধীনভাবে পুনরায় আবিষ্কার হয়েছে, সৎ!

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