vip コマンドと zip コマンドの正しい使い方

vip - vi pipe (vipっていうviラッパー作った - kazuhoのメモ置き場)

http://github.com/kazuho/vip/blob/master/vip

$ vip | perl
i
print "Hello\n";
[Esc]:wq
"~/vip/20091028-123818-1" [New] 1L, 10C written
Hello
$ ls ~/vip/
20091028-123634-1  20091028-123818-1
$ more 20091028-*
::::::::::::::
20091028-123634-1
::::::::::::::
前に書いたプログラムの内容
::::::::::::::
20091028-123818-1
::::::::::::::
print "Hello\n";
$ cd ~/vip/
$ zip -dekure
Enter password: fushianasan
Verify password: fushianasan

zip error: Invalid command arguments (specify just one action)

あれ?

ANSI C Trigraph

このプログラムは普通にVisual C++コンパイルできたりする不思議。

??=/??/
*?=/??/
*/include<stdio.h>
int/*??*/main(int/**/T,char*e??(??))??<??/
printf("??/110ello,%s??/n",e??(T-T??));??>

■実行結果

C:\> cl a.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

a.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:a.exe
a.obj

C:\> a.exe
Hello,a.exe

gccコンパイルしたい場合は -ansi オプションを使うか -trigraphs オプションをつける必要がある。

$ gcc -ansi a.c && ./a.out
Hello,./a.out
$ gcc -trigraphs a.c && ./a.out
Hello,./a.out

gccコンパイルオプションのデフォルトでは -trigraphs はオフになっている。

$ gcc a.c
a.c:1:1: 警告: trigraph ??= ignored, use -trigraphs to enable
a.c:1: error: 文法エラー が '?' トークンの前にあります
a.c:1:5: 警告: trigraph ??/ ignored, use -trigraphs to enable
a.c:2:5: 警告: trigraph ??/ ignored, use -trigraphs to enable
a.c:4:30: 警告: trigraph ??( ignored, use -trigraphs to enable
a.c:4:33: 警告: trigraph ??) ignored, use -trigraphs to enable
a.c:4:37: 警告: trigraph ??< ignored, use -trigraphs to enable
a.c:4:40: 警告: trigraph ??/ ignored, use -trigraphs to enable
a.c:5:9: 警告: trigraph ??/ ignored, use -trigraphs to enable
a.c:5:22: 警告: trigraph ??/ ignored, use -trigraphs to enable
a.c:5:29: 警告: trigraph ??( ignored, use -trigraphs to enable
a.c:5:35: 警告: trigraph ??) ignored, use -trigraphs to enable
a.c:5:40: 警告: trigraph ??> ignored, use -trigraphs to enable

■参考文献

  1. Digraphs and trigraphs - Wikipedia

PHPでArcチャレンジしてみるテスト

今日は朝から秋葉原ダイビル2008年度下期未踏IT人材発掘・育成事業「未踏ユース」成果報告会に参加しています。

発表の中で Arc Challenge の話が出たので、とりあえずPHPで簡単に書いてみました。

said.php:

<?
if($_SERVER['QUERY_STRING'])echo'you said ',htmlspecialchars($_COOKIE['foo']);
elseif($_POST)setcookie('foo',$_POST['foo'])&&print'<a href=?click>click here</a>';
else echo'<form method=POST><input type=text name=foo><input type=submit></form>';
?>

この擬似コードをベースに標準のPHPだけで動くようにしてみました。
もっと短くなるかなぁ。。。

ということで、ちょっとだけゴルフして1行164byte:

<?echo$_GET?'you said '.htmlspecialchars($_COOKIE[1]):($_POST&setcookie(1,$_POST[1])
?'<a href=?1>click here':'<form method=POST><input name=1><input type=submit>');

(読みやすくするために改行を入れています)

Arcと同条件で比較するためのPHPトークンの定義が微妙ですが、$_POST[1]を1トークンとして数えて、<?や括弧()、セミコロン;、文字列内の変数展開を除外すると全部で11トークンとなります。三項演算子?:を含めると+4で15トークン。文字列連結.を加えると+1で16トークン。&演算子を含めると+1で17トークン。

今日の結論:PHPはゴルフしても読みやすい言語ですね。

【参考文献】

  1. Take the Arc Challenge
  2. http://d.hatena.ne.jp/lionfan/20080226
  3. http://web4r.org/ja/

anarchy golf の出題ミス?

いまさらの話題で恐縮なのですが、anarchy golf - Decompose integer into sum of squares の Sample output が手元の計算結果と違ってしまいました。

差分は以下の通り。

Sample output:
@@ -129 +129 @@
-129: 8 8 1
+129: 11 2 2
@@ -143 +143 @@
-143: 9 6 5 1
+143: 11 3 3 2
@@ -156 +156 @@
-156: 11 5 3 1
+156: 12 2 2 2
@@ -182,2 +182,2 @@
-182: 10 9 1
-183: 10 9 1 1
+182: 13 3 2
+183: 13 3 2 1
@@ -191 +191 @@
-191: 10 9 3 1
+191: 13 3 3 2
@@ -209 +209 @@
-209: 12 8 1
+209: 14 3 2
@@ -243 +243 @@
-243: 11 11 1
+243: 15 3 3
@@ -297 +297 @@
-297: 14 10 1
+297: 17 2 2

問題文では

If there is more than one way with the same amount of squares, use the one where a+b+c+d is least. ex:

"28: 5 1 1 1" instead of "28: 4 2 2 2"
(5+1+1+1 < 4+2+2+2)

とありますので、これって出題ミスの可能性があるのではないでしょうか?

■ 追記1:
Googleで検索したら過去に同様の指摘をしている人がいらっしゃいました。
http://twitter.com/yowa/status/2594198361

穴ゴルのDecompose integer into sum of squaresは、sample output が間違ってると思う。たとえば 129 は 8,8,1 じゃなくて 11,2,2 だよね?

■ 追記2:
RankingページのRuby欄でも既に指摘されていたみたい。