这是为了下学期即将到来的学校额外学分分配。我必须在屏幕上打印一个段落,但字符数是代码必须小于段落中的字符数。该段如下:
“我保证,每一个带有我名字的程序都应该由我(以及我的合著者,如果有的话)编写,并且我完全理解这个程序。我提交的每个程序都应该完全是我自己的作品,除非另有说明。我明白学术不诚实不仅包括抄袭他人的作品,还包括教唆或协助抄袭。与过去或现在提交的任何其他提交的代码相似,无论解释如何,都不会获得任何荣誉。我理解学术不诚实的后果是 ' F' for the class。我承诺通过编写自己的程序来学习Java。我将努力关注细节并编写我自己和其他程序员都可以理解的程序。
程序中的字符总数应少于承诺中的字符总数(可打印 655 个,总共 793 个)。
该程序可以不接受任何输入......没有文件,下载等。
我最初的想法是,既然没有人能够做到,那肯定超出了我们目前在课堂上所学的范围。由于它必须更少,因此您显然不能只逐行打印段落,这是每个人在作业的第一部分(常规学分)中所做的。
我已经使用 java.util.zip 研究了字符串压缩,但我一直遇到不允许输入的问题。我现在搁置的一个想法是:有没有办法以压缩形式对字符串进行编码,使代码比段落的未压缩版本更少字符,并且在我将字符串打印到控制台时简单地解压缩字符串?
我也涉足 ASCII 值,但是,ASCII 值仅代表字符,并且所有 ASCII 值的字符长度都比它们用来表示的字符长,所以我没有看到它的用途。
我现在确定的想法是获取最长的重复单词并为它们分配一个字符串变量名称。然后,只需用可变连接样式替换段落中的单词。到目前为止,这是我的代码:
import static java.lang.System.out;
public class Pledge {
public static void main(String[] args){
String s=" understand ",p=" program",z=" academic dishonesty ",c=" copying",i="I pledge ";
out.println(i+"that every"+p+" with my name on it shall be written by me (and my co-authors, if any) and that i fully"+s+"the"+p+". Every"+p+" I submit shall be entirely my own work unless otherwise attributed. I"+s+"that"+z+"not only includes"+c+" other people's work, but also abetting or facilitating"+c+". Code that is similar to any other submission past");
out.println("or present will get no credit whatever the explanation. I"+s+"that the consequence of"+z+"is a grade of 'F' for the class."+i+"to devote my efforts to learning Java by writing my own"+p+"s. I shall strive to be attentive to detail and write"+p+"s "+s+"able by myself and other"+p+"mers.");
}
}
随附的代码是 762 个可打印字符。因为我少了 112 个字符,而且代码已经看起来很糟糕,有两个巨大的 println 语句,我有点觉得我没有走在正确的轨道上。我不希望为我编写任何代码(我讨厌那样),但非常感谢一些提示或技巧将我推向正确的方向。谢谢!