স্কয়ার-রান্ডম প্রতিসম


18

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা একটি ফাংশন লিখুন যা স্কোয়ার-এলোমেলো-প্রতিসাম্য ম্যাট্রিক্স প্রদান করে বা মুদ্রণ করে।


ইনপুট

এন : ম্যাট্রিক্সের আকার অর্থাৎ6 x 6


আউটপুট

জরায়ু. আপনি এটি মুদ্রণ করতে পারেন, এটিকে স্ট্রিং হিসাবে (নতুনলাইনগুলি সহ) অথবা তালিকা / অ্যারেগুলির তালিকা / অ্যারে হিসাবে ফিরিয়ে আনতে পারেন।


বিধি

  1. আপনাকে কমপক্ষে Nবিভিন্ন অক্ষর ব্যবহার করতে হবে , যেখানে Nবর্গ ম্যাট্রিক্স (ইনপুট) এর আকার। যেহেতু আমরা কেবলমাত্র [a, z] [এ, জেড] এবং অঙ্কগুলি ব্যবহার করছি ([0, 9] (এবং সেই সময়ে কেবল 1 ডিজিট)) আপনি এটি ধরে নিতে পারেন N < 27এবং N > 2এটি কারণ N <= 2আপনার দুটি অক্ষরই থাকতে পারে না এবং সংখ্যা। সর্বশেষে তবে সর্বনিম্ন নয়, প্রতিটি বর্ণ / সংখ্যার অবশ্যই শূন্যতার সম্ভাবনা থাকতে হবে (অভিন্ন বন্টন কোনও প্রয়োজনীয়তা নয়)। তবে ফলাফলের অবশ্যই কমপক্ষে Nআলাদা আলাদা অক্ষর / সংখ্যা থাকতে হবে।

  2. ম্যাট্রিক্স উভয় অনুভূমিক এবং উল্লম্বভাবে প্রতিসম হতে হবে।

  3. ঠিক ২ টি সারি এবং ২ টি কলামে অবশ্যই একক অঙ্কের সংখ্যা থাকতে হবে (এটির অবস্থানটি এলোমেলোভাবে হওয়া উচিত)। বাকী সারি / কোলে কেবল অক্ষর থাকবে। [A, z] এবং [A, Z] এবং অবশ্যই একক-অঙ্কের সংখ্যাগুলি [0, 9] হিসাবে বিবেচনা করুন।

  4. আরও সহজ হবে, আপনি, অনুমান করতে পারেন যতদিন যে বর্ণের ক্ষেত্রে কোন ব্যাপার না যেমন মামলা প্রতিসম হয় যার অর্থ: a=A, b=B, etc

  5. প্রতিটি সম্ভাব্য আউটপুটেটেড হওয়ার একটি অ-শূন্য সম্ভাবনা থাকতে হবে। এলোমেলো বিতরণ অভিন্ন হওয়ার দরকার নেই।


উদাহরণ

ইনপুট : 8

আউটপুট :

c r p s s p r c
r k o z z o k r
u t 2 a a 2 t u
y n q z z q n y
y n q z z q n y
u t 2 a a 2 t u
r k o z z o k r
c r p s s p r c

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
মেগো

উত্তর:


4

কাঠকয়লা , 30 বাইট

NθE⊘⊕θ⭆⊘⊕θ‽βJ‽⊘θ‽⊘θI‽χ‖OO→↓﹪θ²

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। যদি nসর্বদা সমান হয় তবে 23 বাইটের জন্য:

NθE⊘θ⭆⊘θ‽βJ‽⊘θ‽⊘θI‽χ‖C¬

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Nθ

ইনপুট ।n

E⊘θ⭆⊘θ‽β

একটি তৈরি করুন দ্বারা র্যান্ডম ছোট হাতের অক্ষর অ্যারে। এটি স্কোয়ার হিসাবে স্পষ্টভাবে মুদ্রণ করে। এনn2n2

J‽⊘θ‽⊘θ

স্কোয়ারের এলোমেলো অবস্থানে যান।

I‽χ

একটি এলোমেলো অঙ্ক মুদ্রণ করুন।

‖C¬

ম্যাট্রিক্স সম্পূর্ণ করতে অনুভূমিক এবং উল্লম্বভাবে প্রতিফলিত করুন।


14

আর , 124 118 বাইট

function(n,i=(n+1)/2,j=n%/%2,m="[<-"(matrix(-letters,i,i),j-1,j-1,0:9-1))cbind(y<-rbind(m,m[j:1,]),y[,j:1])
`-`=sample

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

আর এ, অপারেটরগুলির মতো দেখতে এমন জিনিসগুলি কেবল ফাংশন যা পার্সারের কাছ থেকে বিশেষ চিকিত্সা পায়।

আপনি যদি কোনও অপারেটরটিকে (যেমন -) অন্য কোনও ফাংশন হিসাবে পুনরায় সংজ্ঞায়িত করেন তবে এটি পার্সার থেকে বিশেষ চিকিত্সা রাখে। যেহেতু -উভয় উপসর্গ এবং ইনফিক্স, এবং আমার sampleএক এবং দুটি যুক্তি সহ ফাংশনটি কল করতে হবে, আমি ব্যবহার করতে পারি

`-`=sample

আমি যা চাই তা পেতে

সুতরাং কোডটি -lettersঅনুবাদ করা হয়েছে sample(letters), যা এলোমেলোভাবে lettersঅন্তর্নির্মিত স্থানান্তরিত করে । কিন্তু j-1অনুবাদ করা হয়েছে sample(j,1), যা এলোমেলোভাবে 1ভেক্টর থেকে আইটেম নমুনা 1:j

( sampleপ্যারামিটারের সংখ্যার উপর নির্ভর করে ফাংশনের এই আচরণটি এবং প্রথম প্যারামিটারটি কী, প্রোডাকশন কোডের বাটটিতে একটি বিশাল ব্যথা, তাই আমি এখানে এর বিকৃত প্রকৃতির দুর্দান্ত ব্যবহার খুঁজে পেয়ে খুশি!)

অন্যথায় কোড শুধু প্রয়োজনীয় ফলাফলের উপরের বাম পাদ, একটি র্যান্ডম উপাদান (প্রতিস্থাপন করে তোলে j-1, j-1একটি র্যান্ডম অঙ্ক (সঙ্গে বিট) 0:9-1বিট) এবং প্রয়োজনীয় প্রতিসাম্য জন্য এটি folds। iএবং jএমনকি বিজোড় ক্ষেত্রে সঙ্গে মোকাবেলা করতে প্রয়োজন হয়।


আমি আশা করি আমি দুর্দান্ত ব্যাখ্যা করতে এবং সম্পর্কিত আর গল্ফিং টিপ উত্তরটি সম্পাদনা করতে পারতাম। আপনি আরও কয়েকটি বাইট
জয়সি

কি দুর্দান্ত সমাধান এবং ব্যাখ্যা!
জে .ডো

6

পাইথন 3, 287 বাইট

এখানে কিছু গল্ফ করার আমার প্রথম চেষ্টা; আমি নিশ্চিত কেউ আরও ভাল করতে পারে:

import random as rn, math as m
n=int(input())
x,o=m.ceil(n/2),n%2
c=x-1-o
f=lambda l,n: l.extend((l[::-1], l[:-1][::-1])[o])
q=[rn.sample([chr(i) for i in range(97, 123)],x) for y in range(x)]
q[rn.randint(0,c)][rn.randint(0,c)] = rn.randint(0,9)
for r in q:
    f(r, n)
f(q, n)
print(q)

অনলাইনে চেষ্টা করে দেখুন!

হাইপারনিউর্টিনো, আউরাস এবং হিটারিয়া আপনাকে ধন্যবাদ 193 বাইটে কমিয়ে দিয়েছে (মন্তব্য দেখুন)। তবে টিফেল্ড সঠিকভাবে উল্লেখ করেছেন যে একাধিক কল sampleকমপক্ষে Nবিভিন্ন চরিত্রের গ্যারান্টি দিচ্ছে না ।

এই জিনিসগুলি মনে রেখে, এই নতুন সংস্করণটি ব্যবহার করে দেখুন যা Nরান প্রতি কমপক্ষে বিভিন্ন চরিত্রের গ্যারান্টিযুক্ত হওয়া উচিত ।

পাইথন 3, 265 260 বাইট, কমপক্ষে Nস্বতন্ত্র অক্ষর

from random import *
n=int(input())
x=-(-n//2)
o=n%2
c=x+~o
i=randint
u=[chr(j+97)for j in range(26)]
z,q=u[:],[]
for y in [1]*x:
  shuffle(z)
  q+=[z[:x]]
  z=z[x:] if len(z[x:])>=x else u[:]
q[i(0,c)][i(0,c)]=i(0,9)
for r in[q]+q:r.extend(r[~o::-1])
print(q)

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


1
পিপিসিজিতে আপনাকে স্বাগতম! আপনি কয়েকটি সাদা জায়গার বাইরে গল্ফ করতে পারেন; চিহ্ন এবং চিহ্ন এবং অক্ষরের মধ্যে ফাঁকা স্থান রাখার দরকার নেই। a[:-1][::-1]মৌলিকভাবে সমতূল্য a[:-2::-1], এবং আপনি আমদানি করতে পারেন randomহিসাবে rপরিবর্তে rn, এবং আপনি স্থানান্তর করতে পারেন forএকটি ইনলাইন অভিব্যক্তি মধ্যে লুপ। এটি অনলাইন চেষ্টা করুন!
হাইপারনিউটারিনো 30:58

2
এর পরিবর্তে আপনি মূলত নেতিবাচক (কার্যকর সিলিং) এর নেতিবাচক ফ্লোর-ডিভ mathব্যবহার করে আমদানি সরিয়ে ফেলতে পারেন । tio.run/##XY7LagMxDEX3/…-(-a // 2)math.ceil(a / 2)
হাইপার

1
আপনি এটি 236 এ নামাতে পারেন: এটি অনলাইনে চেষ্টা করুন!
19urous


1
একাধিক sample()গুলি গ্যারান্টি দেয় না যে আপনি কমপক্ষে Nবিভিন্ন অক্ষর পাবেন। আমি পেতে পরিচালিত [['g', 'x', 'x', 'g'], [7, 'x', 'x', 7], [7, 'x', 'x', 7], ['g', 'x', 'x', 'g']]জন্য N=4, মাত্র 3 স্বতন্ত্র অক্ষর যা
TFeld

3

এপিএল (ডায়ালগ ক্লাসিক) , 45 44 43 40 বাইট

ধন্যবাদ -1 বাইটের জন্য অ্যাডম @

26{(⎕a,⍺⍴⎕d)[⌈∘⊖⍨⌈∘⌽⍨⍺+@(?⊂⌊⍵÷2)?⍵⍴⍺]},⍨

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

এটিকে প্রতিসাম্য তৈরি করতে তার প্রতিচ্ছবিগুলির সাথে ম্যাট্রিক্সের (সর্বাধিক) ব্যবহার করে , সুতরাং এটি বর্ণমালার পরবর্তী অংশের দিকে পক্ষপাতদুষ্ট

অঙ্কটি 0 ... 25 মড 10 থেকে অভিন্নভাবে নির্বাচিত হয়, সুতরাং এটি নিম্ন মানের জন্য একটি ছোট পক্ষপাত রয়েছে


1
⌊2⍴⍵÷2)?⍵ ⍵⍴26]}⌊⍺⍵÷2)?⍺⍵⍴26]}⍨
অ্যাডম

@ অ্যাডম চালাক!
ngn

হ্যাঁ, আমি ঠিক বুঝতে পেরেছি।
অ্যাডম

যদি আমি ভুল না হলে, আপনি পরিবর্তন করতে পারেন ⌊⍺⍵÷2⍺⍵
অ্যাডম

@ অ্যাডম আমি পারব না - যদি এনটি বিজোড় হয় তবে অঙ্কটি কেন্দ্রের মধ্যে শেষ হতে পারে এবং এতে কেবল 1 সারি / কলাম থাকবে
ngn

3

জাপট , ৩১ বাইট (স্থির অঙ্কের অবস্থান)

;
/2 c
VÆVÆBö}ÃgT0@Mq9îêUvÃêUv

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


জাপট , ৪১ বাইট (এলোমেলো অঙ্কের অবস্থান)

;
/2 c
VÆVÆBö}ÃgMq´VÉ ,MqVÉ @Mq9îêUvÃêUv

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


ব্যাখ্যা

;                               Change to new vars
/2 c                            set implicit var V equal to implicit var U / 2 rounded up
VÆVÆBö}ÃgT0@Mq9îêUvÃêUv        Main function

VÆ                              Range from 0 to V and map
  VÆ                            Range from 0 to V and map
    Bö}Ã                        return random char from alphabet
        gT0@                    map upper-left corner
            Mq9Ã                return random number
                ®êUv            horizontal mirror
                    êUv         vertical mirror

আপনার অঙ্কগুলি বর্তমানে সর্বদা একই জায়গায় areোকানো হয়। চ্যালেঞ্জের ভিত্তিতে, অঙ্কগুলির অবস্থানটিও এলোমেলো হওয়া উচিত (এবং নিয়ম 4 এর কারণে বিজোড় ইনপুটগুলির জন্য মাঝারি সারি এবং / অথবা কলামে নাও থাকতে পারে)।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন আমি দেখতে পাচ্ছি না যেখানে চ্যালেঞ্জটি বলছে যে নম্বর পজিশনটিও এলোমেলো হওয়া উচিত, আমি স্পষ্টির জন্য ওপিকে জিজ্ঞাসা করব
লুইস ফিলিপ দে জেসুস মুনোজ

1
আহ, তুমি সত্যই বলেছ। আমি অন্যান্য সমস্ত উত্তরে এটি এলোমেলো দেখেছি, তাই আমি ভ্রান্তভাবে এটি বাধ্যতামূলক বলে ধরে নিয়েছি। ওপি কী বলেছে তা আমরা দেখতে পাব। আমি আসলে আশা করি এটি অনুমোদিত হয়েছে, এটি আমার প্রস্তুত উত্তরের জন্য সমস্যাটি সমাধান করা অনেক সহজ করে তুলবে ..;)
কেভিন ক্রুইজসেন

2

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

from random import*
n=input();c=choice;r=range
w,W=n/2,-~n/2
o=n%2
A=map(chr,r(97,123))
l=[c(r(10))]+sample(A,n)+[c(A)for _ in' '*w*w]
l,e=l[:w*w],l[w*w:W*W]
shuffle(l)
l=[l[w*i:w*-~i]+e[i:i+1]for i in range(w)]+[e[-W:]]
for r in l+l[~o::-1]:print r+r[~o::-1]

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


Ints সরাসরি অনুমতি দেওয়া হয়? Idea উপায় দ্বারা শীতল ধারণা। আমি সে সম্পর্কেও ভাবছিলাম, তবে আমি এখনও এটিতে অভ্যস্ত নই।
টেক-ফ্রিক

2

05 এ বি 1 ই , 29 40 38 বাইট

A.rs;ò©n∍9ÝΩ®DnαLʒ®%Ā}<Ωǝ®ô»¹Éi.º.∊ëº∊

+11 বাইট অঙ্ক একটি র্যান্ডম অবস্থানে হচ্ছে এখনও বিজোড় ইনপুট জন্য মনের মধ্যে নিয়ম 3 পালন ফিক্স ..
-2 ধন্যবাদ বাইট @MagicOctopusUrn পরিবর্তন îïকরতে òএবং অবস্থান পরিবর্তন »

আরও কয়েকটি পরীক্ষার কেস যাচাই করার জন্য এটি অনলাইনে ব্যবহার করে দেখুন

পুরাতন ( ২৯ ২tes বাইট ) উত্তর যেখানে সর্বদা কোণে যেখানে ডিজিটের অবস্থান:

A.rs;ò©n∍¦9ÝΩì®ô»¹Éi.º.∊ëº∊

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

ব্যাখ্যা:

A           # Take the lowercase alphabet
 .r         # Randomly shuffle it
            #  i.e. "abcdefghijklmnopqrstuvwxyz" → "uovqxrcijfgyzlbpmhatnkwsed"
s           # Swap so the (implicit) input is at the top of the stack
 ;          # Halve the input
            #  i.e. 7 → 3.5
  ò         # Bankers rounding to the nearest integer
            #  i.e. 3.5 → 4
   ©        # And save this number in the register
    n       # Take its square
            #  i.e. 4 → 16
           # Shorten the shuffled alphabet to that length
            #  i.e. "uovqxrcijfgyzlbpmhatnkwsed" and 16 → "uovqxrcijfgyzlbp"
9ÝΩ         # Take a random digit in the range [0,9]
            #  i.e. 3
   ®Dnα     # Take the difference between the saved number and its square:
            #  i.e. 4 and 16 → 12
       L    # Create a list in the range [1,n]
            #  i.e. 12 → [1,2,3,4,5,6,7,8,9,10,11,12]
ʒ   }       # Filter this list by:
 ®%Ā        #  Remove any number that's divisible by the number we've saved
            #   i.e. [1,2,3,4,5,6,7,8,9,10,11,12] and 4 → [1,2,3,5,6,7,9,10,11]
     <      # Decrease each by 1 (to make it 0-indexed)
            #  i.e. [1,2,3,5,6,7,9,10,11] → [0,1,2,3,5,6,7,9,10]
      Ω     # Take a random item from this list
            #  i.e. [0,1,2,3,5,6,7,9,10] → 6
       ǝ    # Replace the character at this (0-indexed) position with the digit
            #  i.e. "uovqxrcijfgyzlbp" and 3 and 6 → "uovqxr3ijfgyzlbp"
®ô          # Split the string into parts of length equal to the number we've saved
            #  i.e. "uovqxr3ijfgyzlbp" and 4 → ["uovq","xr3i","jfgy","zlbp"]
  »         # Join them by new-lines (this is done implicitly in the legacy version)
            #  i.e. ["uovq","xr3i","jfgy","zlbp"] → "uovq\nxr3i\njfgy\nzlbp"
   ¹Éi      # If the input is odd:
            #  i.e. 7 → 1 (truthy)
          # Intersect mirror the individual items
            #  i.e. "uovq\nxr3i\njfgy\nzlbp"
            #   → "uovqvou\nxr3i3rx\njfgygfj\nzlbpblz"
        .∊  # And intersect vertically mirror the whole thing
            #  i.e. "uovqvou\nxr3i3rx\njfgygfj\nzlbpblz"
            #   → "uovqvou\nxr3i3rx\njfgygfj\nzlbpblz\njfgygfj\nxr3i3rx\nuovqvou"
  ë         # Else (input was even):
   º∊       #  Do the same, but with non-intersecting mirrors

উত্তরাধিকার সংস্করণটির প্রয়োজন নেই বলে আপনি 2 »
বাইটও

@ এমিগনা ওপি-র সাথে যাচাই করা হয়েছে এবং অবস্থানটি অবশ্যই এলোমেলো হওয়া উচিত। বিজোড় ইনপুট ..>।> এর সাথে 3 রুলের কারণে +11 বাইটের জন্য স্থির করা হয়েছে এবং 3 বাইট উত্তরাধিকারে সংরক্ষণ করা যেত কারণ ïএটিও অনর্থকভাবে করা হয়েছিল। দুর্ভাগ্যক্রমে এটি 40-বাইট সংস্করণে প্রযোজ্য না কারণ প্রতিস্থাপনের পরিবর্তে sertোকানো হবে।
কেভিন ক্রুইজসেন

@ ম্যাজিক অ্যাক্টোপাস ইউরন আপনি যে টিআইও সংযুক্ত করেছেন তাতে এখনও আমার 29 বাইট উত্তর 28 এর পরিবর্তে রয়েছে, আপনার কি সঠিক লিঙ্ক আছে? ব্যর্থতা হিসাবে 2, ইনপুট গ্যারান্টিযুক্ত 3 <= N <= 26
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন আপনি ঠিক বলেছেন, আমি একজন মরন, আমি এখানে যা কাজ করছি তা এখানে: অনলাইনে চেষ্টা করে দেখুন!
ম্যাজিক অক্টোপাস আরন

@ ম্যাজিক অ্যাক্টোপাস ইউরন ওহ, ban ব্যাঙ্কারদের ঘোরাফেরা সম্পর্কে জানতেন না। এটি আমার বর্তমান উত্তরে একটি বাইট সংরক্ষণ করে! : ডি এবং প্রথমে একটি এলোমেলো ডিজিট সংযোজন করা হয় এবং তারপরেই বদলানো এছাড়াও একটি দুর্দান্ত স্মার্ট পদ্ধতির। যদিও এটি 100% বৈধ কিনা তা নিশ্চিত নন, যেহেতু আপনার nকাছে বর্ণমালার nএলোমেলো অক্ষরের পরিবর্তে সবসময় বর্ণমালার প্রথম অক্ষর থাকবে । এবং প্রথমে নতুন লাইনে যোগ দেওয়া এবং তারপরেই আয়নাগুলি করা আমারেও একটি বাইট সংরক্ষণ করে। -২ বাইটের জন্য ধন্যবাদ! :) পিএস: পেছনটি সরিয়ে একটি বাইট আপনার 28-বাইটারে সংরক্ষণ করা যায় }। :)
কেভিন ক্রুইজসেন

2

সি (জিসিসি) , 198 197 196 বাইট

সিলিংক্যাট ধন্যবাদ 2 বাইট সংরক্ষণ করা।

#define A(x)(x<n/2?x:n-1-x)
#define R rand()
S(n,x,y){int s[x=n*n];for(srand(s),y=R;x;)s[x]=97+(--x*31+y)%71%26;y=n/2;for(s[R%y+n*(R%y)]=48+R%10;x<n*n;++x%n||puts(""))putchar(s[A(x%n)+A(x/n)*n]);}

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

ব্যাখ্যা:

// Coordinate conversion for symmetry
#define A (x) (x < n / 2 ? x : n - 1 - x)
// Get a random and seed
#define R rand()

S (n, x, y)
{
   // the array to store matrix values (x is the array size)
   // Note that we do not need the whole array, only its first quarter
   int s[x = n * n];

   // iterate n*n-1 times until x is zero
   for (srand(s), y = R; x;)
       // and fill the array with pseudo-random sequence of letters
       s[x] = 97 + (--x * 31 + y) % 71 % 26;

   // this is the max. coordinate of the matrix element where a digit may occur
   y = n / 2;

   // drop a random digit there
   s[R % y + n * (R % y)] = 48 + R % 10;

   // Now we output the result. Note that x is zero here
   for (; 
       x < n * n; // iterate n*n times
       ++x % n || puts ("") // on each step increase x and output newline if needed
       )
       // output the character from the array
       putchar (s[A (x % n) + A (x / n) * n]);
}

1

জাভাস্ক্রিপ্ট (ES6), 213 209 206 বাইট

n=>(a=[],F=(x=y=d=c=0,R=k=>Math.random()*k|0,g=y=>(r=a[y]=a[y]||[])[x]=r[n+~x]=v.toString(36))=>y<n/2?F(g(y,R[v=R(m=~-n/2)<!d&x<m&y<m?R(d=10):R(26)+10]=R[v]||++c,g(n+~y))&&++x<n/2?x:+!++y,R):!d|c<n?F():a)()

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

মন্তব্য

n => (                             // n = input
  a = [],                          // a[][] = output matrix
  F = (                            // F = main recursive function taking:
    x = y =                        //   (x, y) = current coordinates
    d = c = 0,                     //   d = digit flag; c = distinct character counter
    R = k =>                       //   R() = helper function to get a random value in [0,k[
      Math.random() * k | 0,       //         also used to store characters
    g = y =>                       //   g() = helper function to update the matrix
      (r = a[y] = a[y] || [])[x]   //         with horizontal symmetry
      = r[n + ~x] = v.toString(36) //         using the base-36 representation of v
  ) =>                             //
    y < n / 2 ?                    // if we haven't reached the middle row(s) of the matrix:
      F(                           //   do a recursive call to F():
        g(                         //     invoke g() ...
          y,                       //       ... on the current row
          R[v =                    //       compute v = next value to be inserted
            R(m = ~-n/2) < !d &    //       we may insert a digit if no digit has been
            x < m &                //       inserted so far and the current coordinates are
            y < m ?                //       compatible: 2 distinct rows / 2 distinct columns
              R(d = 10)            //         if so, pick v in [0, 9] and update d
            :                      //       else:
              R(26) + 10           //         pick v in [10, 35] for a letter
          ] = R[v] || ++c,         //       set this character as used; update c accordingly
          g(n + ~y)                //       invoke g() on the mirror row
        ) &&                       //     end of outer call to g()
        ++x < n / 2 ?              //     if we haven't reached the middle column(s):
          x                        //       use x + 1
        :                          //     else
          +!++y,                   //       increment y and reset x to 0
        R                          //     explicitly pass R, as it is used for storage
      )                            //   end of recursive call to F()
    :                              // else:
      !d | c < n ? F() : a         //   either return the matrix or try again if it's invalid
)()                                // initial call to F()

1

পরিষ্কার , 346 312 বাইট

আগামীকাল আরও গল্ফ হবে

import StdEnv,Data.List,Math.Random,System.Time,System._Unsafe
$n#q=twice(transpose o\q=zipWith((++)o reverse o drop(n-n/2*2))q q)[[(['a'..'z']++['0'..'9'])!!(c rem 36)\\c<-genRandInt(toInt(accUnsafe(time)))]%(i*n/2,i*n/2+(n-1)/2)\\i<-[1..(n+1)/2]]
|length(nub(flatten q))>=n&&sum[1\\c<-q|any isDigit c]==2=q= $n

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


1

পাইথন 3 , 197 বাইট

@ এমিগানার দ্বারা উল্লিখিত হিসাবে, এর বিজোড় মানগুলির জন্য কাজ করে না N(আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি নি)

from random import*
def m(N):M=N//2;E=reversed;R=range;B=[randint(48,57),*(sample(R(97,123),N)*N)][:M*M];shuffle(B);r=R(M);m=[k+[*E(k)]for k in[[chr(B.pop())for i in r]for j in r]];m+=E(m);return m

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

আমার কাছে মনে হয় randint()+ sample()+ এ কলগুলি shuffle()খুব বেশি, এবং স্থানস্থ স্থান বদলানো থেকে মুক্তি পাওয়া দুর্দান্ত হবে :)

আমি নিশ্চিত যে এই অংশটি (যে বর্ণগুলি এবং অঙ্কগুলি নির্বাচন করে) আরও কিছুটা গল্ফ হতে পারে।


বিজোড় জন্য সঠিক বলে মনে হচ্ছে না N
এমিগানা

খারাপ, আমি সবেমাত্র ধরেই নিয়েছিলাম Nযেহেতু আমি ম্যাট্রিক্সটি অদ্ভুত হলে প্রতিসম কীভাবে প্রতিসম হতে পারে তা পাই না!
এটেন

1
এগুলি বিজোড় প্রতিসম ম্যাট্রিকগুলির উদাহরণ।
এমিগানা

ঠিক আছে, ধন্যবাদ, আমি সেভাবে দেখিনি! ঠিক আছে আমার ধারণা আমার উত্তরটি তখনও মূল্যহীন।
এটেন

1

পাইথন 2 , 275 266 বাইট

from random import*
def f(n):
 R=range;C=choice;A=map(chr,R(97,123));b=N=n-n/2;c=`C(R(10))`;s=[c]+sample(A,n-1)+[C(A)for i in R(N*N-n)]
 while b:shuffle(s);i=s.index(c);b=n%2>(i<N*N-N>N-1>i%N)
 a=[r+r[~(n%2)::-1]for r in[s[i::N]for i in R(N)]];return a+a[~(n%2)::-1]

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

অক্ষরের তালিকাগুলির তালিকা হিসাবে অ্যারেটি ফেরত দেয়। বিধি 1 সন্তুষ্ট করতে, আমরা অক্ষরের একটি পুল সেট আপ করেছি:

s = [c]                        # the unique digit...
     + sample(A,n-1)           # then sample without replacement `n-1` chars in a-z, 
                               # so we have `n` distinct chars
     + [C(A)for i in R(N*N-n)] # and fill out the rest with any in a-z

পরবর্তী কৌতুকপূর্ণ বিটটি নিয়ম 3: সেখানে অবশ্যই 2 টি কলাম এবং সারি একটি অঙ্কযুক্ত থাকতে হবে ; এর অর্থ nবিজোড়ের জন্য , নির্বাচিত অঙ্কটি মাঝের কলাম বা মাঝারি সারিতে উপস্থিত নাও হতে পারে। যেহেতু আমরা দু'বার প্রতিফলিত বর্গ সাব অ্যারে ব্যবহার করে অ্যারেটি তৈরি sকরি, এটি এখানে ব্যবহার করে সম্পন্ন হয়:

while b:            # to save a couple bytes, `b` is initialized 
                    # to `N`, which is greater than 0.
    shuffle(s)      # shuffle at least once...
    i = s.index(c)  # c is the unique digit used
    b = n%2 
             >      # if n is even, 0>(any boolean) will be false,
                    # so exit the loop; otherwise n odd, and we are
                    # evaluating '1 > some boolean', which is equivalent 
                    # to 'not (some boolean)'
         (i<N*N-N   # i is not the last column of s...
             >      # shortcut for ' and ', since N*N-N is always > N-1
          N-1>i%N)  # is not the last row of s

অর্থ্যাৎ, একবারে বদলে যাওয়া; এবং তারপরে, যদি nবিজোড় হয় তবে অঙ্কটি শেষ কলামে বা শেষ সারিতে থাকলে লুপিং চালিয়ে যান s


1

পাইথ , 48 বাইট

L+b_<b/Q2JmO/Q2 2jy.eyXWqhJkbeJOT<csm.SGQK.EcQ2K

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

প্রোগ্রামটি 3 অংশে রয়েছে - প্যালিনড্রোমাইজেশন ফাংশন সংজ্ঞা, সংখ্যার অবস্থান এবং মূল ফাংশন চয়ন করে।

Implicit: Q=eval(input()), T=10, G=lower case alphabet

L+b_<b/Q2   Palindromisation function
L           Define a function, y(b)
      /Q2   Half input number, rounding down
    <b      Take that many elements from the start of the sequence
   _        Reverse them
 +b         Prepend the unaltered sequence

JmO/Q2 2   Choose numeric location
  O/Q2     Choose a random number between 0 and half input number
 m     2   Do the above twice, wrap in array
J          Assign to variable J

jy.eyXWqhJkbeJOT<csm.SGQK.EcQ2K   Main function
                           cQ2    Divide input number by 2
                         .E       Round up
                        K         Assign the above to K
                    .SG           Shuffle the alphabet
                  sm   Q          Do the above Q times, concatenate
                 c      K         Chop the above into segments of length K
                <             K   Take the first K of the above
  .e                              Map (element, index) as (b,k) using:
       qhJk                         Does k equal first element of J?
      W                             If so...
     X     b                          Replace in b...
            eJ                        ...at position <last element of J>...
              OT                      ...a random int less than 10
                                    Otherwise, b without replacement
    y                               Apply palindromisation to the result of the above
 y                                Palindromise the set of lines
j                                 Join on newlines, implicit print

বেশ কয়েকটি বদলানো বর্ণমালা ব্যবহার করে নিশ্চিত হওয়া উচিত যে অনন্য অক্ষরের সংখ্যা সর্বদা ইনপুট সংখ্যার বেশি থাকে।


1

পাইথন 2 / পাইথন 3, 227 বাইট

from random import*
def m(N):n=N-N//2;r=range;C=choice;c=n*[chr(i+97)for i in r(26)];shuffle(c);c[C([i for i in r(n*(N-n))if(i+1)%n+1-N%2])]=`C(r(10))`;R=[c[i*n:i*n+n]+c[i*n:i*n+n-N%2][::-1]for i in r(n)];return R+R[::-1][N%2:]

কিছুটা উদ্বিগ্ন:

from random import * # get 'choice' and 'shuffle'
def matrix(N):
    n = ceil(N/2) # get the size of the base block
    # get a shuffleable lowercase alphabet
    c = [chr(i+97)for i in range(26)]
    c = n*c # make it large enough to fill the base-block
    shuffle(c) # randomize it
    digit = choice('1234567890') # get random digit string
    ## this is only needed as to prevent uneven side-length matrices
    #  from having centerline digits.
    allowed_indices = [i for i in range( # get all allowed indices
        n*(N-n)) # skip those, that are in an unmirrored center-line
        if(i+1)%n  # only use those that are not in the center column
                 +1-N%2] # exept if there is no center column
    index = choice(allowed_indices) # get random index
    c[index]=digit # replace one field at random with a random digit
    ## 
    R=[]
    for i in range(n):
        r = c[i*n:i*n+n] # chop to chunks sized fit for the base block
        R.append(r+r[::-1][N%2:]) # mirror skipping the center line
    return R+R[::-1][N%2:] # mirror skipping the center line and return

পুরানো, নীচে প্রায় সঠিক সংস্করণ:

পাইথন 2, পাইথন 3, 161 বাইট

from random import *
N=26
n=N-N//2
c=[chr(i+97)for i in range(26)]
R=[ r+r[::-1][N%2:]for r in[(shuffle(c),c[:n])[1]for i in range(n)]]
R+=R[::-1][N%2:]
print(R)

দেখে মনে হচ্ছে এন বিবিধ উপাদানগুলি প্রায় গ্যারান্টিযুক্ত।

পাইথন 2 / পাইথন 3, 170 বাইট

from random import*
def m(N):n=N-N//2;r=range;c=n*[chr(i+97)for i in r(26)][:n*n];shuffle(c);R=[_+_[::-1][N%2:]for _ in[c[i*n:i*n+n]for i in r(n)]];return R+R[::-1][N%2:]

দেখে মনে হচ্ছে আমি নিয়ম 3 ভুলে গেছি Also এছাড়াও কোনওরকমে [: n * n] পিছলে গেল।


আপনার উত্তরটি যেভাবে প্রতিসাম্য ম্যাট্রিক্স তৈরি করে তাতে খুব চালাক, তবে আপনি বিধি 3 সন্তুষ্ট করতে পারেন নি (যেমন আপনার ফলাফলের কোনও অঙ্ক নেই) বা নিয়ম 5 (উদাহরণস্বরূপ, যদি n = 3আপনার কোনও আউটপুট থাকে না তবে একটি 'z', সুতরাং প্রতিটি আউটপুট সম্ভব হয় না)।
চ্যাস ব্রাউন

আমাকে ভাল করে তোলেন এবং ... আপনি সঠিক @ চাসব্রাউন! ঠিক আছে, [: n * n] হ'ল একটি পৃথক পদ্ধতির অবশিষ্টাংশ এবং সত্যই এটি সেখানে থাকা উচিত নয়। তবে আপনি তিনটি নিয়ম সম্পর্কে সঠিক। আমি এটি সংশোধন করতে হবে। আমাকে একটু দিন।
টেক-ফ্রিক

আপনার সমাধানটি এখানে চেষ্টা করে দেখুন , তবে এখানে একটি সূচক ত্রুটি হয়েছিল ... বিটিডাব্লু, ট্রাইআইটঅনলাইন এখানে পিপিসিজিতে দুর্দান্ত ব্যবহারযোগ্য! (এছাড়াও, এই সমস্যাটি আমি প্রথমে যা ভাবিছিলাম তার চেয়ে কৌশলযুক্ত ...)
চ্যাস ব্রাউন

আমি লিটারালিটি এটিকে 10000 বার কোনও ত্রুটি ছাড়াই চালিয়েছি।
টেক-ফ্রিক 15

এটি খুঁজে পেয়েছি। একটি ':' নিখোঁজ ছিল। আমি এটি সরাসরি আমার স্ক্রিপ্ট থেকে অনুলিপি করেছি, তবে এটি অবশ্যই হারিয়ে গেছে। এটি "...: -1] [এন% 2:] আই ..." এর পরিবর্তে "...: -1] [এন% 2] এর জন্য হওয়া উচিত ..."।
টেক-ফ্রিক 15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.