Free Trial

ウィークリーチャレンジリポジトリ

トップになるためのスキルをお持ちですか? ウィークリーチャレンジを購読しましょう。ベストを尽くして問題を解決し、解決策を共有して、他のユーザーがどのように同じ問題に取り組んだのか確認しましょう。私たちも解答例を共有しています。

チャレンジ #280: シーケンシャルロジック

AYXAcademy
Alteryx
Alteryx

 

こんにちは、Maveryx

 

先週の課題の解決策はここで見つけることができます。Firefly ilustrate a table with sequestial logic 20307.jpg

 

Patrick Digan (@patrick_digan)  さんがあなたの論理スキルをテストする今週のチャレンジを送っていただきました。素晴らしいチャレンジを送っていただきありがとうございます、Patrickさん!

 

あなたは以下のようなデータセットを持っています。

 

Record

A

B

C

1

1.0

0.0

0.0

2

1.0

0.0

0.0

3

2.0

1.0

0.0

4

?

?

?

 

あなたのタスクは、レコード4から25までの行を生成することで(1から3はこのままです)、それぞれの行に対してABCの値を計算しなければなりません。

 

カラムABCのレコード4から25の値を決めるロジックは以下のとおりです。

  • カラムA:前の行のすべての数値を合計します
  • カラムB:前の行のAからBを引き算します
  • カラムC:前の行のAからBCを引き算します

 

ヒント:レコードごとに値を計算する必要があります

 

レコード4の例:

A=2+1+0=3

B=2-1=1

C=2-1-0=1

 

レコード5の例:

A=3+1+1=5

B=3-1=2

C=3-1-1=1

 

復習が必要ですか? アカデミーで次のレッスンを復習してください。

 

健闘を祈ります!

 

Qiu
21 - Polaris
21 - Polaris

できました。

スポイラ
challenge_ja_280.PNG
Yoshiro_Fujimori
オーロラ

回答します。

 

スポイラ
(Record 1, 2 が 計算ルールに合致していないので入力データとしては不要な気がしますが、何か意味があるのでしょうか。)

Main workflow

Challenge_280_main.png
Macro
Challenge_280_macro.png

 

Yoshiro_Fujimori
オーロラ

あまり美しくないですが、マクロなしでもやってみました。

 

スポイラ
Workflow
Challenge_280_ja_YFujimori(2).png
Formula Tool
  ABC = ToString([A]) + " " + ToString([B]) + " " + ToString([C])

Multi-Row Formula

IF [Record] <= 3
THEN [ABC]
ELSE

  ToString( ToNumber(GetWord([Row-1:ABC], 0)) + ToNumber(GetWord([Row-1:ABC], 1)) + ToNumber(GetWord([Row-1:ABC], 2)) )
  + " " +

  ToString( ToNumber(GetWord([Row-1:ABC], 0)) - ToNumber(GetWord([Row-1:ABC], 1)) )
  + " " +

  ToString( ToNumber(GetWord([Row-1:ABC], 0)) - ToNumber(GetWord([Row-1:ABC], 1)) - ToNumber(GetWord([Row-1:ABC], 2)) )
ENDIF

 

 

AkimasaKajitani
17 - Castor
17 - Castor

できました!

 

スポイラ
強引に横持ちのままやる方法と一度縦持ちにしてから行う標準的な方法の2パターンです。
横持ちのままやるのは、、、かなりおすすめできないですね、、、(Advent of Codeの時に何度かこの方法で処理しています)。

スクリーンショット 2024-07-31 184612.png

横持ちのままやる場合は、
ToString([A])+":"+ToString([B])+":"+ToString([C])​

 

で3つの値を一つのフィールドに結合して放り込んで、

IF [ABC]="::" THEN
ToString(
ToNumber(GetLeft([Row-1:ABC], ":"))+
ToNumber(GetPart([Row-1:ABC], ":",1))+
ToNumber(GetPart([Row-1:ABC], ":",2))
)+":"+
ToString(
ToNumber(GetLeft([Row-1:ABC], ":"))-
ToNumber(GetPart([Row-1:ABC], ":",1))
)+":"+
ToString(
ToNumber(GetLeft([Row-1:ABC], ":"))-
ToNumber(GetPart([Row-1:ABC], ":",1))-
ToNumber(GetPart([Row-1:ABC], ":",2))
)
ELSE [ABC] ENDIF​

といった感じで値を分解しながら処理を行っています・・・。

DaisukeTsuchiya
パルサー

できました。

 

スポイラ
@AkimasaKajitani と @Yoshiro_Fujimori さんはシンプルに解いていますね。
英語版の回答をそのまま使っていますが、処理がうまくいかなかった記憶あり。お二人のWFを勉強してみます。

ただ株が下がってそれどこじゃないですね。

スクリーンショット 2024-08-05 172827.pngスクリーンショット 2024-08-05 172851.png

SuguruYoshinaga
コメット

できました。

スポイラ
無理やり正規表現を使って解きました。あまりキレイに解けず…。
image.png
A_Sho
アステロイド

学習記録で投稿させていただきます。

SNaka
メテオロイド

Coreレベルのものをさかのぼってやってみています。

AkimasaKajitani
17 - Castor
17 - Castor

Designer Cloud (Trifacta)でやってみました。さすがに無理やりになりました・・・。

 

スポイラ

スクリーンショット 2024-08-16 004125.png

美しくないのですが、マクロを使ってみました。繰り返しマクロはたぶんできないと思うので、マクロを繰り返し答えが出るまでコピペしています。

スクリーンショット 2024-08-16 004136.png
スクリーンショット 2024-08-16 004145.png

マクロの中身:
スクリーンショット 2024-08-16 004345.png

ポイントは、RANGE関数で行生成みたいなことができることでしょうか。ただ、複数行フォーミュラが新規列の過去の行を参照できない(っぽい)ので今回のように1行ずつ作っていく形になりました。惜しいなぁ・・・。

Designer Cloud(Designer Experience)でもガリガリツール置いていけばできそうですね・・・。

 Designer Cloud(Designer Experience)版です。力技でもやれば答えは出せます!

 

スポイラ
スクリーンショット 2024-08-16 005621.png