本文主要是介绍HackThisSite Programming missions Unscramble the words,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Programming missions
- Unscramble the words (整理单词)
- 任务描述
- 扣 Code
- 执行
Unscramble the words (整理单词)
大家好!自从昨天花了半个多小时,一口气将所有的 Javascript missions 搞定之后,我极度的膨胀!所以我开始下一个任务 Programming missions - 编程任务 。第一关难度 easy, 我也是这么认为的。我打开任务一看有倒计时,我首先干的事就是将倒计时停掉,我认为一定是这么搞的。然而,当我分析完任务内容,费脑扣好代码,编译 > 执行 > 复制 > 粘贴 > 提交 额!对不起:答案是正确的,但是你用了太多的时间。你有三十秒的时间,然而你用了几千秒。 看来时间也是任务的一部分,我想是不是我搞错了方向了,不应该这么搞。。。想了一整子可能需要先扒站,下载wordlist - 单词表,当场解压完成后立即执行代码,并将结果直接提交 全程根本不通过浏览器,这样才会在最快的速度搞定。em… 根据我当前的水平及自身条件(单身30年)研究决定拼!手!速!。预先下载好单词表(单词表用几次就会变更,具体是怎么变更的没有细究,反正一个单词列表是可以用几次的)。开始 > 准备好执行命令 > 刷新页面 > 快速定位元素 > 获取混乱单词列表 > 执行 > 复制 > 粘贴 > 提交 搞定!手速尚可。em…
任务描述
该等级是关于整理单词的。
从单词表中随机取出一些单词,打乱拼写顺序,然后找出这些单词,保持和下面混乱单词列表中相同的顺序,并以逗号分隔。
你有三十秒的时间(这个时间也是任务的一部分,我决定拼手速了)。
单词列表中有一千两百多个单词,通过文件读写的方式取出单词,存入到数组中【wordlist】,然后将上面的混乱单词列表作为代码的执行参数也放入到数组中【argv】。遍历argv 在 wordlist 中匹配单词。
匹配单词用到了两个函数 strspn 和 struocpm,strspn 是C语言库函数 <string.h> 中的函数:检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。struocpm 是我自己写的通过求和来比较无序的两个字符串是否相等。
扣 Code
/* date time: 2021-04-24 14:13:20 */
/* 代码写的潦草没有优化,并且使用中文注释,请见谅!*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>int struocpm(char *str1,int len1, char *str2, int len2);/* @argv 执行参数数组,即混乱单词表数组*/
int main(int argc, char **argv)
{FILE *fp = NULL;char code;size_t size = 0; /* 单词数组大小 */size_t wordlen = 0; /* 单词长度 */size_t word_maxlen = 0; /* 最长单词长度 */size_t word_count = 0; /* 单词总数量 */char **wordlist = NULL; /* 单词表数组 */char *tmp_world = NULL; /* 临时存放读取的单词 */int tmp_len = 0;int i, j;fp = fopen("wordlist.txt", "r"); /* 读取已经下载好的单词表(解压后的)*/if(fp == NULL) {exit(0);}printf("\n------------ read wordlist ------------\n\n");/* 第一次统计一共有多少个单词,找出最长的单词长度 */while((code = fgetc(fp)) != EOF) {if (code == '\n') {wordlen = 0;if (wordlen > word_maxlen) {word_maxlen = wordlen;}}wordlen++;size++;}rewind(fp);wordlist = (char **)calloc(size, sizeof(char)); /* 初始化单词表数组 */tmp_world = (char *)calloc(word_maxlen, sizeof(char)); /* 以最大单词长度初始化字符串 */wordlen = 0;while((code = fgetc(fp)) != EOF) {if (code == '\n') {wordlist[word_count] = (char *)calloc(wordlen, sizeof(char));strncat(wordlist[word_count], tmp_world, wordlen);wordlist[word_count][wordlen - 1] = '\0';word_count++;wordlen = 0;memset(tmp_world, '\0', word_maxlen);continue;}tmp_world[wordlen] = code;wordlen++;}printf("word count: %zu\n", word_count);printf("\n------------ match word ------------\n\n");for (j = 1; j < argc; j++) {tmp_len = strlen(argv[j]);for (i = 0; i < word_count; i++) {if (strspn(argv[j], wordlist[i]) == tmp_len &&struocpm(argv[j], tmp_len, wordlist[i], strlen(wordlist[i]))) {printf("%s",wordlist[i]);if (j < argc - 1) {/* 为了可以快速复制,不输出最后一个逗号 */printf(",");}break;}}}printf("\n\ndone.\n");free(tmp_world);free(wordlist);fclose(fp);return 0;
}int struocpm(char *str1,int len1, char *str2, int len2)
{int i;int str1_val = 0;int str2_val = 0;for(int i = 0; i < len1; i++) {str1_val += str1[i];}for(int i = 0; i < len2; i++) {str2_val += str2[i];}return str2_val == str1_val;
}
执行
- 获取混乱单词列表
- 执行代码
- 提交
- 反馈
各位,演示中我花了67.4秒,如果你有更有效率更好的方案,请分享给我。感谢!
这篇关于HackThisSite Programming missions Unscramble the words的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!