ওয়ার্ড স্পিনার ধাঁধা


10

এটি একটি শব্দ ধাঁধা।

আপনার প্রোগ্রামটির স্ট্যান্ডার্ড ইনপুটটিতে দুটি শব্দ গ্রহণ করা উচিত।
প্রথম এক শব্দ শব্দের শুরু। শব্দ দুটি শেষ শব্দ।

প্রারম্ভের শব্দটি থেকে আপনাকে একবারে একটি করে অক্ষর পরিবর্তন / যুক্ত / মুছে ফেলার শেষ শব্দটিতে পৌঁছাতে হবে। প্রতিটি পরিবর্তনের পরে এটি একটি নতুন বৈধ শব্দ গঠন করতে হবে। যুক্ত অক্ষর শুরু বা শেষ যোগ করা হয়। আপনি যে কোনও অবস্থান থেকে চিঠিগুলি সরিয়ে ফেলতে পারেন (তবে শব্দটি অবশ্যই তিনটি বর্ণের দৈর্ঘ্যে কমবে না)। দ্রষ্টব্য: আপনি কোনও শব্দ গঠনের জন্য অক্ষরগুলি পুনর্বিন্যাস করতে পারবেন না।

প্রোগ্রামটির আউটপুট হ'ল শব্দের ক্রমটি শব্দের ক্রম থেকে শুরু শব্দ থেকে শেষ শব্দের দিকে।

উদাহরণ:

Input:
    Post Shot

Output:
    Post
    cost
    coat
    goat
    got
    hot
    shot

বিজয়ী:

  • প্রোগ্রামটি অবশ্যই একটি যুক্তিসঙ্গত সময়ে চলবে (10 সেকেন্ডের চেয়ে কম)।
  • প্রোগ্রাম যা পুরষ্কার শব্দের সংক্ষিপ্ত আউটপুট ক্রম উত্পন্ন করতে পারে।
    • জিঙ্ক -> সিলিকন
  • যদি একাধিক প্রোগ্রাম স্বল্পতম ক্রম পায় তবে চরগুলিতে সংক্ষিপ্ততম প্রোগ্রাম (সাদা স্থান উপেক্ষা করে)।
  • আমাদের এখনও একাধিক প্রোগ্রাম জমা দেওয়ার তারিখ / সময় ব্যবহার করা হবে।

মন্তব্য:


"পোস্ট-> পট-> হট-> শট" কম হতে পারে।
আপনি

@ এসমার্ক: তারপরে আপনার অ্যালগোরিদম আমারকে মারবে এবং আপনি জিতবেন। উপরেরটি একটি সম্ভাব্য সমাধানের উদাহরণ। একটি সংক্ষিপ্ত সমাধান একটি দীর্ঘ সমাধান বীট।
মার্টিন ইয়র্ক

ইচ্ছাকৃতভাবে? দুঃখিত, আমি ঠিক এটি ভুল পেয়েছি।
আপনি

2
আমি কি 0 টি আকারের আকারে এটি সাদা অংশে সমাধান করতে পারি ?

@ টিম নর্ডেনফুর: আমি একটি সাদা স্থান বাস্তবায়ন দেখতে পছন্দ করব। বিঃদ্রঃ. বিজয়ী সিদ্ধান্ত নেওয়ার জন্য প্রোগ্রামের দৈর্ঘ্যের আগে দুটি নিয়ম রয়েছে। তবে আপনি যদি এই প্রয়োজনীয়তাগুলি পূরণ করেন :-)
মার্টিন ইয়র্ক

উত্তর:


2

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

(অভিধান পড়ার লাইন গণনা করা হচ্ছে না)

X=set(open('websters-dictionary').read().upper().split())

(S,E)=raw_input().upper().split()
G={S:0}
def A(w,x):
 if x not in G and x in X:G[x]=w
while E not in G:
 for w in G.copy():
  for i in range(len(w)):
   for c in"ABCDEFGHIJKLMNOPQRSTUVWXYZ":A(w,w[:i]+c+w[i+1:]);A(w,w[:i]+w[i+1:]);A(w,c+w);A(w,w+c)
s=''
while E:s=E+'\n'+s;E=G[E]
print s

চ্যালেঞ্জের zinkজন্য silicon:

ZINK
PINK
PANK
PANI
PANIC
PINIC
SINIC
SINICO
SILICO
SILICON

সেই অভিধানে কিছু অদ্ভুত শব্দ রয়েছে ...


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

guester overturn(কিছুটা সময় নেয়) বা regatta gyrally(ফিরে আসে না ) দিয়ে চেষ্টা করুন ;-)
আরনাড লে ব্ল্যাঙ্ক

হ্যাঁ, কিছু সংমিশ্রণ কিছুটা সময় নেয়। সংক্ষিপ্ততম সমাধানটি দীর্ঘ হওয়ার সাথে সাথে সময়টি আরও দীর্ঘ হয়। এবং শেষটির কোনও সমাধান নেই - সেক্ষেত্রে কী ঘটতে হবে সে সম্পর্কে কোনও ধারণা নেই :) এটি হ্যান্ডেল করার জন্য এটি পরিবর্তন করা বেশ সহজ (G.copy- এ একটি হ্যান্ডেল সংরক্ষণ করুন) এবং লুপের শেষে জি এর সাথে তুলনা করুন )।
কিথ র্যান্ডাল

16

ট্রেস্রোয়েট - 10 টি অক্ষর

traceroute 

বিস্তারিত

post#traceroute shot

Type escape sequence to abort.
Tracing the route to shot (1.1.4.2)

  1 pot (1.1.1.2) 40 msec 68 msec 24 msec
  2 hot (1.1.3.2) 16 msec 32 msec 24 msec
  3 shot (1.1.4.2) 52 msec *  92 msec

রাউটারগুলি ওএসপিএফ সক্ষম করে এবং এইভাবে সাজানো হয়েছে pre

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

এবং হ্যাঁ, সমস্ত শব্দকে পুরোপুরি সমর্থন করার জন্য আমার 233614 রাউটার দরকার। :-)


খুব চালাক তবে আপনি 10 সেকেন্ডের নিয়মকে ব্যর্থ করেছেন। সমস্ত রাউটারগুলি কনফিগার করতে আপনার 10 সেকেন্ডের বেশি সময় লাগবে। :-) রুটটি কী থেকে: জিঙ্ক -> সিলিকন
মার্টিন ইয়র্ক

@ মার্টিন, দয়া করে কনফিগারেশনের সময়টির জন্য উপেক্ষা করুন, এটি ঠিক অভিধান, হিহে, জিংকের জন্য রুটগুলি তৈরি করার মতো -> সিলিকন zink->pink->pank->pani->panic->pinic->sinic->sinico->silico->siliconআমি সত্যই ডিজজস্ট্রার অ্যালগরিদম (যা ওএসপিএফ ব্যবহৃত হয়) দিয়ে চেষ্টা করছি এবং এটি সেই পথটি 1s এর কাছাকাছি খুঁজে পেতে পারে, এটি আলাদা পোস্টে পরে পোস্ট করুন, একবার আমি গল্ফ করলাম।
আপনি

3

পিএইচপি - 886 689 644 612

অভিধান লোড হচ্ছে:

<?php foreach(file('websters-dictionary') as $line) {
    $word = strtolower(trim($line));
    if (strlen($word) < 3) continue;
    $c[$word] = 1;
}

আসল কোড (কেবল উভয় সংক্ষিপ্ত):

list($d,$e)=explode(' ',strtolower(trim(`cat`)));$f=range(@a,@z);function w($a,&$g){global$c;if(isset($c[$a]))$g[]=$a;}$h[$d]=$b=@levenshtein;$i=new SplPriorityQueue;$i->insert($d,0);$j[$d]=0;$k[$d]=$b($d,$e);while($h){if(isset($c[$l=$i->extract()])){unset($h[$l],$c[$l]);if($l==$e){for(;$m=@$n[$o[]=$l];$l=$m);die(implode("\n",array_reverse($o)));}for($p=strlen($l),$g=array();$p--;){w(substr_replace($q=$l,"",$p,1),$g);foreach($f as$r){$q[$p]=$r;w($q,$g);w($r.$l,$g);w($l.$r,$g);}}foreach($g as$m){$s=$j[$l]+1;if(!isset($h[$m])||$s<$j[$m]){$n[$m]=$l;$i->insert($m,-(($k[$m]=$b($m,$e))+$j[$m]=$s));}$h[$m]=1;}}}

ব্যবহার:

php puzzle.php <<< 'Zink Silicon'
# or
echo 'Zink Silicon'|php puzzle.php

ফলাফল:

zink
pink
pank
pani
panic
pinic
sinic
sinico
silico
silicon
(0.23s)

এটি 'জিঙ্ক সিলিকন' এর জন্য 0.5 সেকেন্ডের কম এবং বেশিরভাগ ক্ষেত্রে 1 সেকেন্ডেরও কম সময়ে চলতে হবে (কখনও কখনও কোনও সমাধানের উপস্থিতি না থাকলেও এটি ফিরে আসে)।

এটি দূরত্বের নিম্ন সীমানা নির্ধারণ করতে লেভেনস্টাইন দূরত্ব সহ এ * অ্যালগরিদম ব্যবহার করে ।

কিছু আন্তঃসমীক্ষক পরীক্ষা:

  • vas arm-> vas bas bar barm arm(শুরু এবং শেষ উভয়ই দীর্ঘ শব্দের সাথে)
  • oxy pom -> oxy poxy poy pom
  • regatta gyrally -> (কিছুই নয়, তবে স্ক্রিপ্টটি সঠিকভাবে শেষ হয়)
  • aal presolution -> +8 অক্ষর
  • lenticulated aal -> -9 অক্ষর
  • acarology lowness -> 46 টি হপ
  • caniniform lowness -> ৫১ টি হপ
  • cauliform lowness -> 52 হप्स
  • overfoul lowness -> 54 টি হপ
  • dance facia -> পথে কিছু শব্দের শুরু / শেষ উভয়ই চেয়ে 4 টি বেশি অক্ষর রয়েছে

জিঙ্ক সিলিকন চেষ্টা করুন
মার্টিন ইয়র্ক

এটি এখনই কাজ করা উচিত :-)
আরনাউড লে ব্ল্যাঙ্ক

আমি একটি বড় মেশিনটি পেয়ে যাব:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes)
মার্টিন ইয়র্ক

আপনি সবেমাত্র 128 এম মেমরি_লিট সেটিংস ;-) দিয়ে চেষ্টা করুন php -dmemory_limit=256M
আরনাউড লে ব্ল্যাঙ্ক

had->handবৈধ পদক্ষেপ নয়, আপনি কেবল শুরু বা শেষের দিকে একটি চিঠি যুক্ত করতে পারেন। একই vest->verst:-)
আরনাউড লে ব্ল্যাঙ্ক

3

পাইথন

যেহেতু আমি কয়েকশো বাইট কমপ্রেস করতে গল্ফ ডিজজট্রা কোডগুলি পারি না, তাই এখানে আমার অরগল্ফড সংস্করণ।

import sys, heapq, time

# dijkstra algorithm from 
# http://code.activestate.com/recipes/119466-dijkstras-algorithm-for-shortest-paths/
def dijkstra(G, start, end):
   def flatten(L):
      while len(L) > 0:
         yield L[0]
         L = L[1]

   q = [(0, start, ())]
   visited = set()
   while True:
      (cost, v1, path) = heapq.heappop(q)
      if v1 not in visited:
         visited.add(v1)
         if v1 == end:
            return list(flatten(path))[::-1] + [v1]
         path = (v1, path)
         for (v2, cost2) in G[v1].iteritems():
            if v2 not in visited:
               heapq.heappush(q, (cost + cost2, v2, path))

nodes = tuple(sys.argv[1:])

print "Generating connections,",
current_time = time.time()

words = set(x for x in open("websters-dictionary", "rb").read().lower().split() if 3 <= len(x) <= max(5, *[len(l)+1 for l in nodes]))

print len(words), "nodes found"

def error():
    sys.exit("Unreachable Route between '%s' and '%s'" % nodes)

if not all(node in words for node in nodes):
    error()

# following codes are modified version of
# http://norvig.com/spell-correct.html
alphabet = 'abcdefghijklmnopqrstuvwxyz'

def edits(word):
   splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
   deletes = [a + b[1:] for a, b in splits if b]
   replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
   prepends = [c+word for c in alphabet]
   appends = [word+c for c in alphabet]
   return words & set(deletes + replaces + prepends + appends)

# Generate connections between nodes to pass to dijkstra algorithm
G = dict((x, dict((y, 1) for y in edits(x))) for x in words)

print "All connections generated, %0.2fs taken" % (time.time() - current_time)
current_time = time.time()

try:
    route = dijkstra(G, *nodes)
    print '\n'.join(route)
    print "%d hops, %0.2fs taken to search shortest path between '%s' & '%s'" % (len(route), time.time() - current_time, nodes[0], nodes[1])
except IndexError:
    error()

টেস্ট

$ python codegolf-693.py post shot
Generating connections, 15930 nodes found
All connections generated, 2.09s taken
post
host
hot
shot
4 hops, 0.04s taken to search shortest path between 'post' & 'shot'

$ python codegolf-693.py zink silicon
Generating connections, 86565 nodes found
All connections generated, 13.91s taken
zink
pink
pank
pani
panic
pinic
sinic
sinico
silico
silicon
10 hops, 0.75s taken to search shortest path between 'zink' & 'silicon'

ব্যবহারকারী 300 এর টেস্ট যুক্ত করা হয়েছে

$ python codegolf-693.py vas arm
Generating connections, 15930 nodes found
All connections generated, 2.06s taken
vas
bas
bam
aam
arm
5 hops, 0.07s taken to search shortest path between 'vas' & 'arm'

$ python codegolf-693.py oxy pom
Generating connections, 15930 nodes found
All connections generated, 2.05s taken
oxy
poxy
pox
pom
4 hops, 0.01s taken to search shortest path between 'oxy' & 'pom'

$ python codegolf-693.py regatta gyrally
Generating connections, 86565 nodes found
All connections generated, 13.95s taken
Unreachable Route between 'regatta' and 'gyrally'

আরো কিছু

$ python codegolf-693.py gap shrend
Generating connections, 56783 nodes found
All connections generated, 8.16s taken
gap
rap
crap
craw
crew
screw
shrew
shrewd
shrend
9 hops, 0.67s taken to search shortest path between 'gap' & 'shrend'

$ python codegolf-693.py guester overturn
Generating connections, 118828 nodes found
All connections generated, 19.63s taken
guester
guesten
gesten
geste
gest
gast
east
ease
erse
verse
verset
overset
oversee
overseed
oversend
oversand
overhand
overhard
overcard
overcare
overtare
overture
overturn
23 hops, 0.82s taken to search shortest path between 'guester' & 'overturn'

3 <= len(x) <= max(map(len, [nodea, nodeb]))এটি কি গ্যারান্টিযুক্ত যে পথটি আরম্ভ এবং শেষের উভয় শব্দের চেয়ে আর কোনও শব্দের মধ্য দিয়ে যাবে না?
আরনাউড লে ব্ল্যাঙ্ক

দিয়ে চেষ্টা করুন oxy pom; সবচেয়ে ছোট পথ oxy->poxy->poy->pom। এছাড়াও মনে হয় যে আপনি যে কোনও স্থানে অনুমতি এবং প্রবেশের অনুমতি দিয়েছেন, যা অনুমোদিত নয় :-)
আরনাউড লে ব্ল্যাঙ্ক

@ ব্যবহারকারী 300, নির্দিষ্ট অনুমতি এবং সন্নিবেশ অংশগুলি, আমি খুব বেশি কপি-পেস্ট করেছি, ধন্যবাদ ;-) এবং আমি প্রাথমিক সীমাটি 5 টি অক্ষরে নির্ধারণ করছি এবং আরও +1 অক্ষর শুরু করতে এবং শেষের শব্দের অনুমতি দিচ্ছি, যদি তা এখনও ইস্যুতে থাকে তবে আমাকে জানান। ধন্যবাদ।
আপনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.