プログラミングを上達させたい

プログラミングの勉強を始めた、情報学専攻の大学院生です。モチベーション維持のため、ブログに勉強したことを書いていきます。→就職。IT全然関係ない仕事をしています

コードゴルフ この関数、メソッド便利ね集(主にRuby)

まだまだまだまだ引き続き、CodinGameのClash of Codeにハマっています。やり始めると1時間は止まらない…

さてさて、そんな中で一番面白く感じられるようになったのがコードゴルフ問題。1文字でも短いコードで指示されたプログラムを組む、というものですね。
今はJavaScriptで挑んでいるのですが、たまにとんでもなく圧倒的な差で負けることがあります。
それは主にRubyなどの便利な関数とかを使ったものなんですが、今後も使えそうなものがいくつかあったので備忘録として書き留めておこうと思います。
いつかは問題に応じて、言語を使い分けられたらカッコいいな…

さてさて、では他の方がした素敵コード解答、紹介していきます。

X,Yが入力され、X^Yの各桁の和を出力する

Bemethorさん

Ruby

p (gets.to_i**gets.to_i).digits.sum

digits、便利〜!


入力されるcharcodeの数と、各charcodeが入力され、対応する文字列を返す

上と同じく、Bemethorさん。強い!
Ruby

gets
gets.split.each{|c|$><<c.to_i.chr}

文字コードが入力され、空白ごとに単語を逆順にする

111 108 108 101 72 32 101 114 101 104 116 32 41 58
⇒そのまま直すと olleH ereht ):
⇒Hello there :)

RunOutOfRealityさん
python3

m=""
for c in input().split():m=chr(int(c))+m
print(*m.split()[::-1])

アルファベットと数字だけで構成される3~20文字字の文字列かどうか

僕(JavaScript)

u=readline()
b=u.length
a=""
if(!(RegExp(/^[a-zA-Z0-9]/).test(u)&&2<b&&b<21))a+="IN"
print(a+'VALID')

1位(python)

u=input()
print("VALID"if 2<len(u)<21 and u.isalnum()else"INVALID")

python、isalnumって便利ね!!

【我ながら頑張ったけど負けた】入力のn未満の素数の数を数える

僕の解答
Javascript(106文字) ※ エラトステネスの篩

n=~~readline()
a=Array(n).fill(1)
for(i=b=a[1]=0;++i<n;){if(a[i]){b++
for(j=1;++j*i<n;)a[i*j]=0}}
print(b)

gattoさん
Ruby(47文字)

require'prime'
p (1...gets.to_i).count &:prime?

primeて!!そんなんあるんかい!!!!

入力された文字列に(大文字小文字無視して)何種類のアルファベットが使われているか


JavaScript(55文字)

print(new Set(readline().toLowerCase().split('')).size)

我ながらきれいー!
ヒュー!


1位のhard-codedさん
Ruby(29文字)

p gets.upcase.chars.uniq.size

"uniq"って便利ね!!!!



以上です。
コードゴルフをやっていくうちに、短い表現=簡潔な表現がどんどん出てきます。
早解き系の問題を解く実力もあがっているように感じます。
引き続きがんばりゅー