বিজোড় সংখ্যাগুলি প্রথমে বাছাই করুন


20

একটি প্রদত্ত তালিকাটি পুনরায় সাজান যাতে সমস্ত বিজোড় সংখ্যা সমস্ত সমান সংখ্যার আগে উপস্থিত হয়। এই প্রয়োজনীয়তা ছাড়াও, আউটপুট তালিকা কোনও ক্রম হতে পারে।

ইনপুটটিতে কেবল পূর্ণসংখ্যা থাকবে তবে এগুলি নেতিবাচক হতে পারে এবং নকল থাকতে পারে এবং সেগুলি কোনও ক্রমে উপস্থিত হতে পারে।

সংক্ষিপ্ত সমাধান জিতেছে।

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

[1,2][1,2]

[2,1][1,2]

[1,0,0][1,0,0]

[0,0,-1][-1,0,0]

[3,4,3][3,3,4]

[-4,3,3][3,3,-4]

[2,2,2,3][3,2,2,2]

[3,2,2,2,1,2][1,3,2,2,2,2]বা[3,1,2,2,2,2]

[-2,-2,-2,-1,-2,-3][-1,-3,-2,-2,-2,-2,]বা[-3,-1,-2,-2,-2,-2,]

[][]


Ty। ভাল প্রশ্ন. উত্তর: বিজোড় সংখ্যা যে কোনও ক্রমে আসতে পারে। :)
ডিসপ্লে_নাম

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

1
@ অ্যাসুনটুইহিদ হ্যাঁ :), সংখ্যাগুলি পুনরাবৃত্তি করতে পারে।
ডিসপ্লে_নাম

11
@ উইলমোর আপনি কখনই কোড গল্ফের সাথে জানেন না, নিয়মগুলি গুরুত্বপূর্ণ। আপনার প্রশ্ন পোস্ট করার আগে দয়া করে পরবর্তী বারের জন্য স্যান্ডবক্সটি ব্যবহার করুন ।
অসোন তুহিদ

12
মন্তব্যগুলিতে আপনি যে ব্যাখ্যা দিয়েছেন তা অন্তর্ভুক্ত করতে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন।
লাইকনি

উত্তর:





9

আর , 30 24 বাইট

(x=scan())[order(!x%%2)]

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

জাইসিকে ধন্যবাদ -6 বাইটস


নিস! আপনি 26 বাইট
জেসি


@ জায়েসি ফেসপাল একটি নতুন শিশুর সাথে ভোর 3 টায় গল্ফিং অনুকূল নয়। ধন্যবাদ!
জিউসেপে

5
অভিনন্দন! ভবিষ্যতের স্ক্র্যাচ গল্ফার?
জেসি

1
আমার অভিনন্দন এছাড়াও: Giuseppe, যেমন আমাদের ড আমাদের বলেছিলেন, ভাল কাজ করেছেন আপনি একটি ব্যয়বহুল এক :) আছে
MickyT

9

সি ++, 79 76 64 বাইট

[](auto a,auto b){while(a<--b)*a%2?*++a:(*a^=*b,*b^=*a,*a^=*b);}

এই ফাংশনটি পুনরাবৃত্তকারীদের একজোড়া গ্রহণ করে (যা অবশ্যই এলোমেলো প্রবেশের পুনরাবৃত্তি হওয়া আবশ্যক) এবং তাদেরকে অবিচ্ছিন্নভাবে একে অপরের দিকে সরানো হয়। যখন aএকটি বিজোড় সংখ্যা পয়েন্ট, এটা উন্নত করা হয়। অন্যথায়, aএকটি এমনকি সংখ্যার দিকে নির্দেশ করে; bহ্রাস পেয়েছে, এবং সাথে iter_swap'এডি' a। (আমরা এক্সওআর সোয়াপ ব্যবহার করি যা আমাদের অন্তর্ভুক্ত করে <algorithm>- বা এর <utility>জন্য সংরক্ষণ করে std::swap)।

bএমনকি কোনও সংখ্যাকে নির্দেশ করলে অপ্রয়োজনীয় অদলবদল হয় , কিন্তু আমরা গল্ফ করছি, দক্ষতা কমিয়ে দিচ্ছি না!

ডেমো

auto f=[](auto a,auto b){while(a<--b)*a%2?*++a:(*a^=*b,*b^=*a,*a^=*b);};

#include <array>
#include <iostream>
int main()
{
    auto a = std::array{ 3,2,2,5,2,1,2 };

    f(a.begin(),a.end());

    for (auto i: a)
        std::cout << i << " ";
    std::cout << std::endl;
}

অ-প্রতিযোগিতামূলক উত্তর

প্রাকৃতিক সি ++ পদ্ধতিটি std::partitionতবে এটি 83 বাইটে প্রকাশিত হয়:

#include<algorithm>
[](auto a,auto b){std::partition(a,b,[](auto x){return x&1;});}

আমি বিশ্বাস করি যে এটি 80 বাইট, কারণ #includeনির্দেশের পরে আপনার একটি নতুন লাইন দরকার । আমার গণিত চুষছে যদিও ^^। আপনি প্রতিস্থাপন করতে পারেন !=সঙ্গে -, 1 বাইট সংরক্ষণ। আমি আপনার পদ্ধতির পছন্দ, এটি চালাক!
ওব্লান্স 14

1
অন্যথায় পুনরাবৃত্তি কখনও সমান না হয়ে একে অপরকে পাস করতে পারে। আপনি যদি র‌্যান্ডমএকসেসিট্রেটর ব্যবহার করে থাকেন তবে আপনি @ ওব্লালেন্সের সংস্করণ ব্যবহার while(a<b)করার চেয়ে যদি সুবিধাজনক হন তবে এটি ব্যবহার করতে পারেন । a!=ba-b
পিটার কর্ডেস

আপনি 83 বাইট উত্তর একটু প্রতিস্থাপন খাটো করতে পারেন algorithmসঙ্গে regex: codegolf.stackexchange.com/a/150895
OOBalance


7

পার্ল 6 , 12 বাইট

*.sort(*%%2)

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

কিছু প্রথমে বিজোড় সংখ্যার সাথে সমতা অনুসারে ইনপুট সাজানোর জন্য যে কোনও কোড। %পরিবর্তে প্রথমে সংখ্যার জন্য আপনি একটি মুছে ফেলতে পারেন । নোট করুন যে 'যাই হোক না কেন' এই ধরণের নামহীন ফাংশনের নাম।


1
দুঃখিত! আমি দুর্ঘটনাক্রমে আমার উত্তর পরিবর্তে আপনার উত্তর সম্পাদনা!
চ্যাস ব্রাউন


5

পাইথন 2 , 37 36 বাইট

lambda a:sorted(a,key=lambda x:~x%2)

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

1 বাইট ডগা ণ 'থেকে টুপি জনাব Xcoder


1
~পরিবর্তে কাজ করা উচিত 1-
মিঃ এক্সকোডার

@জনাব. এক্সকোডার: সত্যই, এটা আছে!
চ্যাস ব্রাউন


5

হাস্কেল , 23 22 বাইট

f odd<>f even
f=filter

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

g x = filter odd x ++ filter even x

-1 বাইট লিনকে ধন্যবাদ


অন্যান্য পদ্ধতি:

(<>).($odd)<*>($even)$filter
f x=[i|m<-[0,1],i<-x,odd$m+i]
f x=[i|m<-[1,0],i<-x,mod i 2==m]
f x=id=<<filter<$>[odd,even]<*>[x]

কিন্তু এই দরকার নেই import Data.Semigroup?
আলেকজজে 136

1
@ আলেকজজে 136 জিএইচসি 8.4.1 এর হিসাবে, প্রিলিওডের (<>)অংশ । টিআইও এখনও পুরানো সংস্করণ চালায়, তাই সেখানে আমদানি করা দরকার। তবে আপনি ঠিক বলেছেন, আমার সরাসরি এটি উল্লেখ করা উচিত ছিল।
লাইকনি

1
k odd<>k even;k=filterএকটি বাইট সংরক্ষণ করে।
লিন

5

সংযুক্তি , 11 বাইট

SortBy!Even

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

ব্যাখ্যা

Eventrueএমনকি অন্য সংখ্যার জন্য ফেরত দেয় falseSortByর‌্যাঙ্কস false < true(একটি সংখ্যাসূচক castালাই দ্বারা 0 < 1), সুতরাং এটির আগেও বিজোড় সংখ্যাগুলি রাখে।


5

জাভাস্ক্রিপ্ট (নোড.জেএস) , 29 বাইট

a=>a.sort((a,b)=>(b&1)-(a&1))

এটি অনলাইন চেষ্টা করুন! কেবলমাত্র ইতিবাচক মানগুলি ব্যবহার করে 4 বাইট সংরক্ষণ করুন b%2-a%2। আপনি যদি এটি লিখেন:

function(a){return a.sort((a,b)=>(b&1)-(a&1))}

তারপরে এটি সমস্ত ধরণের পুরানো জাভাস্ক্রিপ্ট বাস্তবায়নগুলিতে কাজ করবে যা স্টেবলগুলি সাজান না।


1
a=>a.sort((a,b)=>b&1-a&1)কাজ করে না ?
অ্যালেক্সিস ফ্যাকস

1
@ অ্যালেক্সিসফ্যাকস নং, যা পার্স হিসাবে আছে b&(1-a)&1
নিল

1
a=>a.sort(a=>++a&1)আরও খাটো :)
সর্বোচ্চ

@ ম্যাক্স এটি প্রদত্ত পরীক্ষার কেসগুলিতে কাজ করতে পারে তবে কেউ কাজ করে না এমন উদাহরণ খুঁজে পেলে আমি অবাক হব না।
নিল

1
@ ম্যাক্স আপনি নিজের উত্তর হিসাবে এটিও জমা দিতে পারেন।
নিল

5

টি এসকিউএল, 26 বাইট

SELECT*FROM t ORDER BY~i&1

শেষের অঙ্কটি 1 এর সাথে তুলনা করতে বিটওয়াইড এবং অপারেটর "&" ব্যবহার করে।

সম্পাদনা: বিটওয়াসার পরে যোগ করার চেয়ে সংক্ষিপ্ত নয় 1. এডিআইটি 2: স্থান অপসারণের অনুমতি দিতে পুনঃক্রম করুন।


1
নিস! আমাকে মারধর 5! অর্ডার অদলবদল করে এবং স্থানটি ফেলে দিয়ে আরও একটি বাইট সংরক্ষণ করুন:ORDER BY~i&1
ব্র্যাডিসি

4

জেলি , 3 বাইট

ḂÞṚ

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

আরও বেশি চাওয়া-পাওয়া পরমাণুগুলির মধ্যে একটি হ'ল এক-এমনকি (এটি এই 2 বাইট তৈরি করবে) বলে মনে হয়, এটি ছাড়া আমাদের বিশ্বাস অবশ্যই বিপরীত হবে ...

ḂÞṚ - Link: list of integers
 Þ  - sort by:
Ḃ   -   bit (least significant bit - i.e. 1 if odd 0 if even)
  Ṛ - reverse

4

জাভাস্ক্রিপ্ট, 22 20 বাইট

a=>a.sort(a=>!(a%2))

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


আমি মনে করি আপনি আপনার তৃতীয়টির কাছাকাছি প্রথম বন্ধনী ফেলে দিতে পারেন a
জোনাথন ফ্রেচ

0অ্যারে অন্তর্ভুক্ত করা হলে কাজ করে না ।
শেগি

ওইটা ভুল. জেএস তুলককারী doies এইভাবে কাজ করে না। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

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

1
আমি মনে করি এটি ব্যর্থ [1,2,3,4,5,6,6,-1,-2,-3,-4]। জাভাস্ক্রিপ্ট array.sortঅদ্ভুত।
চ্যাস ব্রাউন

4

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

Months 14 মাস পরে এবং আমি এখন গল্ফ করার ক্ষেত্রে কিছুটা ভাল better

for(;''<$n=$argv[++$i];$s=$n%2?"$n $s":"$s $n");echo$s;

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


পিএইচপি (> = 5.4), 84 82 বাইট

(-২ বাইটস, ইসমাইল মিগুয়েলকে ধন্যবাদ )

<?array_shift($a=&$argv);usort($a,function($i){return$i%2==0;});echo join(' ',$a);

এটি চালানোর জন্য:

php -n <filename> <number_1> <number_2> ... <number_n>

উদাহরণ:

php -n sort_odds_first.php 2 0 1 -1 3 8 29 -666

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


1
পরিবর্তে $a=array_slice($argv,1);, ব্যবহার করুন array_shift($a=&$argv);, যা 1 বাইট সংরক্ষণ করে। এছাড়াও, আগে জায়গা সরান $aমধ্যে join(' ', $a)আরেকটি বাইট সংরক্ষণ। এছাড়াও, পিএইচপি 5.3 বিভিন্ন ফলাফল দেয়। এই সমাধানটি পিএইচপি এর কোন সংস্করণের জন্য আপনার নির্দিষ্ট করা উচিত।
ইসমাইল মিগুয়েল

1
@ ইসমাইল মিগুয়েল: array_shiftধারণাটির জন্য ধন্যবাদ এবং স্থানের ভুলটি নির্দেশ করে। আমি নিশ্চিত যে আমি কীভাবে জায়গাটি মিস করেছি: ডিআই পিএইচপি> = 5.4 পাশাপাশি শিরোনামে যুক্ত করেছে।
রাত 2

এটি একটি সাধারণ ভুল। আমি array_shiftযখন চেষ্টা করে দেখেছি তখন আমি আসলেই অবাক হয়েছি ।
ইসমাইল মিগুয়েল




3

সি #, 23 বাইট

i=>i.OrderBy(u=>u%2==0)

বেশ স্ট্রেইট সত্যিই এগিয়ে: এটি মূলত সংখ্যাগুলি বুলেঁয়রে রূপান্তরিত করে, এর trueঅর্থ হ'ল সংখ্যাটি সমান এবং falseএটি বিজোড়। কারণ সমান সংখ্যার trueচেয়ে বেশি falseআগে উপস্থিত হয়।

বিন্যাসিত সংস্করণটি দেখতে এমন দেখাচ্ছে:

i => i.OrderBy (u => u % 2 == 0)

এবং আপনি এটির মতো পরীক্ষা করতে পারেন:

Console.WriteLine (string.Join (",", new Func <IEnumerable <int>, IEnumerable <int>> (
                                    i => i.OrderBy (u => u % 2 == 0)
                                ).Invoke (new [] {3, 2, 2, 2, 1, 2, 5, 5})));

যার ফলাফল নিম্নলিখিত:

3,1,5,5,2,2,2,2


3

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

একই ভাষা ব্যবহার করে @ নীলের উত্তরের চেয়ে 6 বাইট কম রয়েছে : ডি

a=>a.sort(n=>-(n&1)||1)

ব্যাখ্যা:

ফাংশনটি কেবল sortপ্রথম প্যারামিটারের যত্ন করে। এটি বিজোড় হলে এটি ফিরে আসে -1(এর ফলাফল -(n&1))। অন্যথায় (যখন -(n&1)ফলন হবে 0) এটি ফিরে আসে 1

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


2
পিপিসিজিতে আপনাকে স্বাগতম!
জোনাথন ফ্রেচ


3

জাভাস্ক্রিপ্ট (ক্রোম ভি 67) - 24 19 23 বাইট

a=>a.sort(a=>!(a&1)-.5)

&1পরিবর্তে এর ব্যবহার Math.abs()%2@ নীল থেকে চুরি করা হয়েছিল। ধন্যবাদ!

আমার হ্যাকি 19 বাইট সমাধানটি বৈধ ছিল না দেখানোর জন্য @ শেগগিকে ধন্যবাদ। যদি কেউ এটি চায়:

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

a=>a.sort(a=>++a&1)


পিপিসিজিতে আপনাকে স্বাগতম :) এটি [-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]আমার ক্রোম 67 কনসোল, আউটপুটিংয়ে ইনপুট দেওয়ার জন্য ব্যর্থ [7,-5,-3,17,-1,15,1,13,3,11,5,9,2,19,14,-4,6,18,-2,16,0,10,8,12,4]
শেগি

@ শেগি - উফ! তুমি একেবারেই সঠিক!
সর্বোচ্চ


3

পাওয়ারশেল , 22 19 বাইট

$args|sort{!($_%2)}

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

স্প্ল্যাটিংয়ের মাধ্যমে ইনপুট নেয়, উদাহরণস্বরূপ, $a=(3,4,3); .\sort-odd-numbers-first.ps1 @aযা টিআইওতে প্রতিটি প্রবেশের জন্য পৃথক যুক্তি হিসাবে প্রকাশিত হয়।

এখানে অন্যান্য কয়েকটি উত্তরের মতো, Sort-Objectএকটি অভিব্যক্তির ভিত্তিতে তুলনা করতে পারেন। এখানে এক্সপ্রেশনটি হ'ল !($_%2), $falseবিজোড়গুলি বাছাই হয়ে যায় এবং সন্নিবেশ অনুসারে বাছাই হয় $true। বুলিয়ান মানগুলি কীভাবে তুলনা করা হয় তার জন্য ধন্যবাদ, ভুয়া মানগুলি প্রথমে সাজানো হয়। এটি ফলাফলকে আউটপুট শুরুর দিকে এবং সন্ধ্যাগুলি শেষ পর্যন্ত সরিয়ে দেয়। Sort-Objectস্থিতিশীল, সুতরাং স্ব স্ব বিভাগে পৃথক আইটেম ক্রম পরিবর্তন হয় না (টিআইও উদাহরণ হিসাবে)।

-3 বাইট মজির ধন্যবাদ।


এটি একটি স্প্ল্যাটিং ব্যবহার করতে পারেন । উদাহরণস্বরূপ $a=(3,4,3); .\sort-odd-numbers-first.ps1 @a। তাই $args|sort{!($_%2)}যথেষ্ট। তাই না?
mazzy

"প্রতারণা" কেন? এটি নেটিভ পাওয়ারশেল বৈশিষ্ট্য। আরও একটি প্রশ্ন: আমরা কোডগল্ফ সমাধানের মধ্যে স্প্ল্যাটিং ব্যবহার করতে পারি? উদাহরণস্বরূপ, একটি সমাধানে বেশ কয়েকটি ফাংশন রয়েছে। যদি আমরা পারি তবে কেন বাহ্যিক কল করা উচিত নয়? যদি আমরা না পারি তবে এই বৈশিষ্ট্যটি নিষিদ্ধ কেন? এবং কোন বৈশিষ্ট্যগুলিও নিষিদ্ধ করা হয়েছে?
mazzy

1
@ মজজি তা উল্লেখ করার জন্য ধন্যবাদ। আমি আমার জমা আপডেট করেছি।
অ্যাডমবর্কবার্ক

3

রুবি , 23 বাইট

->a{a.sort_by{|i|~i%2}}

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

ব্যাখ্যা:

sort_byপ্রতিটি সংখ্যাকে বাছাই করে যেমন এর মান ব্লকের ফলাফল ( ~i%2)

~xসমান -x-1এবং অগ্রাধিকার নেয়%2

বিজোড় সংখ্যাগুলি মূল্যায়ন করবে 0এবং এমনকি সংখ্যারও মূল্যায়ন করবে 1যাতে বিজোড় সংখ্যাগুলি প্রথমে সাজানো হবে।

সবেমাত্র সম্পর্কিত: এটি হোমব্রু 2.5.1p57 থেকে রুবিতে কাজ করে (কারণ এটি একটি ছোট বাগের উপর ভিত্তি করে) তবে কেবল অ-নেতিবাচক পূর্ণসংখ্যার জন্য, 20 বাইট

->a{a.sort{|i|i%-2}}

ব্যাখ্যা:

এই ব্যবহারসমূহ sortযা একটি ব্লক যে 2 মূল্যবোধ ও আয় লাগে আশা -1, 0বা 1কিনা প্রথম এক বড় উপর নির্ভর করে, তারা সমান বা দ্বিতীয় এক বড়।

এখানে প্রদত্ত ব্লকটি দ্বিতীয় মানটিকে উপেক্ষা করে এবং -1যদি প্রথম সংখ্যাটি বিজোড় হয় বা 0এটি সমান হয় তবে ফিরে আসে ।

এটি কাজ করার গ্যারান্টিযুক্ত নয় তবে এটি কয়েকটি (আমার মনে হয় বগি) বাস্তবায়নে ঘটে।


আমরা ভাষাগুলি এখানে তাদের প্রয়োগের মাধ্যমে সংজ্ঞায়িত করি সুতরাং আপনার 20 বাইট সমাধানটি বৈধ।
শেগি

@ শেগি কিছু মনে করবেন না, আমি গতকাল আমার পরীক্ষার বিষয়টিকে ভুল করেছিলাম।
অসোন তুহিদ

3

6502 মেশিন কোড রুটিন, 47 বাইট

A0 00 84 FE B1 FB 4A 90 07 C8 C4 FD F0 20 D0 F4 2A 85 02 84 FE A4 FD 88 C4 FE
F0 12 B1 FB 4A 90 F6 2A AA A5 02 91 FB A4 FE 8A 91 FB 90 D6 60

$fb/ $fcএবং এই অ্যারের দৈর্ঘ্যের মধ্যে সংখ্যার অ্যারেতে একটি পয়েন্টার আশা করে $fd। সামনে সমস্ত বিজোড় সংখ্যা রাখতে অ্যারেটিকে হস্তান্তর করে। এটি অবস্থান স্বতন্ত্র কোড, সুতরাং কোনও লোড ঠিকানা প্রয়োজন হয় না।

যেহেতু 6502 একটি 8 বিট চিপ (সুতরাং নির্দেশাবলী কেবল 8 বিট মানগুলি নিয়ে dealচ্ছিকভাবে স্বাক্ষরিত), বৈধ সংখ্যার পরিসীমা [-128 .. 127]এবং সর্বোচ্চ অ্যারের আকার 256

মন্তব্য বিচ্ছিন্ন

; function to "partially sort" array, so all odd numbers come before all
; even numbers.
;
; input:
;   $fb/$fc: address of array to sort
;   $fd:     length of array to sort, 0 means 256 (maximum size)
;
; clobbers:
;   $fd/$fe: position from back/front of array
;   $2:      temporary for exchanging two values
;   A, X, Y

 .oddfirst:
A0 00       LDY #$00            ; initialize index from front
84 FE       STY $FE             ; to 0

 .search_front:
B1 FB       LDA ($FB),Y         ; load number from front
4A          LSR A               ; check for even/odd by shifting
90 07       BCC .search_back    ; if odd -> to searching from back
C8          INY                 ; next position from front
C4 FD       CPY $FD             ; same as position searching from back?
F0 20       BEQ .done           ; then we're finished
D0 F4       BNE .search_front   ; else check next from front
 .search_back:
2A          ROL A               ; shift carry back in
85 02       STA $02             ; and save number to temp
84 FE       STY $FE             ; save index from front
A4 FD       LDY $FD             ; load index from back
 .sb_loop:
88          DEY                 ; previous position from back
C4 FE       CPY $FE             ; same as position searching from front?
F0 12       BEQ .done           ; then we're finished
B1 FB       LDA ($FB),Y         ; load number from back
4A          LSR A               ; check for even/odd by shifting
90 F6       BCC .sb_loop        ; if odd -> check previous position
2A          ROL A               ; shift carry back in
AA          TAX                 ; remember in X
A5 02       LDA $02             ; load temporary from front
91 FB       STA ($FB),Y         ; store at current position
A4 FE       LDY $FE             ; load index from front
8A          TXA                 ; load remembered number
91 FB       STA ($FB),Y         ; store at current position
90 D6       BCC .search_front   ; and back to searching from front
 .done:
60          RTS

রুটিন ব্যবহার করে সি 64 এসেম্বলারের প্রোগ্রামের উদাহরণ:

অনলাইন ডেমো

স্ক্রিনশট

Ca65 সিনট্যাক্সে কোড :

.import oddfirst ; link with routine above

.segment "BHDR" ; BASIC header
                .word   $0801           ; load address
                .word   $080b           ; pointer next BASIC line
                .word   2018            ; line number
                .byte   $9e             ; BASIC token "SYS"
                .byte   "2061",$0,$0,$0 ; 2061 ($080d) and terminating 0 bytes

.bss
linebuf:        .res    5               ; maximum length of a valid signed
                                        ; 8-bit number input
convbuf:        .res    3               ; 3 BCD digits for signed 8-bit
                                        ; number conversion
numbers:        .res    $100            ; maximum array size that can be
                                        ; directly handled with indexing
                                        ; instructions

.data
prompt:         .byte   "> ", $0
message:        .byte   $d, $d, "Enter one number per line.", $d
                .byte   "just press enter (empty line) when done.", $0
errmsg:         .byte   "Error parsing number, try again.", $d, $0

.code
                lda     #$17            ; set upper/lower mode
                sta     $d018

                lda     #0
                sta     $2a             ; index for number array
                sta     $52             ; flag that at least one number was
                                        ; entered

                lda     #<message       ; display message
                ldy     #>message
                jsr     $ab1e

inputloop:
                lda     #<prompt        ; display prompt
                ldy     #>prompt
                jsr     $ab1e

                lda     #<linebuf       ; read string into buffer
                ldy     #>linebuf
                ldx     #5
                jsr     readline

                lda     linebuf         ; empty line?
                beq     process         ; -> start processing

                lda     #<linebuf       ; convert input to int8
                ldy     #>linebuf
                jsr     toint8
                bcc     numok           ; successful -> store number
                lda     #<errmsg        ; else show error message and repeat
                ldy     #>errmsg
                jsr     $ab1e
                bcs     inputloop

numok:          ldx     #$ff            ; set flag that we have a number
                stx     $52
                ldx     $2a
                sta     numbers,x
                inc     $2a             ; next index
                bne     inputloop       ; if array not full, next input

process:        lda     $52             ; check we have some numbers
                beq     exit            ; otherwise exit program

                lda     #<numbers       ; address of array to $fb/fc
                sta     $fb
                lda     #>numbers
                sta     $fc
                lda     $2a             ; length of array to $fd
                sta     $fd
                jsr     oddfirst        ; call "sorting" function

                lda     #$0             ; index variable for output loop
                sta     $52
outloop:        ldy     $52             ; load current index
                lda     numbers,y       ; load current number
                jsr     printnum        ; -> output
                inc     $52             ; next index
                lda     $52             ; compare with ...
                cmp     $2a             ; ... array size
                bne     outloop         ; not reached yet -> repeat

exit:           rts                     ; done, exit program

; read a line of input from keyboard, terminate it with 0
; expects pointer to input buffer in A/Y, buffer length in X
.proc readline
                dex
                stx     $fb
                sta     $fc
                sty     $fd
                ldy     #$0
                sty     $cc             ; enable cursor blinking
                sty     $fe             ; temporary for loop variable
getkey:         jsr     $f142           ; get character from keyboard
                beq     getkey
                sta     $2              ; save to temporary
                and     #$7f
                cmp     #$20            ; check for control character
                bcs     checkout        ; no -> check buffer size
                cmp     #$d             ; was it enter/return?
                beq     prepout         ; -> normal flow
                cmp     #$14            ; was it backspace/delete?
                bne     getkey          ; if not, get next char
                lda     $fe             ; check current index
                beq     getkey          ; zero -> backspace not possible
                bne     prepout         ; skip checking buffer size for bs
checkout:       lda     $fe             ; buffer index
                cmp     $fb             ; check against buffer size
                beq     getkey          ; if it would overflow, loop again
prepout:        sei                     ; no interrupts
                ldy     $d3             ; get current screen column
                lda     ($d1),y         ; and clear 
                and     #$7f            ;   cursor in
                sta     ($d1),y         ;   current row
output:         lda     $2              ; load character
                jsr     $e716           ;   and output
                ldx     $cf             ; check cursor phase
                beq     store           ; invisible -> to store
                ldy     $d3             ; get current screen column
                lda     ($d1),y         ; and show
                ora     #$80            ;   cursor in
                sta     ($d1),y         ;   current row
                lda     $2              ; load character
store:          cli                     ; enable interrupts
                cmp     #$14            ; was it backspace/delete?
                beq     backspace       ; to backspace handling code
                cmp     #$d             ; was it enter/return?
                beq     done            ; then we're done.
                ldy     $fe             ; load buffer index
                sta     ($fc),y         ; store character in buffer
                iny                     ; advance buffer index
                sty     $fe
                bne     getkey          ; not zero -> ok
done:           lda     #$0             ; terminate string in buffer with zero
                ldy     $fe             ; get buffer index
                sta     ($fc),y         ; store terminator in buffer
                sei                     ; no interrupts
                ldy     $d3             ; get current screen column
                lda     ($d1),y         ; and clear 
                and     #$7f            ;   cursor in
                sta     ($d1),y         ;   current row
                inc     $cc             ; disable cursor blinking
                cli                     ; enable interrupts
                rts                     ; return
backspace:      dec     $fe             ; decrement buffer index
                bcs     getkey          ; and get next key
.endproc

; print an int8 number to the screen
; input:
;   A - the number to print
; clobbers:
;   X, Y
.proc printnum
                bpl     doprint         ; positive? -> direct number output
                eor     #$ff            ; else invert, 
                sta     $2              ; ...
                inc     $2              ; add one,
                lda     #'-'            ; output a minus sign
                jsr     $e716
                lda     $2
doprint:        tax                     ; number to X reg
                lda     #$0             ; set A to 0
                jsr     $bdcd           ; routine for uint16 in X/A output
                lda     #' '            
                jmp     $e716           ; and print a space
.endproc

; parse / convert int8 number using a BCD representation and double-dabble,
; handle negative numbers.
.proc toint8
                sta     $fb
                sty     $fc
                ldy     #$0
                sty     $fd
                sty     $fe
                sty     convbuf
                sty     convbuf+1
                sty     convbuf+2
scanloop:       lda     ($fb),y
                beq     copy
                iny
                cmp     #$20
                beq     scanloop
                cmp     #$2d
                beq     minus
                cmp     #$30
                bcc     error
                cmp     #$3a
                bcs     error
                inc     $fd
                bcc     scanloop
minus:          lda     $fd
                bne     error
                lda     $fe
                bne     error
                inc     $fe
                bne     scanloop
error:          sec
                rts
copy:           dey
                bmi     error
                ldx     #$2
copyloop:       lda     ($fb),y
                cmp     #$30
                bcc     copynext
                cmp     #$3a
                bcs     copynext
                sec
                sbc     #$30
                sta     convbuf,x
                dex
copynext:       dey
                bpl     copyloop
                lda     #$0
                sta     $fb
                ldx     #$8
loop:           lsr     convbuf
                lda     convbuf+1
                bcc     skipbit1
                ora     #$10
skipbit1:       lsr     a
                sta     convbuf+1
                lda     convbuf+2
                bcc     skipbit2
                ora     #$10
skipbit2:       lsr     a
                sta     convbuf+2
                ror     $fb
                dex
                beq     done
                lda     convbuf
                cmp     #$8
                bmi     nosub1
                sbc     #$3
                sta     convbuf
nosub1:         lda     convbuf+1
                cmp     #$8
                bmi     nosub2
                sbc     #$3
                sta     convbuf+1
nosub2:         lda     convbuf+2
                cmp     #$8
                bmi     loop
                sbc     #$3
                sta     convbuf+2
                bcs     loop
done:           lda     $fe
                beq     positive
                lda     #$ff
                eor     $fb
                sta     $fb
                inc     $fb
positive:       lda     $fb
                clc
                rts
.endproc


2

ক্লোজার - 35 বাইট

(defn o[c](sort(fn[p _](odd? p))c))

Ungolfed:

(defn oddsort [col]
  (sort (fn [p _] (odd? p)) col))

উন্নতির জন্য প্রচুর জায়গা রয়েছে, উদাহরণস্বরূপ আপনি একটি বেনাম ফাংশন জমা দিতে পারেন যার মাধ্যমে একটি সংক্ষিপ্ত সৃষ্টি বাক্য গঠন রয়েছে #(...)। এছাড়াও আপনি sort-byচেষ্টা করে দেখতে পারেন, যদিও জমাটি ইতিমধ্যে বিদ্যমান।
নিকোনিহার

@ নিকোনিয়ার: একটি #()বেনামি ফাংশন চেষ্টা করেছেন তবে দুটি পরামিতি পাস হওয়ার পরে কেবল প্রত্যাশিত / ব্যবহৃত %2হয়েছে এবং এটিকে আরও অক্ষর যুক্ত করার ফলে একটি ত্রুটি ত্রুটি পেয়েছে । এটি কীভাবে করা যায় তা আগ্রহী হবে।
বব জার্ভিস - মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.