रोटेशन-सुरक्षित लैटिन वर्ग


12

एक लैटिन वर्ग एक वर्ग है जिसमें X या Y स्तंभों में कोई दोहराए गए प्रतीक नहीं हैं । उदाहरण के लिए:

ABCD    
DABC
CDAB
BCDA

ऐसा ही एक वर्ग है। ध्यान दें कि प्रत्येक स्तंभ और पंक्ति में समान 4 अक्षरों का क्रमचय कैसे होता है।

हालांकि, हमारे लैटिन वर्ग में एक समस्या है: अगर मुझे दूसरी पंक्ति ( DABC) 1 को बाईं ओर घुमाने के लिए था, तो मैं इसे समाप्त कर दूंगा ABCD, जो इसके ऊपर क्रमचय के समान है। यदि किसी 1 स्तंभ / पंक्ति को घुमाना और दूसरा स्तंभ / पंक्ति प्राप्त करना असंभव है, तो हम वर्ग को रोटेशन को सुरक्षित मानते हैं

उदाहरण के लिए:

ABCD
BDAC
CADB
DCBA

सुरक्षित है। ग्रिड में निम्नलिखित गुण हैं:

  1. बिंदु [0, N] Nth प्रतीक का उपयोग करता है
  2. बिंदु [0, N] और [N, 0] हमेशा एक ही प्रतीक हैं । (मैं यह भी कहना चाहूंगा कि [x, y] और [y, x] भी हमेशा एक ही अक्षर होते हैं, लेकिन मैं इसे साबित नहीं कर सकता)

आपका कार्य 1 रोटेशन-सुरक्षित लैटिन वर्ग का प्रिंट आउट करना है, जब एन पास हो गया। मुझे परवाह नहीं है यदि आप पत्र, संख्या, एक सूची, या एक 2 डी सरणी का उत्पादन करते हैं। यदि आप संख्याओं का उपयोग करते हैं, तो शीर्ष स्तंभ और पंक्ति 0,1,2,3,...(उस क्रम में) होनी चाहिए । यदि आप अक्षरों का उपयोग करते हैं, तो यह होना चाहिएA,B,C,D,....

उदाहरण के लिए, यदि आपका इनपुट 4 था, तो आपको या तो प्रिंट करना चाहिए:

0,1,2,3            0,1,2,3
1,3,0,2     or     1,0,3,2
2,0,3,1            2,3,1,0
3,2,1,0            3,2,0,1

4 से कम आकार के कोई रोटेशन-सुरक्षित लैटिन वर्ग नहीं हैं। मुझे परवाह नहीं है कि आपका कार्यक्रम क्या है यदि एन 4. से कम है। उत्सुक के लिए, रोटेशन-सुरक्षित वर्गों की संख्या है (4 से शुरू) 2,5,5906,(too long to calculate)

यह एक , इसलिए अपनी पसंदीदा भाषा में यथासंभव उत्तर देने का प्रयास करें!


क्या कोई समय सीमा है? : (संबंधित हैं मोंटे कार्लो तरीकों की अनुमति दी है, तो वे तकनीकी रूप से उच्च मूल्यों के लिए समाप्त करने के लिए गारंटी नहीं दी जाती Nअपर्याप्त यादृच्छिक संख्या गुणवत्ता के कारण?)
दरवाज़े

कोई समय सीमा नहीं, लेकिन आपके समाधान को समाप्त करने की गारंटी दी जानी चाहिए।
नाथन मेरिल

1
1-अनुक्रमित भाषाओं के लिए, क्या पहली पंक्ति हो सकती है 1,2,3,...?
मील की दूरी पर


@ मीलों हाँ, यह ठीक है
नाथन मेरिल

जवाबों:



2

Sqlserver 2012 - 918 बाइट्स

मेरे बॉक्स पर यह @k = 5 के लिए चलता है, हालांकि इसमें 16 सेकंड लगते हैं।

यह कोड बिल्डिंग कोड है (स्काईनेट देखें, आपके पास प्रतियोगिता है)

क्या सबसे लंबी स्क्रिप्ट की कीमत है?

DECLARE @k int = 4;

DECLARE @t VARCHAR(max)='WITH C as(SELECT
top '+left(@k,1)+'row_number()over(order by 1/0)n
FROM sys.messages),D(nÆ)as(SELECT
concat(~),~
FROM Ø
WHERE |)SELECT top 1~ FROM Å
WHERE 1=1',@
varchar(999)=''SELECT @+=','+CHAR(x+65)FROM(values(0),(1),(2),(3),(4),(5))x(x)WHERE x<@k
SELECT
@t=REPLACE(REPLACE(REPLACE(REPLACE(@t,'Æ',@),'Ø',STUFF(REPLACE(@,',',',C '),1,1,'')),'Å',STUFF(REPLACE(@,',',',D
'),1,1,'')),'~',STUFF(REPLACE(@,',','.n,'),1,3,'')+'.n'),@='';WITH C as(SELECT top(@k)x
FROM(values(0),(1),(2),(3),(4),(5))x(x))SELECT @+=' AND
'+char(65+C.x)+'.n<>'+char(65+D.x)+'.n'FROM c,c d WHERE C.x<D.x
SELECT @t=REPLACE(@t,'|',STUFF(@,1,4,''));WITH A
as(SELECT top(@k)x
FROM(values(65),(66),(67),(68),(69),(70))x(x))SELECT @t+='AND
'+char(A.x)+'.'+char(C.x)+'<>'+CHAR(B.x)+'.'+char(C.x)+' AND
'+char(A.x)+'.n+'+char(A.x)+'.n'+'
not like''%''+'+char(B.x)+'.n+''%'''FROM A,A B,A C
WHERE A.x<>B.x and C.x<>B.x
EXEC(@t)

ऑनलाइन कोशिश करो!

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