[Java] Verboten, eine Art von Alphabet zu verwenden FizzBuzz [Bindung]

Überblick

In Java habe ich überprüft, welches Alphabet geschrieben werden kann, indem ich einen Alphabet-Typ verboten habe (Schreiben ohne Verwendung von a bis z). Nur spielen. [Vorheriger Artikel] FizzBuzz-Version von (https://qiita.com/ki_ki33/items/319e2cda34df77c945f2).

Bisher war es einfach, Zeichenfolgenkonstanten ("Hallo Welt") zu vermeiden, daher wurde dies hauptsächlich mit "Klassendeklaration", "Hauptdeklaration" und "Ausgabeanweisung" vermieden. Da sie dieses Mal auch alle existieren, kann das zuvor nicht gebundene Alphabet \ (acdegimnorstv ) nicht gebunden werden. Es wird also überprüft, ob FizzBuzz auch "bfhjklpquwxyz" binden kann, das beim letzten Mal gebunden wurde.

Regel

  1. java10
  2. Kompilieren ist javac, ausführen ist java und es gibt keine Option (oder besser gesagt, in Eclipse schreiben und ausführen)
  3. FizzBuzz auf Standardausgabe ausgeben
  4. Eine Zeile für jede Nummer
  5. Die Charaktere sind "Fizz" "Buzz" "Fizz Buzz"
  6. Die Häufigkeit von FizzBuzzz beträgt zum Zeitpunkt der Ausführung 20 Mal. In der Implementierung kann es jedoch bis zu die Hälfte </ font> des Maximalwerts des Typs int geben
  7. Durch das Einbetten werden keine Schleifen und bedingten Verzweigungen gelöst
  8. Zusätzliche Standardausgabe und Fehlerausgabe sind verboten (Zeilenumbrüche sind in Ordnung).
  9. Verbot, nur einen Alphabet-Typ zu verwenden
  10. Groß- und Kleinschreibung wird nicht berücksichtigt
  11. Externe Dateien verbieten (nur Java-Standardbibliothek ist möglich)
  12. Unicode-Flucht verboten

Der Grund für die 4. Bindung war, dass ich dachte, dass die Obergrenze von FizzBuzz durch Verwendung von Bytes usw. gesenkt werden könnte, um das Alphabet zu vermeiden, und ich dachte, dass ich den Bereich des allgemeinen numerischen Typs int ermöglichen könnte. (Das heißt, lange ist OK)

  • Hinzugefügt am 19.12.2018 Kommentar sagte mir, dass es nicht mit einem Überlauf beim Maximalwert des INT-Typs endet. Es kann durch Verschieben des Index gelöst werden, unterscheidet sich jedoch vom Wikipedia-Code und ist nicht die Essenz der Bindung. Deshalb habe ich ihn auf die Hälfte des Maximalwerts vom Typ INT geändert und betrogen.

Der Grund für die Bindung von Nr. 5 ist, dass sich der Inhalt beim Einbetten nicht von der vorherigen Hello-Welt unterscheidet, wenn die gesamte Ausgabe so eingebettet ist, wie sie ist, ohne eine extreme Schleife zu verwenden. Es ist schwer zu beurteilen, wie viel eingebettet ist, aber es ist ein Selbsturteil. Wenn Ihnen das Urteil nicht gefällt, schreiben Sie einen Artikel, den Sie anhand Ihrer eigenen Beurteilungskriterien ausprobiert haben.

Ausführungsbeispiel


1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

Die 10. Bindung finden Sie unter Vorheriger Artikel.

Fazit

Möglich: bfhjklpquwxyz Unmöglich: acdegimnorstv

  • Kein Unterschied zum letzten Mal

Einzelheiten

Ich schreibe Code, der ungefähr in alphabetischer Reihenfolge gebunden ist. Ich habe nicht viel über die Technik erklärt, die ich das letzte Mal verwendet habe. hjkqwx Zuerst habe ich FizzBuzz normal geschrieben. Es gibt viele Möglichkeiten, also habe ich einfach den Python-Code in Wikipedia in Java umgeschrieben. Wie im Beispiel werden Variablennamen auf Japanisch geschrieben, um keine Alphabete zu verwenden.

Fiz Buzz.java


Klasse Fiz Buzz{
	public static void main(String[]Streit) {
		for (int number=1;Nummer<= 20;Nummer++) {
			if (Nummer% 15 == 0)
				System.out.println("FizzBuzz");
			else if (Nummer% 3 == 0)
				System.out.println("Fizz");
			else if (Nummer% 5 == 0)
				System.out.println("Buzz");
			else
				System.out.println(Nummer);
		}
	}
}

bpz Zuerst habe ich es gelöscht, indem ich eine Zeichenkette vom Typ char geschrieben und mit dem Format aufgeweckt habe. Dadurch wird z. Machen Sie es als nächstes zur Schnittstelle und löschen Sie die öffentliche Hauptmethode. Dies lässt b verschwinden. Es verschwand nicht mehr als ich erwartet hatte.

Fiz Buzz.java


Schnittstelle Fiz Buzz{
	static void main(String[]Streit) {
		for (int number=1;Nummer<= 20;Nummer++) {
			if (Nummer% 15 == 0)
				System.out.format("%c%c%c%c%c%c%c%c%c",70,105,122,122,66,117,122,122,10);
			else if (Nummer% 3 == 0)
				System.out.format("%c%c%c%c%c",70,105,122,122,10);
			else if (Nummer% 5 == 0)
				System.out.format("%c%c%c%c%c",66,117,122,122,10);
			else
				System.out.format("%d%c",Nummer,10);
		}
	}
}

f Ich benutze es für, wenn und Format. Ich habe das Format zum Drucken geändert und es durch ein char-Array ersetzt. für ist während. Wenn verwendet, wechseln Sie wie eine if-Anweisung. Ich schreibe ein Inkrement, weil ich continue anstelle von else verwende. Ändern Sie den Anfangswert separat

Fiz Buzz.java


Klasse Fiz Buzz{
	public static void main(String[]Streit) {
int number=0;
		while (Nummer< 20) {
Nummer++;
			switch(Nummer% 15){
			case 0:
				System.out.print(new char[] {70,105,122,122,66,117,122,122,10});
				continue;
			}
			switch(Nummer% 3){
			case 0:
				System.out.print(new char[] {70,105,122,122,10});
				continue;
			}
			switch(Nummer% 5){
			case 0:
				System.out.print(new char[] {66,117,122,122,10});
				continue;
			}
			System.out.print(Nummer+"\n");
		}
	}
}

l Ich habe es mit else und println verwendet. Der obige verwendet sie nicht, aber ich habe sie währenddessen verwendet, sodass ich sie in für ändern kann. Da es auch in der Öffentlichkeit verwendet wird, ändern Sie es in Schnittstelle.

Fiz Buzz.java


Schnittstelle Fiz Buzz{
	static void main(String[]Streit) {
		for(int number=1;Nummer<= 20;Nummer++) {
			switch(Nummer% 15){
			case 0:
				System.out.print(new char[] {70,105,122,122,66,117,122,122,10});
				continue;
			}
			switch(Nummer% 3){
			case 0:
				System.out.print(new char[] {70,105,122,122,10});
				continue;
			}
			switch(Nummer% 5){
			case 0:
				System.out.print(new char[] {66,117,122,122,10});
				continue;
			}
			System.out.print(Nummer+"\n");
		}
	}
}

uy So ersetzen Sie s [y] stem.o [u] t durch dieselbe ScriptEngine wie beim letzten Mal. Da es sich auch um B [u] zz handelt, ist die Zeichenfolge ein Zeichenarray.

Fiz Buzz.java


import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
Schnittstelle Fiz Buzz{
	static void main(String[]Streit) throws Exception{
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = (ScriptEngine)manager.getClass()
				.getMethod("getEngineB"+(char)121+"Name", String.class).invoke(manager, "javascript");
		for (int number=1;Nummer<= 20;Nummer++) {
			if (Nummer% 15 == 0)
				engine.eval("print('"+new String(new char[] {70,105,122,122,66,117,122,122})+"')");
			else if (Nummer% 3 == 0)
				engine.eval("print('"+new String(new char[] {70,105,122,122})+"')");
			else if (Nummer% 5 == 0)
				engine.eval("print('"+new String(new char[] {66,117,122,122})+"')");
			else
				engine.eval("print('"+Nummer+"')");
		}
	}
}

Ungebundene Charaktere und Gründe

acdgimnorstv Weil statisches void main (String [] Argument) absolut notwendig ist.

e Wie uy ist es in Syst [e] m.out und auch in Script [E] ngin [e]. Selbst wenn Sie versuchen, es aus einer Zeichenfolge abzurufen, befindet es sich in g [e] tClass. Auch wenn dies nicht der Fall ist, handelt es sich um ein recht einfach zu verwendendes Alphabet, sodass es normalerweise gefangen wird.

Am Ende

Von Oben Möglich: bfhjklpquwxyz Unmöglich: acdegimnorstv Wird sein. Das Ergebnis war das gleiche wie beim letzten Mal. Es war nicht so interessant. Schließlich sollte der Deklarationsteil von class oder main ignoriert werden. Ich dachte, aber dann sollte ich es mit Python machen.

Recommended Posts

[Java] Verboten, eine Art von Alphabet zu verwenden FizzBuzz [Bindung]
[Java] Eine Art von Alphabet verboten Mit Bindung Hallo, Welt! [Bindung]
Initialisierung mit einer leeren Zeichenfolge für eine Instanz vom Typ Java-Zeichenfolge
FizzBuzz (@Java) von Bokuga Kanga Etasaikyo, der seit 1 Jahr Programmierer ist
[Java] Korrekter Vergleich des String-Typs
[Java] Implizite Typumwandlung (AOJ10-Summe von Zahlen)
[Grundkenntnisse in Java] Informationen zur Typkonvertierung
Java Zusammenfassung der häufig gesuchten Typkonvertierungen
[Java] So konvertieren Sie ein Element eines Array vom Typ String in einen Int-Typ
[Java] Achten Sie auf den Schlüsseltyp der Karte
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Java Repository von Eclipse mit Maven: Fehlendes Artefakt ~
Java-Überprüfung ③ (grundlegende Verwendung von Arrays / Referenztyp)