[Java] Un type d'alphabet interdit Avec reliure Bonjour tout le monde! [Reliure]

Aperçu

En Java, j'ai vérifié quel alphabet peut être écrit en interdisant un type d'alphabet (écrire sans utiliser l'un de a à z). Simplement jouer.

règle

1.java10,Windows10 2. Compilez avec javac, exécutez avec java, pas d'options (ou plutôt, écrivez et exécutez dans Eclipse) 3. Sortie Hello, world! Vers la sortie standard 4. La sortie standard supplémentaire et la sortie d'erreur sont interdites (les sauts de ligne sont OK) 5. Interdiction d'utiliser un seul type d'alphabet 6. Insensible à la casse 7. Interdire les fichiers externes (seule la bibliothèque standard Java est possible) 8. Échappement Unicode interdit (post-scriptum du 26/08/2018) * Les détails seront décrits plus tard

Conclusion

Possible: bfhjklpquwxyz Impossible: acdegimnorstv

Détails

J'écris du code qui est à peu près lié par ordre alphabétique. fjkqxz Il n'apparaît pas dans le Hello World que j'ai écrit normalement. À propos, les noms de variables et les noms de classes sont en japonais afin de ne pas utiliser d'alphabets. Je me demande s'il y a des gens qui utilisent le fait qu'ils peuvent utiliser des noms de classe non alphabétiques ... (Je l'ai vu une fois utilisé dans le code source éducatif.)

Bonjour le monde.java


classe Hello World{
	public static void main(String[]argument) {
		System.out.print("Hello, World!");
	}
}

b Puisque public est implicitement ajouté à la méthode dans l'interface, il n'est pas nécessaire de l'écrire dans l'instruction main. Je pense que c'était une fonction de java7 ou 8. Cependant, comme de nombreux caractères sont utilisés ailleurs, seul b peut être traité.

Bonjour le monde.java


interface Hello World{
	static void main(String[]argument) {
		System.out.print("Hello, World!");
	}
}

hlpw Entrez le code de caractère au format de format afin que la chaîne de caractères contenue uniquement dans Hello and world ne soit pas utilisée. En utilisant format au lieu de printf, nous évitons d'utiliser p, et en utilisant interface, nous évitons d'utiliser pl en public.

Bonjour le monde.java


interface Hello World{
	static void main(String[]argument) {
		System.out.format("%c%c%c%c%c, %c%c%c%c%c!",72,101,108,108,111,87,111,114,108,100);
	}
}

uy Comme il est dans s [y] stem.o [u] t, je fais en quelque sorte une sortie standard sans l'utiliser. Il existe une classe appelée ScriptEngine qui peut exécuter le langage de script, et lorsqu'elle est sortie par un script, elle est sortie en standard. Cependant, comme la méthode getB [y] Name est utilisée lors de l'obtention du ScriptEngine, exécutez-la à partir de la chaîne de caractères en utilisant getClass, getMethod, et invoquez, et dans la chaîne de caractères, récupérez y à partir du nombre et résolvez-le.

Bonjour le monde.java


import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

interface Hello World{
	static void main(String[]argument) throws Exception {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = (ScriptEngine)manager.getClass()
				.getMethod("getEngineB"+(char)121+"Name", String.class).invoke(manager, "javascript");
		String script = "print('Hello, World!')";
		engine.eval(script);
	}
}

Caractères et raisons non liés

acdgimnorstv Puisque static void main (argument String []) est absolument nécessaire, l'alphabet qu'il contient ne peut pas être omis. Sans cela, il ne peut pas être exécuté en premier lieu. Y a-t-il un moyen de gérer cela? (2018-08-26 postscript) J'ai eu l'information selon laquelle si vous héritez de l'application JavaFX, vous n'avez pas à écrire l'instruction principale.

Bonjour le monde.java


public class Hello World étend javafx.application.Application{
	public void start(javafx.stage.Stage Stage){
		System.out.print("Hello, World!");
	}
}

Cependant, même avec cela, la plupart des caractères ont été utilisés et aucune des liaisons n'a été résolue. Vous pouvez utiliser m avec Syste [m] .out, mais vous ne pouvez pas utiliser ScriptEngine [M] analger, et vous ne pouvez pas utiliser [m] ethod et na [m] e, donc vous ne pouvez pas laisser cela à la réflexion.

e Comme uy, il est dans Syst [e] m.out, donc ce serait bien s'il pouvait être sorti sans utiliser ceci, mais il est dans Script [E] ngin [e], et même si vous essayez de l'obtenir à partir d'une chaîne de caractères, en premier lieu Il est en g [e] tClass. Ou plutôt, puisque c'est dans g [e] t, la méthode pour obtenir quelque chose ne peut pas être utilisée. Même si ce n'est pas le cas, c'est un alphabet assez facile à utiliser, il est donc facile de se faire prendre.

À la fin

De ce qui précède Possible: bfhjklpquwxyz Impossible: acdegimnorstv Sera. La déclaration principale est trop inquiétante. Il semble y avoir un moyen de résoudre e d'une manière ou d'une autre ... S'il vous plaît laissez-moi savoir s'il existe un moyen de le faire. Il pourrait être intéressant de faire autour de fizzbuzz.

(Ajouté le 26/08/2018) Evasion Unicode interdite

Commentaire pour plus d'informations. En Java, vous pouvez écrire le code source au format d'échappement Unicode (\ uxxxx). Si vous utilisez ceci, théoriquement, seul abcdefu qui combine les nombres hexadécimaux a ~ f et u sortira, et même si a ~ f est converti en échappement Unicode, chacun n'inclut pas d'alphabets, alors convertissez uniquement chaque alphabet en échappement Unicode. Sera résolu. Autre que u, il est possible de lier quel que soit le code. Je ne pense pas que cela ait beaucoup de sens de l'attacher, alors je l'interdit de ma propre ligature. Il est intéressant de voir des informations que vous n'utiliseriez pas dans un programme normal si vous faites quelque chose d'étrange comme celui-ci.

Recommended Posts

[Java] Un type d'alphabet interdit Avec reliure Bonjour tout le monde! [Reliure]
[Java] Interdit d'utiliser un seul type d'alphabet FizzBuzz [Binding]
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
Bonjour tout le monde avec le moteur de modèle Java Thymeleaf
Développement Java avec Codenvy: Hello World! Run
Java, bonjour le monde!
Java Hello World
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
"Hello World" en Java
Apprendre Java (1) - Hello World
Hello World en Java
Hello World avec Micronaut
Hello World avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Bonjour tout le monde avec VS Code!
Initialisation avec une chaîne vide vers une instance de type Java String
java bonjour le monde, compilez, exécutez
Hello World avec Spring Boot
Les débutants en Java lisent Hello World
Hello World avec SpringBoot / Gradle
Bonjour tout le monde! Avec Asakusa Framework!
Jusqu'à ce que vous exécutiez Hello World of JavaFX avec VSCode + Gradle
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Hello World pour le plugin Java ImageJ
Jusqu'à "Hello World" avec Spring Boot
Hello World avec AWS Lambda + Java
Bonjour tout le monde avec Kotlin et JavaFX
Hello World avec Docker et langage C
Bonjour le monde de Java dans Eclipse maintenant
(Intellij) Hello World avec Spring Boot
Hello World avec GlassFish 5.1 + Servlet + JSP
Créez un PDF avec itext7 ~ HelloWorld ~
"Hello world" pour ImageJ avec Eclipse
[Java] Comparaison correcte du type String
Hello World avec GWT 2.8.2 et Maven
Bonjour tout le monde en Java et Gradle
Essayez d'écrire "Hello, World" avec une combinaison de plusieurs langues et bibliothèques
Hello World avec Eclipse + Spring Boot + Maven
"Hello, World!" Avec Kotlin + CLI en 5 minutes
Hello World sur Mac VSCode Java
[Connaissance de base de Java] À propos de la conversion de type
Bonjour tout le monde avec Kotlin et Tornado FX
Résumé Java des conversions de types fréquemment recherchées
Comment Spring Security fonctionne avec Hello World
(IntelliJ + gradle) Hello World avec Spring Boot
Construction d'un environnement Java minimal et Hello World
[Java] Comment convertir un élément d'un tableau de type String en type Int
Hello World avec Java Servlet et JSP (démarrage facile du serveur Web avec Maven + Jetty)
Hello World, une application d'interface graphique multiplateforme avec Groovy fonctionnant sur la plate-forme Java