Sponsored Link

CATEGORY:python

codegolf新しい問題が追加されました。というメールが来ていた。当然のように迷惑メールとして振り分けられていたけど。というわけで、ちょっとチャレンジ。

01 34 46 31 55 21 16 88 87 87
32 40 82 40 43 96 08 82 41 86
30 16 24 18 04 54 65 96 38 48
32 00 99 90 24 75 89 41 04 01
11 80 31 83 08 93 37 96 27 64
09 81 28 41 48 23 68 55 86 72
64 61 14 55 33 39 40 18 57 59
49 34 50 81 85 12 22 54 80 76
18 45 50 26 81 95 25 14 46 75
22 52 37 50 37 40 16 71 52 17

こんな感じに与えられた10*10のテーブルで、行と列それぞれを足した値のうち最大となるものを出力しなさい。という事らしいよ?多分。取りあえずpythonで動くものを書いてからチマチマ削って108バイトのコードが出来た。が、現時点での最短コードは74バイト。1桁違う。正直この差は大きい。数値以上に、自分の知識とか能力とかそーゆーのが結構下の方に位置していることをまざまざと見せつけられるようですよ。pythonにmaxという関数が組み込みであることを知らなかった辺りでワタシのキビシイ状況がよく分かったり分からなかったりですよ。mathとかにあんのか?なんてやってみた自分がちょっと恥ずかしいですよ。
どうやって短くすんだろ。

あ、アプローチを変えたら2バイト減った。

reduceを使っていたワタシが、リストを加算するsumという関数があるという事を知った夜。88バイトまで減ったよ母さん!

ああ、lambda必要なかったな。76バイトになったよ母さん!

と、そんなわけであと2バイト。若干自信がついたワタシでしたが、brainfuckでのワタシのコードが450バイトなのに対してトップの人が197バイトという、まあやっぱ全然アカンね。

例えばね。文字列の配列があって、それを特定の文字で埋めたい。そんな欲求。pythonだと、

s = [0] * 10
#ってのがあったとき、
s = ['X'] * 10
#でいい、のか?
s = ['X' for x in s]
#でも大丈夫?
s = map(lambda: 'X', s)
#みたいな感じでも、まあ出来るっちゃあ出来るのか。

とまあね、多分こういう方法があるんですよ。正直pythonてまだよく分かってないんだけど。
で、だ。VBですよ。VB.NETで同じ事をする場合は、どうしたらいいの?勿論、ループを使わずという事なんだけど。.NET Frameworkライブラリの2.0からArray.ForEachなんてのが出来たらしいけど、これ戻り値無いんだよね。んで、渡すジェネリックの定義も値渡しだから配列を書き換えるメソッドも渡せない。まあそりゃ無茶な気もするけど。どうにかならないのかしら。

pythonでCmdクラスを使うとき、スクリプトのエンコーディングがutf-8だと補完が効かないのはワタシだけなのだろうか?これってそういうもの?それともreadlineでどうにかできる問題?

じゃあUTF-8使わなきゃいいじゃん。という気もするのだけど。そもそも何でUTF-8なの?というと、スクリプト内に埋め込んだ日本語メッセージを実行時に環境に合わせてEUC-JPとかSHIFT-JISとかに変換して出したいと思ったからなのですよ。そうすると元のコードがウニコードの方が都合がいいからと。まあ結局ベースをSHIFT-JISにしてそっから変換して変換して、という方法をとったのだけど。したら取りあえず補完も出来るし。しかし、基本を知らないってのは、こういう時はどうすべきか?ってのが分からないっていう辛さがあるよね。外部リソースとして持つのが一般的なのかしら?とか、もっと一般化された便利なやり方があるんじゃないか?とか、その辺。自分がすげー無駄なことをしてるんじゃないか?とか、そういう不安。なんか、イカンね。

pythonを使い出してみた。何となく。とりあえず新しいモノに手を出すときのファーストステップとして、普段仕事をする上で作ったスクリプトなんかを移植してみる、という方法を取るのです。ワタシはね。初めてPerlをやった時も、多分シェルスクリプトをPerlに、なんてやり方をした気がする。そーゆーやり方をすると、自分が必要としている、或いは必要としていたモノを新たな言語ですぐ学べるからね。少なくとも全くの初心者でない限り、必要なのは文法じゃなくて組み込み関数だったりライブラリだったりの使い方が重要なので。なんて言いながらも、論理積を使おうとして&と書いたら取りあえず動いたので放っておいたら何だかおかしな動きをして、&はビット演算で論理積はandと書くという事に気付くのに時間が掛かったのはまあいいじゃない。

まあそんなこんなでpythonですよ。ええ。本来はL-PICレベル2の勉強をしなければいけないのだけれど、アレつまんね。すげーつまんね。やりたくない。というわけで、現実逃避です。pythonの勉強は当然、仕事中です。仕事は今忙しいハズなのですが、主に政治的な理由によって進めることが出来ないので、忙しいのに暇なのです。世の中って不思議です。こうして忙しさが納期の近くに圧縮されて行くのです。何だろうねこーゆーの。

vimからVisual Studio .NETをうまいことアレするスクリプトを見つけたのですが、これがそこそこ良い。いや、良い気がする。実際あまりよろしくはない点が多いけど、いいもの持ってる。才能を秘めてる。世界を狙える。いつか二人で!後楽園ホールのリングに!いや知らないけど。日本語版で使うにはスクリプト自体に手を入れなきゃイカンのだけど。で、そこそこ良いのだけれど、もうちょっとこうしたい!という点があって、じゃあどうすんのよ?というと、自分で何とかしろよという事になるのがこの世界。でもねぇ。pythonなのよ。パイソンですよ。パイソンてのは、まあ知らない人のために解説すると、オパイがツーンと上を向いてるぜ!を略してパイツンなのですが、なんかツとか点多くね?書くときめんどくね?という意見が多数寄せられたため、ツから一個点をとってソにしてパイソン。で、どうせなら格好良く英語でpythonにしよう!という流れで作られたスクリプト言語です。嘘臭いとお思いでしょうが、大体合ってます。はい。で、そんなpythonですが、ワタシは残念ながらpythonを解しません。何故ならワタシのオパイがツーンと上を向いていないからです。男だからね。まあ男だけれど、使い勝手を良くするためには何とかしなければならない。pythonを。おpythonを。オパイソンを。死んだはずだよオパイソン。ラジオチャリティー・オパイソン。オパーーーイソーーーーーーン!!!

でね、結局何が言いたいのかというと、新しいことを学ぶのって、歳を喰うにつれてめんどくなるよねって事ですよ。知識欲とか無くなってくるよね。食欲とかはあるけど。結構喰うけど。ていうか最近腹回りがちょっとヤバイ。工藤静香風にいうと、軽くヤバい。いや全然軽くない。そこそこヤバい。結構ヤバい。参った。降参。勘弁して下さい。

ガサリ

2009/11

Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

ARCHIVE