একটি বাছাই করার প্রোগ্রাম লিখুন যা ভুল দেখায় তবে এটি আসলে সঠিক [বন্ধ]


12

এমন একটি প্রোগ্রাম লিখুন যা সংখ্যার ভেক্টর বাছাই করে (বা কোনও ধরণের উপাদান) যা দেখতে এক বা একাধিক বাগের মতো দেখায়, তবে এটি আসলে ঠিক।

  • কোডটি অবশ্যই পরিষ্কার হতে হবে। কোডটির সন্ধানকারী যে কোনও ব্যক্তিকে সহজেই সনাক্ত করতে হবে যে এটি একটি সাজানো অ্যালগরিদম এবং সহজেই একটি বাগের সাহায্যে কোডের একটি সঠিক টুকরো বিভ্রান্ত করতে হবে।
  • (আপাত) বাগটি যে কোনও কিছু দ্বারা কোডকে সিনট্যাক্টিকালি বা শব্দার্থগতভাবে অসুস্থ করে তোলে (উদাহরণস্বরূপ প্রোগ্রামটি সংকলন / চালিত করে না, রান করার সময় ইউবি প্রদর্শন করে), প্রোগ্রামকে ভুল ফলাফল তৈরি করতে পারে, সমাপ্ত হতে পারে না বা অ-নিরপেক্ষবাদী হতে পারে।
  • কোডটি অবশ্যই অবশ্যই সুসংহত হতে হবে এবং প্রোগ্রামটিকে অবশ্যই একটি সীমাবদ্ধ সময়ে সঠিক আউটপুট নির্ধারণ করতে হবে।
  • ইনপুটটি প্রোগ্রামটিতে হার্ড কোড করা যায় বা পড়তে পারে (ব্যবহারকারীর কাছ থেকে, ফাইল থেকে)।
  • ইনপুটটিকে বৈধ বলে মনে করা হয় এবং ইনপুট যথার্থতা যাচাই করার জন্য প্রোগ্রামটির প্রয়োজন হয় না।
  • যে কোনও বাছাই অ্যালগরিদম গ্রহণ করা হয়। সংখ্যাগুলি ধরে রাখতে ডেটা স্ট্রাকচারটি প্রকৃত ভেক্টর হওয়ার দরকার নেই। প্রোগ্রামটি ভেরিয়েবল সংখ্যার বা একটি নির্দিষ্ট সংখ্যার সংখ্যা বাছাই করার জন্য ডিজাইন করা যেতে পারে (উদাহরণস্বরূপ 3 সংখ্যার বাছাই করার জন্য একটি প্রোগ্রাম ঠিক আছে )। বাছাই স্থিতিশীল বা নাও হতে পারে (দ্রষ্টব্য: একটি স্থিতিশীল বাছাই করার জন্য ডিজাইন করা একটি প্রোগ্রাম যা একটি আপাত বাগ রয়েছে যা এই সাজাকে অস্থির দেখায়, কিন্তু বাস্তবে এটি কোনও বাগ নয়: প্রোগ্রামটি আসলে স্থিতিশীল বাছাই করে - এটি একটি বৈধ উত্তর )।
  • আপনি 3 য় পক্ষের সরঞ্জামগুলির ব্যতীত (সাজানোর ফাংশন সহ) কোনও ফাংশন কল করতে পারেন (যদি না তারা ব্যাপকভাবে বিস্তার এবং ব্যবহৃত যেমন হয় boosজন্য C++, JQueryজন্য Javascript- যারা ব্যবহার করা ঠিক হয়)
  • ভাষা নির্দিষ্ট করুন
  • কোডটিতে যে অংশটি বাগের মতো দেখাচ্ছে তাতে মন্তব্য করুন।
  • বাগটি কী ভুল দেখাচ্ছে বলে ব্যাখ্যা করুন।
  • এটি ব্যাখ্যা করার জন্য (একটি স্পয়লার বাক্সে) কেন এটি আসলে কোনও বাগ নয়।

এটি একটি জনপ্রিয়তা প্রতিযোগিতা। উত্তর বেশিরভাগ ভোটের সাথে জিতেছে।


এই চ্যালেঞ্জ এখন শেষ। বিজয়ী হ'ল @ ক্লুহলেস /codegolf//a/30190/11400 8 টি ভোট পেয়ে। সমস্ত জমা দেওয়ার জন্য ধন্যবাদ!

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


আমি কি সংখ্যার পরিবর্তে নীলযোগ্য বুলিয়ান ব্যবহার করতে পারি?
12urous

হ্যাঁ, প্রশ্নটি সম্পাদনাও করেছেন: যে কোনও ধরণের উপাদান
bolov

1
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ ছদ্মবেশী চ্যালেঞ্জগুলি এখন আর এই সাইটে অন টপিক নয়। meta.codegolf.stackexchange.com/a/8326/20469
বিড়াল

উত্তর:


11

সি ++

অ্যাপলgoto fail দ্বারা অনুপ্রাণিত ; বাগ

#include <vector>
#include <map>
#include <iostream>

/**
 * Sorts a vector of doubles in reverse order using the bucket sort algorithm.
 */
std::vector<double> reverse_bucket_sort(const std::vector<double>& input) {
    // put each element into a bucket as many times as it appears
    std::map<double, int> bucket_counts;
    for (auto it : input)
        ++bucket_counts[it];

    std::vector<double> sorted_elements; // the return value

    // loop until we are done
    while (bucket_counts.size() > 0) {
        // find the largest element
        double maximum = std::numeric_limits<double>::lowest();
        for (auto it : bucket_counts) {
            if (it.first > maximum)
                maximum = it.first;
                maximum = it.first;
        }

        // add the largest element N times to our sorted vector
        for (int i = 0; i < bucket_counts[maximum]; ++i)
            sorted_elements.push_back(maximum);

        // and now erase the bucket
        bucket_counts.erase(maximum);
    }

    return sorted_elements;
}

int main(int argc, const char * argv[]) {
    std::vector<double> test_case = { 0, 1, 2.5, 10, 2.5, 2 };

    std::cout << "unsorted:";
    for (auto it : test_case) std::cout << " " << it;
    std::cout << std::endl;

    std::cout << "sorted:";
    for (auto it : reverse_bucket_sort(test_case)) std::cout << " " << it;
    std::cout << std::endl;

    return 0;
}

পৃষ্ঠার প্রায় অর্ধেক নীচে একটি বাগ রয়েছে: আমাদের ifচেকের পরে একটি নকল লাইন আছে ! আমরা সর্বদা সর্বনিম্ন আপডেট করতে যাচ্ছি যা সর্বশেষ মান হয় bucket_count। ধন্যবাদ আমরা ঠিক আছি সি ++ তে std::mapকী অনুসারে বাছাই করা হয়। সুতরাং আমরা কেবল বালতিগুলি বিপরীত করছি যা আমরা চাই।


আপনি ব্যবহার করেন নি goto, সুতরাং কোনও ত্রুটি নেই। (অ্যাপল ব্যবহার না করলে বাগটি কখনও ঘটত না এমন সমস্ত লোকের কথা উল্লেখ করে goto)
ব্যবহারকারী 253751

অভিনন্দন, আপনি সর্বাধিক ভোট (7 দিনের পরে 8 টি ভোট) পেয়ে এই চ্যালেঞ্জটি জিতেছেন। তদাতিরিক্ত, আমি আপনার উত্তরটি সত্যিই পছন্দ করি কারণ আপনি একটি বাস্তব জীবনের ত্রুটি ব্যবহার করেছেন।
বলভ

8

Python2.x

import random
L = [random.randrange(20) for x in range(20)]
print "Unsorted:", L

def sort(L):
    # terminal case first. Otherwise sort each half recursively and combine
    return L.sort() if L > 1 else sort(L[:len(L)//2]) + sort(L[len(L)//2:])

sort(L)
print "Sorted:", L

টেস্ট রান

list.sortআয় None, তাই পরে অংশ elseহয় None + None। ভাগ্যক্রমে এটি কোনও সমস্যা তৈরি করে না কারণ একটি তালিকার তুলনা এবং একটি পূর্বনির্দেশ (L > 1)সর্বদা True। ফাংশন সর্বদা ফিরে আসে Noneতাই আমরা রিটার্নের মানটিকে অগ্রাহ্য করি এবং জাস্ট প্রিন্ট Lযা স্থানে সাজানো হয়েছে ক্যাটেটেশনের মাধ্যমে সাজানো অর্ধেকগুলি মার্জ করে কার্যকর করা সেখানে পাওয়া গেলেও কার্যকর হত না।


অভিনন্দন, আপনি 7 দিনের পরে 6 টি ভোট দিয়ে দ্বিতীয় স্থান অধিকার করেছেন। আপনার জমা দেওয়ার জন্য আপনাকে ধন্যবাদ.
বলভ

5

সি

ভুলভাবে বাছাই করা - একটি 64 বিট সিস্টেমে int4 বাইট এবং char *8 বাইট হয়, সুতরাং কাজ করা উচিত নয়।

কোড:

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

/* Compare integers to sort in reverse order */
int compare(const void *p, const void *q)
{
    const int *a = p;
    const int *b = q;

    return *b - *a;
}

int main()
{
    char *strings[] = {"B", "Que", "Ro", "Sum", "T"};
    int i;

    /* Let's use the integer compare to sort strings */
    qsort(&strings, sizeof(strings) / sizeof(char *), sizeof(char *), compare);

    /* Output the sorted results */
    for (i = 0; i < sizeof(strings) / sizeof(char *); i++)
        printf("%s\n", strings[i]);

    return 0;
}

বিল্ড:

$ gcc -o sort-no-sort sort-no-sort.c 

চালান:

$ ./sort-no-sort 
T
Sum
Ro
Que
B

হ্যাঁ, ঠিক আছে!

পাঁচটি জিনিস চলছে: 1) qsortপূর্ণসংখ্যায় পয়েন্টারগুলি পাস করে, যা অক্ষরের পয়েন্টারগুলির সমান আকার। ২) স্ট্রিংগুলি দৈর্ঘ্যে চার বাইটের চেয়ে বেশি নয় (তিন + এক টার্মিনেটর) = একটি পূর্ণসংখ্যার আকার, যা সাজানোর রুটিন আনন্দের সাথে পূর্ণসংখ্যার হিসাবে বিবেচনা করে। 3) বেশিরভাগ সংকলক ডেটা স্ট্রাকচারের প্রান্তিককরণকে বাধ্য করে, তাই সংক্ষিপ্ত স্ট্রিং একই স্থান গ্রহণ করে। যে কোনও বৃহত্তর এবং ব্যর্থতার জন্য প্রস্তুত। 4) এন্ডিয়ান-নেস। 5) অভ্যন্তরীণ বাইটের জিরো সূচনা।


আপনার জমা দেওয়ার জন্য আপনাকে ধন্যবাদ. আপনি তৃতীয় স্থান আছে। অভিনন্দন!
বলভ

2

গোক্ষুরা

class Program
    var _target as List<of bool?> = [true, true, false, true, true, nil, nil, false, true, nil, true]
    def main
        .sort(_target)
        print _target
    def sort(target as List<of bool?>)
        for i in target.count, for n, in target.count -1, if target[n] <> target[n + 1] and (target[n] or target[n + 1] == nil), target[n], target[n + 1] = target[n + 1], target[n]
            #should return sorted as [nil][false][true]

ওহে প্রিয়, আমি ভুলভাবে নিযুক্ত করেছি বলে মনে হচ্ছে n... এবং এই সমস্ত কমা এখানে কীভাবে পেল !?

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


আপনার জমা দেওয়ার জন্য আপনাকে ধন্যবাদ. আপনি তৃতীয় স্থান আছে। অভিনন্দন!
বলভ

2

জাভা

public final class WeirdSort {
    public static void main(final String[] args) {

        //Random
        final Random random = new Random(441287210);

        //Some numbers:
        final List<Integer> list = new ArrayList<Integer>();
        list.add(9);
        list.add(11);
        list.add(3);
        list.add(5);
        list.add(7);

        //Sort randomly:
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(final Integer o1, final Integer o2) {
                return (o1 - o2) + random.nextInt(10);
            }
        });

        //Print
        for(final Integer i:list) {
            System.out.print(i + " ");
        }
    }
}

Prints: 3 5 7 9 11 

কাজ করে কারণ এই নির্দিষ্ট এলোমেলো মান প্রথম 10 ফলাফলের জন্য '1' প্রদান করে


1
আপনি কোন ভাষা ব্যবহার করেন?
কেনার্ড

জাভা, দুঃখিত তা উল্লেখ করতে ভুলে গেছেন (সম্পাদিত)
রায় ভ্যান রিজন

2

পার্ল

আজকাল ঠিকাদার! তারা কি জানেন না যে <=>(ওরফে "স্পেসশিপ") অপারেটরটি কেবল সংখ্যা বাছাইয়ের জন্য ব্যবহৃত হয়?

এবং তারা অপারেটরদের তুলনা করছেন কেন?

কীভাবে এই কোডটি আমাদের কঠোর পরীক্ষাগুলিও পাস করেছিল ?? !! এমনকি এটি ব্যবহার করে strictএবং warnings!

use strict;
use warnings;

sub asciibetically { 0-($a lt $b) || 0+($a gt $b) || <=><=><=> }
                                                   #  ^  ^  ^
                                                   # What?? How did Perl even compile??!!

my @sorted = sort asciibetically qw( bravo charlie alpha );

print "@sorted";   # "alpha bravo charlie"
                   # And how come it works??!!

পার্ল কেন কম্পাইল করে

একমাত্র আসল <=>অপারেটর মাঝখানে একটি। অন্য দুটি লেখার অন্য একটি উপায় glob("=")। এর অর্থ হল <=><=><=>("মহাকাশ বহর" ডাকনাম) এর মূল্যায়ন করে 0


কেন এটি কাজ করে

asciibeticallyসাবরুটিন স্ট্রিং-তুলনা একটি বাস্তবায়ন cmpঅপারেটর: বাইনারি " cmp" আয় -1, 0অথবা 1কিনা তার উপর নির্ভর করে বাম যুক্তি stringwise কম, তুলনায়, অথবা ডান যুক্তি তার চেয়ে অনেক বেশী সমান।


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