あわしまマリンパークに行ってきました
日本一のカエル館 富士山の見える水族館|あわしまマリンパーク
無人島の水族館、あわしまマリンパークに行ってきました。島までは船で揺られて10分かからないくらいでした。
本当に無人島、奥に見えるのがホテルらしい(従業員が住んでいたら無人島と呼んでいいのか...
ショーのアザラシ、手を振ってくれた
このショーがすごいのは目の前まで来てくれるところ。本当すごい
海上イルカショー、スタッフさんの移動が船
枝と格闘するペンギン
巣に篭もるニート
もちろん深海魚も。グソクムシにも触れた
別館でカエル館があり、たくさんカエルがいた。小さかったり隠れてるから探すのが一苦労
scalaでFizzBuzz
ToolBox
twitter-eval使おうと思ってぐぐったらscala2.10から標準で似たことが出来るらしい
//libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value import scala.reflect.runtime.currentMirror import scala.tools.reflect.ToolBox val tb = currentMirror.mkToolBox() tb.eval(tb.parse("println(\"Hello World.\")"))
Trait mix-in
順番に構成されてprintlnが実行される
trait A { println("A") } trait B { println("B") } trait C { println("C") } class Hoge{} new Hoge with A with B with C //A //B //C
c# でQuine(クワイン)実装
出来ました。何故かFizzBuzz付きです。
using System;using System.Linq;class Program { static void Main() { var l = new System.Collections.Generic.List<char>(); l.Add((char)0x46); l.Add((char)0x69); l.Add((char)0x7a); l.Add((char)0x7a); l.Add((char)0x42); l.Add((char)0x75); l.Add((char)0x7a); l.Add((char)0x7a); var fb = new string(Enumerable.Range(1, 50).Select(i => (i % 15 == 0) ? l.Aggregate(string.Empty, (s, x) => s + x) : (i % 5 == 0) ? l.Skip(4).Aggregate(string.Empty, (s, x) => s + x) : (i % 3 == 0) ? l.Take(4).Aggregate(string.Empty, (s, x) => s + x) : i.ToString()).Aggregate(string.Empty, (s, x) => s + x + (char)0x7c).ToArray()); var zz = @"1|2|Fizz|4|Buzz|Fizz|7|8|Fizz|Buzz|11|Fizz|13|14|FizzBuzz|16|17|Fizz|19|Buzz|Fizz|22|23|Fizz|Buzz|26|Fizz|28|29|FizzBuzz|31|32|Fizz|34|Buzz|Fizz|37|38|Fizz|Buzz|41|Fizz|43|44|FizzBuzz|46|47|Fizz|49|Buzz|"; var str = "using System;using System.Linq;class Program {{ static void Main() {{ var l = new System.Collections.Generic.List<char>(); l.Add((char)0x46); l.Add((char)0x69); l.Add((char)0x7a); l.Add((char)0x7a); l.Add((char)0x42); l.Add((char)0x75); l.Add((char)0x7a); l.Add((char)0x7a); var fb = new string(Enumerable.Range(1, 50).Select(i => (i % 15 == 0) ? l.Aggregate(string.Empty, (s, x) => s + x) : (i % 5 == 0) ? l.Skip(4).Aggregate(string.Empty, (s, x) => s + x) : (i % 3 == 0) ? l.Take(4).Aggregate(string.Empty, (s, x) => s + x) : i.ToString()).Aggregate(string.Empty, (s, x) => s + x + (char)0x7c).ToArray());var zz = {1}{2}{1};var str = {1}{0}{1};Console.WriteLine(str,str,(char)34, fb); }} }}"; Console.WriteLine(str, str, (char)34, fb); } }
QuineFizzBuzz/Program.cs at master · kamiyaowl/QuineFizzBuzz · GitHub
最小記述のc# Quine
var s = "var s = var s = ...;;";
となってしまうのが再帰的定義の難点。これを解決してくれるのがConsole.WriteLine
様ですね*1
var s = "var s = \"{0}\";"; Console.WriteLine(s,s);
でもこれだとエスケープシーケンスが消えてしまう。
var s = "var s = {1}{0}{1};"; Console.WriteLine(s,s,"\"");
お、行けそう。とおもいきやQuineなので他のコードも出力しなければいけないわけで
var s = "var s = {1}{0}{1};Console.WriteLine(s,s,"\"");"; Console.WriteLine(s,s,"\"");
ダメですね。文字列のエスケープは荷が重すぎる。
var s = "var s = {1}{0}{1};Console.WriteLine(s,s,(char)34);"; Console.WriteLine(s,s,(char)34);
これでよし。
気をつけるべきはConsole.WriteLine
で{
は{{
でエスケープしなければいけないことと、ダブルクォーテーションの処理。後は適当にやれば最初のコードになりました。めでたし。
*1:string.Formatでも行けるかも