数値を分割するためのマルコフ正規アルゴリズム
こんにちは 異常なプログラミングのための非常に興味深いオプション、つまり通常のマルコフアルゴリズムのコンパイルを共有したいと思います。 このプログラミングオプションは、馴染みのある言語やプログラミング環境からの大きな精神的な休憩になる可能性があります。
私が難しいと叫ぶ機会がある生徒たちは、実際のアルゴリズムが実際に作られるまでは非常に興味深いアルゴリズム問題に流れ込みます。
実際、この投稿のトピックに対して:私たちの仕事は、小数点以下4桁の精度で2つの整数を除算するための通常のマルコフアルゴリズムを記述することです(単項計算を使用して数値を指定します)。 たとえば、入力:| / ||||、出力:0.25。
さらに、操作は1つだけです。元の文字列の1つの部分文字列を別の部分文字列に置き換えます。 誰がそれが何であり、どのように機能するかを気にする-猫へようこそ
通常のマルコフアルゴリズム
通常のマルコフアルゴリズムでは、特定の順序付けられた一連の製品(部分文字列の置換)を意味します。 製品は、通常(可能な限り何度も実行)と最終(1回だけ実行し、その後アルゴリズムが終了する)の両方にすることができます。 製品は最初から実行されます。 前者が完了できない場合は、2番目などを行います。 いずれかの生産の後、以前のもののいずれかが再び満たされることができるならば、我々はそれをします。 アルゴリズムの作業は、製品の実行のための次のものがなく、以前のすべてが完了できないか、最終生産の完了後に終了します。
実際に問題を解決する
代替品のリスト:
%* *%
%| %*
*| **
|* t
t* *t
t% %t
%t %v|
t |
%v ?d
?d d?
|d d|
? %
*d h
h* oh
h% h
h « »
* « »
d |_
/| -k
k| kk
k |+
+| |+
- ey
|e e|
y %
eo 0o
e « »
|_ .a
a. .a
.. .
.aaaaaaaaaa a,.
,a a,
.aaaaaaaaa 9
.aaaaaaaa 8
.aaaaaaa 7
.aaaaaa 6
.aaaaa 5
.aaaa 4
.aaa 3
.aa 2
.a 1
. 0
, « »
a .a
o p||||||||||
|p p|
pp p
% u
u+ u
u _
|+ |)+
) (>
>+ +>
+ {
{ |
>>>>> =
|= =
(= =
( /
p= =<
<0 0<
<1 1<
<2 2<
<3 3<
<4 4<
<5 5<
<6 6<
<7 7<
<8 8<
<9 9<
<<<<< $
0$ $0
1$ $1
2$ $2
3$ $3
4$ $4
5$ $5
6$ $6
7$ $7
8$ $8
9$ $9
=$ .FIN
0= =0
1= =1
2= =2
3= =3
4= =4
5= =5
6= =6
7= =7
8= =8
9= =9
_> « »
0> >0
1> >1
2> >2
3> >3
4> >4
5> >5
6> >6
7> >7
8> >8
9> >9
p> « »
p .FIN
_ .FIN
置換する部分文字列の後のFINは、そのような製品が最終であることを意味します。
このようなアルゴリズムの動作をエミュレートするエミュレーターを作成することは、どのプログラミング言語でも難しくありません。
その結果、入力するには| / |||| 文字列変換により、0.25が得られます。 誰が信じていない-チェックしてください。 (たとえば、同じ| / ||||などの紙に入力を書き留め、アルゴリズムが作業を終了するまで上記の置換を実行します(終了条件については、さらに上を参照))
PSこれは、プログラミングと脳の除去の非常にエレガントで珍しいバージョンです。
PPS親愛なる皆さん、プログラマーはシリーズ「あなたは弱いですか?」(あなたの脳に負担をかけ、通常のプログラミングから休憩することができます)からの競争を提案しています。 タスクは簡単です。2つの通常の分数を乗算するマルコフアルゴリズムを作成します。
例:入力:(1/2)*(2/5)
結果は1/5になります
それが誰にとっても興味深いものになる場合-それのために行きます。
Source: https://habr.com/ru/post/J110004/
All Articles