Pour ma classe CS, mon instructeur nous a confié la tâche de créer un rectangle composé d'astérisques avec des lignes diagonales tracées à travers lui en Java.
Il nous a également dit de l'écrire en aussi peu d'octets que possible. Je l'ai réduit à 190 octets, mais j'ai besoin d'en trouver quelques-uns pour simplifier encore plus ce code pour diminuer les octets. Est-ce que quelqu'un peut m'aider avec ça?
Ce code est fonctionnel:
interface d{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print((x>w-2)?"*\n":(y%(h-1)*x*((y-x)%3)==0)?"*":" ");}}}
L'entrée est 10 10
.
Production:
**********
** * * *
* * * **
* * * *
** * * *
* * * **
* * * *
** * * *
* * * **
Réponses:
logiquement, il devrait y avoir Asterik ("*") à chaque fois
i == j
&i+j==w-1
(pour les diagonales),i == 0
&j == 0
(pour la ligne supérieure et le côté gauche) etj == w-1
&i==h-1
(pour le côté droit et la ligne inférieure).la source
System.out.println()
espaces blancs inutiles et inutiles entre les tuyaux OU (||
) et l'opérateur ternaire.Le code que vous avez fourni pourrait être réduit en procédant comme suit:
Le code résultant serait:
Remarque: la dernière ligne est manquante dans l'exemple de sortie de la question! La sortie de l'exemple de code est différente.
la source
Je n'ai pas réellement Java sur mon ordinateur, donc je ne peux pas tester cela, mais je pense que cela devrait fonctionner pour 174 octets et pourrait certainement être joué plus
espace blanc pour plus de clarté:
affiche "* \ n" pour le dernier caractère de chaque ligne, "*" pour toutes les première et dernière lignes et la première colonne, et "*" pour chaque fois que la somme de la ligne et de la colonne est paire, sinon imprime ""
la source