টুরিং মেশিন সিমুলেটর


15

একটি টুরিং মেশিন সিমুলেটর লিখুন ।

সরলতার জন্য আমরা স্ট্যাটাসগুলি পূর্ণসংখ্যা হিসাবে ধরে নিতে পারি, চর হিসাবে প্রতীকগুলি, ফাঁকা প্রতীকটি সাদা স্থানের সমান হয়

বর্তমান অবস্থা, ইনপুট প্রতীক, পরবর্তী রাজ্য, আউটপুট প্রতীক, দিক (বাম বা ডান) আকারে 5-টিপল অর্ডার বাধ্যতামূলক নয় তবে আপনি যদি এটি অদলবদল করেন তবে নির্দিষ্ট করুন

অজানা অবস্থায় পৌঁছানোর পরে মেশিনটি অবশ্যই থামবে, অন্য কোনও থামার শর্ত অনুমোদিত নয়।

টেপ উভয় দিকেই অসীম এবং আপনি সর্বদা একটি খালি অক্ষর পড়তে পারেন।

ইনপুট: প্রাথমিক টেপ, একটি প্রাথমিক অবস্থা এবং একটি প্রোগ্রাম। আপনি নিজের পছন্দ মতো ফর্ম্যাটে যে কোনও জায়গা থেকে ডেটা পড়তে মুক্ত

আউটপুট: প্রোগ্রামটি কার্যকর হওয়ার পরে টেপ

প্রয়োজনীয়: একটি উদাহরণ প্রোগ্রাম যা আপনার সিমুলেটারের উপরে চলে ulator

এটি একটি কোড-কলফ তাই সংক্ষিপ্ততম কোড জয়।

আমি পরবর্তী কয়েক ঘন্টা একটি বাস্তবায়ন এবং কিছু উদাহরণ প্রোগ্রাম পোস্ট করব।


উত্তর:


2

গল্ফস্ক্রিপ্ট, 92 টি অক্ষর

~:m;n\+{:^.n?)>1<]m{2<1$=},.{~2>~^n/~1>[@\+]n*1$%n/~\1$1<+[\1>.!{;" "}*]n*\%@}{;;^0}if}do n-

গল্ফস্ক্রিপ্টে ট্যুরিং মেশিনটি উদ্দিষ্টের চেয়ে অনেক বেশি দীর্ঘ হয়ে যায়। এখনও টেপের বিভিন্ন উপস্থাপনা নিয়ে চারপাশে খেলছে।

ইনপুটটির প্রথম লাইনটি মূল অবস্থা, দ্বিতীয় রেখার প্রাথমিক টেপ, তারপরে একটি ট্রানজিশনের অ্যারে (অর্ডার বর্তমান অবস্থা, ইনপুট প্রতীক, পরবর্তী রাজ্য, দিকনির্দেশ, আউটপুট প্রতীক সহ)।

উদাহরণ ( অনলাইনে উপলব্ধ )

> 0
> '101'
> [[0 '0' 0 1 '0']
>  [0 '1' 0 1 '1']
>  [0 ' ' 1 -1 ' ']
>  [1 '0' 2 1 '1']
>  [1 '1' 3 -1 '0']
>  [3 '0' 2 1 '1']
>  [3 ' ' 2 1 '1']
>  [3 '1' 3 -1 '0']] 

110 

আপনি আমার চূড়ান্ত বাস্তবায়নটিকে একটি চর দ্বারা মারলেন, সময়টি আরও ভাল করতে পারছি কিনা তা দেখার জন্য
জিওফ রেডি

7

জিএনইউ সেড -r- 133 117 111 93 চর

হ্যাঁ, সেড টিউরিং সম্পূর্ণ। জিএনইউ -rসেড এবং (এক্সটেন্ডেড রেজেক্সপস) কেবলমাত্র কয়েকটি অক্ষর সংরক্ষণ করার জন্য, এটি পসিক্স সেডের সাথে কাজ করা কেবলমাত্র একটি ছোট পরিবর্তন।

:s
s/^(.*@)(.*)>(.)(.*#\1\3([^@]*@)(..))/\5\2\6>\4/
T
s/(..)l>|r>/>\1/
s/>@/@> /
s/>#/> #/
bs

ইনপুট ফর্ম্যাট হয়

[initial state]@[non-empty tape with > marking head position]#[state]@[input symbol][next state]@[output symbol][direction l or r]#...

বিভেদক @, #এবং মাথা চরিত্র >টেপ প্রতীক হিসেবে ব্যবহার করা যাবে না। রাষ্ট্রীয় লেবেলগুলিতে @ >বা থাকতে পারে না #

এটি প্রতি লাইনে একটি করে ইনপুটে সমস্ত প্রোগ্রাম চালাবে

উদাহরণ:

মার্কো একটি এন বি এন প্রোগ্রাম

ইনপুট

0@>aaabbb#0@a1@ r#0@ 4@ r#1@a1@ar#1@b1@br#1@ 2@ l#2@b3@ l#2@a5@al#3@b3@bl#3@a3@al#3@ 0@ r#4@ 5@Tr

আউটপুট

5@    T>  #0@a1@ r#0@ 4@ r#1@a1@ar#1@b1@br#1@ 2@ l#2@b3@ l#2@a5@al#3@b3@bl#3@a3@al#3@ 0@ r#4@ 5@Tr

মার্কোর হ্যালো! কার্যক্রম

ইনপুট

0@> #0@ 1@Hr#1@ 2@er#2@ 3@lr#3@ 4@lr#4@ 5@or#5@ 6@!r

আউটপুট

6@Hello!> #0@ 1@Hr#1@ 2@er#2@ 3@lr#3@ 4@lr#4@ 5@or#5@ 6@!r

7

সুতরাং আমি কিছুটা দেরি করেছি, তবে কেবল ভেবেছিলাম আমি এই এখানে রেখে যাব ...

ট্যুরিং মেশিন একটি ট্যুরিং মেশিন অনুকরণ: 370 বাইট?

এখানে আমি তার 1936 পত্রিকায় টুরিংয়ের কাঠামোটি ব্যবহার করছি আমি এম-কনফিগার এবং ক্রিয়াকলাপ সহ একটি প্রতীক = একটি বাইট ব্যবহার করছি।

╔═══════════════╦═══════╦═══════════════════╦═══════════════╗
║    m-config    ║ Symbol ║     Operations      ║ Final m-config ║
╠═══════════════╬═══════╬═══════════════════╬═══════════════╣
║ currentCommand ║ Any    ║ L                   ║ currentCommand ║
║                ║ *      ║ MR                  ║ readCommand    ║
╠----------------╬--------╬---------------------╬----------------╣
║ nextCommand    ║ Any    ║ L                   ║ nextCommand    ║
║                ║ *      ║ E  R  R  R  P* R    ║ readCommand    ║
╠----------------╬--------╬---------------------╬----------------╣
║ readCommand    ║ P      ║ R                   ║ readCommandP   ║
║                ║ M      ║ R                   ║ readCommandM   ║
║                ║ G      ║ R                   ║ readCommandG   ║
║                ║ E      ║ R                   ║ MHPNone        ║
╠----------------╬--------╬---------------------╬----------------╣
║ readCommandP   ║ 0      ║                     ║ MHP0           ║
║                ║ 1      ║                     ║ MHP1           ║
║                ║ e      ║                     ║ MHPe           ║
║                ║ x      ║                     ║ MHPx           ║
║                ║ None   ║                     ║ MHPNone        ║
╠----------------╬--------╬---------------------╬----------------╣
║ readCommandM   ║ R      ║                     ║ MHMR           ║
║                ║ L      ║                     ║ MHML           ║
╠----------------╬--------╬---------------------╬----------------╣
║ readCommandG   ║ 1      ║                     ║ G2<1           ║
║                ║ 2      ║                     ║ G2<2           ║
║                ║ 3      ║                     ║ G2<3           ║
║                ║ 4      ║                     ║ G2<4           ║
║                ║ 5      ║                     ║ G2<5           ║
╠----------------╬--------╬---------------------╬----------------╣
║ G2<1           ║ int(1) ║ L  P@ R  R  R  P* R ║ GTS            ║
║                ║ <      ║                     ║ G21            ║
║                ║ *      ║ E  L                ║ G2<1           ║
║                ║ @      ║ E  L                ║ G2<1           ║
║                ║ Any    ║ L                   ║ G2<1           ║
╠----------------╬--------╬---------------------╬----------------╣
║ G2<2           ║ int(2) ║ L  P@ R  R  R  P* R ║ GTS            ║
║                ║ <      ║                     ║ G22            ║
║                ║ *      ║ E  L                ║ G2<2           ║
║                ║ @      ║ E  L                ║ G2<2           ║
║                ║ Any    ║ L                   ║ G2<2           ║
╠----------------╬--------╬---------------------╬----------------╣
║ G2<3           ║ int(3) ║ L  P@ R  R  R  P* R ║ GTS            ║
║                ║ <      ║                     ║ G23            ║
║                ║ *      ║ E  L                ║ G2<3           ║
║                ║ @      ║ E  L                ║ G2<3           ║
║                ║ Any    ║ L                   ║ G2<3           ║
╠----------------╬--------╬---------------------╬----------------╣
║ G2<4           ║ int(4) ║ L  P@ R  R  R  P* R ║ GTS            ║
║                ║ <      ║                     ║ G24            ║
║                ║ *      ║ E  L                ║ G2<4           ║
║                ║ @      ║ E  L                ║ G2<4           ║
║                ║ Any    ║ L                   ║ G2<4           ║
╠----------------╬--------╬---------------------╬----------------╣
║ G2<5           ║ int(5) ║ L  P@ R  R  R  P* R ║ GTS            ║
║                ║ <      ║                     ║ G25            ║
║                ║ *      ║ E  L                ║ G2<5           ║
║                ║ @      ║ E  L                ║ G2<5           ║
║                ║ Any    ║ L                   ║ G2<5           ║
╠----------------╬--------╬---------------------╬----------------╣
║ G21            ║ int(1) ║ L  P@ R             ║ GTS            ║
║                ║ Any    ║ R                   ║ G21            ║
╠----------------╬--------╬---------------------╬----------------╣
║ G22            ║ int(2) ║ L  P@ R             ║ GTS            ║
║                ║ Any    ║ R                   ║ G22            ║
╠----------------╬--------╬---------------------╬----------------╣
║ G23            ║ int(3) ║ L  P@ R             ║ GTS            ║
║                ║ Any    ║ R                   ║ G23            ║
╠----------------╬--------╬---------------------╬----------------╣
║ G24            ║ int(4) ║ L  P@ R             ║ GTS            ║
║                ║ Any    ║ R                   ║ G24            ║
╠----------------╬--------╬---------------------╬----------------╣
║ G25            ║ int(5) ║ L  P@ R             ║ GTS            ║
║                ║ Any    ║ R                   ║ G25            ║
╠----------------╬--------╬---------------------╬----------------╣
║ GTS            ║ ^      ║ R                   ║ TS             ║
║                ║ Any    ║ R                   ║ GTS            ║
╠----------------╬--------╬---------------------╬----------------╣
║ TS             ║ 0      ║                     ║ RL0            ║
║                ║ 1      ║                     ║ RL1            ║
║                ║ e      ║                     ║ RLe            ║
║                ║ x      ║                     ║ RLx            ║
║                ║ None   ║                     ║ RLNone         ║
╠----------------╬--------╬---------------------╬----------------╣
║ RL0            ║ @      ║ R  R                ║ GTS0           ║
║                ║ Any    ║ L                   ║ RL0            ║
╠----------------╬--------╬---------------------╬----------------╣
║ RL1            ║ @      ║ R  R                ║ GTS1           ║
║                ║ Any    ║ L                   ║ RL1            ║
╠----------------╬--------╬---------------------╬----------------╣
║ RLe            ║ @      ║ R  R                ║ GTSe           ║
║                ║ Any    ║ L                   ║ RLe            ║
╠----------------╬--------╬---------------------╬----------------╣
║ RLx            ║ @      ║ R  R                ║ GTSx           ║
║                ║ Any    ║ L                   ║ RLx            ║
╠----------------╬--------╬---------------------╬----------------╣
║ RLNone         ║ @      ║ R  R                ║ GTSNone        ║
║                ║ Any    ║ L                   ║ RLNone         ║
╠----------------╬--------╬---------------------╬----------------╣
║ GTS0           ║ 0      ║ R  P*  R            ║ readCommand    ║
║                ║ Any    ║ R                   ║ GTS0           ║
╠----------------╬--------╬---------------------╬----------------╣
║ GTS1           ║ 1      ║ R  P*  R            ║ readCommand    ║
║                ║ Any    ║ R                   ║ GTS1           ║
╠----------------╬--------╬---------------------╬----------------╣
║ GTSe           ║ e      ║ R  P*  R            ║ readCommand    ║
║                ║ Any    ║ R                   ║ GTSe           ║
╠----------------╬--------╬---------------------╬----------------╣
║ GTSx           ║ x      ║ R  P*  R            ║ readCommand    ║
║                ║ Any    ║ R                   ║ GTSx           ║
╠----------------╬--------╬---------------------╬----------------╣
║ GTSNone        ║ _      ║ R  P*  R            ║ readCommand    ║
║                ║ Any    ║ R                   ║ GTSNone        ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHP0           ║ ^      ║ R                   ║ Print0         ║
║                ║ Any    ║ R                   ║ MHP0           ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHP1           ║ ^      ║ R                   ║ Print1         ║
║                ║ Any    ║ R                   ║ MHP1           ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHPe           ║ ^      ║ R                   ║ Printe         ║
║                ║ Any    ║ R                   ║ MHPe           ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHPx           ║ ^      ║ R                   ║ Printx         ║
║                ║ Any    ║ R                   ║ MHPx           ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHPNone        ║ ^      ║ R                   ║ PrintNone      ║
║                ║ Any    ║ R                   ║ MHPNone        ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHMR           ║ ^      ║ R  R                ║ MHR            ║
║                ║ Any    ║ R                   ║ MHMR           ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHML           ║ ^      ║ L                   ║ MHL            ║
║                ║ Any    ║ R                   ║ MHML           ║
╠----------------╬--------╬---------------------╬----------------╣
║ Print0         ║ ^      ║ R                   ║ Print0         ║
║                ║ None   ║ P0                  ║ nextCommand    ║
║                ║ Any    ║ E                   ║ Print0         ║
╠----------------╬--------╬---------------------╬----------------╣
║ Print1         ║ ^      ║ R                   ║ Print1         ║
║                ║ None   ║ P1                  ║ nextCommand    ║
║                ║ Any    ║ E                   ║ Print1         ║
╠----------------╬--------╬---------------------╬----------------╣
║ Printx         ║ ^      ║ R                   ║ Printx         ║
║                ║ None   ║ Px                  ║ nextCommand    ║
║                ║ Any    ║ E                   ║ Printx         ║
╠----------------╬--------╬---------------------╬----------------╣
║ Printe         ║ ^      ║ R                   ║ Printe         ║
║                ║ None   ║ Pe                  ║ nextCommand    ║
║                ║ Any    ║ E                   ║ Printe         ║
╠----------------╬--------╬---------------------╬----------------╣
║ PrintNone      ║ ^      ║ R                   ║ PrintNone      ║
║                ║ None   ║                     ║ nextCommand    ║
║                ║ Any    ║ E                   ║ PrintNone      ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHL            ║ ^      ║ R  R                ║ MHL            ║
║                ║ [      ║                     ║ SBL            ║
║                ║ Any    ║ L  P^ R  R  E       ║ nextCommand    ║
╠----------------╬--------╬---------------------╬----------------╣
║ MHR            ║ ^      ║ R  R                ║ MHR            ║
║                ║ ]      ║                     ║ SBR            ║
║                ║ None   ║ P^ L  L  E          ║ nextCommand    ║
╠----------------╬--------╬---------------------╬----------------╣
║ SBR            ║ ]      ║ E  R  R  P]         ║ currentCommand ║
╠----------------╬--------╬---------------------╬----------------╣
║ SBL            ║ ]      ║ R                   ║ SBLE           ║
║                ║ Any    ║ R                   ║ SBL            ║
╠----------------╬--------╬---------------------╬----------------╣
║ SBLE           ║ [      ║                     ║ currentCommand ║
║                ║ None   ║ L                   ║ SBLE           ║
║                ║ Any    ║ E  R  R  P] L       ║ SBLE           ║
╚═══════════════╩═══════╩═══════════════════╩═══════════════╝

আমার মেশিনের জন্য উপরের কাগজটি থেকে টুরিংয়ের একটি উদাহরণ এখানে রয়েছে:

['<', None, 1, '0', None, 'P', 'e', None, 'M', 'R', None, 'P', 'e', None, 'M', 'R', None, 'P', '0', None, 'M', 'R', None, 'M', 'R', None, 'P', '0', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',
                      '1', None, 'P', 'e', None, 'M', 'R', None, 'P', 'e', None, 'M', 'R', None, 'P', '0', None, 'M', 'R', None, 'M', 'R', None, 'P', '0', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',
                      'e', None, 'P', 'e', None, 'M', 'R', None, 'P', 'e', None, 'M', 'R', None, 'P', '0', None, 'M', 'R', None, 'M', 'R', None, 'P', '0', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',
                      'x', None, 'P', 'e', None, 'M', 'R', None, 'P', 'e', None, 'M', 'R', None, 'P', '0', None, 'M', 'R', None, 'M', 'R', None, 'P', '0', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',
                      '_', None, 'P', 'e', None, 'M', 'R', None, 'P', 'e', None, 'M', 'R', None, 'P', '0', None, 'M', 'R', None, 'M', 'R', None, 'P', '0', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',

             None, 2, '1', None, 'M', 'R', None, 'P', 'x', None, 'M', 'L', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',
                      '0', None, 'G', '3',

             None, 3, '0', None, 'M', 'R', None, 'M', 'R', None, 'G', '3',
                      '1', None, 'M', 'R', None, 'M', 'R', None, 'G', '3',
                      '_', None, 'P', '1', None, 'M', 'L', None, 'G', '4',

             None, 4, 'x', None, 'E', 'E', None, 'M', 'R', None, 'G', '3',
                      'e', None, 'M', 'R', None, 'G', '5',
                      '_', None, 'M', 'L', None, 'M', 'L', None, 'G', '4',

             None, 5, '0', None, 'M', 'R', None, 'M', 'R', None, 'G', '5',
                      '1', None, 'M', 'R', None, 'M', 'R', None, 'G', '5',
                      'e', None, 'M', 'R', None, 'M', 'R', None, 'G', '5',
                      'x', None, 'M', 'R', None, 'M', 'R', None, 'G', '5',
                      '_', None, 'P', '0', None, 'M', 'L', None, 'M', 'L', None, 'G', '2',
        None, '[', '^', None, ']', None]

এটি অনলাইন চেষ্টা করুন! (পাইথন 3 ব্যাখ্যাকারী হিসাবে ব্যবহার করুন) - সম্পাদনা: আমি সবেমাত্র টিআইও পরীক্ষা করে দেখেছি এবং এটি আসলে ঠিক কাজ করছে বলে মনে হচ্ছে না ... এটি আপনার স্থানীয় মেশিনে চেষ্টা করুন এবং এটি (আশা করা যায়) কাজ করা উচিত। এটা আমার উপর।


কোনও ক্ষতি উদ্দেশ্য নয়, কেবল টেবিলের সীমানা সারিবদ্ধ করে।
গ্রেগ বেকন

@ গ্রেগব্যাকন কোনও অপরাধ গৃহীত হয়নি ... সম্ভবত বিভিন্ন কম্পিউটার কোডব্লকগুলি কীভাবে রেন্ডার করে তার মধ্যে কিছুটা পার্থক্য রয়েছে, তবে আপনার সম্পাদনাটি আমার সম্পাদনার স্ক্রিনে প্রান্তিককরণটিকে আরও খারাপ করে দিয়েছে ... আমি নিশ্চিত যে আপনি সম্পাদনার পরামর্শ দেওয়ার সময় এটি ঠিকঠাক লাগছিল; সমস্যাটি কী তা নিশ্চিত নন
30:47

3

এপিএল (110)

(এটি এতটা ছোটও নয় ...)

0(''⍞){×⍴X←0~⍨⍺∘{x y S T s m t←⍺,⍵⋄S T≡x,⊃⊃⌽y:s,⊂(⊃y){m:(¯1↓⍺)(⍵,⍨¯1↑⍺)⋄(⍺,⊃⍵)(1↓⍵)}t,1↓⊃⌽y⋄0}¨⍵:⍵∇⍨⊃X⋄,/⊃⌽⍺}⎕

এটি কীবোর্ড থেকে দুটি লাইন পড়ে: প্রথমটি হল প্রোগ্রাম এবং দ্বিতীয়টি প্রাথমিক টেপ।

বিন্যাসটি হ'ল

(in-state in-tape out-state movement out-tape) 

এবং তাদের সব একই লাইনে থাকা উচিত। 'মুভমেন্ট' ডান দিকে সরানোর জন্য 0 এবং বাম দিকে সরানোর জন্য 1।

উদাহরণস্বরূপ প্রোগ্রাম (স্পষ্টতার জন্য লাইন ব্রেকগুলি sertedোকানো হয়েছে, সেগুলি সমস্ত এক লাইনে থাকা উচিত))

(0 ' ' 1 0 '1')
(0 '1' 0 0 '1')
(1 '1' 1 0 '1')
(1 ' ' 2 1 ' ')
(2 '1' 3 1 ' ')

প্রোগ্রামটি দুটি একত্রে সংখ্যা যুক্ত করে, উদাহরণস্বরূপ:

in:  1111 111
out: 1111111

উদাহরণ 2 (মার্কো মার্টিনেলির প্রবেশ থেকে বাইনারি বর্ধন কর্মসূচী থেকে অভিযোজিত):

(0 '0' 0 0 '0')
(0 '1' 0 0 '1')
(0 ' ' 1 1 ' ')
(1 '0' 2 0 '1')
(1 '1' 3 1 '0')
(3 '0' 2 0 '1')
(3 ' ' 2 0 '1')
(3 '1' 3 1 '0')

আমি কীভাবে এটি চেষ্টা করতে পারি? আমি লিনাক্স ব্যবহার করছি এবং অ্যাপ্লাস দিয়ে চেষ্টা করেছি তবে এটি কার্যকর হয় না (অপরিজ্ঞাত টোকেন :() আমার কোন দোভাষী / সংকলক চেষ্টা করা উচিত?
মার্কো মার্টিনেল্লি

আমি ডায়ালগ এপিএল ব্যবহার করছি। আমি কোনও ডায়ালগ-নির্দিষ্ট ফাংশন ব্যবহার সম্পর্কে সচেতন নই তবে এ + সম্পূর্ণ একই জিনিস নয়। ডায়ালগের একটি মুক্ত সংস্করণ রয়েছে তবে এটি কেবল উইন্ডোজের জন্য। (এটি ওয়াইনের অধীনে চলতে পারে তবে এটি নিজস্ব ইনপুট পদ্ধতিটি ব্যবহার করে যাতে আপনি এপিএল টাইপ করতে পারেন)) আপনি যদি ডায়ালগটি চলমান পান তবে কেবল এপিএল কোডটি প্রবেশ করুন / আটকান (এক লাইনে), তারপরে টুরিং মেশিন প্রোগ্রামটি (দ্বিতীয় লাইনে) ), তারপরে প্রাথমিক টেপ (তৃতীয় লাইনে)।
মেরিনাস

ঠিক আছে, আমি চেষ্টা করব, আপনাকে ধন্যবাদ
মার্কো মার্টিনেল্লি

3

পাইথন, 101 189 152 142

a=dict(zip(range(len(b)),b))
r=eval(p)
i=s=0
while 1:
 c=a.get(i,' ')
 s,m,a[i]=r[s,c]
 if 0==m:exit([x[1]for x in sorted(a.items())])
 i=i+m

বি এবং পি ইনপুট, বি প্রাথমিক টেপ, পি নিয়মগুলি (স্ট্রিং প্রতিনিধিত্ব করে) ডিক থেকে (ইন-স্টেট, ইন-টেপ) টিপল থেকে (আউট-স্টেট, হেড মুভ, আউট-টেপ) টিপল হিসাবে এনকোড করে । মুভ 0 হলে প্রোগ্রামটি শেষ হয়, 1 টি ডানে সরানো হবে এবং -1 বাম দিকে সরানো হবে।

b="aaba"

p="""{(0, 'a'): (1, 1, 'a'),
      (0, 'b'): (0, 1, 'b'),
      (1, 'a'): (1, 1, 'a'),
      (1, 'b'): (0, 1, 'b'),
      (1, ' '): (1, 0, 'Y'),
      (0, ' '): (0, 0, 'N')}"""

এই স্যাম্পল প্রোগ্রামটি পরীক্ষা করে যদি স্ট্রিংয়ের শেষ অক্ষর (খালি টেপের আগে) 'ক' হয়, যদি এটি স্ট্রিংয়ের শেষে 'ওয়াই' লিখে থাকে (প্রথম ফাঁকা জায়গা)।

সম্পাদনা 1:

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

সম্পাদনা 2:

স্ট্রিগোয়েডসকে অনেক বড় উন্নতির জন্য ধন্যবাদ।

3 সম্পাদনা করুন:

আমি অযথা এটি এত 0 করে দিয়েছি যেহেতু আউটপুটটি স্থানটি যেমন রাখবে। আমরা সর্বদা ইনপুট হিসাবে একই আউটপুট লিখতে পারেন হিসাবে আমি এটি অপসারণ।


আমি মনে করি না এটি এটি একটি কার্যকর সমাধান কারণ আপনার বাস্তবায়নে টেপটি সীমাবদ্ধ। এইভাবে আপনাকে আপনার প্রোগ্রামের মেমরির গ্রাহ্যতা আগাম জানতে হবে। এবং বাম দিকে সরানোর সমস্যা রয়েছে। ইঙ্গিত: একটি টেপ দুটি পরিবর্তিত স্ট্যাক থেকে তৈরি করা যেতে পারে আপনি সর্বদা ফাঁকা প্রতীকটি পপ করতে পারেন।
মার্কো মার্টিনেল্লি

আহ, সত্য। দুঃখিত, এটি এতদূর ভাবেনি।
shiona

উহম .. আফিক টেপ দু'দিকেই অসীম এবং আপনি সর্বদা একটি খালি অক্ষর পড়তে পারেন। আমি উত্তরে তা উল্লেখ করব।
মার্কো মার্তিনেল্লি

আপনি সঠিক ছিলেন (আমাদের মহড়ার ক্ষেত্রে আমাদের আরও কঠোর নিয়ম ছিল)। আমি কমপক্ষে কিছু ত্রুটিগুলি স্থির করেছি।
shiona

আপনি প্রথম লাইনের স্থানটি সরিয়ে ফেলতে r=0;s=0পারেন, হয়ে উঠতে পারেন r=s=0(এবং সেই লাইনের শেষে অর্ধিকোলটি অপ্রয়োজনীয়), আপনি ফাংশনটি সরিয়ে ফেলতে পারবেন w, এটি অব্যবহৃত থাকায় বন্ধনীগুলি সরানো যেতে পারে (s,m,t)=r[s,c], try/ exceptব্লকটি সংক্ষিপ্ত করা যায় ডিক্টেট ব্যবহার করে; c=a.get(i,' ')যেহেতু mহয় হয় 0 বা 1, আপনি ব্যবহার করতে পারেন if m-1:এবং আপনি আপনার map()কলটিকে একটি তালিকা বোধে রূপান্তরিত করে সংক্ষিপ্ত করতে পারেন ।
স্ট্রাইকোয়েডস

3

পুনশ্চ (205) (156) (150) (135)

<<
>>begin
/${stopped}def([){add dup{load}${exit}if}def
0 A{1 index{load}${pop( )}if
get{exec}${exit}if}loop
3{-1[pop}loop{1[print}loop

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

সমস্ত রাজ্যের নামকে কার্যকর করার যোগ্য করে অতিরিক্ত সঞ্চয়, যাতে তারা স্বয়ংক্রিয় লোড হয়।

এম্বেড করা "হ্যালো" প্রোগ্রামটি দিয়ে অসম্পূর্ণ। স্টিডিনের কাছ থেকে টেপটি পড়তে অতিরিক্ত 52 টি অক্ষর একটি লুপ কিনে।সাথে চালাও gsnd -q tm.ps

%!
<<
    /A<<( ){dup(H)def 1 add B}>>
    /B<<( ){dup(e)def 1 add C}>>
    /C<<( ){dup(l)def 1 add D}>>
    /D<<( ){dup(l)def 1 add E}>>
    /E<<( ){dup(o)def 1 add F}>>
>>begin %ds: int-keys=tape name-keys=prog
0 A %pos state
{ %loop
    1 index{load}stopped{pop( )}if  %pos state tape(pos)
    get    {exec}stopped{exit  }if  %new-pos new-state
} loop
% Loop from tape position 0 to left until left tape end is found
0{                                  %pos
  -1 add                            %new-pos
  dup{load}stopped{exit}if          %new-pos tape(new-pos)
  pop                               %new-pos tape(new-pos)
}loop
% Move to the right and print all chars until right end is hit
{                                   %pos
  1 add                             %new-pos
  dup{load}stopped{exit}if          %new-pos tape(new-pos)
  print                             %new-pos tape(new-pos)
}loop

সুতরাং টেবিল বিন্যাস হয়

/in-state<<in-tape{dup out-tape def movement add out-state}
           in-tape2{dup out-tape2 def movement2 add out-state2}>>

যেখানে in-stateএকটি নাম, in-tapeএবং out-tapeঅক্ষর (যেমন। পূর্ণসংখ্যার, অথবা এক্সপ্রেশন যা ফলন পূর্ণসংখ্যার), হয় movementহয় -1বাম জন্য অথবা 1ডান জন্য, এবং out-stateএকটি হয় এক্সিকিউটেবল নাম। in-tapeউপরের মতো একই রাজ্যের একাধিক স্থানান্তরকে একত্রিত করতে হবে।


অন্য সমস্যাটি হ'ল টেপের কোন অংশটি আকর্ষণীয় তা আবিষ্কার করার কোনও ব্যবস্থা নেই। এটি করতে বেশ কিছুটা ব্যয় হবে currentdict{search-for-min-and-max}forall juggle-params-for-for। :(
লুসার droog

আমার নিজের চেষ্টা করা, কিন্তু আপনার সংক্ষিপ্ততার বাইরে ছিল। তবে আমি আপনার কোডে কিছু উন্নতি করার পরামর্শ দিয়েছি।
টমাস ডাব্লু।

বিটিডব্লিউ, প্রাথমিক টেপ সম্পর্কে কী হবে? আমি অ-গল্ফ কোড থেকে মন্তব্য আউট লাইনটি সরিয়েছি কারণ এটি কাজটি করে বলে মনে হচ্ছে না। ("0 নয়" -1 প্রদান করে, সুতরাং লুপটির কোনও পুনরাবৃত্তি নেই)
টমাস ডব্লিউ

দুর্দান্ত উন্নতি! ... প্রাথমিক টেপ কোড সম্পর্কে, আমার মনে হয় আমি এটি আমার নোটবুক থেকে ভুল টাইপ করেছি। এসবি 0 1 0 not{(%stdin)(r)file read not{exit}if def}for। আমি নিশ্চিত নই যে কেন আমি ভেবেছিলাম যে আমি গল্ফযুক্ত সংস্করণটি বাদ দিয়ে পলায়ন করতে পারি। : পি
লুসার দ্রুগ

ওহ, অপেক্ষা করুন, -1! তারপরেও 0 notহওয়া উচিত 16#7fffffff। দুঃখিত। আহা! এ কারণেই এটি মন্তব্য করা হয়েছিল! এটি সরাসরি নোটবুকের বাইরে এসেছিল, পরীক্ষা করা হয়নি, এবং আমি যখন গল্ফ করেছিলাম তখন তা না দেখে সমস্ত মন্তব্য ছাঁটাই করেছি। পাইথন লোকটিকে বলো না! : পি
লুসার দ্রুগ

2

সি (এখনও গল্ফ হয়নি)

আমি মনে করি আমি এটি দিয়ে জিততে পারি না, তবুও এটি কাজ করে মজা পেয়েছিল। এই এটা সত্যিই আরও বেশি সত্য এখন আছে হবে। :)

এটি কেবল এক দিক থেকে অসীম। আমি মনে করি এটির জন্যও নেতিবাচক টেপ লাগবে। দীর্ঘশ্বাস....

নেতিবাচক খুব খারাপ ছিল না। আমরা উভয় পক্ষকে সন্ধ্যা ও প্রতিক্রিয়া হিসাবে ইন্টারলিভ করি। জটিলতা এখন টেপটি ক্রমানুসারে প্রদর্শন করা দরকার কারণ ফাইলটি এখন নিজেই ঝাঁপিয়ে পড়েছে। এটি করা একটি বৈধ পরিবর্তন, আমি মনে করি। টুরিং নিজেকে এইভাবে সরল করে তুলেছে।

#include<stdio.h>
int main(int c, char**v){
    int min=0,max=0;
    int pos=0,qi;sscanf(v[1],"%d",&qi);
    FILE*tab=fopen(v[2],"r");
    FILE*tape=fopen(v[3],"r+");
    setbuf(tape,NULL);
    do {
        min = pos<min? pos: min;
        max = pos>max? pos: max;
        fseek(tape,(long)(abs(pos)*2)-(pos<0),SEEK_SET);
        int c = fgetc(tape), qt=qi-1,qr;
        fseek(tape,(long)(abs(pos)*2)-(pos<0),SEEK_SET);
        char x = c==EOF?' ':c, xt=x-1,xr,d[2];
        if (x == '\n') x = ' ';
printf("%d '%c' %d (%d)\n", qi, x, pos, (int)ftell(tape));
        while((qt!=qi)||(xt!=x)){
            fscanf(tab, "%d '%c' %d '%c' %1[LRN]", &qt, &xt, &qr, &xr, d);
            if (feof(tab)){
                goto HALT;
            }
printf("%d '%c' %d '%c' %s\n", qt, xt, qr, xr, d);
        }
        qi=qr;
        rewind(tab);
        fputc(xr,tape);
        pos+=*d=='L'?-1:*d=='R'?1:0;
    } while(1);
HALT:
printf("[%d .. %d]:\n", min, max);
    for (pos = min; pos <= max; pos++){
        fseek(tape,(long)(abs(pos)*2)-(pos<0),SEEK_SET);
        //printf("%d ",pos);
        putchar(fgetc(tape));
        //puts("");
    }
    return qi;
}

এবং এখানে পরীক্ষা চালানো হয়:

522(1)04:33 AM:~ 0> cat bab.tm
0 'a' 0 'b' R
0 'b' 0 'a' R
523(1)04:33 AM:~ 0> echo aaaaa > blank; make tm ; tm 0 bab.tm blank; echo; cat blank
make: `tm' is up to date.
0 'a' 0 (0)
0 'a' 0 'b' R
0 'a' 1 (2)
0 'a' 0 'b' R
0 'a' 2 (4)
0 'a' 0 'b' R
0 ' ' 3 (6)
0 'a' 0 'b' R
0 'b' 0 'a' R
[0 .. 3]:
bbbÿ
babab

প্রোগ্রামটি অনুক্রমিক ক্রমে টেপটিকে আউটপুট দেয় তবে ফাইলটি আন্তঃলিঙ্গিত নেতিবাচক এবং ধনাত্মক পক্ষের প্রতিনিধিত্ব করে।


আপনার বাস্তবায়নে সমস্যা আছে। এই প্রোগ্রামটি চেষ্টা করে দেখুন যে বি এবং 0 'a' 0 'b' R; 0 'b' 0 'a' Rবিবি-র পরিবর্তে আউটপুট বাবাই ইনপুট দিয়ে এ এবং বি কে অদলবদল করবে । এবং বাম দিকে সরানোর সমস্যা রয়েছে।
মার্কো মার্টিনেল্লি

মনোযোগের জন্য ধন্যবাদ! আপডেট উভয় স্থির করে, আমি মনে করি (আশা করি)।
লুসার droog

আহ .. এখনও বাচ্চা হচ্ছে
মার্কো মার্টিনেল্লি

হ্যাঁ, তবে এবার ঠিক! 'আআ' টেপের [0, -1,1] পজিশনের সাথে সম্পর্কিত s তবে আউটপুট যা এটি পরিষ্কারভাবে দেখাতে হবে তার কাজের প্রয়োজন।
লুসার droog

1

গ্রোভি 234 228 154 153 149 139 124

n=[:];i=0;t={it.each{n[i++]=it};i=0};e={p,s->a=p[s,n[i]?:' '];if(a){n[i]=a[1];i+=a[2];e(p,a[0])}else n.sort()*.value.join()}

পাঠযোগ্যতার জন্য ফর্ম্যাট করা

n=[:];
i=0;
t={it.each{n[i++]=it};i=0};
e={p,s->
    a=p[s,n[i]?:' '];
    if(a){
        n[i]=a[1];
        i+=a[2];
        e(p,a[0])
    }else n.sort()*.value.join()
}

t হ'ল ফাংশন যা টেপ সেট করে এবং ই হ'ল ফাংশন যা প্রোগ্রামটি মূল্যায়ন করে

উদাহরণ 1 - "হ্যালো!" মুদ্রণ করুন টেপে :)

t('')
e([[0,' ']:[1,'H',1],
   [1,' ']:[2,'e',1],
   [2,' ']:[3,'l',1],
   [3,' ']:[4,'l',1],
   [4,' ']:[5,'o',1],
   [5,' ']:[6,'!',1]],0)

উদাহরণ 2 - প্রাথমিক স্ট্রিংটি এন বি এন আকারে থাকলে টেপটিতে একটি টি রেখে দিন , অন্যথায় থামুন।

t('aaabbb')
e([[0,'a']:[1,' ',1],
   [0,' ']:[4,' ',1],
   [1,'a']:[1,'a',1],
   [1,'b']:[1,'b',1],
   [1,' ']:[2,' ',-1],
   [2,'b']:[3,' ',-1],
   [2,'a']:[5,'a',-1],
   [3,'b']:[3,'b',-1],
   [3,'a']:[3,'a',-1],
   [3,' ']:[0,' ',1],
   [4,' ']:[5,'T',1]],0)

উদাহরণ 3 - বাইনারি সংখ্যা বৃদ্ধি

t('101')
e([[0,'0']:[0,'0',1],
   [0,'1']:[0,'1',1],
   [0,' ']:[1,' ',-1],
   [1,'0']:[2,'1',1],
   [1,'1']:[3,'0',-1],
   [3,'0']:[2,'1',1],
   [3,' ']:[2,'1',1],
   [3,'1']:[3,'0',-1]],0)

উদাহরণে 1 এর অর্থ ডানদিকে সরানো এবং -1 এর অর্থ বাম দিকে সরানো

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