Hackgame2020(二)

一闪而过的Flag

​ 根据题目信息程序每次运行时隐约可见黑色控制台上有 flag 一闪而过,我想到了应该能看程序的代码啥的找到,但是天下武功,唯快不破,下载 运行 截图一气呵成。

​ 接下来让我康康哪一位是瞎子,包括答案里也是满满的嘲讽。

参考答案:flag{Are_you_eyes1ght_g00D?_can_you_dIst1nguish_1iI?}

从零开始的记账工具人

npy给了我一张账单,让我计算账单上面的金额,flag就是由金额组成的。本以为是一个简单的Excel的表格函数解决,打开我傻了。

​ 原来是搞这个大小写金额的转换,没见过Excel有这种操作就去百度,转了一大圈,网上只有数字转大写金额的,没有反过来的。还去了github上找代码,发现运行的结果和自己想要的还是有些出入。卡了有足足半天,之后自己写了一个Java代码跑了一遍,代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sn = new Scanner(System.in);
        String str;
        int x;
        int cnt=0;
        double result=0;
        while(cnt++!=1000){
            str = sn.next();
            x = sn.nextInt();
            result += tonum(str)*x;
        }
        System.out.println(result);
    }
    public static double tonum(String s){
        int len;
        double res=0,temp = 1;
        double result=0;
        len = s.length();
        for(int i=0;i<len;i++){
            switch (s.charAt(i)){
                case '壹': temp=1;break;
                case '贰': temp=2;break;
                case '叁': temp=3;break;
                case '肆': temp=4;break;
                case '伍': temp=5;break;
                case '陆': temp=6;break;
                case '柒': temp=7;break;
                case '捌': temp=8;break;
                case '玖': temp=9;break;

                case '零': break;
                case '拾': res+=temp*10;temp=0;break;
                case '佰': res+=temp*100;temp=0;break;
                case '元': res+=temp;temp=0;break;
                case '角': res+=temp*0.1;temp=0;break;
                case '分': res+=temp*0.01;temp=0;break;
                case '整': break;
                default:
                    System.out.println("这个认不出来" + s.charAt(i));
            }
        }
        return res;
    }
}

​ 程序用的控制台输入,直接表格两列从头拉倒尾粘贴,出答案。程序的思路就是把金额大写当做字符串处理,每一位用switch判断数字或是个、十、百、千那一位上的数字。

​ Java渣轻喷。

参考答案:flag{19115.33}

超简单的世界模拟器

​ 这道题下面有两道小题

蝴蝶效应

​ 先看有意思的一个漫画

​ 一个人用石头模拟了一整个宇宙,斯巴拉西。

​ 打开题目以后是一个终端,然提示等待你输入一个15*15矩阵(只能有0和1组成),看到这挺懵的,但是题目里有一个重要信息生命游戏,百度百科看了一下这个生命游戏,游戏的规则大致就是:一个细胞会根据周围的细胞数量判断存活和死亡,然后细胞会不断演算,这个和前面的漫画有异曲同工之妙。

​ 返回终端里面一片白中间有几个框框,题目中

如果被特殊标注的正方形内的细胞被“清除”,你将会得到对应的 flag:

“清除”任意一个正方形,你将会得到第一个 flag。同时“清除”两个正方形,你将会得到第二个 flag。

​ 用细胞去碰框框就是了,正好也看到了一个知乎的提问:生命游戏(Game of Life)有哪些图形? - 知乎,看了看内容更有趣了。

​ 大师我悟了,就是提供一个初始的15*15矩阵,根据生命游戏的规则进行演算,然后去消除黑框框。我臭屁完了直接贴图形

  • 第一关
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000
000000000011000
000000000111100
000000000110110
000000000001100
000000000000000
000000000000000
000000000000000
000000000000000
000000000000000

​ 第一关打上面的黑框,刚好在上面15行的范围内,用一个轻量级飞船直线打过去即可。

  • 第二关
000000000000000
000000000000000
000000000000000
000000000000000
000000000011000
000000000111100
000000000110110
000000000001100
000000000000000
001100000000000
011110000000000
011011000001100
000110000011110
000000000011011
000000000000110

​ 第二关我期初试了试滑翔者放在右上角以便能打到最远距离,但是和第二个都是擦肩而过。于是我就乱试乱拼凑,最后拼出来一个三飞船,正好把两个黑框都给消了。

参考答案:

1. flag{D0_Y0U_l1k3_g4me_0f_l1fe?_d5e1c80641}

2. flag{1s_th3_e55ence_0f_0ur_un1ver5e_ju5t_c0mputat1on?_ea3e769cb8}

完工。