এটি কি সিকোয়েন্স গ্রাফিক?


17

একজন গ্রাফিক ক্রম ধনাত্মক পূর্ণসংখ্যা প্রতিটি একটি একটি নোডের জন্য প্রান্ত সংখ্যা বাচক একটি ক্রম সহজ গ্রাফ । উদাহরণস্বরূপ ক্রমটি 2 1 13 টি নোডের সাথে 2 টি কিনার এবং একটি সংযোগের সাথে 2 সহ একটি গ্রাফকে বোঝায়।

সমস্ত ক্রম গ্রাফিক ক্রম নয়। উদাহরণস্বরূপ 2 1কোনও গ্রাফিক ক্রম নয় কারণ দুটি নোড সংযোগ করার কোনও উপায় নেই যাতে তাদের একটিতে দুটি কিনারা থাকে।


কার্য

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

ক্রমটি গ্রাফিক ক্রম কিনা তা আপনাকে আউটপুট করতে হবে। সত্যবাদী মান যদি এটি অন্যথায় মিথ্যা মান হয়।


লক্ষ্য

এটি যা আপনার প্রোগ্রামে বাইট সংখ্যা হ্রাস করতে হয়

Testcases

সর্বাধিক থেকে সাজানো হয়েছে

                  -> True
3 3 3 2 2 2 1 1 1 -> True
3 3 2 2 1 1       -> True
3 3 2             -> False
8 1 1 1 1 1 1 1 1 -> True
1 1 1 1           -> True
1 1 1             -> False
9 5 4             -> False

আমরা কি ধরে নিতে পারি যে ইনপুট তালিকাটি খালি থাকবে না?
পিটার টেলর 21

@ পিটারটেলর যদি আপনি চান আপনি 0খালি ক্রমের জন্য একটি স্ট্রিং নিতে পারেন
পোস্ট রক গার্ফ হান্টার

উত্তর:


7

গণিত, 25 বাইট

<<Combinatorica`
GraphicQ

হ্যাঁ, আরেকটি বিল্টিন (ইতিবাচক পূর্ণসংখ্যার তালিকা হিসাবে ইনপুট নেয়)) Combinatoricaপ্যাকেজটি লোড করা প্রয়োজন ।


7

পাইথন 2 (প্রস্থান কোড), 53 বাইট

l=input()
while any(l):l.sort();l[~l[-1]]-=1;l[-1]-=1

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

প্রস্থান কোড মাধ্যমে আউটপুট।

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


5

সিজেএম (20 বাইট)

{{W%(Wa*.+$_0a<!}g!}

অনলাইন পরীক্ষার স্যুট সহ আমার কয়েকটি প্রচেষ্টায় বাগগুলি ধরতে আমি আরও কয়েকটি অতিরিক্ত পরীক্ষা যোগ করেছি।

এটি একটি বেনামী ব্লক (ফাংশন) যা স্ট্যাক এবং পাতার উপর পূর্ণসংখ্যার একটি অ্যারের লাগে 0বা 1স্ট্যাক। এটি ধরে নেওয়া হয় যে ইনপুটটি সাজানো বাছাই করা।

ইনপুট অ্যারেটি খালি নাও হতে পারে, তবে খালি ইনপুটগুলির বিষয়ে আমার প্রশ্নের প্রশ্নের ওপির উত্তর অনুসারে শূন্য থাকতে পারে।

ব্যবচ্ছেদ

এটি হাভেল-হাকিমি অ্যালগরিদম বাস্তবায়নে ওপির উত্তর অনুসরণ করে ।

{          e# Define a block
  {        e#   Do-while loop (which is the reason the array must be non-empty)
           e#     NB At this point the array is assumed to be non-empty and sorted
    W%     e#     Reverse
    (Wa*.+ e#     Pop the first element and subtract 1 from that many subsequent
           e#     elements. If there aren't enough, it adds -1s to the end. That's
           e#     the reason for using W (i.e. -1) and .+ instead of 1 and .-
    $      e#     Sort, restoring that part of the invariant
    _0a<!  e#     Continue looping if array >= [0]
           e#     Equivalently, break out of the loop if it starts with a negative
           e#     number or is empty
  }g
  !        e#   Logical not, so that an empty array becomes truthy and an array
           e#   with a negative number becomes falsy
}

2

পাইথন 2 , 108 বাইট

পাইথনে আমার বাস্তবায়ন এখানে। আমি নিশ্চিত এটি আরও অভিজ্ঞ গল্ফার বা গণিতবিদ দ্বারা মারতে পারেন। এটি হাভেল-হাকিমি অ্যালগরিদম প্রয়োগ করে।

def f(x):p=x[0]+1;x=sorted(x+[0]*p)[::-1];return~x[-1]and(p<2or f(sorted([a-1for a in x[1:p]]+x[p:])[::-1]))

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


[2,1,1]রিটার্ন দেয় Trueকিন্তু [1,1,2]রিটার্ন দেয় 0- সম্পাদনা: সবেমাত্র দেখেছে যে আপনার অনুমানটি বলেছে যে আপনি এটি বাছাই করতে পারেন (আমি পরীক্ষার কেসটি দেখেছি 9 4 5)।
জোনাথন অ্যালান

2

হাস্কেল , 102 98 95 94 বাইট

import Data.List
f(x:r)=length r>=x&&x>=0&&(f.reverse.sort$take x(pred<$>r)++drop x r)
f x=1<3

এটি অনলাইন চেষ্টা করুন! ব্যবহার:, f [3,3,2,2,1,1]রিটার্ন Trueবা False। অনুমান যে ইনপুটটিতে কোনও জিরো নেই এবং চ্যালেঞ্জের অনুমতি অনুসারে অবতরণ ক্রমে সাজানো হয়েছে।

ব্যাখ্যা:

import Data.List          -- import needed for sort
f (x:r) =                 -- x is the first list element, r the rest list
  length r >= x           -- the rest list r must be longer or equal x
  && x >= 0               -- and x must not be negative
  && (f .                 -- and the recursive call of f
      reverse . sort $    --    with the descendingly sorted list
      take x(pred<$>r)    --    of the first x elements of r subtracted by 1
      ++ drop x r         --    and the rest of r
     )                    -- must be true
f [] = True               -- if the list is empty, return True

সম্পাদনা: এটি অন্যান্য উত্তরে উল্লিখিত হাভেল-হাকিমির অনুসরণ করে মনে হচ্ছে, যদিও উত্তরটি লেখার সময় আমি এই অ্যালগরিদম সম্পর্কে জানতাম না।


length r < x[1,0]সত্য হিসাবে ফিরে আসবে ঠিক তেমন সঠিক নয়, তবে এক এবং শূন্য প্রান্ত সহ 2 টি নোডের সাথে কোনও সাধারণ গ্রাফ নেই।
জোনাথন অ্যালান

@ জোনাথান অ্যালান আপনি ঠিক বলেছেন, তবে চ্যালেঞ্জটি বলেছে "আপনি অনুমান করতে পারেন ইনপুটটিতে কোনও জিরো থাকবে না।"
লাইকনি

ওহ ঠিক আছে, এটি একটি অদ্ভুত সিদ্ধান্তের মতো বলে মনে হচ্ছে কারণ এটি সংজ্ঞার সাথে মানায় না।
জোনাথন অ্যালান

@ জোনাথান অ্যালান আমি এগুলি কেস পরিচালনা করতে এটি পরিবর্তন করেছি এবং এটি করে 4 বাইট সংরক্ষণও করেছি।
লাইকনি

এটা ভালো! : ডি
জোনাথন অ্যালান

2

জেলি , 12 বাইট

ṢṚḢ-€+ƊƊƬ>-Ȧ

একটি লিখিত লিঙ্ক একটি তালিকা গ্রহণ করে যা ফলস্বরূপ 1উত্তরগুলি অন্যথায় যদি ধারাবাহিক হয় 0

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

ṢṚḢ-€+ƊƊƬ>-Ȧ - Link: list of integers
        Ƭ    - collect up while results change:
       Ɗ     -   last three links as a monad i.e. f(L):
Ṣ            -     sort                      [min(L),...,max(L)]
 Ṛ           -     reverse                   [max(L),...,min(L)]
      Ɗ      -     last three links as a monad i.e. f([a,b,c,...,x]):
  Ḣ          -       pop head                          a
   -€        -       -1 for each                       [-1,-1,...,-1] (length a)
     +       -       add to head result (vectorises)   [b-1,c-1,...,x-1,-1,-1,...]
         >-  - greater than -1? (vectorises)
           Ȧ - Any and all? (0 if empty or contains a 0 when flattened, else 1)

1

05 এ বি 1 ই , 26 25 বাইট

D0*«¹v{R¬U¦X¹gn‚£`s<ì}0QP

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

ব্যাখ্যা

D0*«                       # extend the input list with as many zeroes as it has elements
    ¹v                     # len(input) times do:
      {R                   # sort in descending order
        ¬U¦X               # extract the first element of the list
            ¹gn‚           # pair it with len(input)^2
                £          # partition the list in 2 parts, the first the size of the 
                           # extracted element, the second containing the rest of the list
                 `         # split these list to stack (the second on top)
                  s<       # decrement the elements of the first list by 1
                    ì      # prepend it to the rest of the list
                     }     # end loop
                      0Q   # compare each element in the resulting list with 0
                        P  # reduce list by multiplication

1

জাভাস্ক্রিপ্ট (ES6), 82 80 76 বাইট

f=([$,..._])=>1/$?_.length>=$&$>=0&f(_.map(a=>a-($-->0)).sort((a,b)=>b-a)):1

অনেক বাইট সংরক্ষণের জন্য ETH প্রডাকশন ধন্যবাদ!

ব্যবহার

f=([$,..._])=>1/$?_.length>=$&$>=0&f(_.map(a=>a-($-->0)).sort((a,b)=>b-a)):1
f([3,3,3,2,2,2,1,1,1])

আউটপুট

1

আপনি প্রতিস্থাপন করতে পারেন map((a,b)=>b<$?a-1:a)সঙ্গে map(a=>a-($-->0))4 সংরক্ষণ বাইট।
আর্নল্ড

1

আর , 20 বাইট

igraph::is_graphical

ম্যাথমেটিকাগুলি বিল্ট-ইনগুলির সাথে একমাত্র ভাষা নয়! ;-)

igraphপ্যাকেজটি ইনস্টল করা প্রয়োজন। পূর্ণসংখ্যার ভেক্টর হিসাবে ইনপুট নেয়।


0

রুবি , 90 বাইট

এই প্রশ্নটি থেকে পোর্ট করা যা এর সদৃশ হয়ে গেছে। হ্যাভেল-হাকিমি ব্যবহার করুন যেহেতু সেই প্রশ্নের মধ্যেই এটি উল্লেখ করা হয়েছিল।

->a{b=1;(a.sort_by!(&:-@);i=a.shift;a.map!{|e|i>0&&e>0?(i-=1;e-1):e};b&&=i<1)while[]!=a;b}

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


0

05 এ বি 1 , 19 বাইট

[D{RćD1‹#Å0<0ζO})dW

জোনাথন অ্যালান এর জেলি উত্তর বন্দর অ্যালান , তাই তাকে upvote নিশ্চিত করুন !!

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

[            # Start an infinite loop:
 D           #  Duplicate the current list
             #  (which is the implicit input-list in the first iteration)
  {R         #  Sort it from highest to lowest
    ć        #  Extract the head; pop and push the remainder and head
     D1     #  If the head is 0 or negative:
        #    #   Stop the infinite loop
     Å0<     #  Create a list of the head amount of -1
        0ζ   #  Zip/transpose it with the remainder list, with 0 as filler
          O  #  Sum each pair
})           # After the loop: wrap everything on the stack into a list
  d          # Check for each value if it's non-negative (>= 0)
             # (resulting in 1/0 for truthy/falsey respectively)
   W         # Get the flattened minimum (so basically check if none are falsey)
             # (which is output implicitly as result)

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