ゲーム

「連鎖ノ試練」 答え合わせ- エンジニア専用RPG CODE QUESTで使ったコード

ツイッターを見ていたら面白そうなツイートが流れてきた。

CODE QUEST 〜伝説ノエンジニア、求ム〜|GeekOut : https://geek-out.jp/cp/code-quest/

ちょっくらやってみっかと挑戦してみたところ、1個めと2個めの問題はすぐにクリア出来たのだけど、3個めの問題はプログラムを組まないとクリアできなさそうな問題だった。

問題の内容は

"イアラ","ウェイト","オメガロ","ガルヒ","ガングリオンズ","クリオ","ジェノバ","スノウガ","ズビズバ","スペシウム","タグアズ","ドドンパ","トルネ","ネメシス","バイナリル","ハザード","パリピファイア","バルース","ヒラケゴマ","フェイク","プリズマ","ホルーガ","マッハ","マホマホ","ムート","ラリホフ","ランス","ループ","ロールウェイブ","ワロス"

という30個の魔法をシリトリで繋げて20個以上連鎖させるというもの。

最初は魔法の重複があっても良いと思っていたので、そういうコードを書いてたけど、実際に答えを入力してみると重複は許されないらしい。

これはたしかに、人間がやると大変そうな良問題。

ということでコンピューターの力を使って強引に、組合せをランダムにシャッフルしながら多数の試行を重ねて解くという、いわゆるブルートフォースアタック的なやり方で解決した。

なるべくわかりやすいように丁寧にコメント書いてみました。

やりかたは色々あると思うんですが、この場合再帰を使うのが一番やりやすいかなと思いました。

自力でクリアしたい人はネタバレになってしまいますので気をつけて…。


#! /usr/bin/env ruby

@spells = ["イアラ","ウェイト","オメガロ","ガルヒ","ガングリオンズ","クリオ","ジェノバ","スノウガ","ズビズバ","スペシウム","タグアズ","ドドンパ","トルネ","ネメシス","バイナリル","ハザード","パリピファイア","バルース","ヒラケゴマ","フェイク","プリズマ","ホルーガ","マッハ","マホマホ","ムート","ラリホフ","ランス","ループ","ロールウェイブ","ワロス"]
@result = ""
@count = 0

def get_spell(arr,key)
  #文字の最初と最後がマッチするスペルの検索
  r = arr.select{|s| s[0]==key[-1]}

  #接続単語発見時
  if(r.length > 0)then
    #発見した要素を結果に追加
    @count += 1
    @result += r[0] + " "

    #発見した要素を消す
    arr.delete(r[0])
    #再帰
    get_spell(arr,r[0])

  #接続単語が発見出来なかった時
  else
    #20個以上の単語接続が出来ていたら
    if(@count >= 20)then
      #終了処理へ
      return true

      #20個未満の単語接続ならやり直し
    else
      #ダメだった結果表示
      puts @count
      puts @result

      #イニシャライズ
      @count = 0
      @result = ""
    end
  end

end

while(1)

  #接続単語を見つける度にリストの単語を消化用の配列を用意
  #毎回同じ結果に鳴らないように、初期化の度に配列の要素をシャッフルする
  dic = @spells.clone.shuffle

  buf = dic[0]
  #先頭の単語を結果に入れる
  @result += buf + " "
  dic.delete(buf)
  #接続単語数のカウンターをインクリメント
  @count +=1

  #再帰処理
  #20個以上の単語接続が出来ていたらループ脱出
  if(get_spell(dic,buf) == true)then
    break
  end

end

#最終結果表示
puts "*****clear*****"
puts @count
puts @result

実行結果は以下の通り。

どうやら連鎖は20個がマックスじゃないかな〜。

 

この記事が気に入ったらいいね!しよう
🍀

更新情報をお届けします

穴あきのパーカーと打ち捨てられたエビたちの尻尾前のページ

肩すかしブレードランナー2049と”新米野郎!”の呼び声に秘められた愛について次のページ

関連記事

  1. レビュー

    長時間のバスなどの車中旅行の前に準備しておくと良いもの。A.首枕

    先日、ぼくは鹿児島県の東側の半島、大隅半島に向かっていました。…

  2. Mac

    タイピングのレベルまで上がっちゃう。世界最高峰のキーボードブランド HHKBの lite2レビュー

    どうもこんにちはこんばんは。本日もタイピングする時間がやってきまし…

  3. mvno格安SIM

    これヤバすぎ(笑)MVNO格安SIMに変更する前に”絶対に”確認しておくべきこと

    以前もMVNO、いわゆる格安SIMに変更するにあたっての記事をいろいろ…

  4. ウェブサービス

    ウェブサービス「Pocket」がやっぱり便利な件について

    みなさんPocketというウェブサービスをご存知ですか。このブログで…

  5. レビュー

    相手のわかりやすい言葉で語るという事

    人に理解してもらいやすい言葉をえらんで話すというのは結構、たいせつ…

  6. ウェブサービス

    やっぱりスマホじゃきつかった。AmazonのFire HD8を買った感想

    FireHD7を北九州の電車内に置き忘れ、気づいてすぐにJRに連絡した…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

  1. レビュー

    もっと早く買えばよかった。お掃除ロボットの素晴らしさに感動した
  2. 健康

    一日に何時間寝るのが限りなく正解に近いのか
  3. こころ

    ほんとうに必要なものは、少ししかないから。ぼくはモノを捨てまくる。
  4. 日記

    朝からジョギングをしてみました。
  5. レビュー

    フィットネスバイク(AFB4520K)を買った件
PAGE TOP