সাইন পরিবর্তন ব্যবহার করে সদৃশ এন্ট্রিগুলি এড়িয়ে চলুন


14

এই উপাখ্যানটিতে নিম্নলিখিত আকর্ষণীয় এক্সচেঞ্জ রয়েছে:

"ফাইন, ফ্রেড," আভি বাধা দিয়েছে। "তাহলে সদৃশ এন্ট্রিগুলি এড়াতে আপনি কীভাবে এটি পরিবর্তন করবেন?"

"ওহ, ওকে কেবল সেখানে নেতিবাচক হিসাবে পরিবর্তন করুন।"

যদিও এই দাবি প্রসঙ্গে যথাযথ নয়, তবে আমি অবাক হই যে এরকম কিছু কলুষিত কোড রয়েছে যার জন্য এটি বোঝা যায়।

আপনার চ্যালেঞ্জটি কোড (কোনও প্রোগ্রাম, একটি ফাংশন, যাই হোক না কেন) যা এই মানদণ্ডের সাথে খাপ খায় সেগুলি লিখুন:

  1. প্রতিলিপি রেখে একটিতে দুটি ইনপুট তালিকা একত্রিত করে। [সম্পাদনা করুন: আপনি বৈকল্পিকভাবে ধরে নিতে পারেন যে তারা পূর্ণসংখ্যা এবং / অথবা তালিকাগুলি নিজেরাই অনন্য। আপনি অনুমান করতে পারবেন না যে পূর্ণসংখ্যাগুলি ইতিবাচক (এক উত্তর যা এর মধ্যে দাদাগিরি হয়)]
  2. একটি আক্ষরিক "1" কোডের কোথাও উপস্থিত হয়। আপনি যদি এটি একটি আক্ষরিক "-1" এ পরিবর্তন করেন তবে কোড একই কাজ করে তবে ডুপ্লিকেটগুলি সরিয়ে দেয়।
  3. কোডটি কেবল 1 / -1 এর বাইরে শাখা করে না। আমরা উদাহরণস্বরূপ if (1 < 1) removeDuplicates()বা খুঁজছি না [do_nothing, merge_with_dups, merge_without_dups][1].call()

ইনপুট এবং আউটপুট আপনি যে কোনও যুক্তিসঙ্গত বিন্যাসে চয়ন করতে পারেন। একটি উদাহরণ হতে পারে

[1,2],[2,3]->[1,2,2,3]সাইন পরিবর্তন হওয়ার আগে এবং [1,2,3]পরে।

এটি একটি জনপ্রিয়তা প্রতিযোগিতা। এটি কোড গল্ফ নয় , যদি না আপনি প্রদর্শন করতে চান। আমি প্রায় দুই সপ্তাহের মধ্যে সর্বাধিক ভোট প্রাপ্ত উত্তরটি গ্রহণ করব।


ইনপুট কী - কেবল পূর্ণসংখ্যা? ইতিবাচক এবং / বা নেতিবাচক? যদি ইনপুট তালিকাগুলিতে সদৃশ থাকে তবে সেগুলি কি এই -1ক্ষেত্রে সরিয়ে ফেলা উচিত ?
মনিকা পুনরায় ইনস্টল করুন

1
আমাদের কি ধরে নেওয়া উচিত যে ইনপুট তালিকাগুলি বাছাই করা আছে এবং সেগুলি নিজেই সদৃশ নয়?
ugoren

আমার প্রথম চিন্তা যখন আমি ডেইলিডব্লিউটিএফ-তে দেখেছিলাম তখন তাদের "মার্জ" সংজ্ঞায়িত করার প্রয়োজন ছিল। এই প্রশ্নেরও এর সংজ্ঞা দরকার।
পিটার টেলর

"তারা তাকে বোরিসকে বুলেট ডজার বলে" "তারা কেন তাকে এটি বলে?" "... কারণ সে গুলি চালায়, আভি"। কোডগল্ফে কোনও ছিনতাই ভক্ত?
বোজ্যাঙ্গলেস

উত্তর:


11

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

একটি প্রচলিত অ্যালগরিদম নিন এবং এটি একটি বাগ দিয়ে লিখুন:

function merge(a, b) {
  var ai = 0, bi = 0, oi = 0;
  var o = [];
  while (ai < a.length && bi < b.length) {
    var v = a[ai] < b[bi] ? a[ai++] : b[bi++];
    if (v !== o[oi + 1]) {
      o[oi++] = v;
    }
  }
  while (ai < a.length) o[oi++] = a[ai++];
  while (bi < b.length) o[oi++] = b[bi++];
  return o;
}

এই কোডটিতে ঠিক একটি আক্ষরিক রয়েছে 1। যদি এটিতে পরিবর্তিত হয় -1তবে নকলগুলি সরানো হবে। এটি যে কোনও তুলনামূলক মানগুলিতে ব্যবহার করা যেতে পারে।


5

এপিএল 22/23

Screen via এর মাধ্যমে স্ক্রিন ইনপুটটির জন্য অনুরোধ জানায় এবং অনুলিপি ছাড়াই নেতৃস্থানীয়টিকে নেতিবাচক সেট করা থাকলে বা এর সাথে অর্ডারযুক্ত মার্জ তালিকাটি ফেরত দেয়।

(~1=0,-2=/v)/v←v[⍋v←⎕]

⎕:
    (1 2),(2 3)
1 2 2 3

(~¯1=0,-2=/v)/v←v[⍋v←⎕]

⎕:
    (1 2),(2 3)
1 2 3

বাইট কাউন্টারগুলি দয়া করে নোট করুন যে একক বাইট এপিএল অক্ষরগুলি এই সাইটে সঠিকভাবে রেন্ডার করতে ইউটিএফ 8 তে রূপান্তরিত হয়েছে।


-1 কীভাবে সবকিছু বদলে যায়?
জোহানেস কুহনে

@ জোহনেস কুহান উপরের উদাহরণের জন্য কোড 0, -2 = / v ভেক্টরকে 0 0 ¯1 0 দিয়ে ডুপ্লিকেট প্রবেশের অবস্থান নির্দেশ করে ¯1 দিয়ে আসে। এই ভেক্টরটি 1 এবং ¯1 এর বিপরীতে পরীক্ষা করে 0 0 0 0 বা 0 0 1 0 0 বুলেটিয়ান উপাদানগুলি বিপরীত করে 1 1 1 1 বা 1 1 0 0 1 এই ভেক্টরগুলি মার্জড ভেক্টর থেকে উপযুক্ত উপাদান নির্বাচন করতে ব্যবহৃত হয়।
গ্রাহাম

4

কে (18)

কোনও বৈধ ধরণের তালিকার জন্য কাজ করা উচিত

{(*1#(::;?:))@x,y}

উদাহরণ:

k){(*-1#(::;?:))@x,y}[1 2 3 4;3 4 5 6]
1 2 3 4 5 6
k){(*1#(::;?:))@x,y}[1 2 3 4;3 4 5 6]
1 2 3 4 3 4 5 6


2

সজোরে আঘাত

প্রসঙ্গের চেতনায় এই প্রোগ্রামটি ডুপ্লিকেটগুলি সরিয়ে ফেললে যদি আপনি লাইনে ছোট হাতের অক্ষরের আগে একটি বিয়োগ চিহ্ন যোগ lকরেন grep। আপনি যদি Iআগের লাইনে বড় হাতের অক্ষরের আগে বা 1পরের লাইনে অঙ্কের আগে একটি বিয়োগ চিহ্ন যুক্ত করেন তবে প্রোগ্রামটি আলাদা আচরণ করে না।

ইনপুট ফাইলগুলিতে প্রতি লাইনে একটি পূর্ণসংখ্যা থাকে (এটি পাঠ্যের ফাইল হিসাবে তালিকার স্বাভাবিক প্রতিনিধিত্ব)। তাদের অবশ্যই দুটি যুক্তি হিসাবে পাস করতে হবে। ফলাফলের তালিকাটি স্ট্যান্ডার্ড আউটপুটকে লেখা হয়।

# Create temp file for working
temp=$(mktemp -d)
# Copy left and right file to merge into same
cp $1 $temp/l
cp $2 $temp/r
cd $temp

while read num
do
  # I remove the output
  set `grep -Lax -e $num l ` <r> /dev/null
  if [ $# != 1 ]
  then echo $num >>r
  fi
done <l

cp r /dev/stdout
cd
rm -r $temp

একটি সাক্ষাত্কারে আপনার সেরা কোডের উদাহরণ হিসাবে এই প্রোগ্রামটি নির্দ্বিধায় ব্যবহার করুন। আমি আপনাকে যা জিজ্ঞাসা করি তা হ'ল এটি আমার সেরা কোড নয়।


1

TCL

উক্তিটির চেতনায়

foreach item $list1 {
    if {$item in $list2} {set item [expr {$item * 1}]}
    lappend list2 $item
}
foreach item $list2 {
    if {$item >= 0} {lappend result $item}
}

যদি এটি সদৃশ হয় তবে এটিকে (-) 1 দিয়ে গুণান, তার পরে নেতিবাচক মানগুলি ছাঁটাই করে।


প্রশ্ন পরিবর্তনের আগে এই উত্তরটি সেভাবেই লেখা হয়েছিল। উক্তিটির মূল বিবেচনায়, আমি এখনও এন্ট্রিগুলিকে নেতিবাচক করে তুলতে পছন্দ করি।
জোহানেস কুহনে

-1

আমি পিএইচপি মধ্যে শিক্ষানবিস আমি সঠিক না জানি না

$list1=explode(',',$_GET['list1']);
$list2=explode(',',$_GET['list2']);
$list_merged=array_merge($list1,$list2);
print_r($list_merged);
$list_unique=array_unique($list_merged);
print_r($list_unique);

7
দেখে মনে হচ্ছে না এটি আসলে চ্যালেঞ্জটির জবাব দেয় - আমি আপনার কোডের কোথাও আক্ষরিক 1 দেখতে পাই না।
Riking
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.