コラッツ予想がとけたらいいな2

自分の考察を書いていきます。

Egison

Curry をやってみた その2(双子素数)

Curry は、パターンマッチの場所に関数を(演算子も)書けるみたいです。 前準備 $ cypm install searchtree $ cypm add searchtree Prime.curry module Prime where import Control.Findall (allValues) primes :: [Int] primes = [2,3,5,7,11,13,17,19,23,…

egison-scheme で SEND + MORE = MONEY

SEND + MORE = MONEY という覆面算だ。 egison-scheme で解いてみた。 アルゴリズムとしては難しくない。 '(0 2 3 4 5 6 7 8 9) の順列を作り、その中から条件を満たす解を取り出す。 何故このお題を、本Egison でやらなかったかというと、 本Egison では遅…

Egisonで数独 その3

前回 Egisonのバージョンも上がった事だし、new syntaxで書き直してみた。 pattern functionを使って、結構きれいに書けた。 数独のプログラムとしても、オリジナリティな感じではある。 しかし、ちと時間がかかるな……

Egisonで文字列書き換え系で自然数の四則演算

自然数をzeroとsuccで表せるのは周知の事実だ。 文字列で書くこともできる。例えば、"ssso"は3になる。 文字列で表した自然数を、文字列のまま計算したらどうだろう。 文字列書き換え系でやってみた。 ユーティリティ convergeReplaceString() それ以上置換…

Egisonで定理証明

これは「Egison Advent Calendar 2019 - Qiita」の5日目の記事です。 はじめに 1年くらい前に「Egisonで定理証明なんて無謀っすよ。」 とか書いていたと思うけど、できるかもしれない。 『定理証明手習い』を参考にします。方法は以下です。 命題に対して、…

Egisonで数独 その2

4*4のミニ数独で考えることにする。 問題を小さくする事が、解決への第一歩だ。 図のように、横方向・縦方向・ブロック方向に分割して、 (矢印の方向は、1,2,3,4で構成されている) それらの解候補の共通集合を取れば良いのではないか。 なにい、解が複数あ…

Egisonで数独

失敗の記録です。 Egisonで数独にチャレンジしてみた。 まずヒント文字列を、1~9のCollectionのCollectionにパースする。 そしてパターンマッチ一発で解く。 3*3ブロックごとではなく、行ごとに分割する。 なので、matcherはlist(multiset(integer))で良い。…

『8パズルは181440通り』をegison-haskellで

前記事: 8パズルは181440通り、というのをどうしてもツリーを使って計算したかった。 方法は以下。 ツリーのルートを、揃ったパターンとする。 それを、下に向かって成長させていく。追加するのは一手動かしたパターンだ。 同じパターンの所は止める。 ツリ…

すごいFizzBuzz

すごいFizzBuzzがあったので紹介します。 let (m ~> str) x = str <$ guard (x `mod` m == 0) in map (fromMaybe . show <*> 3 ~> "fizz" <> 5 ~> "buzz") 何が何だかさっぱりですね! これだけの機能を使っています。 1行目 ・ ~>内のMaybeオルタナティブ(…

8パズルは181440通り by Egison, Haskell

8パズルとは、いわゆるスライドパズルだ。15パズルが一般的だ。 これを題材にして、Egisonでツリーのプログラミングに挑戦してみた。 公式のデモでも、ツリーを扱っている。 8パズルの有効パターンは何通りあるかを計算しようと思う。 方法1 ツリーのルート…

3*3魔方陣は1種類しか存在しない by Egison

Egisonでも出来たので報告します。 第一段階 関数fifteenで、1..9のうち、和が15になる三数を選びます。 第二段階 関数fifTripleで、fifteenから、任意の三要素({{1 5 9} {1 6 8} {2 4 9}}とか)の組み合わせを得ます。 第三段階 関数makeMagicで、fifTripl…

3*3魔方陣は1種類しか存在しない by Haskell

YouTubeで3*3魔方陣は1種類しか存在しないことをやっていた。 これをプログラムでやったらどうなるだろう。 最初はEgisonでやっていたけれど、計算が終わらないのでやめた。 ソースだけ貼っておきます。 第一段階 Haskellでやることにする。 リスト[1..9]に…

Termuxを利用したAndroidでのIdris、Egison環境の構築

2020/05/09追記 うまくいかなくなっているようです。 修正記事を書くかどうかも未定です。 AndroidでIdris、Egison環境を構築できたので書いてみる。 アプリTermuxを使う。root化しなくても良い所が嬉しい。 使用スマホはZenFone 5、Android 8.0です。 1.端…

Egisonでラムゼーの有名なやつ

wikipedia:ラムゼーの定理 ラムゼーの有名なやつ とは 「6人いれば、互いに知り合いである3人組か、互いに知り合いでない3人組が存在する」 というものです。 グラフ理論の言葉で言うと、 「完全6点グラフの各辺を赤か青に彩色したとき、どんな塗り分けに対…

EgisonでQuine

クワインとは、ソースコードと同じ文字列を出力するプログラムのことです。 3年前のこの記事のやりかたには欠陥があって、 s="...s=?...s.replace("?", s)..." ...s.replace("?", s)... だと?が2箇所あるので、その2箇所にsが埋め込まれてしまいます。 なの…

Egisonでrev_rev_id?

失敗の記録です。 いつにも増して投げやりですが、許してください。 そんな、Egisonで定理証明なんて、無謀っすよ。 部分的な証明 ;; (load-file "rev_rev_id.egi") ;; reverse 4要素以上 (define $myReverse (lambda [$xs] (match xs (list something) {[<nil> {</nil>…

Egisonでどうぶつしょうぎ

駒を動かすということは、駒のマスと空白のマスの置換ということだ。 Egisonのmatch-allのmultisetは、要素の全ての組み合わせ(置換)を考えるから、 これをフィルタリングすれば、駒の動きを表現できるのではないか、と思った。①先手の空白への駒の流入 各…

Egisonの練習その2

パターンマッチを使う関数を3つほど。データコンストラクタを外す関数。 (define $mcer (algebraic-data-matcher {<a integer> <b integer>})) (define $cut (lambda $xs (match xs mcer {[<a $x> x] [<b $x> x]}))) > (cut <A 6>) 6 > (cut <B 7>) 7 > (cut <C 7>) Error: failed pattern match > 1個以上の連</c></b></a></b></a></b></a>…

Egisonの練習その3

EgisonでFizz Buzzを書いてみた。むー (define $fizzbuzz' (lambda $x (match x (mod 15) {[,0 "FizzBuzz"] [(| ,3 ,6 ,9 ,12) "Fizz"] [(| ,5 ,10) "Buzz"] [_ x]}))) (define $fizzbuzz (map (fizzbuzz' $) (take 100 nats))) > fizzbuzz {1 2 "Fizz" 4 "B…

Egisonの練習

前々からEgisonに興味があった。 Egisonは「パターンマッチ指向」という新しいパラダイムを提唱している。 (define $pri (match-all primes (list integer) [<join _ <cons $p _>> (if (eq? p 3) p 0)])) > (take 10 pri) {0 3 0 0 0 0 0 0 0 0} >素数を1つずつパターンマッチし</join>…