Tamflexの貯蔵庫

やる気のない備忘録

ruby

codeIQ 1678

count{|a|...}はブロックの返り値でtrueとなるもののみをcountする. b,e=gets.split(',').map(&:to_i);$><<[*b+1..e-1].count{|a|a.to_s(2).reverse==a.to_s(2)}

codeIQ 2796

codeiq.jp期待値を計算すればよい あとはargminなので以下のように簡略化できる. p [*1..n=eval(*$<)].max_by{|t|(n-t).to_f*(n+t-1)/(n+1-t)}

codeIQ 2769

よくよく考えればルートの長さはたかだか2種類しかないとわかる. a,b=gets.split(',').map &:to_i p x=a.lcm(b),x==a*b ?x:x*2

codeIQ 2740

正規表現 (Ruby 1.9.3) キャプチャを使ってあげれば一瞬で解ける. x=/(?<a>.)(?<b>.)\k<a>/;$<.map{|s|s=s.sub(x,$2)while x=~s;$><</a></b></a>

codeIQ 2730

n=(a=$<.map &:to_s).count{|s|s[0]=='#'} puts"code:#{a.count-n}\ncomments:#{n}"

aoj ALDS1_14_A

Naive String Search | Aizu Online Judge やるだけ a,b=$<.map{|s|s.chomp};(c=a.size).times{|v|a[v..c-1]=~/^#{b}/&&p(v)}

aoj 0095

ワカサギ釣り | Aizu Online Judge ホントは$> gets;x,y=$<.max_by{|s|eval s.split*'*-1+101*'}.split;puts x+' '+y

aoj 0094

土地面積 | Aizu Online Judge 一文字のリテラル/文字列リテラルは?をつけることで実現できる(ex 'd'=?d) リテラル (Ruby 2.0.0) evalをつければ簡単に計算できる. p eval(gets.split*?*)/3.30578

codingame - Scrabble

割と面倒だった(225byte) y='';$><<(a=$<.to_a.map{|s|s.chomp.split y})[0,n=a.size-1].select{|v|a[n].inject(v*y){|s,b|s=s.sub(b,y)}==y}.max_by{|s|eval({qz:10,jx:8,k:5,fhvwy:4,bcmp:3,dg:2,'a-z'=>1}.inject(s*'+'){|a,v|a=a.gsub(/[#{v[0]}]/,v[1].…

codingame - Telephone Numbers

例によってrubyで挑戦してみた(73byte) gets;p$<.inject([]){|a,s|[*1..s.size-1].each{|v|a<

codingame - Conway Sequence

気合の131byte l,r=$<.read.split;$><<[*2..r.to_i].inject([l.to_i]){|s|y=0;n=s[0];t=[];(s+['']).each{|v|(v==n)?(y+=1):(t+=[y,n];n=v;y=1)};s=t;}*' '

aoj 0085

ヨセフのおイモ | Aizu Online Judge 愚直にやるとこうなる main(n,m,i,c,p){while(scanf("%d %d",&n,&m),n){int a[1010]={};c=p=0;while(c++!=n){for(i=0;i++

aoj 0084

検索エンジン | Aizu Online Judge splitで指定文字を除くのがミソ $>Errorになるのでこれで妥協 puts gets.split(/[ ,.]/).select{|v|v[2]&&!v[6]}*' '

aoj 0083

西暦と和暦の変換 | Aizu Online Judge 無理やり感ある #!ruby -nrdate a=Date;y,m,d=$_.split.map &:to_i s=((b=a.new(y,m,d))

aoj 0075

BMI | Aizu Online Judge (64byte) $<.map{|s|a,b,c=s.split(',').map &:to_f;p a.to_i if b/c**2>=25} すごい答え(42byte) #!ruby -n i,w,h=eval"[#$_]" w/h/h<25||p(i) $_について module Kernel (Ruby 2.0.0) オートスプリットを利用した答え(52byte) #!r…

aoj 0073

四角すいの表面積 | Aizu Online Judge #include <bits/stdc++.h> main(){int x,h;while(scanf("%d%d",&x,&h),x)printf("%f\n",x*(x+sqrt(4*h*h+x*x)));} $<.map(&:to_i).each_slice(2){|a|puts (x=a[0]**2)+Math.sqrt(x*(x+4*a[1]**2))if a[0]!=0}</bits/stdc++.h>

aoj 0065

AIZU ONLINE JUDGE 今ひとつ配列について分かっていなかったので補足. slice_afterはEnumeratorを返す.Enumeratorは配列の操作に関する様々なメソッドを提供するクラスである. 便利な半面このままでは値が読み込めないので,値が欲しいときは直前に*をつける…

aoj 0064

readで入力を文字列として渡してくれる. instance method IO#read (Ruby 1.9.3) evalは文字列を式として評価する. これで勝つる!?(29byte) p eval$<.read.scan(/\d+/)*"+" 上には上がいたようです.(6byte) p 5450 これセコくない??

aoj 0061

チームの順位 | Aizu Online Judge setを使って無理やり数えるという暴挙 require 'set' T,U={},{};S=Set.new while true a,b=gets.split(',').map &:to_i break if a==0&&b==0 T[a]=b;S.add(b) end T.each{|k,v|U[k]=S.count{|a|a>v}+1} $<.map{|l|p U[l.to…

aoj 0060

カードゲーム | Aizu Online Judge これでも頑張った方(111byte) #!ruby -n l=$_.split.map &:to_i;a=[*1..10];l.each{|v|a[v]=nil};puts a.count{|v|v&&l[0]+l[1]+v<=20}<4?'NO':'YES'

aoj 0059

長方形の重なり | Aizu Online Judge #!ruby -n a,b,c,d,x,y,z,w=$_.split.map &:to_f;puts z

aoj 0058

直交 | Aizu Online Judge やる気のないコード(110byte) #!ruby -n l=$_.split.map(&:to_f) puts ((l[3]-l[1])*(l[7]-l[5])+(l[2]-l[0])*(l[6]-l[4])).abs<1e-12? 'YES': 'NO' すごい答え(91byte) $<.map{|s|a,b,c,d,e,f,g,h=s.split.map(&:to_f);puts ((d-b…

aoj 0057

最大の領域の数 | Aizu Online Judge (n+1)*n/2+1を表示するだけ(33byte) $<.map{|v|n=v.to_i;p (n*n+n)/2+1} 上はこうなる(31byte) $<.map{|v|p (1+n=v.to_i)*n/2+1} すごいコード(30byte) $<.map{|n|n=n.to_i;p~n*-n/2+1} ~はnot演算子で符号付き整数nを反…

aoj 0056

ゴールドバッハ予想 | Aizu Online Judge そろそろc++に戻ろう.. require'prime' a=Prime.take(6e3) n,*b=p a.map{|v|b[v]=1} p a.count{|v|v<=n/2&&b[n-v]}while 0

aoj 0055

数列の和 | Aizu Online Judgeまあこうなる(26byte) $<.map{|a|p a.to_f*211/27} #! ruby -n使ったほうが短い?(25byte) #!ruby -n p$_.to_f*211/27

aoj 0054

小数の和 | Aizu Online Judge うまく書けない... while l=gets a,b,n=l.split.map(&:to_i);p (1.0*a/b).to_s.scan(/[0-9]*/)[2].chars[0..n-1].map(&:to_i).inject(:+) end

aoj 0052

n の階乗 | Aizu Online Judgeつよい人のcodeを参考にしてevalとruby -nの使い方を覚えた. Rubyの起動 (Ruby 1.9.3) module function Kernel.#eval (Ruby 1.9.3) #!ruby -n (n=$_.to_i)>0?p(eval"+(n/=5)"*9):p

aoj 0051

最大の整数と最小の整数の差 | Aizu Online Judge参考にしたもの でぃべろっぱーってへてむる: 文字列を一文字ずつ配列にする方法 JavaScript PHP Ruby Perl Python Scalaこたえ(90byte) n=gets.to_i for i in 1..n a=gets.to_s.split('').sort.join;puts a.…

aoj 0050

林檎と桃 | Aizu Online Judgeこれも趣向を凝らしてみたいrubyの特殊記号について $> : 標準出力 $ $> module Kernel (Ruby 2.0.0)置換はgsubを用いる instance method String#gsub (Ruby 2.0.0) ここまでで以下のようになる(60byte) $><<gets.gsub(a='apple','AA').gsub(b='peach',a).gsub(/AA/,b) gsubはブロックで置換できるので以下のように書ける(52byte) $><</gets.gsub(a='apple','aa').gsub(b='peach',a).gsub(/aa/,b)>

aoj 0049

血液型の分類 | Aizu Online Judge require 'scanf' sum = {} sum["A"] = 0 sum["B"] = 0 sum["AB"] = 0 sum["O"] = 0 while line = gets n,t = line.split(',').map(&:to_s) sum[t.chomp] += 1 end puts sum["A"] puts sum["B"] puts sum["AB"] puts sum["O…