চার বর্ণের উপপাদ্য


13

চার রঙ উপপাদ্য যুক্তরাষ্ট্র কোনো তুলনায় আরো চার রং একটি মানচিত্রের অঞ্চলে রঙ করার প্রয়োজন হয়।

চ্যালেঞ্জ

রাজ্য সীমানার একটি তালিকা দেওয়া প্রতিটি রাজ্যের আইডিকে একটি রঙ বরাদ্দ করে যাতে কোনও দুটি সংলগ্ন রাজ্যের রঙ একই না হয়। আউটপুটটি কোনও সিএসএস স্টাইলশীট হওয়া উচিত যা রাজ্যের 2 বর্ণের আইডি কোডকে রঙ দেয়। এখানে একটি এসভিজি মানচিত্র রয়েছে যা স্টাইলশীট প্রয়োগ করা যেতে পারে। http://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg

নিয়ম

  • সংক্ষিপ্ততম কোড জিতেছে
  • যে কোনও রাজ্যের সীমানা তালিকা ব্যবহার করা যেতে পারে
  • শুধুমাত্র 4 টি রঙ ব্যবহার করা যেতে পারে।
  • রাজ্য তালিকা হার্ডকড করা যেতে পারে

পরামর্শ: fill:উদাহরণস্বরূপ রঙ পরিবর্তন করতে CSS বৈশিষ্ট্যটি ব্যবহার করুন#AL{fill:green}

এখানে রাষ্ট্রের সীমানার তালিকা রয়েছে is

AL-FL
AL-GA
AL-MS
AL-TN
AR-LA
AR-MO
AR-MS
AR-OK
AR-TN
AR-TX
AZ-CA
AZ-CO
AZ-NM
AZ-NV
AZ-UT
CA-NV
CA-OR
CO-KS
CO-NE
CO-NM
CO-OK
CO-UT
CO-WY
CT-MA
CT-NY
CT-RI
DC-MD
DC-VA
DE-MD
DE-NJ
DE-PA
FL-GA
GA-NC
GA-SC
GA-TN
IA-MN
IA-MO
IA-NE
IA-SD
IA-WI
ID-MT
ID-NV
ID-OR
ID-UT
ID-WA
ID-WY
IL-IA
IL-IN
IL-KY
IL-MO
IL-WI
IN-KY
IN-MI
IN-OH
KS-MO
KS-NE
KS-OK
KY-MO
KY-OH
KY-TN
KY-VA
KY-WV
LA-MS
LA-TX
MA-NH
MA-NY
MA-RI
MA-VT
MD-PA
MD-VA
MD-WV
ME-NH
MI-OH
MI-WI
MN-ND
MN-SD
MN-WI
MO-NE
MO-OK
MO-TN
MS-TN
MT-ND
MT-SD
MT-WY
NC-SC
NC-TN
NC-VA
ND-SD
NE-SD
NE-WY
NH-VT
NJ-NY
NJ-PA
NM-OK
NM-TX
NM-UT
NV-OR
NV-UT
NY-PA
NY-VT
OH-PA
OH-WV
OK-TX
OR-WA
PA-WV
SD-WY
TN-VA
UT-WY
VA-WV

আমরা কি রাষ্ট্রের সীমানা তালিকা হার্ডকোড করতে পারি?
নিনজাবিয়ারমনেকি

@ এসএসএল হ্যাঁ, হার্ডকোড রাষ্ট্রের সীমানা ঠিক আছে।
কাইল কে

@ স্টিভওয়ার্লিল আপনি যদি রঙ পরিবর্তন করার আরও ভাল পদ্ধতির কথা ভাবতে পারেন তবে দুর্দান্ত। আমি কীভাবে সিএসএস ব্যবহার করব তা দেখিয়ে একটি উদাহরণ যুক্ত করেছি।
কাইল কে ২

এর জন্য কি নিজেকে চার বর্ণের উপপাদ্য প্রমাণ পুনরুত্পাদন করার প্রয়োজন হবে না? যেহেতু আপনি প্রতিটি সম্ভাব্য কেস পরিচালনা করতে হবে?
ব্যারিকার্টার

1
যদি কোনও রাজ্যের সীমানা আরও 3 টিরও বেশি রাজ্যের স্পর্শ করে তবে এই উপপাদ্যটি ভুল প্রমাণিত হবে না?
অপ্টিমাইজার

উত্তর:


4

পাইথন, 320 টি অক্ষর

import sys,random
S=[]
E={}
for x in sys.stdin:a=x[:2];b=x[3:5];S+=[a,b];E[a,b]=E[b,a]=1
C={0:0}
while any(1>C[s]for s in C):
 C={s:0for s in S};random.shuffle(S)
 for s in S:
    A=set([1,2,3,4])-set(C[y]for x,y in E if x==s)
    if A:C[s]=random.choice(list(A))
for s in C:print'#%s{fill:%s}'%(s,' bglrloieulmdede'[C[s]::4])

এলোমেলোভাবে অ্যালগরিদম ব্যবহার করে। ইতিমধ্যে রঙ করা হয়েছে এমন সংলগ্ন রাজ্যের সাথে দ্বন্দ্ব না করে এমন একটি রঙ নির্বাচন করে র্যান্ডম ক্রমে রাজ্যগুলিকে রঙগুলি বরাদ্দ করুন। প্রদত্ত ইনপুটটিতে এক সেকেন্ডের দশমাংশে কাজ করা বলে মনে হচ্ছে।

উদাহরণ আউটপুট:

$ 4color.py < stategraph
#WA{fill:red}
#DE{fill:gold}
#DC{fill:blue}
#WI{fill:blue}
#WV{fill:red}
#FL{fill:lime}
#WY{fill:gold}
#NH{fill:red}
#NJ{fill:lime}
#NM{fill:gold}
#TX{fill:red}
#LA{fill:blue}
#NC{fill:blue}
#ND{fill:gold}
#NE{fill:blue}
#TN{fill:red}
#NY{fill:gold}
#PA{fill:blue}
#RI{fill:gold}
#NV{fill:red}
#VA{fill:gold}
#CO{fill:red}
#CA{fill:gold}
#AL{fill:blue}
#AR{fill:gold}
#VT{fill:lime}
#IL{fill:red}
#GA{fill:gold}
#IN{fill:lime}
#IA{fill:gold}
#OK{fill:blue}
#AZ{fill:lime}
#ID{fill:lime}
#CT{fill:red}
#ME{fill:blue}
#MD{fill:lime}
#MA{fill:blue}
#OH{fill:gold}
#UT{fill:blue}
#MO{fill:lime}
#MN{fill:red}
#MI{fill:red}
#KS{fill:gold}
#MT{fill:blue}
#MS{fill:lime}
#SC{fill:red}
#KY{fill:blue}
#OR{fill:blue}
#SD{fill:lime}

উদাহরণটি এসজিগিতে আটকানো হয়েছে


tanদৃশ্যত একটি সমর্থিত এসভিজি রঙ। লজ্জাজনক যে আপনি ::4কৌতুকের সাহায্যে কেবল একটি তিন রঙের পেতে পারেন ।
পিটার টেলর

1
@ পিটারটেলর: ট্যান দেখতে ভয়ঙ্কর দেখাচ্ছে। পরিবর্তে সোনার ব্যবহারের জন্য মোটামুটি 1 টি অক্ষর।
কীথ র্যান্ডাল

আপনি কি গ্যারান্টি দিতে পারেন যে এই অ্যালগরিদম সর্বদা সসীম সময়ে শেষ হয়ে যায় যদি একটি 4-রঙের সমাধান উপস্থিত থাকে? :)
ব্যারিকার্টার

@ বার্যকার্টার: এটি সম্ভাব্যতা ১ দিয়ে শেষ করার গ্যারান্টিযুক্ত though তবে মানচিত্রের আকারে এটি সময় ব্যয় করতে পারে।
কিথ র্যান্ডাল

@ কিথরান্ডাল আমি এক প্রকারের জ্বালাতনকারী ছিলাম, তবে ... আপনি যদি পুনরাবৃত্তিগুলি পরীক্ষা করেন তবে সঠিক বর্ণের সন্ধান করতে 4 4 (এন -1) পদক্ষেপ নিতে পারে (রঙগুলির প্রতিসাম্যের কারণে এন -1)। যদি আপনি পুনরাবৃত্তিগুলির জন্য পরীক্ষা না করেন তবে এটি আরও বেশি সময় নিতে পারে। আমি সবেমাত্র অসন্তুষ্টিজনক সমাধানটি পেয়েছি, যেহেতু এটি "সত্যই" একটি "যথাযথ" অ্যালগরিদম নয়।
ব্যারিকার্টার

3

প্রোলগ, 309 307 283 অক্ষর

:-initialization m.
a-X:-assert(X);retract(X),1=0.
r:-maplist(get_char,[A,B,E,C,D,F]),(E=F;X=[A,B],Y=[C,D],a-X/Y,a-Y/X,(s/X;a-s/X),(s/Y;a-s/Y),r).
s+[]:- \+ (X*C,writef('#%s{fill:#%w}',[X,C]),1=0).
s+[X|T]:-member(C,[911,191,119,991]),a-X*C,\+ (X/Y,Y*C),s+T.
m:-r,bagof(X,s/X,L),s+L.

অ্যালগোরিদম মানচিত্র পূরণ করতে ব্যাকট্র্যাকিং / গভীরতা-প্রথম অনুসন্ধান ব্যবহার করে।

কিছুটা বেশি পঠনযোগ্য:

:- initialization(main).

% Found on http://awarth.blogspot.de/2008/08/asserts-and-retracts-with-automatic.html
assert2(X) :- assert(X).
assert2(X) :- retract(X), fail.

% Reads all states into clauses "state-State",
% and all connections into "State-Neighbor" and "Neighbor-State".
read_states :-
    % Read a line "AB-CD\n"
    maplist(get_char, [A,B,E,C,D,F]),
    (   A = F;
        State = [A, B],
        Neighbor = [C, D],
        % Memorize the connection between State and Neighbor in both directions.
        assert(State/Neighbor),
        assert(Neighbor/State),
        % Memorize State and Neighbor for the list of states.
        (state/State; assert(state/State)),
        (state/Neighbor; assert(state/Neighbor)),
        % Continue for all lines.
        read_states
    ).

% Print out all colors.
solve([]) :-
    once((
        State*Color,
        writef('#%s{fill:%w}', [State, Color]),
        fail
    )); !.

% Use depth-first search to color the map.
solve([State|FurtherStates]) :-
    member(Color, ['#911', '#191', '#119', '#991']),
    assert2(State*Color),
    \+ (State/Neighbor, Neighbor*Color),
    solve(FurtherStates).

main :-
    read_states,
    bagof(State, state/State, States),
    solve(States).

আবাহন:

cat borders.txt | swipl -q ./fourcolors.pl

ফলাফল (নতুন লাইনের প্রয়োজন নেই):

#AL{fill:#911}#FL{fill:#191}#GA{fill:#119}#MS{fill:#191}#TN{fill:#991}#AR{fill:#911}#LA{fill:#119}#MO{fill:#191}#OK{fill:#119}#TX{fill:#191}#AZ{fill:#911}#CA{fill:#191}#CO{fill:#191}#NM{fill:#991}#NV{fill:#991}#UT{fill:#119}#OR{fill:#911}#KS{fill:#911}#NE{fill:#119}#WY{fill:#911}#CT{fill:#911}#MA{fill:#191}#NY{fill:#119}#RI{fill:#119}#DC{fill:#911}#MD{fill:#191}#VA{fill:#119}#DE{fill:#119}#NJ{fill:#191}#PA{fill:#911}#NC{fill:#911}#SC{fill:#191}#IA{fill:#911}#MN{fill:#191}#SD{fill:#991}#WI{fill:#119}#ID{fill:#191}#MT{fill:#119}#WA{fill:#119}#IL{fill:#991}#IN{fill:#191}#KY{fill:#911}#MI{fill:#911}#OH{fill:#119}#WV{fill:#991}#NH{fill:#911}#VT{fill:#991}#ME{fill:#191}#ND{fill:#911}

একটি এসভিজিতে পোস্ট করা হয়েছে: http://jsbin.com/toniseqaqi/


1

জাভাস্ক্রিপ্ট (ES6) 269 279

ব্যাকট্র্যাকিংয়ের সাথে পুনরাবৃত্তি অনুসন্ধান। List 80 বাইট স্টেট তালিকার পার্সিংয়ের জন্য ব্যয় করেছে।

 F=l=>{
   S=(a,b)=>S[a]=(S[a]||[]).concat(b),
   l.replace(/(..)-(..)/g,(_,a,b)=>S(a,b)+S(b,a)),
   k=Object.keys(S),
   R=(p,c=k[p])=>!c||['blue','gold','red','tan'].some(i=>!c.some(t=>S[t].c==i)&&(c.c=i,R(p+1)||(c.c='')),c=S[c]),
   R(0),
   k.map(k=>console.log('#'+k+'{fill:'+S[k].c+'}'))
 }

Ungolfed

F=l=>{
  var states = {}; // hash table with adiacent list for each state
  S=(a,b)=>states[a]=(states[a]||[]).concat(b);
  l.replace(/(..)-(..)/g,(_,a,b)=>S(a,b)+S(b,a)); // build the hash table from the param list 

  keys = Object.keys(states); // get the list of hashtable keys as an array (the 49 states id)
  Scan=(p)=> // Recursive scan function
  {
    var sId = keys[p]; // in sid the current state id, or undefined if passed last key
    if (!sId) return true; // end of keys, recursive search is finished 
    var sInfo = states[sId]; // in sInfo the aarray of adiacent states id + the color property

    return ['blue','gold','red','tan'].some( (color) => // check the four avaialabe colors
      {
        var colorInUse = sInfo.some( (t) => states[t].color == color); // true if an adiacent state already has the currnet color
        if (!colorInUse) // if the color is usable
        {
          sInfo.color = color; // assign the current color to the current state
          var ok = Scan(p+1); // proceed with the recursive scan on the next state
          if (!ok) // if recursive scan failed, backtrack
          {
            sInfo.color = ''; // remove the assigned color for the current state
          }
          return ok;
        }
      }
    )
  },
  Scan(0), // start scan 
  keys.forEach( (sId) => console.log('#'+sId+'{fill:'+states[sId].color+'}')) // output color list
}

টেস্ট ফায়ারফক্স / Firebug কনসোলে

list = "AL-FL AL-GA AL-MS AL-TN AR-LA AR-MO AR-MS AR-OK AR-TN AR-TX AZ-CA AZ-CO AZ-NM "+
"AZ-NV AZ-UT CA-NV CA-OR CO-KS CO-NE CO-NM CO-OK CO-UT CO-WY CT-MA CT-NY CT-RI "+
"DC-MD DC-VA DE-MD DE-NJ DE-PA FL-GA GA-NC GA-SC GA-TN IA-MN IA-MO IA-NE IA-SD "+
"IA-WI ID-MT ID-NV ID-OR ID-UT ID-WA ID-WY IL-IA IL-IN IL-KY IL-MO IL-WI IN-KY "+
"IN-MI IN-OH KS-MO KS-NE KS-OK KY-MO KY-OH KY-TN KY-VA KY-WV LA-MS LA-TX MA-NH "+
"MA-NY MA-RI MA-VT MD-PA MD-VA MD-WV ME-NH MI-OH MI-WI MN-ND MN-SD MN-WI MO-NE "+
"MO-OK MO-TN MS-TN MT-ND MT-SD MT-WY NC-SC NC-TN NC-VA ND-SD NE-SD NE-WY NH-VT "+
"NJ-NY NJ-PA NM-OK NM-TX NM-UT NV-OR NV-UT NY-PA NY-VT OH-PA OH-WV OK-TX OR-WA "+
"PA-WV SD-WY TN-VA UT-WY VA-WV";
F(list);

আউটপুট

#AL{fill:blue}
#FL{fill:gold}
#GA{fill:red}
#MS{fill:gold}
#TN{fill:tan}
#AR{fill:blue}
#LA{fill:red}
#MO{fill:gold}
#OK{fill:red}
#TX{fill:gold}
#AZ{fill:blue}
#CA{fill:gold}
#CO{fill:gold}
#NM{fill:tan}
#NV{fill:tan}
#UT{fill:red}
#OR{fill:blue}
#KS{fill:blue}
#NE{fill:red}
#WY{fill:blue}
#CT{fill:blue}
#MA{fill:gold}
#NY{fill:red}
#RI{fill:red}
#DC{fill:blue}
#MD{fill:gold}
#VA{fill:red}
#DE{fill:red}
#NJ{fill:gold}
#PA{fill:blue}
#NC{fill:blue}
#SC{fill:gold}
#IA{fill:blue}
#MN{fill:gold}
#SD{fill:tan}
#WI{fill:red}
#ID{fill:gold}
#MT{fill:red}
#WA{fill:red}
#IL{fill:tan}
#IN{fill:gold}
#KY{fill:blue}
#MI{fill:blue}
#OH{fill:red}
#WV{fill:tan}
#NH{fill:blue}
#VT{fill:tan}
#ME{fill:gold}
#ND{fill:blue}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.