क्या यह खोने वाला वर्ग है?


19

एक गेम है जिसे गेट होम कहा जाता है जो शतरंज बोर्ड पर खेला जाता है। इस खेल में एक एकल टुकड़ा है जो दोनों खिलाड़ियों द्वारा बदल दिया जाता है। कुछ नियम हैं कि टुकड़े को कैसे स्थानांतरित किया जा सकता है। एक मोड़ पर एक खिलाड़ी को सकारात्मक n के लिए निम्नलिखित चालों में से एक बनाना चाहिए ।

  • n रिक्त स्थान

  • n रिक्त स्थान पर बाईं ओर

  • n रिक्त स्थान ऊपर और बाईं ओर (एक विकर्ण)

जो खिलाड़ी बोर्ड के शीर्ष बाएं कोने में टुकड़ा ले जाता है, वह खेल जीतता है।

अब हम एक खोने वाले वर्ग की अवधारणा को परिभाषित करेंगे। में इस वीडियो (जहां मैं विचार आया से) एक खोने वर्ग एक वर्ग जो, पर किसी भी खिलाड़ी अपनी बारी शुरू कर एक कदम उनके प्रतिद्वंद्वी एक जीत के लिए मजबूर करने के लिए अनुमति बनाने के लिए मजबूर हो जाएगा के रूप में परिभाषित किया गया है। एक खोने वाले वर्ग का सबसे सरल उदाहरण (1,2) वर्ग होगा। एक टुकड़ा (1,2) निम्नलिखित में से किसी भी स्थान पर जा सकता है।

चित्रण

जिनमें से सभी के पास अगले खिलाड़ी के लिए जीत का सीधा रास्ता है।

यह भी अनुसरण करता है कि किसी भी वर्ग जिसमें हारने वाले वर्ग के लिए एक चाल का रास्ता है, उस खिलाड़ी को एक जीत के लिए मजबूर करने के लिए उस वर्ग पर शुरू करने की अनुमति देता है। इसका मतलब यह है कि कोई भी वर्ग जो खोने वाले वर्ग से दूर नहीं जाता है वह भी एक खोने वाला वर्ग है।

यह हमें खोने वाले वर्ग की इस बल्कि साफ-सुथरी परिभाषा में लाता है:

एक खोने वाला वर्ग एक वर्ग होता है, जहाँ से कोई भी चाल दूसरे खोने वाले वर्ग पर नहीं पहुँच सकती है और (0,0) एक खोने वाला वर्ग होता है।

कार्य

एक मनमाने ढंग से आकार शतरंज बोर्ड पर एक वर्ग के निर्देशांक को देखते हुए अगर यह एक खोने वर्ग है निर्धारित करते हैं। आउटपुट दो मानों में से एक वर्ग को खोने के लिए और दूसरा दूसरों के लिए।

यह इसलिए उत्तर बाइट में कम बाइट के साथ बेहतर स्कोर किए जाएंगे।

परीक्षण के मामलों

यहां सभी नियमित 8 पर 8 शतरंज बोर्ड (0 के साथ चिह्नित) पर हारने वाले वर्ग हैं।

0 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0
1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1

यहाँ काले रंग में चिह्नित वर्गों को खोने के साथ 100 बाय 100 बोर्ड की एक छवि है (प्रत्येक वर्ग 2 पिक्सल 2 पिक्सेल है)।

100 बोर्ड द्वारा 100


2
मुझे नहीं लगता कि पैटर्न खोजने के लिए पर्याप्त परीक्षण मामले हैं। मुझे लगता है कि मैं एक पैटर्न देखता हूं, लेकिन मैं निश्चित रूप से नहीं कह सकता। है 10, 7एक हारी हुई वर्ग? है 10, 8? किस बारे में 15, 11?
DJMcMayhem

1
क्या आप छवि को थोड़ा बड़ा बनाने का मन रखते हैं?
आउटगॉल्फ

1
@WheatWizard का अर्थ था बड़े पिक्सेल ... जैसे 1x1 के बजाय 5x5 पिक्सेल, संभवतः कुछ ग्रिड भी यदि बहुत कठिन न हों (100x100 के लिए btw धन्यवाद)
Outgolfer

2
संबंधित (वापसी इष्टतम चाल या संकेत है कि स्थिति खो रही है)।
ज़र्गब

1
मुझे लगता है कि मनमाने ढंग से बड़े पूर्णांक क्षमता के साथ भी प्रदर्शन में अशुद्धि को रोकने के लिए अस्थायी बिंदु की अनुमति देना सामान्य है ...
जोनाथन एलन

जवाबों:


8

पायथन 3 , 112 50 46 42 बाइट्स

जोनाथन एलन को -4 बाइट्स धन्यवाद !

-2 बाइट्स xnor के लिए धन्यवाद !

lambda r,c:abs(r-c)*(3+5**.5)//2==max(r,c)

इसे ऑनलाइन आज़माएं!

वायथॉफ के खेल में ठंडे पदों के फार्मूले के आधार पर और एक स्पष्ट फॉर्मूला तैयार करने के लिए कुछ संशोधन करना। एक बार जब मैं वास्तव में सूत्र की व्युत्पत्ति के लिए एक उचित कार्यप्रणाली समाप्त करता हूं, तो स्पष्टीकरण भीतर का।


क्या आप एक बाइट या दो 0<=xको नहीं बदल सकते हैं x>0और बचा सकते हैं?
जोनाथन फ्रेच

@JonathanFrech स्थिति को शामिल करने के लिए <=या तो होना चाहिए । >=0, 0
नॉटजैगन

आप सही हैं, केवल एक बाइट को बचाया जा सकता है।
जोनाथन फ्रेच

1
उसी के एक अलग कार्यान्वयन के साथ एक कम बाइट:lambda r,c:int(abs(r-c)*(5**.5+1)**2/4)==max(r,c)
जोनाथन एलन

1
/2//1जैसा दिखता है //2
xnor

5

जेली , 8 बाइट्स

ạ/×ØpḞ⁼Ṃ

इसे ऑनलाइन आज़माएं! , या शीर्ष-बाएँ 60 को ग्रिड के रूप में 60 देखें

कैसे?

वायथॉफ के खेल में एक ठंडा स्थान एक खोने की स्थिति है। निर्देशांक [n,m]जब n = floor(kφ) = floor(mφ) - mया m = floor(kφφ) = ceil(nφ) = n + kकुछ प्राकृतिक संख्या k, और सुनहरे अनुपात के लिए, एक ठंडा स्थान देते हैं φ। पूर्व धारण nसे कम होने पर m; उत्तरार्द्ध जब mसे कम होता है n(दोनों को पकड़े हुए 0,0)।

kइस प्रकार के बीच पूर्ण अंतर नहीं है nऔर mऔर अगर floor(abs(n-m)φ)=min(n,m)स्थिति उत्पन्न होने पर।

ạ/×ØpḞ⁼Ṃ - Link: list, c ([n,m])
 /       - reduce c by:
ạ        -   absolute difference = abs(n-m)
   Øp    - golden ratio yield
  ×      - multiply
     Ḟ   - floor
       Ṃ - minimum of c = min(n,m)
      ⁼  - equal?

2

जावास्क्रिप्ट (ईएस 6), 64 बाइट्स

f=(x,y,p=5**.5/2+.5)=>x<y?f(y,x):y/p%p<1&(y/p%p-x*p%++p)**2<1e-9

अब मैं देख रहा हूं कि यह सबसे अच्छी तकनीक नहीं है, लेकिन मुझे खुद इसके साथ आना पड़ा क्योंकि इस पेज को लोड करने के कुछ ही समय बाद मैंने इंटरनेट खो दिया। (इन इंटरनेट मुद्दों के लिए नहीं तो कुछ समय पहले पोस्ट किया होगा ...)

एक आदर्श दुनिया में, फ्लोट प्रिसिजन एक मुद्दा नहीं होगा और मैं 9 बाइट्स बचा सकता हूं:

f=(x,y,p=5**.5/2+.5)=>x<y?f(y,x):y/p%p<1&y/p%p==x*p%++p

6 और बाइट्स को बचाया जा सकता है यदि जेएस ने पायथन की तुलना में पीछा करने का समर्थन किया:

f=(x,y,p=5**.5/2+.5)=>x<y?f(y,x):y/p%p==x*p%++p<1

0

पायथ, 39 बाइट्स

=SQL?!b0-byytb;q@myd+0.fqyZytZ@Q1)-F_Qh

मैंने इसे एक नामित फ़ंक्शन (ew) के साथ लिखा था, और गोल्फिंग के साथ बेहद आलसी था। आज रात बाद बाइट्स की काफी संख्या में गोल्फ की योजना बनाना

ट्राय / फाल्स को अल्टरनेट करने के लिए मेरे द्वारा तैयार किए गए परीक्षणों के साथ इसे ऑनलाइन आज़माएं

स्पष्टीकरण:

OEIS A005206 में दोहराया संख्याओं के अनुक्रम के अनुसार समाधान मैट्रिक्स के विकर्णों में एक खोने वर्ग होता है । के Lमाध्यम ;से बहुत सीधा पॉलिश अंकन परिभाषित करने के लिए हैy(b)=b-y(y(b-1))

बाकी स्पष्टीकरण इस प्रकार है

=SQL?!b0-byytb;q@myd+0.fqyZytZ@Q1)-F_Qh    Full program, take stdin as [x, y], output True or False to stdout
=SQ                                        Sort input
   L?!b0-byytb;                            Named lambda as explained above
                    +0.f                   Make sequence of first max(x, y) numbers, starting with 0, 
                        qy y               For which are equal 
                          Z tZ             each element and the previous are equal
                myd                        Map this sequence to the y(index), not just index numbers
             q                             Check if are equal 
              @                  )-F_Q     the x-yth element of sequence (x-y represents which diagonal) 
                                     h(Q)  and the lower of [x,y] (Q is added by the interpreter to fix arity issues

0

बैच, 204 बाइट्स

@if %1 lss %2 %0 %2 %1
@if %1==0 exit/b0
@set/au=l=i=0
:g
@set/au+=2+i%%2,l+=1+i%%2
@if %1==%n% if %2==%m% exit/b0
@if %1 leq %n% exit/b1
:l
@set/a"k=3*i^2*i^i,i+=1
@if %k%==0 goto g
@goto l

निकास कोड के माध्यम से लौटता है। स्पष्टीकरण: चूंकि बैच में केवल पूर्णांक अंकगणित है, इसलिए मुझे विशुद्ध रूप से अंकगणितीय समाधान तैयार करना पड़ा। 0,0प्रविष्टि को छोड़कर , वर्ग निर्देशांक खोने के जोड़े निम्नलिखित नियम का पालन करते हैं: यदि अगले 11-फ्री बाइनरी नंबर भी है, तो 3,2अन्यथा जोड़ें 2,1। एक नि: शुल्क 11द्विआधारी संख्या के लिए एक परीक्षण यह है कि जब तीन से गुणा किया जाता है, तो दूसरे शब्दों में कोई कैर्री नहीं होती है (i*2)+i==(i*2)^i। यहाँ पहले कुछ 11बाइनरी नंबर और उनके निर्देशांक हैं:

   0     2,1  + 3,2 =  5,3
   1     5,3  + 2,1 =  7,4
  10     7,4  + 3,2 = 10,6
 100    10,6  + 3,2 = 13,8
 101    13,8  + 2,1 = 15,9
1000    15,9  + 3,2 = 18,11
1001    18,11 + 2,1 = 20,12
1010    20,12 + 3,2 = 23,14

आदि रहस्यमय रूप से यह नियम अनुक्रमों को पूरक बनाने के लिए पर्याप्त है। यह तब तक अनुक्रम की गणना करने के लिए रहता है जब तक कि यह बड़े समन्वय तक नहीं पहुंचता है, जिस बिंदु पर हम यह निर्धारित कर सकते हैं कि वर्ग खो रहा है या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.