একটি বর্গক্ষেত্রের ডেলাকার্ট সংখ্যা গণনা করুন


12

চ্যালেঞ্জ: যে কোনও ভাষায় একটি ডেলাকার্ট সংখ্যা গণনা কার্যকর করুন। সংক্ষিপ্ততম কোড জিতেছে।

স্বতন্ত্র পূর্ণসংখ্যার একটি প্রদত্ত বর্গাকার ম্যাট্রিক্সের জন্য 1..n² (সম্ভাব্য পার্শ্ব দৈর্ঘ্য এন 3 এবং 27 মধ্যে অন্তত), তার Delacorte নম্বর পণ্য এর সমষ্টি GCD (ক, খ) × distance² (ক, খ) প্রতিটি স্বতন্ত্র জন্য পূর্ণসংখ্যার জোড় {a, b}}

নিম্নলিখিত উদাহরণটি 160 এর একটি ডেলাকার্ট সংখ্যা সহ 3 × 3 বর্গ দেখায়।

3 2 9
4 1 8
5 6 7

এই স্কোয়ারে আমাদের গণনা করার জন্য 36 টি স্বতন্ত্র জুড়ি রয়েছে, উদাহরণস্বরূপ জোড়া 4 এবং 6: গিসিডি (4, 6) × দূরত্ব ² (4, 6) = 4

পরীক্ষার জন্য আরেকটি উদাহরণ বর্গ - এর 5957 এর ডেলাওর্ট সংখ্যা রয়েছে:

10  8 11 14 12
21  4 19  7  9
 5 13 23  1 16
18  3 17  2 15
24 22 25  6 20

ডেলাকার্ট নম্বরগুলি এই প্রোগ্রামিং প্রতিযোগিতা থেকে নেওয়া হয়েছে - আরও তথ্যের জন্য এখানে দেখুন ... প্রতিযোগিতাটি 2015 সালের জানুয়ারিতে শেষ হয়েছে It এটি দুর্দান্ত মজাদার ছিল!

নিয়মাবলী:

প্রয়োজনীয় লাইন 1 টি চর হিসাবে গণনা বিরতি দেয়। আপনি আপনার গল্ফযুক্ত সমাধানটি লাইন বিরতিতে পোস্ট করতে পারেন তবে সেগুলি কেবল সেই ভাষায় প্রয়োজন হলে গণনা করা হয়।

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

namespace System
{
    using Collections.Generic;
    using I=Int32; //this complete line counts
    class Delacorte
    {
        static I l(I[]a){return a.Length;} //of course this complete line counts

        static void CalculateSquare(int[] a, out int r)
        {
            r=0;for(I i=l(a);i-->0;)r+=a[i]; //here only this line counts
        }

        static void Main()
        {
            int result;
            CalculateSquare(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, out result);
            Console.Write(result); //should output 140 for the example
            Console.ReadKey();
        }
    }
}

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

আরও বেশি প্রস্তুতির জন্য এখানে বিনামূল্যে অনুমতি দেওয়া হয়েছে:

using System;
unsafe class Delacorte
{
    static void CalculateSquare(int* a, out int r)
    {
        r=0;while(*a>0)r+=*a++; //only this line counts
    }

    static void Main()
    {
        var input = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; //adding a terminator
        int result;
        fixed (int* a = &input[0]) //necessary in C#
            CalculateSquare(a, out result);
        Console.Write(result);
        Console.ReadKey();
    }
}

আপনার দীর্ঘ প্রস্তুতি এই নিয়মের অনুধাবনে রয়েছে কিনা তা নিশ্চিত না হলে বা প্রতারণা বলা যেতে পারে, কেবল জিজ্ঞাসা করুন :)


মনে হচ্ছে, পাইথনের ক্ষেত্রে সবগুলিই কি নিখরচায়? এটি কিছু অদ্ভুত অপ্টিমাইজেশনের কারণ হতে পারে ...
ফালকো

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

@ অপ্টিমাইজার: দূরত্ব ফাংশনের অর্থ লিঙ্কটিতে কিছুটা লুকানো রয়েছে : এটি দুটি ক্ষেত্রের মধ্যে ইউক্যালিডিয়ান দূরত্বের বর্গক্ষেত্র।
ফালকো

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

এবং আমি অবশ্যই বলতে পারি যে এটি একটি আইনী প্রশ্ন হলেও মনে হচ্ছে আপনি শেষ পর্যন্ত সেই প্রতিযোগিতায় প্রবেশ করতে সক্ষম হতে এখানে পোস্ট করেছেন;)
অপ্টিমাইজার

উত্তর:


6

এপিএল (38)

{.5×+/∊∘.{(∨/Z[⍺⍵])×+/⊃×⍨⍺-⍵}⍨⊂¨⍳⍴Z←⍵}

এটি এমন একটি ফাংশন যা ম্যাট্রিক্সকে তার সঠিক যুক্তি হিসাবে গ্রহণ করে, যেমন:

      sq5←↑(10 8 11 14 12)(21 4 19 7 9)(5 13 23 1 16)(18 3 17 2 15)(24 22 25 6 20)
      sq5
10  8 11 14 12
21  4 19  7  9
 5 13 23  1 16
18  3 17  2 15
24 22 25  6 20
      {.5×+/∊∘.{(∨/Z[⍺⍵])×+/⊃×⍨⍺-⍵}⍨⊂¨⍳⍴Z←⍵}sq5
5957

ব্যাখ্যা:

  • ⊂¨⍳⍴Z←⍵: ম্যাট্রিক্স এ সঞ্চয় Z। সমন্বয়গুলির প্রতিটি সম্ভাব্য জুটির একটি তালিকা তৈরি করুন Z
  • ∘.{... }⍨: সমন্বয়গুলির প্রতিটি জোড়া, সমন্বয়গুলির প্রতিটি জুটির সাথে মিলিত:
    • +/⊃×⍨⍺-⍵: গণনা distance^2: দ্বিতীয় থেকে স্থানাঙ্কের প্রথম জোড়াটি বিয়োগ করুন, উভয়কে নিজের দ্বারা গুণিত করুন এবং ফলাফলের যোগফল দিন
    • ∨/Z[⍺⍵]: Zউভয় জোড় স্থানাঙ্কের জন্য নম্বর পান এবং জিসিডি সন্ধান করুন
    • ×: একে অপরের দ্বারা তাদের গুণ
  • +/∊: এর ফলাফলের উপাদানগুলি যোগ করুন
  • .5×: ০.৫ দিয়ে গুণ করুন (কারণ আমরা প্রতিটি ননজারো জোড় আগে দুবার গণনা করেছি)

এটি যদি আমরা ইউটিএফ -8 বাইট ব্যবহার করে গণনা করি তবে এটি 72 বাইট হবে।
কেনেটিএম

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

@ মারিনাস, এটি যুক্তিযুক্ত বলে মনে হচ্ছে। গাণিতিকের ইউনিকোড চরগুলি সম্পর্কে আপনার কী ধারণা?
মাফ-সফট

@ মাফ-সফট: ভাল, যদি এমন একটি বিদ্যমান এনকোডিং থাকে যার দ্বারা সমস্ত অক্ষর বাইটের মধ্যে ফিট হয় (যাতে এতে 'বিশেষ' এবং 'সাধারণ' অক্ষর উভয়ই অন্তর্ভুক্ত থাকে, তাই 256 এর বেশি অনন্য হতে পারে না অক্ষর), তারপরে এটি অক্ষর প্রতি এক বাইট হিসাবে গণনা করা যেতে পারে। যদি না হয়, তবে তা পারে না। তবে, যদি ম্যাথমেটিকা ​​128 এরও কম স্বতন্ত্র ইউনিকোড অক্ষর ব্যবহার করে তবে এগুলি তুচ্ছভাবে বাইটের উপরের অংশে ম্যাপ করা যেতে পারে, নীচের অর্ধেকটিতে ASCII রয়েছে। [1/2]।
মেরিনাস

@ মাফ-সফট: যদিও এটি একটি উপন্যাসের এনকোডিং (language "ভাষা") হবে, যদিও আপনাকে একটি অনুবাদক প্রোগ্রাম সরবরাহ করতে হবে এবং নিয়ম অনুসারে আপনি কেবল এটি অনুবাদক প্রোগ্রামের চেয়ে নতুন প্রশ্নগুলিতে ব্যবহার করতে পারেন এতে বলা হয়েছে যে আপনি কেবল সেই ভাষাগুলিতেই প্রশ্নের উত্তর দিতে পারবেন যা প্রশ্নের পূর্বাভাস দেয় (এটি প্রশ্নের সমাধানের জন্য 1-বাইট কমান্ডের সাহায্যে কোনও ভাষা সংজ্ঞায়িত কাউকে আটকাতে পারে)। [2/2]
মেরিনাস

5

গণিত (83 82 79 69 67 66)

প্রস্তুতি

a={{10,8,11,14,12},{21,4,19,7,9},{5,13,23,1,16},{18,3,17,2,15},{24,22,25,6,20}}

কোড

#/2&@@Tr[ArrayRules@a~Tuples~2/.{t_->u_,v_->w_}->u~GCD~w#.#&[t-v]]

যদি আমরা ইউনিকোড অক্ষর ব্যবহার করে গণনা করি: 62 :

Tr[ArrayRules@a~Tuples~2/.{t_u_,v_w_}u~GCD~w#.#&[t-v]]〚1〛/2

: - আপনি 'এর হল UTF সংস্করণ ব্যবহার করতে পারেন> `
ফিটফাট

@ সুইশ ->2 টি অক্ষর নেয় এবং 1 টি অক্ষর নেয়, তবে ->2 বাইট নেয় এবং ইউটিএফ -8 এ 3 বাইট নেয়। সুতরাং এটি মেট্রিকগুলির উপর নির্ভর করে আরও দীর্ঘ হতে পারে।
কেনেটিএম

); ওয়েল, APL সমাধান তাকান তাই আমি অনুমান মেট্রিক এই এক অক্ষরের হয়
ফিটফাট

@ সুইশ এটি ইউপিএফ -8 বাইট না বলা থাকলে ডিফল্ট হ'ল ওপিকে স্পষ্ট করে দেওয়া উচিত :)
কেনেটিএম

@ কেনিটিএম - আমি নিশ্চিত না সেরাটি কী। আমি এই সাইটে সাধারণ বিষয়গুলি অনুসরণ করতে চাই। বর্তমানে আমার সন্ধান করার মতো সময় নেই। কেউ কিছু লিঙ্ক সাহায্য করতে পারে? আপনি ওপি মন্তব্যে উল্লিখিত চ্যাটটিও ব্যবহার করতে পারেন।
মাফ-সফট

5

পাইথন - 128 112 90 89 88

প্রস্তুতি:

import pylab as pl
from fractions import gcd
from numpy.linalg import norm
from itertools import product

A = pl.array([
    [10,  8, 11, 14, 12],
    [21,  4, 19,  7,  9],
    [ 5, 13, 23,  1, 16],
    [18,  3, 17,  2, 15],
    [24, 22, 25,  6, 20]])

ডেলাকার্ট নম্বর (গণনা করা রেখা) গণনা:

D=sum(gcd(A[i,j],A[m,n])*norm([m-i,n-j])**2for j,n,i,m in product(*[range(len(A))]*4))/2

আউটপুট:

print D

ফলাফল:

5957

2
আপনি উভয় forলুপগুলি একক জেনারেটরে এবং sumএটি একবারে ভেঙে ফেলতে পারেন । এছাড়াও, একটি অনুলিপি তৈরি করার জন্য তারাযুক্ত অ্যাসাইনমেন্ট ব্যবহার করে P(R,R)আপনি একটি পরিবর্তনশীলকে সংরক্ষণ করতে পারেন *x,=product(R,R)। আরও ভাল, আপনি এটিকে চারগুণ পণ্য হিসাবে তৈরি করতে পারেন product(R,R,R,R)এবং ঠিক করতে পারেন for j,n,i,m in product(*[R]*4)
xnor

@ এক্সনর: দুর্দান্ত! *[R]*4আমি নিজে যা খুঁজছিলাম তা কিন্তু কাজ করতে পেল না।
ফালকো

1
আপনার প্রস্তুতি যেমন বাইট গণনা অনুসারে গণনা করা হচ্ছে না, আপনি কি from fractions import gcd as gগুরুত্বপূর্ণ বিভাগে বাইট সংরক্ষণ করার মতো কিছু করতে পারবেন না ?
ফ্লিপট্যাক

3

পাইথ 43

এই উত্তরটি আরও অবশ্যই গল্ফ করা যেতে পারে; আমি বিশেষত দূরত্বের গণনা পছন্দ করি না।

K^lJ.5VJFdUN~Z*i@JN@Jd+^-/dK/NK2^-%dK%NK2;Z

এটি সেট আপ করতে, ভেরিয়েবল জেতে লিনিয়ার-ized অ্যারে সংরক্ষণ করুন writing আপনি এটি লিখে এটি করতে পারেন:

J[3 2 9 4 1 8 5 6 7)

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

একটি ভাসা আউটপুট। আমি মনে করি এটি বৈধ, দয়া করে আমাকে বলুন আমি কোনও নিয়ম ভঙ্গ করেছি কিনা :)

ব্যাখ্যা:

                                             : Z=0 (implicit)
K^lJ.5                                       : K=sqrt(len(J))
      VJ                                     : for N in range(len(J))
        FdUN                                 : for d in range(N)
            ~Z*                              : Z+= the product of
               i@JN@Jd                       : GCD(J[N],J[d])
                      +^-/dK/NK2^-%dK%NK2    : (d/K-N/K)^2 + (d%K-N%K)^2 (distance)
                                         ;Z  : end all loops, and print Z

বাহ, আমি শেষ পর্যন্ত এপিএল দিয়ে পাইথকে পরাজিত করেছি।
মেরিনাস

@ মারিনুস হাহাহা, আমি এখনও চেষ্টা করছি, তবে আমি মনে করি আপনি আমাকে পিটিয়ে
ফেলেছেন

বাহ, এ তো পাগল। আমি এখন ডক্টটিএসটিএসটি পড়ছি তবে পড়তে আমার খুব কষ্ট হচ্ছে!
রুবিক

@ রুবিক কমপক্ষে এটি এপিএল নয়: ডকটি 100% নির্ভুল নয় কারণ এই পুরো ভাষাটি একজন লোক দ্বারা তৈরি করা হয়েছে: ইস্যাক । আপনার যদি প্রশ্ন থাকে তবে নির্দ্বিধায় আমাকে / তাকে
আড্ডায়

2

সিজেম, 55

q~:Q__,mqi:L;m*{_~{_@\%}h;\[Qf#_Lf/\Lf%]{~-_*}/+*}%:+2/

ম্যাট্রিক্সকে নিম্নলিখিত বিন্যাসে STDIN হিসাবে গ্রহণ করে:

[10  8 11 14 12
 21  4 19  7  9
  5 13 23  1 16
 18  3 17  2 15
 24 22 25  6 20]

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


আমি মনে করি আপনি ম্যাট্রিক্সটি হার্ড-কোড {}করতে পারেন এবং স্টিডিন ব্যবহার না করে একটি ব্লক তৈরি করতে ব্যবহার করতে পারেন। এছাড়াও, আপনি ম্যাট্রিক্সকে এক-মাত্রিক অ্যারেতে ফেলে দিচ্ছেন? আমি মনে করি আপনি ইতিমধ্যে ফর্ম্যাট করা ম্যাট্রিক্স নিতে পারেন, ওপি এর উদাহরণগুলি দেখুন। (আমি সিজেমকে ভাল করে চিনি না, সুতরাং এটি একটি
নুনের

ম্যাট্রিক্স পড়া এবং এটিকে একক তালিকায় রূপান্তর করা q~]অংশ। যা যখন আমি হার্ড কোড করি এবং একটি ব্লক (আমার ধারণা) ব্যবহার করি তার তুলনায় এটি সংক্ষিপ্ত
অপ্টিমাইজার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.