অমিডাকুজি (阿 弥陀 籤) সরলকরণ


10

আপনি যদি কখনও জাপানি বা পূর্ব এশীয় সংস্কৃতিতে কোনও এক্সপোজার পেয়ে থাকেন তবে অবশ্যই আপনি এমিডাকুজি গেমটির মুখোমুখি হবেন:

এখানে চিত্র বর্ণনা লিখুন

হিসাবে উইকিপিডিয়া ব্যাখ্যা , এটা লটারি এক ধরনের কাগজে টানা এবং এলোমেলোভাবে এন আইটেম বিন্যাস নির্বাচন করতে ব্যবহার করা হয়।

উদাহরণস্বরূপ, এটি এলোমেলোভাবে এন ব্যক্তির একটি প্রারম্ভিক ক্রম বরাদ্দ করতে ব্যবহার করা যেতে পারে, বা এন লোককে এন পুরষ্কার ইত্যাদি on

বুঝতে কেন গেমটি বিন্যাস প্রতিনিধিত্ব করে কৌতুক বুঝতে যে প্রতি অনুভূমিক স্ট্রোকের (একটি "লেগ" বলা) হল বিনিময়সমূহ জায়গায় তার দুই আইটেম।

একই উইকিপিডিয়ায় পৃষ্ঠাটিও ব্যাখ্যা করে যে এন আইটেমগুলির প্রতিটি ক্রিয়াকলাপ পি অসীম সংখ্যক অমিডাকুজি চিত্রের সাথে মিলে যায়। ন্যূনতম অনুভূমিক স্ট্রোক (পা) সহ একটি (গুলি) কে সেই নির্দিষ্ট অনুমানের পি এর "প্রাইমস" বলা হয়।

আপনার টাস্কটি এই বিন্যাসে 2 বা ততোধিক উল্লম্ব রেখাগুলির (এই উদাহরণে তারা 6 টি) একটি অ্যামিডাকুজি ডায়াগ্রাম গ্রহণ করা (অক্ষরগুলি বিয়োগ করে):

A B C D E F
| | | | | |
|-| |-| |-|
| |-| |-| |
| | | | |-|
| |-| |-| |
| | |-| |-|
| | |-| | |
|-| | |-| |
|-| |-| | |
| |-| | |-|
| | | | | |
B C A D F E

এবং এর একটি প্রাইম তৈরি করুন (আবার, বর্ণগুলি বিয়োগ করে):

A B C D E F
| | | | | |
|-| | | |-|
| |-| | | |
| | | | | |
B C A D F E

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

এই নির্দিষ্ট ইনপুট উদাহরণটি উইকিপিডিয়া পৃষ্ঠার শীর্ষে এমিডাকুজি চিত্রের অন্যতম (অসীম) এএসসিআইআই উপস্থাপনা।

এই ASCII ডায়াগ্রামগুলি সম্পর্কে একটি অ-স্পষ্ট নিয়ম রয়েছে: সংলগ্ন পা নিষিদ্ধ।

|-|-|  <-  NO, this does not represent a single swap!

উইকিপিডিয়া একটি ডায়াগ্রাম থেকে প্রাইম প্রাপ্তির একটি স্ট্যান্ডার্ড পদ্ধতি ব্যাখ্যা করে, যার নাম "বুবলাইজেশন", যা নিম্নলিখিত এবং আরও বেশি নিম্নলিখিত নীচের সরলকরণ প্রয়োগ করে:

1) ডান কাঁটা থেকে বাম কাঁটাচামচ:

| |-|      |-| |
|-| |  ->  | |-|
| |-|      |-| |

2) ডাবলস নির্মূল:

|-|        | |
|-|   ->   | |

আমি নিশ্চিত না যে এই ব্যাখ্যাটি দ্ব্যর্থহীন। আপনার কোডটি সেই কৌশল বা অন্য কোনও অ্যালগরিদম ব্যবহার করতে পারে যা প্রয়োজনীয় প্রাইমগুলি উত্পাদন করে।

সংক্ষিপ্ততম কোড জিতেছে।

মানক বিধি এবং মান ভাতা প্রযোজ্য। (যদি ইনপুটটি বৈধ না হয় তবে আপনার প্রোগ্রামটিতে আগুন লাগতে পারে In ইনপুট / আউটপুট ফর্ম্যাটগুলি স্টিডিন / স্টাডাউট, স্ট্রিং আর্গুমেন্ট, লাইনগুলির তালিকা, অক্ষরের ম্যাট্রিক্স, যা আপনার পক্ষে ভাল লাগে ইত্যাদি হতে পারে))

এখানে চিত্র বর্ণনা লিখুন


3
এটি একটি খুব আকর্ষণীয় চ্যালেঞ্জ। আমি একটি অসম্পূর্ণ সমাধান উত্পাদন করতে কিছুটা সময় নিতে পারি, হে।
জোশিয়াহরয়ানডাব্লু

আউটপুটটি যতটা সম্ভব কমপ্যাক্ট হওয়া দরকার বা পায়ের সংখ্যা ন্যূনতম হওয়া পর্যন্ত কোনও পরিমাণ উল্লম্ব স্থান অনুমোদিত?
লাইকনি

@ লাইকনি যে কোনও পরিমাণ উল্লম্ব স্থানের অনুমতি রয়েছে।
টোবিয়া

বুদ্বীকরণ এবং বিপরীত বুদ্বুদীকরণ কি প্রতিটি ফলাফল অমিডাকুজি পৌঁছে?
l4m2

@ l4m2 ইনভার্স বুবলাইজেশন কী?
টোবিয়া

উত্তর:


4

পাইথন 2 , 322 240 বাইট

def f(X):
 X=[[c>' 'for c in s.split('|')]for s in X.split('\n')];h=L=len(X[0])-1;p=range(L)
 for x in X:p=[a-x[a]+x[a+1]for a in p]
 while h:h=i=0;exec"if p[i]>p[i+1]:print'|'+i*' |'+'-|'+(L-i-2)*' |';h=p[i],p[i+1]=p[i+1],p[i]\ni+=1\n"*~-L

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

একটি ফাংশন যা নির্দিষ্ট ফর্মটিতে স্ট্রিং নেয় এবং সেই ফর্মটিতে হ্রাসযুক্ত অমিডাকুজিও প্রিন্ট করে।

এখানে মূল ধারণাটি হ'ল প্রথমে ইনপুটটিকে একটি ক্রম ( for x in Xলুপে) রূপান্তর করা ; এবং তারপরে whileলুপে, সেই ক্রমবিন্যাসের বুদ্বুদ সাজানোর কাজটি করুন, যেহেতু উইকিপিডিয়া নিবন্ধ হিসাবে নোট হিসাবে রয়েছে, এর ফলে একটি 'প্রাইম' অ্যামিডাকুজি আসে।


কি দারুন. আমি মাত্র একটি পাইথন 3 সংস্করণ তৈরি করতে দীর্ঘ সময় ব্যয় করেছি, তবে এটি 526 বাইট, হেই।
জোশিয়াহরয়ানডাব্লু

আমি স্রেফ আপনার কোডটিতে কয়েকশ র্যান্ডম ডায়াগ্রাম খাওয়ালাম এবং আমি নিশ্চিত করতে পারি যে এটি সঠিক প্রাইমগুলি আউটপুট করে!
টোবিয়া

3

হাস্কেল , 288 বাইট

p x(_:[])=x
p(x:y:z)(_:b:c)|b=='-'=y:p(x:z)c|0<1=x:p(y:z)c
c 0='-'
c _=' '
_#1="|"
m#n='|':c m:(m-1)#(n-1)
p?q=(p:fst q,snd q)
f%b|b==f b=b|0<1=f%f b
f l=reverse$snd$(g 0)%(foldl p[1..n]l,[])where n=1+div(length$l!!0)2;g b((x:y:z),a)|x>y=y?g(b+1)(x:z,a++[b#n])|0<1=x?g(b+1)(y:z,a);g _ x=x

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

ব্যাখ্যা

-- the function p performs the permutation of a list
-- according to a single line from amidakuji board
p x (_:[]) = x
p (x:y:z) (_:b:c)
    | b == '-' = y : p (x : z) c
    | otherwise = x : p (y : z) c

-- helper to select either leg '-' or empty cell
c 0 = '-'
c _ = ' '

-- the # operator generates an amidakuji line containing one leg
-- which corresponds to one swap during bubble sort

-- terminal case, just one edge left
_ # 1 = "|"
-- each cell contains an edge '|' and either space or a '-' for the "active" cell
m # n = '|' : c m : (m - 1) # (n - 1)

-- helper to find the limit value of a function iteration
f % b
    | b == f b = b  -- return the value if it is unchanged by the function application 
    | otherwise = f % f b -- otherwise repeat

-- helper to appropriately combine q which is the result of invocation of 
-- the function g (see below), and a character p
p ? q = (p : fst q, snd q)

-- the function that does the work
f l = reverse $ snd $ (g 0) % (foldl p [1..n] l, []) where
    -- number of lines on the board
    n = 1 + div (length $ l !! 0) 2
    -- apply one iteration of bubble sort yielding (X, Y)
    -- where X is partially sorted list and Y is the output amidakuji
    g b ((x:y:z), a)
        -- if we need to swap two elements, do it and add a line to our board
        | x > y = y ? g (b + 1) (x:z, a ++ [b # n])
        -- if we don't need to, just proceed further
        | otherwise = x ? g (b + 1) (y:z, a)
    -- terminal case when there is only one element in the list
    g _ x = x

ভাল করেছ! আমি আপনার কোডটিতে এলোমেলো ডায়াগ্রাম খাওয়ালাম এবং এটি তাদের সমস্ত সমাধান করেছে।
টোবিয়া

(_:[])ন্যায়বিচার হতে পারে [_]এবং p?q=(p:fst q,snd q)হতে পারে p?(f,s)=(p:f,s)। সংজ্ঞা পরিবর্তে c 0='-';c _=' ';এবং তারপর ব্যবহার c m, " -"!!(0^abs m)কাজ করা উচিত।
লাইকনি

(g 0)বন্ধনী প্রয়োজন হয় না এবং letপ্রহরীতে একটি এর চেয়ে কম হয় where। সব মিলিয়ে 274 বাইট: এটি অনলাইনে চেষ্টা করুন!
লাইকনি

আপনার ফিক্সপয়েন্ট ফাংশনটি ইনলাইন করা %যেতে পারে until(\x->g 0 x==x)(g 0)
লাইকনি

2

রেটিনা 0.8.2 , 105 বাইট

$
¶$%`
r`.?.\G
 1$.'$*
+r-1=`\|(-?.?[- 1]*¶.*)(1+)
$2$1
-
 
1G`
;{`\b(1+) \1
$1-$1
*`1+
|
(1+)-(1+)
$2 $1

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

$
¶$%`

শেষ লাইনের সদৃশ করুন।

r`.?.\G
 1$.'$*

শেষ লাইনে কলামগুলি সংখ্যা করুন।

+r-1=`\|(-?.?[- 1]*¶.*)(1+)
$2$1

সংখ্যাগুলি প্রথম লাইনে না আসা পর্যন্ত এই স্থানটি সরান। প্রতিটি পুনরাবৃত্তিতে কেবলমাত্র ডান সংখ্যক -1=স্থানান্তরিত হয়। এটি ডানদিকের দিকে সরানো হয় |যদি না এটির পূর্ববর্তী -স্থানে স্থানান্তরিত হয় এমন ক্ষেত্রে এর আগে |। ( rইঙ্গিত দেয় যে রেজেক্সটি এমনভাবে প্রক্রিয়াজাত করা হয়েছে যেন এটি একটি লুকবিহীন ছিল, যা এই কেসটির সাথে ম্যাচ করা সহজভাবে সহজ করে দেয়)) এটি এমিডাকুজি সাজানো ক্রমে রূপান্তরিত করার অনুমতিটি গণনা করে।

-
 
1G`

-প্রথম লাইনের পরে গুলি এবং কিছু মুছলে কেবল সংখ্যাগুলির তালিকা রাখুন ।

;{`

এরপরে প্রোগ্রামের বাকী অংশগুলি আবার তালিকাটিকে আবার সাজিয়ে সাজানো হয় তবে চূড়ান্ত তালিকাটি মুদ্রিত হয় না, তবে রেটিনা ০.৮.২.২০ এর তালিকাটি ক্রম অনুসারে লক্ষ করা যায় যে কোনও পা নেই এমন একটি রেখা রয়েছে শেষে উত্পন্ন, যা আমি বিশ্বাস করি গ্রহণযোগ্য।

\b(1+) \1
$1-$1

-পায়ের জন্য সমস্ত সংযুক্ত আনসোর্টড সংখ্যার উপলব্ধ জোড়াটি চিহ্নিত করুন ।

*`1+
|

পায়ে মুদ্রণ করুন তবে সংখ্যাগুলির সাথে |এস দ্বারা প্রতিস্থাপন করুন ।

(1+)-(1+)
$2 $1

আসলে অদলবদল সম্পাদন করুন।


কীভাবে আপনার কোডটি রেটিনা.এক্সই দিয়ে চালাবেন সে সম্পর্কে আপনার কোনও পরামর্শ আছে ? আমি মনে করি আমার কাছে সঠিক উত্স (105 টি বাইট) আছে তবে এটি কোনও ফল দেয় না। আমি রেটিনা উদাহরণগুলি থেকে হ্যালো ওয়ার্ল্ড চেষ্টা করেছিলাম এবং এটি কার্যকর হয়। আপনি কোথাও উত্স আপলোড করতে পারেন, বা বেস 64 এটি এনকোড করে পেস্টবিনে রেখে দিতে পারে, যদি আমার এনকোডিংটি ভুল হয়ে যায়?
টোবিয়া

@ তোবিয়া দুঃখিত, তবে কীভাবে রেটিনা.এক্সি ব্যবহার করবেন তা আমি মনে করতে পারি না; আমি মনে করি আমি এটি একবার বা দুবার ব্যবহার করেছি তবে এই দিনগুলিতে আমি কেবল চেষ্টা করুন অনলাইন ব্যবহার করুন।
নীল

LOL আমি বোবা! আমি 0.8.2 এর পরিবর্তে কিছু কাটিং-এজ সংস্করণ ব্যবহার করছিলাম। এখন আমি আপনার কোডটিতে কয়েকশ র্যান্ডম ডায়াগ্রাম খাওয়ানোর জন্য আমার জোতা পেয়েছি এবং আমি নিশ্চিত করতে পারি যে এটি সর্বদা সঠিক প্রাইমগুলি আউটপুট করে। ভাল করেছ!
টোবিয়া

@ তোবিয়া পরীক্ষার জন্য ধন্যবাদ! বদলান অক্ষিপট 1 প্রয়োজন: $**; -1=0; 1_; ;.(মোটামুটি); **\
নিল

1

পাইথন 3 , 524 488 486 বাইট

-38 বাইট ধন্যবাদ ওভেসকে!

from numpy import*
A=array;E=array_equal
K=[0]
def r(a,m,n):
	X=len(m);Y=len(m[0]);W,H=a.shape
	for x in range(W-X+1):
		for y in range(H-Y+1):
			if E(a[x:x+X,y:y+Y],A(m)):a[x:x+X,y:y+Y]=A(n)
	return a
def p(a):
	b=A([[j>" "for j in i]for i in[i.split("|")for i in a.split("\n")]])
	while E(a,b)<1:a=b;Z=K*3;O=[0,1,0];T=[K+O,O+K]*2;D=[O,O],[Z,Z];P=[Z,O],[O,Z];*R,_=T;_,*L=T;b=r(r(r(r(r(r(a[any(a,1)],R,L),*D),*P),L,R),*D),*P)
	for i in a:print("",*[" -"[j]for j in i[1:-1]],"",sep="|")

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

এটি অমিডাকুজিকে 2 ডি বাইনারি অ্যারে রূপান্তর করে এবং নিয়মগুলি ব্যবহার করে এটি সরাসরি হ্রাস করে।


আমি আপনার পদ্ধতির সম্পর্কে আগ্রহী; আমি একবার দেখে নেব! ইতিমধ্যে, আপনি প্রতিস্থাপন করে কিছু বাইট সংরক্ষণ করতে পারবেন " "+i.replace("|","")+" "সঙ্গে i.split("|")হবে। আপনার pফাংশনের প্রথম লাইন ...
চ্যাস ব্রাউন

এটি 479 বাইটে পেতে আরও কয়েকটি স্ট্যান্ডার্ড পাইথন গল্ফিং টুইটগুলি ।
চ্যাস ব্রাউন 1


হ্যাঁ, কেন ঘটছে তা নিশ্চিত নয় ...
চ্যাস ব্রাউন

সর্বদা নয় ... কখনও কখনও ডান-কাঁটা থেকে বাম-কাঁটাচামচ করা যায় না, তবে বাম-কাঁটা থেকে ডান-কাঁটাচামচ হয়। নির্দিষ্ট ক্ষেত্রে, এটি কেবল সেখানে বিপরীতে করার বিষয়। সম্ভবত আমার দুটোই করা দরকার?
জোশিহায়ারানওয়ান

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