Écrivez un bloc carré de code de N caractères de large et de N caractères de haut, pour un entier positif N.
Par exemple, votre N peut être 5 et le bloc ressemble à ceci:
ThisI
sMy5B
y5Cod
eBloc
kOkay
Ce bloc doit se comporter comme suit:
Lorsque la ligne du haut est extraite et exécutée en tant que programme, le texte exact
row
doit être imprimé sur stdout.Par exemple,
ThisI
imprimeraitrow
.Lorsque la colonne de gauche est extraite et exécutée en tant que programme, le texte exact
col
doit être imprimé sur stdout.Par exemple,
Tsyek
imprimeraitcol
.Lorsque la diagonale principale du coin supérieur gauche au coin inférieur droit est extraite et exécutée en tant que programme, le texte exact
dia
doit être imprimé sur stdout.Par exemple,
TMCoy
imprimeraitdia
.Lorsque le bloc entier est exécuté en tant que programme, y compris les sauts de ligne (avec un saut de ligne facultatif), le texte exact
blk
doit être imprimé sur stdout.Par exemple,
ThisI sMy5B y5Cod eBloc kOkay
imprimerait
blk
.
Détails
- Les quatre programmes sont exécutés dans le même langage de programmation.
- Les N 2 caractères du bloc d'origine peuvent être tout sauf des terminateurs de ligne .
- Si votre langue n'a pas de sortie standard, vous pouvez utiliser une autre méthode de sortie courante. Il doit s'agir de la même méthode pour les quatre programmes.
La soumission dont le bloc d'origine contient le moins de caractères distincts (sans compter les nouvelles lignes) gagne. Tiebreaker va à la soumission avec le plus petit N.
la source
Réponses:
> <> (Poisson) , 3 caractères uniques (N = 2000)
Le code utilise
1
et-
pour mettre des nombres arbitraires sur la pile etp
pour (auto-) modifier le code en fonction des 3 premiers chiffres de la pile. Par exemple, mettre une!
position at0 0
ressemblerait003b*p
à normal> <> et avecp1-
elle devient111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p
.Après la modification, le pointeur d'instruction (IP) entoure le code et exécute la partie modifiée. Dans le cas "bloc", l'adresse IP est redirigée pour une modification ultérieure (puis redirigée vers l'arrière) pour différer du cas "ligne". Dans le cas de la "ligne", les deux mêmes redirection se produisent mais il n'y a pas de code entre elles donc elles n'ont aucun effet.
Les codes finaux générés pour les 4 cas (en omettant les
p1-
parties inchangées ):La taille du code est de 4 Mo et le code est accessible ici . (Il n'y a aucune difficulté à l'exécuter.)
Le programme générateur python3 est accessible ici .
la source
CJam,
1312 caractères uniques, N = 5Aussi simple que possible
MISE À JOUR : espace converti en
a
(no-op dans ce cas) comme indiqué par Runner112Essayez-le en ligne ici
la source
a
afin de ramener le nombre de personnages uniques à 12, non?Bash, 19 caractères uniques, N = 19
trap echo\ row exit
. Cela provoqueecho row
l'exécution lorsque le script se termine (juste la première ligne)ttt=t echo col
t=tt echo dia
echo blk
puis quitte.la source
exit
pour réduire les caractères uniques de 4. Vous pouvez également déplacer laexit
commande sur la ligne suivante et remplacer tous les points-virgules par des espaces.> <> , 14 caractères uniques, N = 10
Assez simple dans un langage 2D. La seule partie délicate est que nous devons
\
distinguer entrerow
etblk
.la source
p1-
donnerait une solution à trois caractères, mais ce serait vraiment ennuyeux à générer (et ne gagnera probablement pas).Brainfuck, 2 personnages uniques, N = 378
Avec une légère flexion possible des règles.
Le programme est un peu gros, voici donc un lien vers celui-ci sur Pastebin .
Le
row
,col
etdia
les programmes sont simples. Ils incrémentent simplement la cellule d'octets jusqu'à ce que le bon code ASCII soit atteint, puis sort. Si la lettre est déjà passée, elle incrémente jusqu'à ce que la cellule déborde afin qu'elle puisse recommencer à 0.Le
blk
programme est l'endroit où la légère flexion des règles se produit. Afin d'imprimer le "texte exactblk
" comme demandé dans le défi, des espaces arrière sont utilisés (code ASCII 8), ce qui nécessite que la console / le terminal d'affichage le prenne en charge. Chaque fois que des valeurs erronées des programmesrow
/col
/dia
sont imprimées, je m'assure qu'elles sont supprimées en sortant quelques codes de contrôle de retour arrière. Pour simplifier les choses, je me suis assuré que toutes les valeurs erronées produites à un moment donné font partie de la plage ASCII imprimable.la source
C (gcc) , 26 caractères uniques, N = 29
Essayez-le en ligne!
la source
Ruby, 24 caractères uniques, N = 17
Essayez-le en ligne!
la source