Défi
Créez le programme le plus court qui répond aux exigences
Exigences
Le code doit générer une grille 5x5 de 0, comme ceci:
00000 00000 00000 00000 00000
Le code doit accepter une entrée (colonne, ligne, caractère). La grille doit changer en conséquence:
Début:
00000 00000 00000 00000 00000
Contribution:
(2,5,*)
Production:
0*000 00000 00000 00000 00000
(Remarque: le coin inférieur gauche est en position 1,1.)
Le programme doit retourner un message d'erreur autre que la grille si l'entrée de ligne / colonne est pas 1,2,3,4 ou 5. Cela peut être un message de votre choix (tant que ce n'est pas la grille), donc
0
est une sortie d'erreur acceptable.Le programme doit fonctionner avec tous les caractères ASCII imprimables (d'un clavier américain).
LE GAGNANT
Le gagnant sera la personne possédant le code le plus court et remplissant toutes les conditions. Si plusieurs réponses fonctionnent et ont la même longueur (la plus courte), la personne qui a répondu en premier sera la gagnante.
0
pour l'erreur et la grille pour réussir?Réponses:
Dyalog APL ,
171310 octetsDemande un tableau fermé contenant (ligne, colonne) puis un caractère. Donne INDEX ERROR sur une entrée défectueuse.
Essayez-le en ligne!
⊖
retourner le résultat de⍞
caractère entré@
remplacement du contenu en position⎕
entrée-évaluée (ligne, colonne fermée)⊢
de5 5⍴
5 × 5 tableau de0
zérosla source
⊢
nécessaire? Je pense que dans ce cas, c'est redondant.(⊂⎕)5 5
comme un seul tableau à 3 éléments - l'argument de⍴
.Ruby,
157149 octetsErreur sur une entrée mal formée ou en position hors limite
Merci à ConorO'Brien (8 octets) et afuous (2 octets) pour avoir aidé à économiser des octets
la source
loop do...end
->loop{...}
; Je pense que çaArray.new(5,[0]*5)
marche aussi, ou même[*[0]*5]*5
.Array.new(5,[0]*5)
faites un tableau de référence et[*[0]*5]*5
faites un tableau plat*
. Ensuite, cela crée toujours un tableau de références.Array.new(5){[0]*5}
peut être remplacé par(1..5).map{[0]*5}
pour économiser 2 octets.Lot, 199 octets
Erreurs hors si la position est hors de portée.
la source
<
, comme^<
. pas sûr.PHP,
11110097 octetss'imprime
E
si la ligne / colonne est hors plage.Courir avec
php -r <code> <row> <column> <character>
la source
Python, 66 octets
la source
Dyalog APL,
242018 octets4 octets enregistrés grâce à Zgarb! Sauvegardé 2 octets grâce à Adam!
Invite à entrer. Voir ci-dessous pour une explication.
20 octets
Attribuez à une fonction et appelez-la
y x f 'c'
. Par exemple:Explication
{...}
est une fonction avec un argument de gauche⍺
et un argument de droite⍵
.⋄
sépare les instructions, il y a donc trois instructions:La première déclaration des
a←5 5⍴0
ensemblesa
à une5
par5
grille de0
s.La deuxième déclaration définit le membre aux coordonnées dictées par
⍺
à⍵
(qui est, le caractère).Enfin, nous effectuons
⊖
sura
et retour qui, ce qui donne les premières d'a
inversion.la source
{a←5 5⍴0⋄a[⊂⌽⍺]←⍵⋄⊖a}
enregistre quelques octets.a←5 5⍴0⋄a[⊂⎕]←⍞⋄⊖a
JavaScript (ES6),
7376 octetsLance un
TypeError
si la colonne ou la ligne est hors limites.Démo
Afficher l'extrait de code
la source
c
ou l' autrer
est inférieur à 1?c == 0 || r == 0
. Mais je suppose que vous avez raison: je vais le mettre à jour pour éviter les valeurs négatives.C #, 199 octets
D'après la réponse de Pete Arden
Non golfé:
la source
05AB1E ,
2722 octetsNe renvoie aucune grille lorsque ligne / colonne> 5.
Essayez-le en ligne!
La version précédente
la source
Gelée , 28 octets
Cela semble beaucoup trop long ...
TryItOnline!
Comment?
la source
JavaScript (ES6), 89 octets
Parce que j'aime la récursivité. Lance un
ReferenceError
sur des coordonnées invalides.la source
Mathematica, 38 octets
la source
Brain-Flak 415 octets
Comprend +3 pour
-c
Essayez-le en ligne!
Prend le caractère à insérer en premier, puis la ligne puis la colonne sans espaces.
La plupart de cela n'est qu'une gestion des erreurs. Brain-Flak n'a pas un bon moyen de vérifier si les valeurs sont dans une plage. Pour les erreurs, il ne génère rien, ou simplement le caractère qui devait être inséré. La résolution du problème réel ne prend que 211 octets:
la source
Excel VBA, 67 octets
Sorties vers la plage A1: E5 sur la feuille active du projet vba, quitte avec
lorsqu'une entrée non valide est fournie.
Code:
Usage:
Sortie (de l'exemple ci-dessus) :
la source
C #, 208 octets
Golfé:
Non golfé:
Essai:
la source
c
et / our
sont hors limites, cela lancera unIndexOutOfRangeException
afin que vous puissiez supprimer la première instruction if même si je n'ai pas vérifié correctement les spécifications pour cela. Vous pouvez compiler en unFunc<int, int, char, string>
pour économiser des octets, je crois que vous devez l'ajouterusing System.Linq;
à cause de l'Reverse
appel, même si je ne me souviens pas du haut de ma têted[r - 1] = d[r - 1].Substring(0, c - 1) + a + d[r - 1].Substring(c);
pourd[--r] = d[r].Substring(0, c - 1) + a + d[r].Substring(c);
enregistrer 4 octetsWinDbg, 95 octets
Près de la moitié de juste les indices sont en vérifiant dans la plage ... L' entrée est fait en réglant les registres de pseudo-
$t0
,$t1
et$t2
(où$t2
détient la valeur ascii du charbon pour remplacer). Par exemple,(2,5,*)
comme l'exemple serait:Imprime
0
en cas d'erreur.Comment ça fonctionne:
Exemple de sortie:
la source
Haskell, 77 octets
Exemple d'utilisation:
Si
x
ety
sont à portée, boucle extérieure et intérieure à travers[1..5]
et prendre le charbonc
si elle touche la donnéex
ety
et un0
autre. Six
ouy
n'est pas à portée, uneNon-exhaustive patterns
exception est levée.la source
Octave 49 octets
la source
QBIC ,
5350 octetsEDIT: Maintenant que je sais que je n'ai pas besoin d'afficher la grille de départ, j'ai échangé les entrées utilisateur
_!_!_?
pour les paramètres de ligne de commande::;
, économisant 3 octets.Version originale: Cela s'arrête entre l'impression de la grille 0 et la prise des coordonnées pour la substitution, montrant la grille 0.
Imprime 5 chaînes de 5
0
, demande à l'utilisateur 2 entrées numériques et 1 entrée de chaîne, vérifie si les nombres sont <5 et utilise laLOCATE
fonction de QBasic pour remplacer le bon caractère.la source
Java, 99 octets
la source
> <> (Fish), 36 octets (non concurrents)
Essayez-le ici!
Ceci est exécuté en plaçant les paramètres sur la pile comme [
chr
,y
,x
]. L'un des zéros en bas est en fait changéchr
par l'instructionp
. Il existe probablement de meilleures façons de le faire, mais je pensais que c'était une situation unique et divertissante où cette fonctionnalité> <> était utile.Explication
Ce programme soustrait simplement 1 de
x
(comme dans> <>,0
serait en fait la première colonne), échangex
avecy
, puis change le point de la boîte de codex, y
enchr
viap
.y
n'a pas besoin d'en soustraire 1, car le code est déjà entièrement compensé par 1!Explication non concurrente
Ce n'est pas concurrent car il ne produit pas réellement de sortie. Je viens de trouver cela extrêmement amusant. Si cela est considéré comme une sortie valide, faites-le moi savoir!
Il est également non concurrent car il
y
peut être égal à 0, mais je pense que c'est le seul problème avec la réponse. Je vais corriger si cela est considéré comme une sortie valide, mais sinon, cela rend la réponse moins divertissante ...la source
Bash, 59 octets
Golfé
$ 1 , $ 2 - ligne, colonne, $ 3 - caractère de remplacement, l'erreur est signalée via le code de sortie
Tester
la source
Vim,
60474276 touchesL'entrée est au format (sur la première ligne):
Avec le curseur commençant au début
Si l'entrée n'est pas valide, lance alors:
E492: Not an editor command: ^
Le cide qui produit la sortie n'est que des
42
octets, mais afin de créer une erreur, mon octet est considérablement augmenté.la source
Java 8,
194192 octetsEssayez-le ici avec une entrée correcte.
Essayez-le ici avec une entrée incorrecte.
Ce serait plutôt
116114 octets en tant que fonction au lieu du programme complet:Essayez-le ici.
Explication:
la source