도전은 두 가지입니다.
문을 만드는 프로그램을 만드십시오. ASCII, HTML 또는 기타
문을 작동 시키십시오. 개폐
입력 또는 상호 작용을 통해 열 수 있습니다!
- 작동하지 않는 문 +5 점.
- 문을 열 수있는 +10 포인트 만 있으면됩니다.
- 인터랙티브 도어 +15 포인트
- 멋진 문 +20 포인트 이것은 회전, 이중 등을 의미합니다
- +20 포인트 애니메이션.
- <100 자 +50 포인트
- 그림이나 애니메이션을 위해 특별히 설계된 프로그램을 사용하는 경우 -100 점
기준 제안이 있으면 의견에 남겨 두십시오.
작동하지 않는 문호 개방 예 :
<?php
$idiots_in_room=true;
if($idiots_in_room)
{
$count=20;
$count2=7;
for($i=0;$i<$count;$i++)
{
if($i==0)
{
echo str_repeat("-",10);
if($i==0){echo ".";}
echo "\n";
}
elseif($i==9)
{
echo str_repeat("-",10);
echo str_repeat("Â ",7)."o"."|";
echo "\n";
}
elseif($i<=9)
{
echo str_repeat("-",1).str_repeat("Â ",8).str_repeat("-",1);
echo ($i<5) ? str_repeat("Â ",$i*2)."\\" : str_repeat("Â ",8)."|";
echo "\n";
}
elseif($i<=14)
{
if($i>9){echo str_repeat("Â ",$i)."\\";}
echo str_repeat("Â ",$count2--)."|";
echo "\n";
}
}
}
출력 예 :
----------.
- - \
- - \
- - \
- - \
- - |
- - |
- - |
- - |
---------- o|
\ |
\ |
\ |
\ |
\ |
답변
자바 스크립트, 4380 자, 65 (?) 점
ASCII? 검사. HTML? 검사. 문입니까? 검사. 문 열림? 검사. 인터렉티브? 검사. 공상? 제대로 배치 된 경첩이있는 이중 도어가 중요합니다. 생기 있는? 검사. 100 자 미만? 하아. 드로잉 용 시설을 사용하지 않습니까? 검사.
라이브 데모. (참고 : Firefox 테스트에서 문을 두 번 이상 클릭해도 작동하지 않습니다. 어떤 이유로 이벤트 처리기가 다시 시작되지 않고 이유에 대해 당황한 것입니다. 내가 잘못한 것을 지적하는 것은 환영받을 것입니다. 그래도 괜찮은 JS 성능을 위해 어쨌든 Chrome에서 이것을 실행하고 싶을 수도 있습니다.)
<title>Door</title>
<pre onmouseup="turn();" style="display: table; margin: auto; font-family: 'Monaco', monospace; font-size: 0.6em; line-height: 0.7em;">
</pre>
<p>Click doors to open or close.</p>
<script>
// Appearance of hit surface - global used to avoid allocating a record to return
var mat;
// Scene construction tools
function box(size,ms) {
return function (x, y, z) {
var vdist0 = Math.abs(x) - size[0];
var vdist1 = Math.abs(y) - size[1];
var vdist2 = Math.abs(z) - size[2];
mat = vdist0 > vdist1 && vdist0 > vdist2 ? ms[0] :
vdist1 > vdist0 && vdist1 > vdist2 ? ms[1] :
ms[2];
return Math.max(vdist0, vdist1, vdist2);
};
}
function translate(vec, obj) {
var dx = vec[0];
var dy = vec[1];
var dz = vec[2];
return function (x, y, z) { return obj(x - dx, y - dy, z - dz); };
}
function mirror(obj) {
return function (x, y, z) { return obj(-x, y, z); };
}
function spin(obj) {
return function (x, y, z) {
var a = Date.now() / 1000;
var s = Math.sin(a);
var c = Math.cos(a);
return obj(
x * c + z * s,
y,
x * -s + z * c
);
};
}
function doorturn(obj) {
return function (x, y, z) {
var a = pos;
var s = Math.sin(a);
var c = Math.cos(a);
return obj(
x * c + z * s,
y,
x * -s + z * c
);
};
}
function rotx(a, obj) {
return function (x, y, z) {
var s = Math.sin(a);
var c = Math.cos(a);
return obj(
x,
y * c + z * s,
y * -s + z * c
);
};
}
function roty(a, obj) {
return function (x, y, z) {
var s = Math.sin(a);
var c = Math.cos(a);
return obj(
x * c + z * s,
y,
x * -s + z * c
);
};
}
function union(as, bs) {
return function (x, y, z) {
var a = as(x, y, z); var am = mat;
var b = bs(x, y, z);
if (a < b) {
mat = am;
return a;
} else {
return b;
}
};
}
// Display parameters
var vw = 80, vh = 80;
var timestep = 1/30;
// Scene
var wallhwidth = 30;
var wallhheight = 35;
var wallmat = [";", "\u2014", ":"];
var dhwidth = 10;
var dhheight = 20;
var hthick = 2;
var door = translate([-dhwidth*2, 0, 0], doorturn(translate([hthick, 0, dhwidth], box([hthick, dhheight, dhwidth], [".", "\u2014", "|"]))));
var doors = union(door, mirror(door));
var wall = union(
union(
translate([dhwidth*2+wallhwidth, 0, -hthick], box([wallhwidth, wallhheight, hthick], wallmat)),
translate([-dhwidth*2-wallhwidth, 0, -hthick], box([wallhwidth, wallhheight, hthick], wallmat))),
translate([0, wallhheight-(wallhheight-dhheight)/2, -hthick], box([dhwidth*2, (wallhheight-dhheight)/2, hthick], wallmat)));
var floor = translate([0, -dhheight - 1.1, 0], box([100, 1, 100], ["/","/","/"]));
var sill = translate([0, -dhheight - 1, -hthick], box([dhwidth*2, 1, hthick], ["\\","%","\\"]));
var sbox = translate([0, 0, -12], spin(box([8, 8, 8], ["x", "y", "z"])))
var scene = union(sbox, union(union(wall, doors), union(floor, sill)));
var view = translate([vw/2, vh/2, -100], rotx(0.2, roty(-0.6, scene)));
// Animation state
var pos = -Math.PI/2;
var dpos = 0;
var interval;
// Main loop function
function r() {
// Update state
pos += dpos * timestep;
if (Math.abs(pos) >= Math.PI/2) {
dpos = 0;
pos = Math.PI/2 * pos / Math.abs(pos);
if (pos < 0) { // no animation needed
clearInterval(interval); interval = undefined;
}
}
// Render scene
var t = [];
for (var y = vh - 1; y >= 0; y--) {
for (var x = 0; x < vw; x++) {
var z = 0, distance;
while ((distance = view(x,y,z)) > 0.12) {
z -= distance;
if (!isFinite(z) || z < -1000) {
mat = " ";
break;
}
}
t.push(mat);
}
t.push("\n");
}
document.getElementsByTagName("pre")[0].textContent = t.join("");
}
// Click handler
function turn() {
if (dpos !== 0) {
dpos *= -1;
} else {
dpos = (pos < 0 ? 1 : -1) * 2.3;
}
if (!interval) {
interval = setInterval(r, timestep*1000);
}
}
// Render initial state
r();
</script>
문이 닫히면 문은 다음과 같습니다.
답변
HTML 및 CSS3, 55 포인트
멋진 대화 형 애니메이션 문은 55 점이라고 생각합니다.
예, 이것은 다른 문처럼 열리지 만 슬라이딩 도어가 멋진 것으로 간주되면 왜 회전하지 않는가? 회전하는 것이 환상적이지 않으면 미닫이 문은 문제가되지 않습니다:)
데모는 http://result.dabblet.com/gist/3132160/ac475112dbba493d2dd7d98493d4f4ceaa209a7c 에서 사용할 수 있습니다 . 손잡이를 클릭하여 열고 닫습니다. 자바 스크립트가 필요하지 않습니다. CSS3의 마법 일뿐입니다.
#wall {
background-color: #eee;
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0;
transform: rotateX(-10deg);
transform-origin: 0 100%;
transform-style: preserve-3d;
}
#door-container {
background-color: black;
height: 100%;
margin: 0 auto;
width: 300px;
}
#door {
background-color: brown;
height: 100%;
margin: auto;
position: relative;
transform-origin: 0 0;
transition: transform 0.5s ease;
width: 300px;
}
#door .knob {
background-color: gold;
border-radius: 10px;
height: 20px;
margin-top: -10px;
position: absolute;
right: 10px;
top: 50%;
width: 20px;
}
#open:target + #wall #door {
transform: rotateY(-145deg);
}
#open:target + #wall #open-link {
display: none;
}
#close-link {
display: none;
}
#open:target + #wall #close-link {
display: inline;
}
<span id="open"></span>
<div id="wall">
<div id="door-container">
<div id="door">
<a href="#open" id="open-link" class="knob"></a>
<a href="#closed" id="close-link" class="knob"></a>
</div>
</div>
</div>
답변
매스 매 티카 271 자
Manipulate[a = {0, 0, 0}; b = {0, 0, h}; p = Polygon; c = Cuboid; t = Rotate;Graphics3D[{c@{{-w - 1, 0, 0}, {-w, 1, h}}, c@{{w + 1, 0, 0}, {w, 1, h}},t[p@{a, b, {-w, 0, h}, {-w, 0, 0}}, r, {0, 0, 1}, {- 2 w/3, -w/3, 0}], t[p@{a, b, {w, 0, h}, {w, 0, 0}}, -r, {0, 0, 1}, { 2 w/3, -w/3, 0}]}],{{r, 0}, 0, 3/2}, {{w, 2}, 1, 3}, {{h, 4}, 3, 5}]
이중 문
- 0도에서 90도까지 회전하여 열기 (슬라이더 사용
r
) - 슬라이더 (
h
및w
)로 높이와 너비를 설정할 수 있습니다 . - 3D 조명 환경에 있습니다
- 대화식으로 회전하여 다른 각도에서 볼 수 있습니다.
이 코드는 Sándor Kabal 의 프로그램 을 기반으로합니다 .
답변
파이썬-65 점, 86 자
대화식 및 100 자 미만
입력을 기다리고 문을 보여줍니다 . 유효한 입력은 “open”및 “close”및 “bye”입니다.
g,s=1,'open close'
while g:
i=raw_input()
print '_'+'/_ '[s.find(i)/5]+'_'
g=i in s
답변
매스 매 티카 127 자
이것은 이전에 제출 한 것보다 능률적 인 구현입니다. 하나의 문이 있습니다. 단일 문
- 제로 90 °의 회전에 의해 열리고 (슬라이더를 사용
o
) - 3D 조명 환경에 있습니다
- 대화식으로 회전하여 다른 각도에서 볼 수 있습니다.
그러나 고정 된 문 높이와 너비를 사용합니다.
Manipulate[a = {0, 0, 0}; Graphics3D[{Tube[{a, {1, 0, 0}, {1, 0, 2}, {0, 0, 2}, a}, .03],Rotate[Cuboid@{a, {1, -.1, 2}}, o, {0, 0, 1}, a]}], {o, 0, -Pi/2}]