전체 글 226

『FINAL FANTASY XIV: DAWNTRAIL』을 하다

(주의) 『FINAL FANTASY XIV: DAWNTRAIL(황금의 유산)』  및 패치 7.1까지의 중요 내용을 포함합니다.지난 6월 말 출시된 『FINAL FANTASY XIV』 최신 확장팩 「황금의 유산」(패치 7.0)을 플레이했다. 원래는 감상을 혼자 적어 두고 말 생각이었는데, 후속 패치 내용까지 보고 나니 토막나 있던 생각들을 그래도 하나로 정리해두는 것이 나을 것 같아 글쓰기 창을 열어 보았다.정리한다고는 했지만 무슨 리뷰를 쓰는 것도 아니요 하나의 테마로 장문을 써내려가지는 않을 것 같다. 우선 혼자 적어뒀던 생각 토막들을 모으면서 살을 붙여볼까 한다.레벨 디자인일단 스포일러를 덜 해도 되는 이야기부터.확장팩 전반적인 레벨 디자인은 지금까지의 것과 거의 동일하다 (필드 6개, 던전 5개+최..

웹툰 『1초』를 보다

1초 시니 글, 광운 그림, 네이버웹툰, 2019년 3월~ (연재중) "우린 오늘, 외양간을 고칠 거다." 미래를 볼 수 있는 주인공이 신입 소방관이 된 뒤 겪는 일들을 그린 웹툰이다. 제대로 붙잡고 읽기 시작한 지 이틀만에 현재 유료 연재분(224화)까지 다 읽고 말았다. 생생한 기억으로 감상을 급히 써 본다. 주인공이 미래를 볼 수 있다기에 처음에는 판타지 만화인가 했다. 물론 판타지 성분이 없는 것은 아니고, 결과적으로 모든 사건을 (무사하지는 않지만) 해결하기는 한다. 하지만 그리 과하지 않게 녹아 있다. 능력이 있다고 해서 현장의 환경과 다양한 돌발상황으로부터 오는 어려움이 나아지는 것도 아니고, 어쨌든 신입인지라 경험과 역량도 높지 않으며, 위계가 있는 조직에 속해 있다는 것이 능력을 충분히 ..

Advent of Code 2022 Day 25 in Elixir - Full of Hot Air 풀이

문제 보기 AoC2022 마지막 날 문제. 아주 상냥한 난이도였다. 5진수인데 0부터 4까지의 대신 -2~2를 쓰는(헷갈리지 않기 위해 -2는 =로, -1은 -로 나타낸다) 특이한 숫자 표기법을 해독하는 문제였다. 예를 들면 이런 식. Decimal SNAFU 1 1 2 2 3 1= 4 1- 5 10 6 11 7 12 8 2= 9 2- 10 20 15 1=0 20 1-0 2022 1=11-2 12345 1-0---0 314159265 1121-1110-1=0 이 숫자를 10진수로 바꾸는 것은 기본 규칙은 다른 진법 변환과 같으니 그리 어려운 것은 아니었고, 주어진 숫자들을 모두 더한 뒤 다시 변형 5진법으로 바꾸는 것에 조금 고민을 했다. 10진수를 일반적인 5진법으로 바꿨을 때 3, 4에 해당하는 수는..

Advent of Code 2022 Day 24 in Elixir - Blizzard Basin 풀이

문제 보기 주어진 지도에서 눈 폭풍이 방향을 따라 이동할 때, 출발 지점부터 도착 지점까지 눈 폭풍을 피해 가는 최단 시간을 구하는 문제였다. 문제 2는 출발 지점에 뭘 두고 왔다며(.....) 출발 지점까지 되돌아갔다 다시 도착 지점에 가는 최단 시간을 구하면 됐다. 시간에 따른 눈 폭풍의 위치는 항상 일정해서(내 위치에 따라 변하는 것은 아니어서), 시간대별로 변하는 상황에 따라 내가 어떻게 움직이는 것이 좋은지만을 계산하면 되었다. 19일차에서 썼던 BFS 방식(?)을 다시 한 번 적용했고, 그리 어렵지 않게 풀 수 있었다. defmodule Omicron.Day24 do @dir "data/day24/" def q1(file_name \\ "q.txt") do {map, map_width, map..

Advent of Code 2022 Day 23 in Elixir - Unstable Diffusion 풀이

문제 보기 요즘 시기에 또 나름 맞는 듯한 거리두기 문제. 모여 있는 요정들이 주어진 규칙에 따라서 조금씩 흩어질 때, 일정 단계가 지난 후 얼마나 흩어졌는지(문제 1), 완전히 흩어져서 더 움직이지 않아도 될 때까지 몇 단계가 지나야 하는지(문제 2)를 구하면 됐다. 8방향을 모두 봐야 해서 구현이 조금 길어지긴 했으나, 그리 어려운 문제는 아니었다. defmodule Omicron.Day23 do @dir "data/day23/" def q1(file_name \\ "q.txt", round_count \\ 10) do elves = build_elves_mapset(file_name) policy = [:n, :s, :w, :e] 1..round_count |> Enum.reduce({elves, ..

Advent of Code 2022 Day 22 in Elixir - Monkey Map 풀이

문제 보기 올해 AoC 3대장을 뽑으라고 하면 17일차, 21일차, 그리고 이 날 문제이리라. 아래와 같은 형태의 지도가 주어지고, 이동할 거리와 방향이 주어졌을 때, 시작 위치에서 출발해 지시대로 이동했을 때의 최종 위치를 구하는 문제였다. #은 가로막힌 곳이라 더 전진할 수 없고, .이 없는 곳으로 나가면 반대쪽 끝으로 다시 들어오는("wrap around") 구조. ...# .#.. #... .... ...#.......# ........#... ..#....#.... ..........#. ...#.... .....#.. .#...... ......#.21일차와 마찬가지로 문제 1은 그냥 그대로 하면 되어서 어렵지 않았는데, 문제 2가 아주 끔찍한 녀석이었다. 주어진 지도가 실제로는 정육면체였던 ..

Advent of Code 2022 Day 21 in Elixir - Monkey Math 풀이

문제 보기 AoC2022 또 하나의 난관. 여러 변수가 있고, 각 변수에 값(자연수)이나 다른 변수 사이의 관계식(이 경우 항상 두 항의 사칙연산)이 주어질 때, 관계식을 풀어 원하는 값을 계산하는 문제였다. 문제 1은 그대로 주어진 관계식을 풀어 최상위의 root 값을 구하는 문제였다. 문제 2는 조건을 조금 바꾸어, root를 이루는 관계식의 두 항이 사칙연산 관계가 아니라 같은 값이어야 할 때, humn(=human=나...)가 어떤 값을 가져야 하는지를 묻는 문제였다. 다시 말해 root를 이루는 관계식의 두 항 중 humn이 포함되지 않은 한 쪽은 지금까지처럼 값을 구할 수 있으니, 다른 한 항의 최상위 값을 알고 있을 때 거꾸로 연산 트리의 하위로 내려가 humn을 구해야 했다. 문제 1은 주..

Advent of Code 2022 Day 20 in Elixir - Grove Positioning System 풀이

문제 보기 요정들의 암호를 복호화 어쩌고 하는 명목으로 숫자 위치 옮기기 퍼즐을 푸는 문제였다. 각 숫자를 숫자 크기만큼 위치를 바꾸되(1인 경우 오른쪽으로 한 칸, -2인 경우 왼쪽으로 두 칸), 옮기는 숫자는 원래 주어진 숫자의 순서대로(중요)여야 했다. 즉 3번째 차례에서 옮겨야 하는 숫자가 반드시 3번째 자리에 있지는 않다는 뜻이므로, 숫자를 섞으면서도 원래 이 숫자가 어디에 있었는지를 기억해야 했다. 그나마 다행인 것은 숫자 목록의 끝과 끝이 이어져 있어 순서만 맞다면 무엇이 첫 숫자로 오든 큰 상관이 없었다는 점 정도. 1번과 2번 문제의 푸는 방법이 약간 다른데, 1번은 위치 바꾸기를 숫자 목록의 각 숫자에 대해 한 번씩만 하면 되어 이진 플래그를 썼고, 2번은 열 바퀴 돌려야 했기 때문에 ..

Advent of Code 2022 Day 19 in Elixir - Not Enough Minerals 풀이

문제 보기 초기 자원이 주어지고, 그 자원을 소비하여 다른 자원을 캘 수 있는 채굴 로봇을 생산할 수 있다고 할 때, 자원을 어떻게 모으고 어떤 로봇을 언제 어떤 순서로 생산해야 주어진 시간 내에 최종 단계 자원을 더 많이 모을 수 있는지를 알아내는 문제였다. 문제 1은 각 로봇 청사진(같은 종류의 채굴 로봇이어도 청사진에 따라 드는 자원이 다르다)마다 주어진 시간 안에 생산할 수 있는 최종 단계 자원의 최대량을 찾는 문제였고, 문제 2는 주어진 로봇 청사진 중 앞 3개에 대해 더 깊은 연산을 요구하는 문제였다. 클리커 게임이나 경영 게임이나... 주로 하는 시뮬레이션류 게임에서 무엇을 어떤 순서로 키울지를 고민하는 것과 비슷해서 개인적으로는 재밌는 소재의 문제였다. 처음에는 알고리즘적으로... 이 자원..

Advent of Code 2022 Day 18 in Elixir - Boiling Boulders 풀이

문제 보기 어려운 문제가 이어지던 도중에 잠깐 쉬어가는 날이었다. 주어진 좌표에 각각 1x1x1의 정육면체 모양의 용암이 있을 때 전체 표면적(문제 1)과, 용암으로 감싸인 빈 공간(에어 포켓)을 뺀 순수 외부 표면적(문제 2)을 구하는 문제였다. 전체 표면적은 그저 6(단위 정육면체의 표면적)에서 겹치는 면 수만큼 빼면 되니 그리 어렵지 않았고, 에어 포켓을 거꾸로 단위 정육면체의 집합으로 생각하고 표면적을 구하면 순수 외부 표면적도 쉽게 구할 수 있었다. 문제를 풀기에 바빠서 입출력과 로직을 분리할 생각은 안 하고 그냥 q2 함수에서 임시 파일을 만들어 q1 함수를 호출한 것이 옥의 티처럼 보이지만, 지금 수정하기에도 조금 그러니 그대로 올려 둔다. defmodule Omicron.Day18 do @..