Open11
Uiuaで色々やる
まとめ
公式
だいたい大事なことは全部ここに書いてある
みんな大好きFizzBuzz
処理の思考イメージ
MatchEmpty ← ≍ ""
ModThree ← = 0 ◿ 3
ModFive ← = 0 ◿ 5
FizzStr ← (""|"fizz")ModThree
BuzzStr ← (""|"buzz")ModFive
FizzBuzzStr ← ⊂⊃FizzStr BuzzStr
FizzBuzz ← (;:|;)MatchEmpty.FizzBuzzStr.
;⍥(+1:FizzBuzz.)15 1
各種ワンライナー化
スタックに貯めるだけ(&pを知らなんだ)
;⍥(+1:(;:|;)≍"".⊂⊃((""|"fizz")=◿3:0)((""|"buzz")=◿5:0)..)15 1
標準出力①
;⍥(+1;&p(∘|:)≍"".⊂⊃((""|"fizz")=◿3:0)((""|"buzz")=◿5:0)..)15 1
標準出力②(↑で似た表現多いなーとおもったのでまとめれないか試したやつ)
;⍥(+1;&p(∘|:)≍"".♭▽:["fizz""buzz"]⊟∩(=⊙◿0)⊙,3 5..)15 1
Associative Array ぽいやつ
⌕がO(n)の香りあるので早くはない。
[KeyのBox配列 ValyeのBox配列]でデータ構造を持って、Key探してindex取ってきて、対応するValue配列に当てにいくイメージでとりあえず素朴に?実装。
AssociativeArray ← [
{"key" "hoge" "fuga" "piyo"}
{"value" 1 [{}{}] []}
]
PushAttr ← ⊔⊡:⊢⇌,⊙⍤:"KeyError"⊙≠.⊙⧻⊗1.⌕□:⊙:⊢.:
PushAttr "fuga" AssociativeArray
PushAttr "NotFound" AssociativeArray
JSON Parserの残骸
残骸、エラーメッセージ地味に頑張ってるの我ながら草。
そもそもObjectLikeなデータモデルがねえとなって一旦休憩中なのである。
⊙.⊙:⊙⊙:⊙⊙⊙:
ここらへん地獄なのでなんとかしたい。
EatError ← $"Got unexpected value.\nActual: _\nExpected: _"
ParseKeywordError ← $"Got unexpected Keyword.\nActual: _\nExpected: _"
AbstractEat ← ↘1⍤EatError ⊙⊙=,,⊢,
AbstractParseKeyword ← :↘:⍤ParseKeywordError⊙⊙≍,,⊙:⊙⊙:↙⊙.⊙:⊙⊙:⊙⊙⊙:.⧻.
SkipWhiteSpace ← ⍢((∘|↘1)=@ ⊢.)(=@ ⊢)
EatComma ← AbstractEat @,
EatColon ← AbstractEat @:
ParseTrue ← AbstractParseKeyword "true" 1
ParseFalse ← AbstractParseKeyword "false" 0
ParseNull ← AbstractParseKeyword "null" 0 # ホンマか?
Tutorials回答案
Page | No. | Answer | 所感 |
---|---|---|---|
basic | 1 | ++ |
|
basic | 2 | ÷,, |
, が2項演算の元データを残すのに地味に便利だと教えてくれる |
basic | 3 | ×.- |
|
math | 1 | ×+ |
|
math | 2 | √+×.:×. |
flipで2乗を適用する |
math | 2 | √+∩(×.) |
未来の知識を使うとbothで1つの演算を2つに与えられるのでスッキリする |
arrays | 1 | +⇌. |
配列の2項演算は各indexで行われる |
arrays | 2 | ↯:0⊟ |
ここ地味に即答できない |
arrays | 3 | ¤ |
定義通り |
arrays | 4 | ⊂⊢ |
|
arrays | 5 | ⊢:↘1. |
一回コピーして、取るのと落とすので分けて処理 |
arrays | 5 | ⊃⊢(↘1) |
未来の知識 fork で1つの値に2つの関数を当てられる、便利 |
arrays | 6 | ⊟∩□ |
想定解じゃない気がする |
types | 1 | --@A@a |
いくつか覚えていないので計算で出す人、ちなみに32。 |
types | 1 | ⊂:↘1:+1⊢. |
Flipで素朴に |
types | 2 | ⊂⊃(+1⊢)(↘1) |
Fork Join は良い文明かも、FizzBuzzでも使った |
functions | 1 | /×+1⇡ |
それっぽい |
functions | 2 | ≡/+ |
rowsが出てこなくて結構悩んだ。 |
functions | 3 | $"[_]" |
|
advancedstack | 1 | :⊙:⊙⊙: |
素朴?な実装、ホンマか??? |
advancedstack | 2 | ÷⊙+ |
素直に便利 |
advancedstack | 3 | ⊃(++)(××) |
直近2つじゃなくてもforkは便利 |
advancedstack | 4 | ×⊃(+⊙⋅⊙;)(+⋅⊙⋅∘) |
Planet Notationの練習、末尾のid <-> popがぱっとでてこなかった。 |
controlflow | 1 | (("large"pipe"medium")pipe"small")⊃(<10)(<100) |
pipeは読み替えてください、テーブル壊れる |
controlflow | 2 | ⍢(×⇌.)(/↥<1000) |
上手めなきがする |
# AbstractEat
@, "a"
⊢,
,,
⊙⊙=
E
⍤
↘1
ParseKeywordError ← $"Got unexpected Keyword.\nActual: _\nExpected: _"
AbstractParseKeyword ← :↘:⍤ParseKeywordError⊙⊙≍,,⊙:⊙⊙:↙⊙.⊙:⊙⊙:⊙⊙⊙:.⧻.
ParseKeyword ← AbstractParseKeyword "true" 1
ParseKeyword "truefalse"
ParseKeyword "falsetrue"
"truefalse"
"true" 1
.⧻.
⊙:⊙⊙:⊙⊙⊙:
↙⊙.
⊙:⊙⊙:
:↘:⍤"unexpected keyword" ≍
KeyError追加
AssociativeArray ← [
{"key" "hoge" "fuga" "piyo"}
{"value" 1 [{}{}] []}
]
PushAttr ← ⊔⊏:⊢⇌,⊙⍤:"Err"⊙≠.⊙⧻⊗1.⌕□:⊙:⊢.:
旧Fizzbuzzの試行錯誤はこっち
⊙.⊙:⊙⊙:⊙⊙⊙:ここらへん地獄なのでなんとかしたい。
処理中の変数はBoxArrayにでも入れとけばunbox pickで取れて楽だったりするか?
便利なもんあった
Trim leading whitespace
▽\↥≠@ . " ← remove these"
これめっちゃおもろいな。一旦全部舐めちゃって、Keepで落とす。
ワイのと比べて「ひとつずつ見ていく」処理じゃない文スッキリ度が高い
ぼちぼち書いた