Submit Search
Upload
Smalltalkで文字列解析・集計
•
0 likes
•
895 views
M
Masashi Umezawa
Follow
CROSS 2014 「言語CROSS」でのF#お題「カレーのメニュー解析&集計」の解答です
Read less
Read more
Technology
Education
Report
Share
Report
Share
1 of 13
Download now
Download to read offline
Recommended
NanoStrand
NanoStrand
Masashi Umezawa
Cuis Smalltalkの紹介
Cuis Smalltalkの紹介
Masashi Umezawa
Sistemas integrados de manufactura
Sistemas integrados de manufactura
ROSS_ANGEL
第二章
第二章
jxhtq
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
super super & sub sub の話
super super & sub sub の話
Masashi Umezawa
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサ
Masashi Umezawa
Recommended
NanoStrand
NanoStrand
Masashi Umezawa
Cuis Smalltalkの紹介
Cuis Smalltalkの紹介
Masashi Umezawa
Sistemas integrados de manufactura
Sistemas integrados de manufactura
ROSS_ANGEL
第二章
第二章
jxhtq
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
super super & sub sub の話
super super & sub sub の話
Masashi Umezawa
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサ
Masashi Umezawa
視覚化エンジンRoassal
視覚化エンジンRoassal
Masashi Umezawa
Smalltalkでじゃんけん
Smalltalkでじゃんけん
Masashi Umezawa
iPadでScratch
iPadでScratch
Masashi Umezawa
早わかりSmalltalk
早わかりSmalltalk
Masashi Umezawa
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Masashi Umezawa
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Masashi Umezawa
Smalltalkだめ自慢
Smalltalkだめ自慢
Masashi Umezawa
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
Pyonkeeの皮をはぐ
Pyonkeeの皮をはぐ
Masashi Umezawa
Smalltalkと型について
Smalltalkと型について
Masashi Umezawa
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
Masashi Umezawa
FileManで楽々ファイル操作
FileManで楽々ファイル操作
Masashi Umezawa
TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
TaskItの紹介
TaskItの紹介
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Masashi Umezawa
Revealing ALLSTOCKER
Revealing ALLSTOCKER
Masashi Umezawa
TarandocでJSONを永続化
TarandocでJSONを永続化
Masashi Umezawa
Dockerizing pharo
Dockerizing pharo
Masashi Umezawa
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
More Related Content
Viewers also liked
視覚化エンジンRoassal
視覚化エンジンRoassal
Masashi Umezawa
Smalltalkでじゃんけん
Smalltalkでじゃんけん
Masashi Umezawa
iPadでScratch
iPadでScratch
Masashi Umezawa
早わかりSmalltalk
早わかりSmalltalk
Masashi Umezawa
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Masashi Umezawa
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Masashi Umezawa
Smalltalkだめ自慢
Smalltalkだめ自慢
Masashi Umezawa
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
Pyonkeeの皮をはぐ
Pyonkeeの皮をはぐ
Masashi Umezawa
Smalltalkと型について
Smalltalkと型について
Masashi Umezawa
Viewers also liked
(11)
視覚化エンジンRoassal
視覚化エンジンRoassal
Smalltalkでじゃんけん
Smalltalkでじゃんけん
iPadでScratch
iPadでScratch
早わかりSmalltalk
早わかりSmalltalk
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Smalltalkだめ自慢
Smalltalkだめ自慢
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Pyonkeeの皮をはぐ
Pyonkeeの皮をはぐ
Smalltalkと型について
Smalltalkと型について
More from Masashi Umezawa
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
Masashi Umezawa
FileManで楽々ファイル操作
FileManで楽々ファイル操作
Masashi Umezawa
TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
TaskItの紹介
TaskItの紹介
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Masashi Umezawa
Revealing ALLSTOCKER
Revealing ALLSTOCKER
Masashi Umezawa
TarandocでJSONを永続化
TarandocでJSONを永続化
Masashi Umezawa
Dockerizing pharo
Dockerizing pharo
Masashi Umezawa
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
VerStixの紹介
VerStixの紹介
Masashi Umezawa
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Masashi Umezawa
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Masashi Umezawa
Tarantalk
Tarantalk
Masashi Umezawa
Why!? Smalltalk
Why!? Smalltalk
Masashi Umezawa
More from Masashi Umezawa
(17)
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
FileManで楽々ファイル操作
FileManで楽々ファイル操作
TruffleSqueakの紹介
TruffleSqueakの紹介
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
TaskItの紹介
TaskItの紹介
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Revealing ALLSTOCKER
Revealing ALLSTOCKER
TarandocでJSONを永続化
TarandocでJSONを永続化
Dockerizing pharo
Dockerizing pharo
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
VerStixの紹介
VerStixの紹介
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Tarantalk
Tarantalk
Why!? Smalltalk
Why!? Smalltalk
Recently uploaded
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Recently uploaded
(12)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Smalltalkで文字列解析・集計
1.
CROSS 2014 言語CROSS Smalltalkによる カレー問題別解解説 2014 SoftUmeYa,
LLC Masashi Umezawa
2.
カレーのお題 長いので略。以下のような文字列をパース 1;パリパリチキン;肉類;500;0; 2;ロースカツ;肉類;300;0;なす,ゆでタマゴ 3;海の幸;魚介類;300;1; 4;やさい;野菜類;400;0;ゆでタマゴ ...
3.
解答の方針 関数型言語っぽく書く ブロッククロージャやコレクション系の プロトコルを駆使 変数の代入は極力避ける ちょっとやり過ぎでアレな感じにする 結構まともになった... • Smalltalk for
Lispers – http://live.exept.de/doc/online/english/programming/stForLi spers.html クロージャ駆使はSmalltalk的スタイル
4.
getOrderHistory 「関数を定義」とあるので、全体をクロージャに 注文クラスを導入せず、辞書を返している getOrderHistory :=
[:src | | rows rowStream | rows := OrderedCollection new. rowStream := src readStream. [rowStream atEnd] whileFalse: [rows add: ((rowStream nextLine) findTokens: ';')]. rows collect: [:eachRow | Dictionary new in: [:map | #(#OrderId #CurryMenu #Category #RiceWeight #HotFlavor #Toppings) paddedWith: eachRow do: [:a :b | map add: (a->b)]. map] ]. ].
5.
A1 「辛さ」が2以上の注文を抽出し、 その「注文 ID」をすべて取得せよ 注文についてのクラスを導入せず、辞書を返している orders
:= getOrderHistory value: source. orders select: [:each | (each at: #HotFlavor) asInteger >= 2] thenCollect: [:each | each at: #OrderId].
6.
A2 「分類」ごとに「ライスの量」の平均を取得せよ。 なお、平均値が大きい順に並べる ((orders groupBy:
[:each | (each at: #Category)] having: [:each | true]) collect: [:each | (each collect: [:e | e at: #RiceWeight]) average]) associations sorted: [:a :b | a value > b value]
7.
A3 「メニュー」がロースカツの注文について、 各「トッピング」の出現回数をカウント Bag new
in: [:bag | (orders select: [:each | (each at: #CurryMenu) = 'ロースカツ']) do: [:each | (each at: #Toppings) ifNotNil:[:toppings | bag addAll: (toppings findTokens: ',')]]. bag sortedElements]
8.
F-like もう少し工夫してみる 括弧が多いのはいかがなものか F#のパイプライン演算子(|>)は、やはり綺麗
9.
パイプラインの実装(1) >> というメソッドをBlockClosureに定義 >>
otherBlock ^ otherBlock value: self value Objectにも定義 >> other ^ [self] >> other
10.
パイプラインの実装(2) BlockClosureにselectやらcollectを定義 collect ^ [:col
| col collect: self] select ^ [:col | col select: self] 同様に、gather, sortedも用意 できた!!
11.
A1 「辛さ」が2以上の注文を抽出し、 その「注文 ID」をすべて取得せよ 注文についてのクラスを導入せず、辞書を返している orders
:= getOrderHistory value: source. orders >> [:each | (each at: #HotFlavor) asInteger >= 2] select >> [:each | each at: #OrderId] collect.
12.
A2 「分類」ごとに「ライスの量」の平均を取得せよ。 なお、平均値が大きい順に並べる (orders groupBy:
[:each | (each at: #Category)] having: [:each | true]) >> [:each | (each collect: [:e | e at: #RiceWeight]) average]) collect >> #associations >> [:a :b | a value > b value] sorted
13.
A3 「メニュー」がロースカツの注文について、 各「トッピング」の出現回数をカウント (orders select: [:each
| (each at: #CurryMenu) = 'ロースカツ']) >> [:each | (each at: #Toppings) ifNil:[#()] ifNotNil: [:toppings | (toppings findTokens: ',')]] collect >> [:each | each] gather >> #asBag >> #sortedElements
Download now