トップ «前の日記(2007-07-05) 最新 次の日記(2007-07-07)» 編集

U-memo

2006|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|08|
2009|08|10|
2010|02|03|
2011|11|12|
2012|04|
2016|02|
All= / Today= / Yesterday=

2007-07-06

_ [Golf][OCaml] あなごるネタばれのつづき。

サーバが落ちているのでー。

Show the way

解答埋め込みだとこんなの。

let b,t,l,r="bottom
","top
","left
","right
"let c=b^r^t^l^b^r;;print_string[|r^b^l;c;t^r^c^b|].(read_int()/4)

まじめにやったのはこれだか suiginto さんには遠いな。

let w,a=print_endline,read_int()let rec r u=try r(read_line()::u)with _->u
let l=r[]let rec f n y=try String.index(List.nth l y)(Char.chr(48+n)),y
with _->f n(y+1)let rec t p i q=let u,v=f(a-i)0in
i<a&(p=u&(q>v&()=w"bottom"||()=w"top")||p<u&()=w"right"||()=w"left");t u(i-i/i)v;;t 0a 0

Booklet Printing

パス。

Tak y

竹内関数。等価関数に置き換えるのは当然として 6B 足りない。

let rec(!)f=let(%)a b=f a<f b&print_endline b=()in
Scanf.scanf"%s %s %s
"(fun a b c->a%b||b%c||c%a);!f;;!float_of_string

FizzBuzz

for i=1to 100do
let p u n=i/n*n=i&print_endline u=()in
p"FizzBuzz"15||p"Fizz"3||p"Buzz"5||p(string_of_int i)1done

kskさんのヒントに従うとこんな感じだけど、これでもまだトップにはならないな。

for i=1to 100do
let(%)n u=i/n*n=i&print_string u=()in not(5%"Buzz")>3%"Fizz"&1%string_of_int i;1%"
"done

little endian

そのまま埋め込みしただけでまじめに考えてないのでパス。

infix to postfix

論外の結果なのでパス。

GCD

埋め込み。

print_int[|14;3;32768|].(read_int()mod 7)

まじめ。

let rec g a b=g(a=0&()=print_int b;b mod a)a;;Scanf.scanf"%d
%d"g

banner

出題したのにやってない。パス。

HQ9Plus

99shinh を改造して埋め込み。

LCM

トップ取れてるのはこの手のものばっかりだなぁ。 整数だと overflow するので float を使うしかなさげ。

while 1=1do Scanf.scanf"%f %f
"(fun a b->let rec(%)x y=x>0.&mod_float y x%x||()=Printf.printf"%.f
"(a*.b/.y)in a%b)done

judge Janken

埋め込みなのにまともなやつに勝てない。パス。

delete duplicate lines

let rec(@)l a=List.mem a l||()=print_endline a;a::l@read_line();;[""]@""

reverse lines

let rec(!)s=try!s^read_line()^"
"with _->s;;print_string!""

palindromize

こんなのでは全然届かない...

open String;;while 1=1do
let a=read_line()in
let b,s=length a,sub a in
let rec(@)r i=s(b-i)i=sub r 0i&()=print_endline(s 0(b-i)^r)||r@i-1in
let rec(&)r i=try s i 1^r&i+1with _->r@b in""&0done

Phone Key Pad

let rec c s=print_char s.[String.index s(Char.uppercase(input_char stdin))/4*4];c s;;c"1+  2ABC3DEF4GHI5JKL6MN 7PRS8TUV9WXY*-  0OQZ#
"

わずかに届かず。

今日はここまで。