মাছের ব্যাখ্যা (না, সেই মাছ নয়)


69

এই পাঁচটি ASCII শিল্প সমুদ্রের প্রাণী বিবেচনা করুন:

  1. স্ট্যান্ডার্ড ফিশ: ><>বা<><
  2. দ্রুত মাছ: >><>বা<><<
  3. শক্ত মাছ: ><>>বা<<><
  4. টানা মাছ: ><<<>বা<>>><
  5. কাঁকড়া: ,<..>,

এমন একটি প্রোগ্রাম লিখুন যা অক্ষরের একটি স্বেচ্ছাসেবী স্ট্রিং গ্রহণ করে <>,.। যদি পুরো স্ট্রিংটিকে অ-ওভারল্যাপিং সমুদ্রের প্রাণীগুলির একটি সিরিজ হিসাবে ব্যাখ্যা করার উপায় থাকে , তবে স্ট্রিংটিকে প্রাণীর মধ্যে sertedোকানো একক স্পেস দিয়ে পুনরায় মুদ্রণ করা উচিত। যদি এই ব্যাখ্যাটি অসম্ভব হয় তবে কিছুই আউটপুট হওয়া উচিত নয় (প্রোগ্রামটি নিঃশব্দে শেষ হবে)।

উদাহরণস্বরূপ, স্ট্রিংটি <><><>দুটি স্ট্যান্ডার্ড ফিশ-ব্যাক-ব্যাক হিসাবে ব্যাখ্যা করা যেতে পারে। সংশ্লিষ্ট আউটপুট হবে <>< ><>

অন্য উদাহরণ হিসাবে, স্ট্রিংয়ের ><>><>>"উদাহরণগুলি" রয়েছে ...
(বন্ধনীগুলি কেবল সূচক হিসাবে যুক্ত হয়েছে)

  • একটি দম্পতি স্ট্যান্ডার্ড মাছ: [><>][><>]>
  • একটি দ্রুত মাছ: ><[>><>]>
  • একটি শক্তিশালী মাছ কয়েকটি উপায়ে: [><>>]<>>এবং><>[><>>]

তবে, কেবলমাত্র একটি স্ট্যান্ডার্ড মাছ এবং শক্তিশালী মাছের জুড়ি [><>][><>>]কোনও ফ্রি শেয়ারিং অক্ষর (কোনও ওভারল্যাপ নয়) সহ স্ট্রিংয়ের পুরো দৈর্ঘ্যকে ছড়িয়ে দেয়। এইভাবে ফলাফল আউটপুট ><>><>>হয় ><> ><>>

যদি স্ট্রিংটিকে ব্যাখ্যা করার একাধিক উপায় থাকে তবে আপনি সেগুলির কোনও একটি মুদ্রণ করতে পারেন। (এবং শুধুমাত্র প্রিন্ট এক । তাদের) উদাহরণস্বরূপ, <><<<><একটি প্রমিত মাছ ও একটি বলিষ্ঠ মাছ হিসেবে ব্যাখ্যা করা যেতে পারে: [<><][<<><], অথবা একটি দ্রুত মাছ ও একটি প্রমিত মাছ হিসাবে: [<><<][<><]। সুতরাং হয় <>< <<><বা <><< <><বৈধ আউটপুট হবে।


কাঁকড়াগুলি কেবল মজাদার জন্য। যেহেতু তারা শুরু করে না বা শেষ হয় <না >, তাই তাদের সনাক্ত করা খুব সহজ (কমপক্ষে দৃশ্যত)। উদাহরণস্বরূপ, স্ট্রিং

,<..>,><<<>,<..>,><>,<..>,<>>><,<..>,><>>,<..>,<<><,<..>,<><,<..>,>><>

স্পষ্টতই আউটপুট উত্পাদন করবে

,<..>, ><<<> ,<..>, ><> ,<..>, <>>>< ,<..>, ><>> ,<..>, <<>< ,<..>, <>< ,<..>, >><>

এখানে স্ট্রিংগুলির কয়েকটি উদাহরণ রয়েছে (প্রতি লাইনে একটি) যা কোনও আউটপুট দেয় না:

<><>
,<..>,<..>,
>>><>
><<<<>
,
><><>
,<><>,
<<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><

আপনি যদি শীর্ষস্থানটি সরিয়ে থাকেন তবে এখানে শেষ স্ট্রিংটি বিশ্লেষণ করা যাবে <:

<<>< ><<<> >><> ><> ><> <>< <>>>< >><> >><> >><> ><>> <<><

(অন্যান্য সম্ভাব্য আউটপুটও থাকতে পারে))

বিস্তারিত

  • ইনপুট স্ট্রিংয়ে কেবল অক্ষর থাকবে <>,.
  • ইনপুট স্ট্রিং কমপক্ষে একটি অক্ষর দীর্ঘ হবে।
  • কোনও সাধারণ উপায়ে ইনপুট নিন (কমান্ড লাইন, স্টিডিন) এবং স্ট্যান্ডআউটে আউটপুট।
  • বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। ( হ্যান্ড বাইট কাউন্টার। ) টাইব্রেকার আগের পোস্ট।

4
আমি ভেবেছিলাম আমরা ফিশের গানের কথা ব্যাখ্যা করতে যাচ্ছি :-(
রিমকো গ্রিলিচ

9
@ রেমকো জেরলিচ সেই মাছটিও নয়
ক্যালভিনের

4
অবশেষে আরএফসি 3889 জেনারেল ফিশ ট্রান্সফার ফর্ম্যাট (আরএফসি 3500: স্ট্যান্ডার্ড ফিশ ট্রান্সফার ফর্ম্যাট) কার্যকর করার জন্য একটি কোড গল্ফ!
সান্চাইজস

11
বোনাস পয়েন্ট যদি আপনি এটি BrainF *** ব্যবহার করে করেন! এবং আপনার প্রোগ্রামটিকে নিজের কোডটি উপলব্ধি করতে যত বেশি সময় লাগবে তা মাছের সাথে সামঞ্জস্যপূর্ণ নয়, তত ভাল।
mbomb007

3
আমি এটি দেখেছি এবং স্ক্রোল হয়ে গিয়েছি, পদত্যাগ করে এই সত্যটি প্রকাশ করা হয়েছে যে এটি @ ক্যালভিনের শখ এবং কেউ না, কেউ নয়।
সোহম চৌধুরী

উত্তর:


21

পাইথ, 64 48 50 বাইট

#jdhfqzsTsm^+msXtjCk2U2"<>""
\r.1"",<..>,"dlzB

পরীক্ষা ক্ষেত্রে.


52 বাইটে এখানে চিরতরে ( ) নিবে না এমন সংস্করণ ।O(9n/3)


এটি ব্রুট ফোর্স পদ্ধতির, সমস্ত সিকোয়েন্স তৈরি করে এবং ইনপুটটির কোনও যোগফল কিনা তা পরীক্ষা করে দেখুন। মাছের চিত্রগুলি অক্ষর হিসাবে সংকুচিত, যার বাইনারি উপস্থাপনা >এবং <। পুরো জিনিসটি ট্রাই-ক্যাচ ব্লকে মোড়ানো হয়েছে যাতে কোনও ফলাফল পাওয়া না গেলে কোনও আউটপুট না ঘটে।

এটি একটি সমাধান।O(9n)

কিছু অক্ষর উপরে ছিটানো হয়, কারণ নিয়ন্ত্রণ অক্ষর ব্যবহৃত হয়। তারা উপরের লিঙ্কে বিশ্বস্তভাবে পুনরুত্পাদন করা হয়।

এক্সএক্সডি আউটপুট:

0000000: 236a 6468 6671 7a73 5473 6d5e 2b6d 7358  #jdhfqzsTsm^+msX
0000010: 746a 436b 3255 3222 3c3e 2222 0a5c 7212  tjCk2U2"<>"".\r.
0000020: 141b 1d2e 3122 222c 3c2e 2e3e 2c22 646c  ....1"",<..>,"dl
0000030: 7a42                                     zB

অনলাইন সংকলকটি প্রশ্নের উত্তর ইনপুটটিতে এটি চালানোর জন্য খুব ধীর?
অপ্টিমাইজার

হ্যাঁ, খুব বেশি ধীর / খুব অল্প সময়ের মধ্যেই। ><>><>>আমার মেশিনে 15 সেকেন্ড সময় লাগে
isaacg

28
হে (9 ^ n) , পবিত্র অদক্ষতা!
mbomb007

2
@ mbomb007 আমি নিয়মে দক্ষতা সম্পর্কে কিছুই দেখতে পাচ্ছি না: পি +1!
জন ওডম

3
@ mbomb007: সম্ভবত এখনও একটি সি ++ কম্পাইলারের চেয়ে ভাল।
কে কে কোয়ান

27

নন-ডিস্ট্রিমেন্টিক ট্যুরিং মেশিন, 20 টি রাজ্য, 52 ট্রানজিশন (882 বাইট হতে পারে)

আপনি কীভাবে এটিকে বাইটে রূপান্তর করবেন? আমি লিখেছি ফাইল (একেবারে golfed নয়) অ্যালেক্স Vinokur এর এই মেশিনে চালানো একটি টুরিং মেশিন সিমুলেটার 1wc -cনিম্নলিখিতগুলি আউটপুট দেয় (বিবরণ ফাইল এবং ইনপুট ফাইলগুলি বাদ দিয়ে):

 12 alphabet
 49 meta
740 rules
 81 states
882 total

যাইহোক, আমি আমার কম্পিউটার বিজ্ঞানের এ-স্তরগুলির জন্য প্রস্তুতি নিচ্ছিলাম, তাই আমি ভেবেছিলাম এটি একটি ভাল অনুশীলন হবে (আমি জানি না আমি কী ভাবছিলাম)। সুতরাং সংজ্ঞা এখানে:

সংজ্ঞা

যুক্তরাষ্ট্র

বর্ণমালা

প্রারম্ভিক অবস্থা

ফাঁকা চরিত্র

রাষ্ট্রগুলি গ্রহণ করা

ট্রানজিশন ফাংশন

(রূপান্তর কার্য)

খারাপ চিত্রটি ক্ষমা করুন, তবে কম্পিউটারে এই জিনিসটি আবার আঁকতে আমার বিরক্ত করা যায় না। আপনি যদি বাস্তবে রূপান্তর নিয়মগুলি বোঝাতে চান তবে আমি আপনাকে উপরে লিঙ্ক করা নিয়ম ফাইলটি পড়ার পরামর্শ দিচ্ছি।


আমি Xস্পেসগুলির পরিবর্তে গুলি ব্যবহার করেছি কারণ স্পেসগুলি এখানে ভিজ্যুয়ালাইজ করা শক্ত এবং সিমুলেটর বর্ণমালায় স্থানগুলি গ্রহণ করে না।

ধারণাটি মোটামুটি সহজ - Q1 থেকে q4 টি ডান-মুখের মাছগুলি ধরতে ব্যবহৃত হয়, Q11 থেকে Q14 বাম-মুখী মাছগুলি ধরতে ব্যবহার করা হয়, কাঁকড়ার জন্য Q15 থেকে q19 এবং q5 থেকে q10 ব্লাব কেবল একটি স্থান সন্নিবেশ করানোর জন্য এবং সমস্ত স্থানান্তরিত করার জন্য ডানদিকে নিম্নলিখিত অক্ষর।

যদি স্ট্রিংটি ব্যাখ্যামূলক হয় তবে এটি স্ট্রিং গ্রহণ করে এবং টেপটিতে ফাঁকা স্থান সহ স্ট্রিং থাকে। অন্যথায় এটি স্ট্রিংটিকে প্রত্যাখ্যান করে (আমি অনুমান করি যে এটিকে কোনও আউটপুট হিসাবে গণনা করা হয়নি - টেপ খালি করা বেশ সহজ হবে তবে প্রচুর সংক্রমণের নিয়ম প্রয়োজন হবে এবং আমি মনে করি না এটি রূপান্তর ফাংশনটি দেখার জন্য প্রাকৃতিকভাবে তৈরি করবে)।


1 দ্রষ্টব্য: সংকলন করা কঠিন। আমাকে src/tape.cppফাইলটি সম্পাদনা করতে হবে এবং এর সাথে প্রতিস্থাপন LONG_MAXকরতে হবে 1<<30এবং তারপরে demoডিরেক্টরিতে যেতে হবে , মেকফিল সম্পাদনা করে প্রতিস্থাপন EXE_BASENAMEকরতে turing.exeএবং সম্পাদন করতে হবে make। তারপরে আমি যে ফাইলগুলি লিখেছি এবং সম্পাদন করেছি তার সাথে ডিরেক্টরিতে যান /path/to/turing/download/src/turing.exe meta


3
স্পষ্টতই আমি পাগলামি জন্য +1।
Kzqai

22

ফিশ (হ্যাঁ, সেই মাছ), 437 বাইট

এটি আমাকে সেই প্রোগ্রামিং কাজগুলির মধ্যে একটি হিসাবে আঘাত করে যেখানে ঠিক এক ভাষা ঠিক।

#!/usr/bin/fish

set the_fishes "><>" "<><" ">><>" "<><<" "><>>" "<<><" "><<<>" "<>>><" ",<..>,"
set my_fishes

function startswith
        set -l c (echo -n $argv[2]|wc -c)
        echo $argv[1]|cut -c(math $c+1)-
        test $argv[2] = (echo $argv[1]|cut -c-$c)
end

function pickafish
        set -l fix 1
            while true
                if test $fix -gt (count $the_fishes); return 1; end

                if not set rest (startswith $argv[1] $the_fishes[$fix])
                            set fix (math $fix+1)
                        continue
                end    
                set my_fishes $my_fishes $the_fishes[$fix]
                    if test -z $rest
                        echo $my_fishes
                            exit
                    end
                    if not pickafish $rest
                    set my_fishes $my_fishes[(seq (math (count $my_fishes) - 1))]
                    set fix (math $fix+1)
                        continue
                end
        end
end

pickafish $argv[1]

নিম্নলিখিত সংস্করণটি এখনও চ্যালেঞ্জের দীর্ঘতম উত্তর,

set t "><>" "<><" ">><>" "<><<" "><>>" "<<><" "><<<>" "<>>><" ",<..>,";set m;function p;set -l i 1;while true;test $i -gt 9; and return 1;if not set r (begin;set c (echo $t[$i]|wc -c);echo $argv[1]|cut -c$c-;test $t[$i] = (echo $argv[1]|cut -c-(math $c-1));end);set i (math $i+1);continue;end;set m $m $t[$i];if test -z $r;echo $m;exit;end;if not p $r;set m $m[(seq (math (count $m)-1))];set i (math $i+1);continue;end;end;end;p $argv[1]

তবে যেহেতু এটি বেশিরভাগ শ্লেষের জন্য করা হয়েছিল (আপনি ক্ষমা করবেন, আমি আশা করি), আরও ভাল গল্ফিং পাঠকের অনুশীলন হিসাবে ছেড়ে দেওয়া হয়েছে।


9
আপনি কী জানেন, এই কাজের জন্য দুটি (কমপক্ষে) দুটি সঠিক ভাষা আছে ! কারও (যিনি আমি নন)
অন্যটিটি করা

2
BASE64 ব্লবের সাথে BASH এর 383 অক্ষরে একই প্রোগ্রাম অন্তর্ভুক্ত রয়েছে: printf 'H4sIADSjKlUCA4VPQW6DMBC89xUj5AOocSSOlV1/BHGgjgMrBUPN0kRRHl/jmEg99WBLszM7M7s4BqMw2hQotNHxNy+QkDYJZU7rTJqED/p4NIdCLdFmVOfVW6bJY04DeQGhVteBLg4cVqfYLQxBkD3jQ6HzJwTHa/BRRmf4ibEtBpRfriefXCxKZ4cJghtB7eNqIW2lnqMu9D9N3T7sGtOssDInJCk+982/MlmOHQ+I6rqKRv5UpRxCntN7XSk7eSYfK0f+eR3EmI23qilH3iFCrjIqdyNO8nzJvJH7alMu7jsnlHZafWw5VluD9r/0/c2vQ95+AYBxAwS2AQAA'|base64 --decode|gzip -d>a;fish a
মার্ক কে কোয়ান

20

> <>, 602 বাইট

0&>i:0)?vr>:5%4-?v}:5%?;}:5%1-?;}:5%1-?;}:5%2-?;}:5%4-?;}&~0& v
  \     /        >:5%2-?v}:5%2-?v}:5%?v}:5%2-?v}              v
 &:?v;>*} ^      v      <       >:5% ?v}:5%?v} :5% ?v}:5%2-?v}v
v&-1< ^48<                                  >: 5%2-?v}:5%2-  ?v&1+&0}}v
>    :?v~^       >:5%?v}:5%?v}:5%2-  ?v}:5%  ?v}              v
^~v?%8:<                    >:5%2-?v}: 5%2-?v} :5%2- ?v}:5%?v}v
^{<        >0>=?;:v                         >: 5%    ?v}:5%  ?v&1+&0}}v
           ^lo~<  <   >            >  >       >     > >     >  02.
          \}*48^?=i:                                          <       <

ফিশের একটি সমাধান, সম্ভবত খুব গল্ফযোগ্য তবে এটি আমার প্রথম> <> প্রোগ্রাম। এটি ইনপুট স্ট্যাক থেকে এটির ইনপুট নেয় এবং অনলাইন> <> দোভাষীতে চালিত হয়।

কিভাবে এটা কাজ করে :

একটি লুপ সমস্ত ইনপুট পড়ে এবং এটি স্ট্যাক করে, এটিকে বিপরীত করে এবং নীচের অংশে একটি -1 রাখে যা চিহ্নিত করবে যে পার্সিং সম্পূর্ণ হয়েছে (স্ট্রিংটিকে পার্সেবল মনে না করা অবধি সমস্ত অক্ষর স্ট্যাকের উপরে থাকবে)।
পার্সিংটি ব্যবহার করে সমস্ত অক্ষর পৃথক 5 মডেল এবং সমস্ত নিদর্শন <> << এবং> << ব্যতীত নির্বিচারবাদী uses পার্স করা অক্ষরগুলি স্ট্যাকের নীচে রাখা হয়।
যখন কোনও প্যাটার্নটি সম্পূর্ণ হয়, -1 উপরে থাকলে সমস্ত অক্ষর মুদ্রিত হয়, অন্যথায় একটি স্থান যুক্ত হয় এবং প্রোগ্রামটি লুপ হয়।
যদি <> << বা> <>> এর মুখোমুখি হয়, তবে রেজিস্টারটি বাড়ানো হবে (শুরুতে 0), এবং শেষের অক্ষরের আগে একটি 0 স্ট্যাকের উপরে স্থাপন করা হয় (যাতে <> <বা> <> রোলব্যাকের পরে থাকে) । পার্সিংয়ের পরে যদি ত্রুটিটি উপস্থিত হয়, তবে রেজিস্টার হ্রাস পেয়েছে, 0 এর পরে সমস্ত অক্ষর উপরে রেখে দেওয়া হবে (% 8 = 0 পরীক্ষার জন্য স্পেসগুলি বাদ দিয়ে)।
যদি রেজিস্টার 0 হয় বা কাঁকড়ার অভ্যন্তরে কোনও ত্রুটি ধরা পড়ে তবে প্রোগ্রামটি ঠিক তখনই শেষ হয় ends


13

পাইথন 3, 156

*l,s=[],input()
for _ in s:l+=[y+[x]for x in"><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,".split()for y in l]
for y in l:
 if"".join(y)==s:print(*y);break

কৌশলটি হ'ল মাছের তালিকা তৈরি করা এবং ইনপুট স্ট্রিংয়ের সাথে তাদের উপযোগটি তুলনা করা।

এটি অসম্ভব দীর্ঘ সময় নেয়। আপনি আসলে একটি আউটপুট দেখতে প্রতিস্থাপন চান for _ in sসঙ্গে for _ in [0]*3, যেখানে 3 মাছ সংখ্যার জন্য সর্বোচ্চ সীমা। এটি ব্যবহারে কাজ করে sকারণ sপ্রতি চরে সর্বাধিক একটি মাছ থাকে।

বাগফিক্স এবং ইনপুটটিতে একটি চর সংরক্ষণের জন্য Sp3000 ধন্যবাদ।

পুরানো 165:

f=lambda s:[[x]+y for x in"><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,".split()for y in f(s[len(x):])if s[:len(x)]==x]if s else[[]]
y=f(input())
if y:print(*y[0])

@ এসপি 3000 ভাল ধরা, আমি মনে করি আমি সমস্যাটি জানি।
xnor

@ Sp3000 আমি মনে করি এটি এখন কাজ করা উচিত। এটি a and b or cযখন bফ্যালসি হতে পারে তখন একটি ত্রৈমাসিকের একটি ভুল মান দেওয়ার ঘটনা । আমি if/else2 টি অক্ষরে ফিরে এসেছি , তবে তিনটি কাজ করার কোনও উপায় থাকতে পারে।
xnor

যেহেতু আপনি ইতিমধ্যে পাইথন 3 এ *l,s=[],input()
রয়েছেন তাই আপনিও

আপনি যখন করেছিলেন তখন আপনি বাইট গণনা হ্রাস করতে ভুলে গেছেন ^ যে
আন্ডারগ্রাউন্ডোমোনাইল

12

পার্ল, 81 + 1 বাইট

/^((>><>|><(|>|<<)>|<><<|<(|<|>>)><|,<\.\.>,)(?{local@a=(@a,$2)}))*$(?{say"@a"})/

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

এই কোডটি $_ভেরিয়েবলের ইনপুটটি প্রত্যাশা করে ; এটি প্রতিটি ইনপুট লাইনে প্রয়োগ করতে পার্লের -nস্যুইচ ( +1 বাইট হিসাবে গণ্য ) দিয়ে এটি চালান , যেমন:

perl -nE '/^((>><>|><(|>|<<)>|<><<|<(|<|>>)><|,<\.\.>,)(?{local@a=(@a,$2)}))*$(?{say"@a"})/'

এই কোডটি দক্ষ ব্যাকট্র্যাকিং অনুসন্ধান চালানোর জন্য পার্লের রেগজিপ ইঞ্জিন (এবং বিশেষত এর এমবেডেড কোড এক্সিকিউশন বৈশিষ্ট্য) ব্যবহার করে। প্রাপ্ত পৃথক মাছগুলি @aঅ্যারেতে সংগ্রহ করা হয় , যা ম্যাচটি সফল হলে স্ট্রিংফাইন্ড এবং মুদ্রিত হয়।

এই কোড এছাড়াও পার্ল 5.10+ ব্যবহার sayবৈশিষ্ট্য, এবং তাই দিয়ে চালানো হতে হবে -Eবা -M5.010সুইচ (অথবা use 5.010;যেমন আধুনিক বৈশিষ্ট্যগুলি সক্রিয় করতে)। ঐতিহ্য দ্বারা, কেবলমাত্র ব্যবহৃত ভাষা একটি বিশেষ সংস্করণ অক্ষম এমন সুইচ বাইট গণনা মধ্যে অন্তর্ভুক্ত হয় না।

বিকল্পভাবে, এখানে একটি 87-বাইট সংস্করণ যা কোনও বিশেষ কমান্ড-লাইন সুইচ প্রয়োজন হয় না। এটি স্টাডিনের একটি লাইন পড়ে এবং ফলাফলটি (যদি থাকে তবে) কোনও স্ট্রোল্ট লাইনফিড ছাড়াই প্রিন্ট করে:

<>=~/^((>><>|><(|>|<<)>|<><<|<(|<|>>)><|,<\.\.>,)(?{local@a=(@a,$2)}))*$(?{print"@a"})/

গীত। যদি আউটপুটটির শুরুতে কোনও অতিরিক্ত স্থান মুদ্রণের অনুমতি দেওয়া হয়, তবে আমি তুচ্ছভাবে আরও দুটি বাইট সংরক্ষণ করতে পারতাম:

/^((>><>|><(|>|<<)>|<><<|<(|<|>>)><|,<\.\.>,)(?{local$a="$a $2"}))*$(?{say$a})/

আপনি যদি ><(>|<<)>
ফ্যাক্টরিজ করেন

@ এসপি 3000: ধন্যবাদ! এটি মাছের প্রতিটি দিকের জন্য একটি বাইট সংরক্ষণ করে।
ইলমারি করোনেন

6

পাইথন 3, 196 186 বাইট

F="><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,".split()
def g(s):
 if s in F:return[s]
 for f in F:
  i=len(f)
  if f==s[:i]and g(s[i:]):return[f]+g(s[i:])
R=g(input())
if R:print(*R)

সাধারণ পুনরাবৃত্তি। gহয় পার্স করা মাছের একটি তালিকা ফেরত দেয়, অথবা Noneযদি ইনপুট স্ট্রিংটি পার্স্বেবল হয়।


6

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

আমি প্রথমে পাইথন রেজেক্স সমাধানটি চেষ্টা করেছিলাম, তবে একাধিক নিদর্শনগুলির সাথে ম্যাচের পরে গ্রুপগুলি বের করার কোনও উপায় নেই বলে মনে হচ্ছে। নীচে একটি পুনরাবৃত্ত অনুসন্ধান যা পরীক্ষার ক্ষেত্রে ভাল করতে পারে বলে মনে হচ্ছে।

a='><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,'.split()
def d(t,p=0):
 if p<len(t):
  for e in a:
   z=p+len(e)
   if e==t[p:z]:
    if z==len(t):return[e]
    c=d(t,z)
    if c:return[e]+c
c=d(raw_input())
if c:
 print' '.join(c)

একটি উদাহরণ পরীক্ষা:

$ echo ",<..>,><<<>,<..>,><>,<..>,<>>><,<..>,><>>,<..>,<<><,<..>,<><,<..>,>><>" | python soln.py 
,<..>, ><<<> ,<..>, ><> ,<..>, <>>>< ,<..>, ><>> ,<..>, <<>< ,<..>, <>< ,<..>, >><>

এবং অবারিত সংস্করণ:

fishtypes = '><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,'.split()

def getfish(t, p=0):
    if p < len(t):
        for afish in fishtypes:
            z = p+len(afish)
            if afish == t[p:z]:
                if z == len(t) :
                    return [afish]
                fishlist = getfish(t, z)
                if fishlist :
                    return [afish]+fishlist

fishlist = getfish(raw_input())
if fishlist:
    print ' '.join(fishlist)

3
আমি মনে করি আপনার শেষটি ifএকক লাইনে থাকতে পারে (যেমন আপনি অন্য কোথাও করেছিলেন)। এছাড়াও, পরিবর্তে if p<len(t)আমি মনে করি আপনি if t[p:]কয়েকটি বাইট সংরক্ষণ করতে পারেন ।
ম্যাথমন্ডন

4

সি # - 319 বাইট

এই সমাধানটি লজ্জাজনকভাবে সহজ, গল্ফের পক্ষে খুব কমই। এটি একটি সম্পূর্ণ প্রোগ্রাম, STDIN থেকে একটি লাইন হিসাবে ইনপুট নেয় এবং ফলাফলটি STDOUT এ আউটপুট করে।

using C=System.Console;class P{static void Main(){C.Write(S(C.ReadLine()));}static string S(string c){int i=c.LastIndexOf(' ')+1;foreach(var o in"<>< ><> <<>< ><>> >><> <><< ><<<> <>>>< ,<..>,".Split()){string k=c+"\n",m=c.Substring(i);if(m==o||m.StartsWith(o)&&(k=S(c.Insert(i+o.Length," ")))!="")return k;}return"";}}

এটি কেবল স্থানের (বা স্ট্রিংয়ের শুরুতে) পরে প্রতিটি মাছের সাথে প্রথম অবস্থানে মেলে এবং প্রতিটি ধরণের মাছের সাথে এটি মিলিয়ে দেখার চেষ্টা করে। যদি মাছটি মানানসই হয়, তবে এটি মাছের পরে কোনও স্থান সন্নিবেশ করানোর পরে পুনরাবৃত্তভাবে সলভারকে কল করে, বা মিলহীন স্ট্রিংটি আক্ষরিক অর্থে ফিশ (যদি আমরা সমাধান পেয়েছি) থাকে তবে কেবল এটির ইনপুট দেয় (আউটপুট কারণে একটি with n সহ) returns ।

আমি মাছের স্ট্রিংটিকে স্বাভাবিক কলমোগোরভ চিকিত্সা দেওয়ার খুব একটা চেষ্টা করি নি, কারণ এটি এত দীর্ঘ নয় এবং আমি সি # তে স্ট্রিংকে উল্টানোর কোনও সস্তা উপায় খুঁজে পাচ্ছি না (আমি লিনকিউ মনে করি না) প্রদান করবে), তাই সেখানে কিছু সুযোগ থাকতে পারে তবে আমি কিছুটা সন্দেহ করি।

using C=System.Console;

class P
{
    static void Main()
    {    
        C.Write(S(C.ReadLine())); // read, solve, write (no \n)
    }

    static string S(string c)
    {
        int i=c.LastIndexOf(' ')+1; // find start of un-matched string

        // match each fish
        foreach(var o in"<>< ><> <<>< ><>> >><> <><< ><<<> <>>>< ,<..>,".Split())
        {
            string k=c+"\n", // set up k for return if we have finished
            m=c.Substring(i); // cut off stuff before space
            if(m==o|| // perfect match, return straight away
               m.StartsWith(o)&& // fish matches the start
               (k=S(c.Insert(i+o.Length," "))) // insert a space after the fish, solve, assign to k
               !="") // check the solution isn't empty
                return k;
        }

        // no fish match
        return"";
    }
}

ওহ, আপনি আমাকে পেয়েছেন। এটি একাধিক সংজ্ঞা ছিল না। শব্দ কমাতে মন্তব্য সরানো হয়েছে।
Kroltan

3

হাস্কেল (পার্সেক) - 262

import Text.Parsec
c=words"><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,"
p c d=choice[eof>>return[],lookAhead(choice$map(try.string)d)>>=(\s->try(string s>>p c c>>=(\ss->return$s:ss))<|>p c(filter(/=s)c))]
main=interact$either show unwords.runParser(p c c)()""

2
নিঃশব্দে ব্যর্থ হওয়ার বিপরীতে, যদি ইনপুটটি ভাগ করা যায় না তবে এটি একটি ত্রুটি বার্তা প্রিন্ট করে।
জাগারব

2
import sys

def unfish(msg,dict,start):
    if(len(msg[start:])<3):
        return "";
    for i in range(3,6):
        if (msg[start:start+i] in dict):
            if(start+i==len(msg)):
                return msg[start:start+i];
            else:
                ret = unfish(msg,dict,start+i);
                if ret != "":
                    return msg[start:start+i]+" "+ret;
    return ""

dict = {'><>':1,'<><':1,'>><>':1,'<><<':1,'><>>':1,'<<><':1,'><<<>':1,'<>>><':1,',<..>,':1};

print unfish(sys.argv[1],dict,0);

আমি অজগর নুব একটি বিট তাই অদ্ভুততা উপেক্ষা: পি


3
পিপিসিজিতে আপনাকে স্বাগতম। এটি একটি কোড-গল্ফ চ্যালেঞ্জ, এর অর্থ আপনার যতটা সম্ভব কম অক্ষর সহ কোডটি লেখার চেষ্টা করা উচিত। একটি শুরুর জন্য আপনি একক বর্ণের ভেরিয়েবলগুলি ব্যবহার করতে পারেন (উদাহরণস্বরূপ mপরিবর্তে msg, এর sপরিবর্তে start...) এবং ইনক্রিমেন্টে মাত্র 1 স্পেস ব্যবহার করতে পারেন। এবং দয়া করে আপনার প্রোগ্রামের চরিত্র-গণনা যুক্ত পোস্ট করুন (আপনি তাদের এখানে গণনা করতে পারেন )।
জাকুবে

ধন্যবাদ @ জাকুবে, আমি জানতাম না যে এটিও একটি গল্ফ চ্যালেঞ্জ ছিল। টিপস জন্য ধন্যবাদ।
খোলামেলা

2

রুবি, 177 বাইট

স্বল্পতম নয় তবে রুবিতে প্রথমটি:

def r(e,p,m)t='';p.each{|n|t=e.join;return r(e<<n,p,m)if m=~/^#{t+n}/};(m==t)?e:[];end
puts r([],%w(><<<> <>>>< ><>> <<>< >><> <><< ><> <>< ,<..>,),gets.strip).join(' ')

এখানে চেষ্টাটি পুনরাবৃত্তভাবে একটি রেজিপ্স্প প্রসারিত করা এবং ইনপুটটির বিপরীতে এটি মেলানো।
যদি দীর্ঘতর মিল খুঁজে পাওয়া যায় তবে r () পুনরাবৃত্তি হবে, যদি না মিলিত হয় তবে শেষের ম্যাচটি পুরো ইনপুট স্ট্রিংটি ব্যবহার করে কিনা তা পরীক্ষা করে দেখবে এবং কেবলমাত্র যুক্ত স্থানগুলির সাহায্যে এটিকে আউটপুট দেয়।


1

সিজেম, 111 96 91 (বা 62 বাইট)

পুনরাবৃত্তি হওয়ার সাথে সাথে সমস্ত মাছের সংমিশ্রণ কী সম্ভব তা সন্ধান করার জন্য একটি পুনরাবৃত্ত লোভী দৃষ্টিভঙ্গি। সত্যিই এখন গল্ফ না।

q_aa\,{{" È÷®µãÑø"255b5b" ><,."f=S/\f{)_3$#{;;;}{2$,>:P@a\a++}?PR+!{S:R*W<o}*}~}%}*];

কোডটিতে কিছু মুদ্রিত অক্ষর রয়েছে, সুতরাং রেফারেন্সের জন্য নীচের লিঙ্কটি ব্যবহার করুন।

আপডেট স্ট্রিং এনকোড হয়েছে

একবার গল্ফিং হয়ে গেলে ব্যাখ্যা যোগ করবে

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


62 বাইট

সুপার ধীর সংস্করণ। এটি মূলত সমস্ত সংমিশ্রণ এবং চেক তৈরি করে যা ইনপুট সমান।

L"¬ééãLù:9$"255b6b5," ><,."erS/aq:Q,*{m*}*{sQ=}=`"[]\""-

এটিতে ছাপিয়ে যাওয়া অক্ষরগুলিও রয়েছে তাই নীচের লিঙ্কটিতে নির্ভর করুন।

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


1

হাস্কেল, 148 146 বাইট

main=mapM_ putStr.take 1.filter(all(`elem`words"><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,").words).map concat.mapM(\a->[[a],a:" "])=<<getLine

পরীক্ষামূলক:

$ echo "><>><>>>" | runhaskell fishes.hs

$ প্রতিধ্বনি "> <>> <>>" | রানহসকেল ফিশস.হস

<>> <>>

ব্যাখ্যা

আমার অনুরূপ প্রশ্নের উত্তরটির উপর ভিত্তি করে । অ্যালগরিদম তাত্পর্যপূর্ণ সময়ে চালিত হয়।

এটি ডান থেকে বামে পড়ে।

=<<getLine              -- Read a line from STDIN.
mapM(\a->[[a],a:" "])   -- Replace each letter 'a' by "a" or "a " in
                        -- all possible ways, collect results to a list.
map concat              -- Concatenate those lists-of-strings into strings.
filter(all(...).words)  -- Keep those whose words are correct fish.
take 1                  -- Discard all but the first one.
mapM_ putStr            -- Print each string in that 1- or 0-element list.
main=                   -- That is the main function.

এটি কোনও স্ট্রিং মুদ্রণ করবে না যা কোনও স্থানের সাথে শেষ হয়, যদিও এই জাতীয় স্ট্রিংগুলি খুব উত্পন্ন হয়, কারণ এর কোনও ফাঁকা অংশটি প্রথম তৈরি করা হয়।


1

জাভাস্ক্রিপ্ট (ES6), 164

পুনরাবৃত্তি, গভীরতা প্রথম স্ক্যান।
পপআপের মাধ্যমে আই / ওয়ের সাথে একটি প্রোগ্রাম হিসাবে:

alert((k=(s,r)=>'><>0<><0>><>0<><<0><>>0<<><0><<<>0<>>><0,<..>,'.split(0)
.some(w=>s==w?r=w:s.slice(0,l=w.length)==w&&(t=k(s.slice(l)))?r=w+' '+t:0)?r:'')
(prompt()))

একটি পরীক্ষামূলক ফাংশন হিসাবে:

k=(s,r)=>'><>0<><0>><>0<><<0><>>0<<><0><<<>0<>>><0,<..>,'.split(0)
.some(w=>s==w?r=w:s.slice(0,l=w.length)==w&&(t=k(s.slice(l)))?r=w+' '+t:0)?r:''

পরীক্ষার স্যুট (ফায়ারফক্স / ফায়ারব্যাগ কনসোলে চালিত)

t=['<><><>', '><>><>>', '<><<<><',',<..>,><<<>,<..>,><>,<..>,<>>><,<..>,><>>,<..>,<<><,<..>,<><,<..>,>><>',
'<><>',',<..>,<..>,','>>><>','><<<<>',',','><><>',',<><>,',
'<<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><','<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><']

t.forEach(t=>console.log(t + ': ' +k(t)))

আউটপুট

<><><>: <>< ><>
><>><>>: ><> ><>>
<><<<><: <>< <<><
,<..>,><<<>,<..>,><>,<..>,<>>><,<..>,><>>,<..>,<<><,<..>,<><,<..>,>><>: ,<..>, ><<<> ,<..>, ><> ,<..>, <>>>< ,<..>, ><>> ,<..>, <<>< ,<..>, <>< ,<..>, >><>
<><>: 
,<..>,<..>,: 
>>><>: 
><<<<>: 
,: 
><><>: 
,<><>,: 
<<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><: 
<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><: <<>< ><<<> >><> ><> ><> <>< <>>>< >><> >><> >><> ><>> <<><

শুধু কে ফাংশনটি রহিত

function k(s)
{
  var f='><>0<><0>><>0<><<0><>>0<<><0><<<>0<>>><0,<..>,'.split(0) 
  var i, w, l, t

  for (w of f)
  {
    if (s == w)
    {
      return w
    } 
    l = w.length
    if (s.slice(0,l) == w && (t = k(s.slice(l))))
    {
      return w + ' ' + t
    }
  }
  return ''
}

0

হাস্কেল, 148 142

p[]=[[]]
p s=[i:j|i<-words"><> >><> ><>> ><<<> <>< <><< <<>< <>>>< ,<..>,",i==map fst(zip s i),j<-p$drop(length i)s]
    g s=unwords$head$p s++p[]

এটি মাছের উপরে পুনরাবৃত্তি করতে তালিকার বোধগম্য ব্যবহার করে, শুরুর সাথে মেলে এমনগুলি বাছাই করুন এবং পুনরাবৃত্তভাবে চালিয়ে যান।


3
চ্যালেঞ্জটি স্পষ্টভাবে একটি সম্পূর্ণ প্রোগ্রামের জন্য অনুরোধ করে যা কোনও ফাংশনের বিপরীতে তার আউটপুট প্রিন্ট করে।
জাগারব

0

জাভাস্ক্রিপ্ট (122 135 বাইট)

এখানে সর্বাধিক গল্ফ নয়, কিছুটা নামিয়ে দেওয়া যেতে পারে।

এই একটি রেজেক্স ভিত্তিক, এবং কী চলছে তা নির্ধারণ করার জন্য একটি বাচ্চা শক্ত।

alert(prompt(R=RegExp,r='(<<?><|><>>?|,<\.\.>,|>><>|><<<>|<><<|<>>><)').match(R('^'+r+'+$'))[0].split(R(r+'(?=[>,]|$)','g')).join(' '))

এটি একটি ওয়ান লাইনার।

মূলত, আমি সিনট্যাক্সটি পরীক্ষা করি এবং তারপরে আমি অক্ষরের উপর ভিত্তি করে স্ট্রিংটি বিভক্ত করে একসাথে যোগদান করি।
আপনি কোনও অবৈধ ইনপুট দিলে এটি একটি ব্যতিক্রম ছুঁড়ে দেয়।

যদি এটি ব্যতিক্রম ছুঁড়ে না ফেলতে পারে (126 139 বাইট):

(i=prompt(R=RegExp,r='(<<?><|><>>?|,<\.\.>,|>><>|><<<>|<><<|<>>><)')).match(R('^'+r+'+$'))&&alert(i.split(R(r+'(?=[>,]|$)','g')).join(' '))

দু'জনই এক-রেখার।
দুজনেই একইভাবে কাজ করে।


প্রান্তের কেসটি ভাল কাজ করছে না তা সনাক্ত করার জন্য আপনাকে @ edc65 ধন্যবাদ Thank


আপনি এটি এখানে পরীক্ষা করতে পারেন (নথিতে আউটপুট লেখা হবে)।

এটি যখন আপনি অবৈধ কোডটি প্রবর্তন করেন তখন ব্যতিক্রমগুলি ছুঁড়ে ফেলা ভার্সনের উপর ভিত্তি করে।

(বর্তমানে, স্ট্যাক স্নিপেটগুলিতে একটি বাগ রয়েছে, আমি মেটাতে পোস্ট করেছিইতিমধ্যে এটি গতকাল জিজ্ঞাসা করা হয়েছিল। এটা কাজ জন্য, আমি প্রতিস্থাপিত করে থাকেন $সঙ্গে \x24, যা একই আউটপুট হয়েছে। আপনি বাগটি সম্পর্কে এখানে পড়তে পারেন: http://meta.codegolf.stackexchange.com/questions/5043/stack-snippets-messing-with-js )


উদাহরণ দিয়ে ব্যর্থ ><>><>>। আমি মনে করি রেজিএক্সএক্স দিয়ে এটি এত সহজে সমাধান করা যায় না, আপনার কিছু লুক্কায়িত বা ব্যাকট্রাক বা যা কিছু প্রয়োজন ...
edc65

@ edc65 ধ্যা! আপাতত আমার কাছে কোনও সমাধান নেই। আমি পরে ঠিক করার চেষ্টা করব
ইসমাইল মিগুয়েল

0

স্কালা, 299 বাইট

type S=String
type L[T]=List[T]
def c(s:S):L[L[S]]={val f=List("><>","<><",">><>","<><<","><>>","<<><","><<<>","<>>><",",<..>,").filter(s.startsWith);if(f.isEmpty)List(List(s)) else f.flatMap(i => c(s.drop(i.size)).map(i::_))}
def p(s:S)=println(c(s).find(_.last.isEmpty).fold("")(_.mkString(" ")))

পরীক্ষার মামলা

val tests = Seq("><>", "<><", ">><>", "<><<", ">><>", "<><<", "><<<>", "<>>><", ",<..>,", "><>><>", "><><><", ",<..>,<><", "<<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><", "<<><><<<>>><>><>><><><<>>><>><>>><>>><>><>><<><")
tests.foreach(p)

আউটপুট

><> 
<>< 
>><> 
<><< 
>><> 
<><< 
><<<> 
<>>>< 
,<..>, 
><> ><> 
><> <>< 
,<..>, <>< 

<<>< ><<<> >><> ><> ><> <>< <>>>< >><> >><> >><> ><>> <<>< 

0

জাভা, 288 বাইট

public class F{public static void main(String[]q){d("",q[0]);}static System y;static void d(String a,String b){if(b.isEmpty()){y.out.println(a);y.exit(0);}for (String s : "><> <>< >><> <><< ><>> <<>< ><<<> <>>>< ,<..>,".split(" "))if(b.startsWith(s))d(a+" "+s,b.substring(s.length()));}}

বিন্যাসকৃত:

public class F {
    public static void main(String[] q) {
        d("", q[0]);
    }

    static System y;

    static void d(String a, String b) {
        if (b.isEmpty()) {
            y.out.println(a);
            y.exit(0);
        }
        for (String s : "><> <>< >><> <><< ><>> <<>< ><<<> <>>>< ,<..>,".split(" "))
            if (b.startsWith(s)) d(a + " " + s, b.substring(s.length()));
    }
}

0

আমি আকারে যাচ্ছিলাম না, তবে ডার্টে এটি করার পদ্ধতিটি এখানে একটি সহজ উপায়।

const List<String> fish = const [
  "><>",
  "<><",
  ">><>",
  "<><<",
  "><>>",
  "<<><",
  "><<<>",
  "<>>><",
  ",<..>,"
];

String fishy(String input) {
  var chars = input.split("");
  if (chars.isEmpty || !chars.every((it) => [">", "<", ",", "."].contains(it))) {
    throw new Exception("Invalid Input");
  }

  var result = [];
  var i = 0;
  var buff = "";
  while (i < chars.length) {
    buff += chars[i];

    if (fish.contains(buff)) {
      result.add(buff);
      buff = "";
    } else if (chars.length == 6) {
      return "";
    }

    i++;
  }

  return result.join(" ");
}

void main() {
  print(fishy(",<..>,><<<>,<..>,><>,<..>,<>>><,<..>,><>>,<..>,<<><,<..>,<><,<..>,>><>"));
}

0

পাইথন 3, 166 164 বাইট

def z(s,p=''):[z(s[len(f):],p+' '+s[:len(f)])for f in'<>< <><< <<>< <>>>< ><> >><> ><>> ><<<> ,<..>,'.split(' ')if s.startswith(f)]if s else print(p[1:])
z(input())

পুনরাবৃত্তির সমাধান। পার্টিতে দেরীতে, তবে আমি ভেবেছিলাম যে এটিকে পোস্ট করে দেই যেহেতু এটি স্প 000০০০-এর মারধর করে20 22 টি বাইট জবাবদিহি করে উত্তর না দিয়ে।

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