Rubyメモ

連続する同じ文字で文字列を分割

scan

str = "122333455"
str.scan(/((.)\2*)/).map(&:first)
#=> ["1", "22", "333", "4", "55"]

括弧が2つあるのは、内側の括弧のドットで1文字にマッチし、外側の括弧でその繰り返しをキャプチャするため。ドットにマッチした文字は \2 で参照する。scanの結果は、外側括弧の連続文字全体と、内側括弧の単文字の配列となる。

p str.scan(/((.)\2*)/
#=> [["1", "1"], ["22", "2"], ["333", "3"], ["4", "4"], ["55", "5"]]

How to split a string of repeated characters with uneven amounts? Ruby

chunk_while

chunk_whileを使い、前の文字と等しい場合を条件にすることで同じ文字が続く単位をグループ化することもできる。

 str.chars.chunk_while{|a,b|a==b}.to_a
=> [["1"], ["2", "2"], ["3", "3", "3"], ["4"], ["5", "5"]]

母音(aeiou)と子音で分ける。

v="aeiou"
str="throughout"
str.chars.chunk_while{|i,j| v.include?(i) == v.include?(j)}.to_a
=> [["t", "h", "r"], ["o", "u"], ["g", "h"], ["o", "u"], ["t"]]

chunk

chunkは要素を順にブロックで評価しその結果でグループ分けする。

[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk {|n|n.even?}.to_a
=> [[false, [3, 1]], [true, [4]], [false, [1, 5, 9]], [true, [2, 6]], [false, [5, 3, 5]]]

[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk {|n|n%3}.to_a
=> [[0, [3]], [1, [1, 4, 1]], [2, [5]], [0, [9]], [2, [2]], [0, [6]], [2, [5]], [0, [3]], [2, [5]]]

同じ文字の連続でグループ分けする場合は itself が使える。

str = "122333455"
str.chars.chunk(&:itself).to_a
=> [["1", ["1"]], ["2", ["2", "2"]], ["3", ["3", "3", "3"]], ["4", ["4"]], ["5", ["5", "5"]]]

str.chars.chunk(&:itself).map{|x|x.last.join}
=> ["1", "22", "333", "4", "55"]

同じ文字の出現数を数える

group_byを使う場合

str="ABBCCCAAECBB"
str.chars.group_by{|a|a}.to_a
=> [["A", ["A", "A", "A"]], ["B", ["B", "B", "B", "B"]], ["C", ["C", "C", "C", "C"]], ["E", ["E"]]]
> str.chars.group_by{|a|a}.map{|k,v| "#{k}=#{v.size}"}
=> ["A=3", "B=4", "C=4", "E=1"]

countを使う方がシンプル

> str.chars.uniq.map{|c| "#{c}=#{str.count(c)}"}
=> ["A=3", "B=4", "C=4", "E=1"]

配列の並んだ順で2つずつ取り出す

each_consを使う。

> a=[3,1,4,1,5,9]
> a.each_cons(2).to_a
=> [[3, 1], [1, 4], [4, 1], [1, 5], [5, 9]]

map を使いたい場合、each_cons(2).map とすることができる。 パラメタで指定した数だけ入力が無い場合は空配列が返る。

> a=[1,2,3]
> a.each_cons(4).to_a
=> []

重複無しの場合は each_slice

> a=[3,1,4,1,5,9,2,6]
> a.each_slice(3).to_a
=> [[3, 1, 4], [1, 5, 9], [2, 6]]

入力が不足する場合、返り値の最後の値の要素が少なくなる。

浮動小数の桁数指定

f = 3.14159
f.round(2)  #=> 3.14
f.round(3)  #=> 3.142

Rubyメモ

範囲オブジェクト

範囲オブジェクトは each や map に渡せばその範囲での繰り返しになるが、そのままでは配列にならない。そのため、to_a を使うなどをする。

(1..10).map{|c| print c} #=>12345678910
p (1..10)                # 1..10
p [1..10]                # [1..10]
p (1..10).to_a         # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p [*1..10]               # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = *1..10
p a                      # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

"*"演算子

代入式において複数の値を受け取ることができる。

a,*b = 1,2,3,4,5
# a => 1
# b => [2,3,4,5]

メソッドで複数の引数を受け取る場合に使う。(splat演算子と呼ばれる) メソッドの引数の配列の前に * をつけると、配列をここの引数に展開する。

def abc(a,b,c)
  puts "a:#{a} b:#{b} c:#{c}"
end
def my_printf(fmt, *args)  
  puts "#{fmt} #{args]"
end
a=[1,2,3]
abc(*a)                      # => abcを1,2,3 で呼び出す。(引数不足エラーにならない)
my_printf("%s", *a)     # => my_printf("%d", 1,2,3) と同じ。
                                #       この結果、fmt="%d", args=[1,2,3] となる

関数の中間の引数に * を使うこともできる。

def abc(a,*b,c)
  puts "a:#{a} b:#{b} c:#{c}"
end
abc(1,2)  
abc(1,2,3)
abc(1,2,3,4)

#--output--
a:1 b:[] c:2
a:1 b:[2] c:3
a:1 b:[2, 3] c:4

$<

標準入力の各行を返す。複数行で数値が渡されるような場合、

a = gets.to_i
b = gets.to_i
c = gets.to_i

とするが、これを

a,b,c = $<.map &:to_i

とすることができる

コトダマン ロウ夜雨[超級]

エスト概要

  • シールドが2つあるとき与ダメがゼロになる
  • シールドを壊すと次のターンには復活する
  • このため1ターンでシールドを壊しつつ攻撃することになる
  • シールドはかなり堅いが、復活後のシールドは少し柔らかい

ワード

  • 「かこうこう」で火口湖、火口港。「かこうこうか」で加工硬化
  • みろくの「ろ」も、「こうろうし」「こうろうか」「こうろうい」が作れる

と学会誌38

memo

と学会誌27

memo

  • 「冬ソナの陰謀」(内海晋平)
    • 「逃げるシンカー」の中で展開される冬のソナタは徴兵制の批判説について
  • 「超能力の存在が科学によって証明された?」(光デパート
    • ゲイダー(レイダーのようにゲイを見分ける能力) 、人間には瞬時にゲイを見分ける能力がある!
  • 「トンデモ大好き名誉教授がたどりついた邪馬台国論争の決定打(?)」
  • 「最強の護身術とは何か?」
    • 通信講座「秘伝 気功護身術講座」
  • 「パワースポットはどこですか?」(近衛秀一)、
  • 「その頃私は間違っていた(いろいろと)」(気楽院)
  • 東京消防庁のために戦え!炎の戦士ファイヤーガール」
  • 「本当は怖い石川啄木」(久留賢治)、
    • 石川啄木の秘密 書き換えられた天才の生涯」(大沢博著,光文社,1977/5/10)
  • 「ナメてかかると足元すくわれる少女マンガ」(新田五郎
  • 「20周年記念本大会宣伝の異常な呟き」
  • 北朝鮮に原爆は作れません、せいぜい長崎型3個」キリッ
  • 「転移か逆転移かそれが問題だ」
  • 「私の大切な私のための…」
    • 古本屋で買った血液サラサラレシピの本に貼られていた前の持ち主の大量の付箋
  • 「展示会でホメオパシー
  • 「森先生、それは真似できません!」(山本弘

と学会誌29

memo

  • スティーブン・キングケネディ暗殺」
    • 海外のAmazonカスタマーレビューの紹介。冷静な分析が多い
  • 「中国のインターネット事情」(シ)
  • 「実写版・女の子と軍隊」(内海晋平)
  • 「マッチョなアメコミはコブシで決着!」
  • 「キラキラネームの憂鬱」(近衛秀一
    • 何でもキラキラネームのせいにするトンデモ論理の本
  • サッチモもビックリ!」(小堤正人
    • 「宇宙のなぞ研究室」という本
  • 「武闘術」
    • 入門編、練攻編、実践編に分かれた通信教育講座
  • 「若者の~離れ」
  • 「この種、芽が出ず」(前田裕之)
    • オリジナル福引(謎を解くと景品がもらえる)のガイドブック。
  • 「タイムマシンだろ、もっと有効に使おうよ」
    • 近畿地方邪馬台国が無かった説の信者が作ったマンガ。タイムトラベルして実際に見に行く。
  • 「日本古来の食事を守れば、『天丼の引き寄せ』だってできる?」(わち えいみ)
    • 「病気にならない体質がある」徐々にスピリチュアルな内容に
  • 「連載 学会のトンデモ第一回「統合大系物理学」
  • 「第21回日本トンデモ本大賞大会グッズ「トンデモペナント」制作記」
  • 「日仏トンデモ映画対決」
    • 「ラストアサシン」(2011年仏)
    • 「ランウェイビート」(2011年日本) ケータイ小説
  • 「快人 黄色い手袋」(唐沢俊一
  • 「『ウルトラマン』も『ミンキーモモ』もフリーメーソンの陰謀だったんだよ!」「な、何だってー!?」(山本弘

と学会誌40

メモ

  • 「東西の出汁の違いと水の硬度デマ」(光デパート
    • 関東は水の硬度が高いのでカツオ、関西は硬度が低いのでコンブ出汁という 一見科学的に見えて全く根拠がなく正しくもないデマ
  • タイムパラドックスてんこもり」(内海晋平)
    • 全国LPガス協会が作成したタイムトラベルネタのトンデモマンガ
  • 「π列車で行こう!」(117番テネシン梅田)
  • ワタミのトンデモ理念」(ケルベロス川崎)
  • 「遅れてやって来すぎた脳健康法」
    • ラジオは脳に効く説
  • 「虐げられるラーメンオタクと落語家 ラーメン発見伝」(寶来誠)
  • 「え?漢字を作ったのはユダヤ人ってマジですか?」
  • 「IT産業遺構」(大沢南)
    • 駅等の公衆電話の跡地
  • 「雑誌名を黙々と読む楽しみ」
  • 「10人のくろんぼ」(唐沢俊一
  • 「レーザーに関する幻想と誤解」(藤倉珊

コトダマン 鴉(超級)

  • 2ステージ構成
  • 1ステージ目はワザ程度(すらできなくても)倒せるぐらい弱い。2ステージからが本番。(マルチだとリーダーはほぼ何もしなくていい)
  • 2ステージは、奇数ターンと偶数ターンで盤面が変わる(図参照)
  • いずれも「しょう」「しょく」「きょう」「きょく」などを中央で作るのが基本。「よ」か「ゆ」だが、「ゆ」は単語が作りづらい(例えば、「きょく」はあっても「きゅく」はない、「〇うしょく」に比べて「〇うしゅく」は難しい、など)ので「よ」の方がいい。
  • タイムボム(4文字2つ、スゴワザ2つなど)n失敗すると HPゲージ半分程度のダメージを受ける。即死でなくわりと優しめ。

f:id:nodocchi:20201004201929j:plain

コトダマン 武威(超級)

  • 2ステージ構成。いずれもヒール
  • 1ステージ目は弱い
  • 2ステージ目はヒールブロックを破壊するまで6文字ガード(6文字未満の文字はノーダメージ)が武威にかかってる。ヒールブロックを破壊すると4文字ガード

  • 「〇うこう〇〇〇」などの盤面で、うしろ3マスは「しょう」等で5文字が容易に作れる
  • ヒールブロックを早く壊すため、ヒールブレイカーに加え、かつ、長い文字を作るのが有効。
  • ワードメモ
ことば 漢字
こうこうじ 黄口児
ゆうこうし 有効視
ほうこうしゅう  奉公衆
じんこうし 人工歯
じんこうしょう 人工礁
しんそうしんり  深層心理
ほうそうしゅう  法相宗
たんそうほう   単層砲
しんとうじょう  新登場
とうとうし    陶唐氏
こうとうしゅ 好投手
こうほうし    広報誌
どうほうしゅう 同朋衆

コトダマン ココロ降臨

デッキ

  • 難度高い。

基本

  • 下の三種類の盤面を繰り返す
  • チェンジマスにチェンジガードを、そうでないマスにはビリビリを置くのが基本
  • ビリビリ死が多い。ときどき木属性スゴワザ×5のタイムボム×2ターンのタイムボムが出る。達成しないと即死なので出ているときは最優先。タイムボムが無いときは回復するか、びりびりを踏まないことを優先。

f:id:nodocchi:20200912222045j:plain

その1

  • チェンジガードの「い」を最右マスに入れる
  • 中央はビリビリガードを入れる。「いん」で「いいんかい」が作りやすい。

その2

  • チェンジガードの「い」を温存し、キョゼツを使い、「しょうげき」「しょうせき」を作る。右端はビリガードの「ん」か「い」を入れる。「せきたい」「せきたん」「げきたい」

その3

  • ビリビリ死、または、タイムボム死が多いので注意
  • 右から2番目はチェンジガードの「い」を入れる(入れざるをえない)
  • 右側で「かいかく」「さいかく」「たいかく」などが作れる。レムを使うと「たいりく」「さいろく」などが作れてスゴワザになる
  • ワードを作るとビリビリのダメージを大きく受けやすい。タイムボムが無いときは次のターンに備えた方がいい

コトダマン ウンディーバ降臨(魔級)

  • ウンディーバは40枚ぐらい?配布される。満福にするには「ノリノリな夏!ユーキ」をもって野良にいかないと、かなり面倒。

f:id:nodocchi:20200820103833j:plain

ターン1

  • ヘルプがユーキで、チェンジガードの「う」があれば、「ゆ→こ」を使って「しゅうこう」を作ると強い。(「う」がウレイアならほぼ瀕死まで追い込める
  • 「しゅうらい○ん」にすると「らいいん」も「うらいん」も作れる。

ターン2

  • 1文字目をコピーさせて5文字を作れる場合があるが、4文字しか作れないことが多い。このターンで約10800ダメージを受けるので、HP回復が必須な可能性に留意が必要。野良だとHPが23000〜25000ぐらいで、下限を切っていることも稀によくある
  • 「こうこうさ」(よ→さ)、「ゆうこうか」、「ゆうこうはい」(く→は)
  • 「そうそうか」

ターン3

  • 自分のユーキとヘルプのユーキで「しゅうゆう」を作る。ヘルプがユーキ以外の場合は5文字は難しい。ヨヨヨミを入れておくべきかもしれない。

ターン4

  • 「○○きょう○○」でコピーが1文字目と6文字目、チェンジが2文字目と7文字目
  • 前半は「ゆいきょう」「ゆがきょう」がある。(「い」か「が」があれば)
  • 後半は「きょうゆう」「きょううん」「きょうめい」など
  • このターンは瀕死まで追い込まれて始まり、5文字2つを達成すればHP回復する。5文字が作れず回復もできなかった場合は、ターン終わりの攻撃でエンド

コトダマン ホルス降臨(勇者の冒険ー水ー)

  • ウメダークなら超級も行ける
  • 満福だと「旧王の装具(水)」のドロップが一人あたり0〜9個増えるけど、クリア報酬に比べると微々たるものなので、魔級もウメダークでいいような気がする

  • ザコを倒すまでボスの弱点(鳥)が出ない。ザコを倒すことを優先するのがいいが、初手で「おうしょう」が出れば両ザコ一気に倒せるので、ターゲットは真ん中でいい
  • 弱点(鳥)を突くのが重要。「おう」「うそ」「うか」あたりが使いやすい鳥ワード。「しょうふう」より「しょうそう」の方が(「そ」が回復のソバー樹でも)強い。
  • 「ようしょう」は鳥ワードじゃないがヨヨヨミの2回攻撃でかなり強い
  • 「うしょうふ」(右相府)という単語あり