Imprimez une tabula recta!
La Tabula Recta (parfois appelée «table de Vigenere») a été créée par Johannes Trithemius et a été utilisée dans plusieurs chiffrements, y compris toutes les variantes du chiffrement Vigenere de Bellaso et du chiffrement de Trithemius. Cela ressemble à ceci:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
DEFGHIJKLMNOPQRSTUVWXYZABC
EFGHIJKLMNOPQRSTUVWXYZABCD
FGHIJKLMNOPQRSTUVWXYZABCDE
GHIJKLMNOPQRSTUVWXYZABCDEF
HIJKLMNOPQRSTUVWXYZABCDEFG
IJKLMNOPQRSTUVWXYZABCDEFGH
JKLMNOPQRSTUVWXYZABCDEFGHI
KLMNOPQRSTUVWXYZABCDEFGHIJ
LMNOPQRSTUVWXYZABCDEFGHIJK
MNOPQRSTUVWXYZABCDEFGHIJKL
NOPQRSTUVWXYZABCDEFGHIJKLM
OPQRSTUVWXYZABCDEFGHIJKLMN
PQRSTUVWXYZABCDEFGHIJKLMNO
QRSTUVWXYZABCDEFGHIJKLMNOP
RSTUVWXYZABCDEFGHIJKLMNOPQ
STUVWXYZABCDEFGHIJKLMNOPQR
TUVWXYZABCDEFGHIJKLMNOPQRS
UVWXYZABCDEFGHIJKLMNOPQRST
VWXYZABCDEFGHIJKLMNOPQRSTU
WXYZABCDEFGHIJKLMNOPQRSTUV
XYZABCDEFGHIJKLMNOPQRSTUVW
YZABCDEFGHIJKLMNOPQRSTUVWX
ZABCDEFGHIJKLMNOPQRSTUVWXY
J'ai souvent besoin de cela, mais je ne peux pas le copier et le coller sur Internet. Parce que la table carrée est très longue et qu'il faut beaucoup de temps pour la taper, votre code doit être aussi court que possible.
Règles / exigences
- Chaque soumission doit être un programme complet ou une fonction. S'il s'agit d'une fonction, vous devez l'exécuter en ajoutant uniquement l'appel de fonction au bas du programme. Tout le reste (par exemple les en-têtes en C) doit être inclus.
- Si cela est possible, fournissez un lien vers un site où votre programme peut être testé.
- Votre programme ne doit rien écrire à
STDERR
.
- Les échappatoires standard sont interdites.
- Votre programme peut sortir dans tous les cas, mais il doit être imprimé (pas un tableau ou similaire).
Notation
Les programmes sont notés en octets, en UTF-8 par défaut ou avec un jeu de caractères différent de votre choix.
Finalement, la réponse avec le moins d'octets va gagner.
Les soumissions
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Classement
Voici un extrait de pile permettant de générer à la fois un classement régulier et un aperçu des gagnants par langue.
/* Configuration */
var QUESTION_ID = 86986; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 53406; // This should be the user ID of the challenge author.
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="language-list">
<h2>Winners by Language</h2>
<table class="language-list">
<thead>
<tr><td>Language</td><td>User</td><td>Score</td></tr>
</thead>
<tbody id="languages">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
printf
, nous devons inclurestdio.h
, siisalpha
est utilisé,ctype.h
est nécessaire, etc. Est-ce correct?Réponses:
05AB1E ,
65 octetsMerci à Downgoat d’ avoir économisé 1 octet. Code:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne! .
la source
v
commande consomme une valeur, en l'itérant. Dans ce cas, il consomme l'alphabet, donc il itère 26 fois. C'est aussi le nombre exact de fois que nous devons itérer la=À
fonction. La=
laisse la pile intacte et laÀ
seule fait pivoter le haut de l’élément de pile 1 vers la gauche. Est-ce que cela répond à votre question? :)Vim,
2523 octetsOù
↵
est la clé de retour.EDIT : les minuscules vont bien, je peux donc sauvegarder deux clés.
la source
:h<_<cr>jjY
génieV~
Python 2,
595753 octetsMerci à @xsot pour -4 octets!
la source
print bytearray(a)
./// , 220 octets
Essayez-le en ligne!
C'était étonnamment non trivial et je ne sais pas si c'est optimal.
Un seul problème pour ce problème dans /// est d'extraire des sous-chaînes communes.( Il s'avère que je me suis trompé. ) Cependant, en raison de la nature du résultat, il est difficile de savoir quelle sous-chaîne doit être extraite, car vous ne pouvez pas extraire l'alphabet en entier à cause des sauts de ligne. Vous aurez donc besoin d'extraire des sous-chaînes de l'alphabet encapsulé, mais vous devrez également choisir une durée pendant laquelle vous créerez les sous-chaînes et celles que vous choisirez.Alors voici ce que j'ai fait. Il s'agit d'un script CJam qui trouve toutes les sous-chaînes jusqu'à la longueur 25 dans la chaîne donnée et calcule le nombre d'octets que son extraction sauverait. En gros, s’il existe des
N
copies d’une longueur deM
sous-chaîne, vous enregistrez les(N-1)*(M-1) - 5
sous-chaînes, ces sous-chaînes ne contiennent pas de barres obliques. En outre, techniquement, lorsque vous avez déjà extrait environ 8 sous-chaînes, le décalage constant à la fin est réduit à-4
, mais le script ne tient pas compte de cela.Quoi qu'il en soit, voici ce que j'ai fait avec le script:
/x/ABC/
le code oùx
est la lettre choisie etABC
la sous-chaîne.À la fin, nous économisons quelques octets de plus en remplaçant le résultat
//
par|
et par le préfixe/|/\/\//
(c’est pourquoi l’extraction des sous-chaînes ne coûte que 4 au lieu de 5 octets après la 8 e sous-chaîne ou plus).Comme je l'ai dit, je ne sais pas si c'est optimal et je trouve le résultat plutôt irrégulier assez intéressant. Il serait peut-être possible de trouver une solution plus courte en choisissant des sous-chaînes non optimales (mais plus) quelque part dans la suite. Je me demande quelle est la classe de complexité de ce problème ...
la source
YX
résultat. ;)C, 47 octets
Essayez sur Ideone
Une seule boucle, imprimant l'alphabet tous les 26 caractères, mais tous les 27 caractères étant remplacés par une nouvelle ligne.
la source
f(i)
ensuite simplement appelerf()
sans aucun argument.i=702;f(){for(;i--;)//...
J, 15 octets
Interprète en ligne .
la source
|. (Shift)
est 8 octets plus long!(i.26)(|."0 _)u:65+i.26
u:65+1&|.^:]i.26
car les adverbes de puissance suivent les résultats précédents si une liste leur est donnée.|.
est de 17 octets:u:65+|."0 1/~i.26
(toujours en utilisant/~
)u:65+(|./~,.)i.26
. Je me suis débarrassé du rang en utilisant un crochet et,.
en triant la fourchette, mais il a fini par avoir la même longueur./// , 128 octets
Essayez-le en ligne!
Inspiré par l'incroyable réponse de Jakube au défi L-phabet, j'ai pensé que je m'essayerais aussi à la programmation réelle de /// plutôt que de l'utiliser uniquement pour la compression. C'était assez compliqué et j'avais besoin de quatre tentatives, mais au final, le résultat était beaucoup plus court que ma solution basée sur la compression .
Explication
Une introduction rapide sur ///: en gros, l'interprète lit le code caractère par caractère et effectue les opérations suivantes:
\
ni un/
, imprimez-le.\
, affiche le caractère suivant./
, analysez une/x/y/
instruction (avec les mêmes règles d'échappement) et remplacez à plusieurs reprises toutx
dans le code restant pary
.S'inspirant de Jakube, pour plus de simplicité, je vais expliquer une version 4x4 de ceci:
Nous commençons par remplacer ceux
:
avec le truc entre le deuxième et le troisième/
. Cela finira par être le code qui fera pivoter les lignes suivantes. Nous obtenons ceci:Le
f
,b
et nex
sont que pour les chaînes communes sténographies, que nous allons maintenant étendre. Lef
pour les barres obliques, leb
pour les barres obliques inverses et lex
pour\//
qui arrive souvent. La raison pour laquelle j'utilise des alias pour les sous - chaînes d'un seul caractère/
et\
est qu'ils auraient à être échappé dans la première instruction de substitution, donc je suis en fait économiser beaucoup d'octets par ne pas avoir besoin tous ces antislashs. Voici ce que nous obtenons aprèsx
,f
etb
ont été remplies:Très lisible.
Donc, la première ligne est simplement imprimée textuellement. Nous arrivons ensuite à la partie géniale qui fait pivoter toutes les lignes suivantes. Il consiste en fait en quatre instructions différentes. Une chose à noter est que j'ai échappé à toutes les occurrences de
A
ces instructions. La raison en est que cela me permet de distinguerA
s dans les instructions deA
s dans les lignes restantes, qui doivent être traitées différemment.Cela correspond
/A
et le remplace par/
, supprimant leA
. Notez que cette sous-chaîne n'apparaît qu'auABCD
début de chaque élément , ce qui supprime le premier caractère de toutes les lignes suivantes:Cela correspond à un saut de ligne suivi d'une barre oblique et le remplace par
A_/
. Donc, ceci insère unA
à la fin de chaque ligne, complétant la rotation et transforme le saut de ligne en trait de soulignement.Cela correspond
_/
et le remplace par un saut de ligne suivi d'une barre oblique. La raison pour laquelle j'ai besoin de faire ce détour par le trait de soulignement est que /// applique chaque instruction plusieurs fois jusqu'à ce que la chaîne ne corresponde plus. Cela signifie que vous ne pouvez jamais utiliser une instruction de la forme/x/axb/
oùx
,a
etb
sont des chaînes arbitraires, car après la substitutionx
correspondra toujours. Cela signifie notamment que nous ne pouvons pas simplement insérer quelque chose devant un saut de ligne. Nous devons remplacer le saut de ligne dans le processus et annuler ce remplacement.Cela correspond
\A
et le remplace par\B
, de sorte que les instructions après les lignes restantes traitent le caractère suivant. Une fois que les quatre instructions ont été traitées, la chaîne restante ressemble à ceci:Alors maintenant, la première ligne tournée est imprimée, puis le jeu d'instructions suivant fait pivoter les lignes restantes d'une autre cellule, etc. Après la dernière rotation, nous avons quelques instructions supplémentaires que nous pouvons ignorer, puis nous terminons avec les instructions incomplètes:
Les instructions incomplètes à la fin sont simplement ignorées et le programme se termine.
la source
A->B
,B->C
... Mais ça n'a pas tout à fait fonctionné. Supprimer le premier caractère et l'ajouter à la fin est une approche bien meilleure.Gelée , 7 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Emacs, 47 octets
Où
^P
signifie "Contrôle P", etc. C'est 47 octets, car les touches F3 et F4 nécessitent deux octets ASCII.Après avoir saisi l'entrée de départ, il définit une macro de clavier pour dupliquer la ligne et déplacer le premier caractère à la fin. Il exécute ensuite la macro 24 fois supplémentaires.
la source
JavaScript (ES6), 56 octets
Oui, c'est vrai, la moitié de mon code correspond au littéral de la chaîne de l'alphabet. Le mieux que je puisse faire sans le littéral est de 81 octets:
Si vous souhaitez un programme plutôt qu'une fonction, supprimez-le
_=>
et emballez-leconsole.log()
pour un coût de 10 octets.la source
/./g
chaque lettre de la chaîne d'alphabet fournie. Dans la chaîne de remplacement,$&
représente la correspondance elle-même,$'
la partie de la chaîne après la correspondance et$`
la partie de la chaîne avant la correspondance.$`$&$'
représenterait donc la chaîne d'origine, mais bien sûr, il est trivial de déplacer la partie après le match au début, fournissant ainsi l'effet de rotation.Mathematica
6861 octetsGrâce à...
@MartinEnder (7 octets)
la source
Array
peut être plus court que la cartographie sur unRange
.Array
enregistre effectivement un octet, mais vous pouvez ensuite en sauvegarder un autre en évitantColumn
:Array[{"A"~CharacterRange~"Z"~RotateLeft~#,"\n"}&,26,0]<>""
(il vous suffira de remplacer le\n
par un saut de ligne réel).Print@@@NestList[RotateLeft,"A"~CharacterRange~"Z",25]
Grid@Array[FromCharacterCode[Mod[+##-2,26]+65]&,{26,26}]
Python 2,
75656158 octetsObtient l'alphabet avec
map(chr,range(65,91))
, puis applique manuellement l'opération de décalage de chaîne.Merci à @LeakyNun et @TheBikingViking pour -4 octets!
Merci à @xnor pour -3 octets!
la source
a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
c'est plus court.a[1:]
au lieu dea[1:26]
.for x in s:print s;s=s[1:]+x
.s='%c'*26%tuple(range(65,91))
.C,
8864 octetsAppel
f()
sans arguments.Essayez sur ideone .
la source
Piet , 247 octets / 190 codels
Essayez-le en ligne!
Donc, cela a pris beaucoup plus de temps que prévu et j’ai quelques idées sur d’autres approches plus efficaces (plus faciles à empiler), mais j’ai enfin réussi à faire fonctionner le problème (et à corriger un bogue d’interprète et à ajouter des fonctionnalités IDE le long de la chemin), alors le voici. Pas le langage le plus efficace en octets, mais vraiment très amusant. Voici une vue plus grande et une trace indiquant le chemin emprunté. Histoire sur mon GitHub .
En tant que langage basé sur des piles, il est beaucoup trop compliqué d'expliquer brièvement, mais voici un aperçu de base de ce que font les différentes sections / boucles. Tous les noms de variables et de fonctions sont simplement explicatifs, car Piet ne contient aucune variable ou fonction.
line_counter
à 27, charge '@' en tant quecur_letter
, définieletter_count
à 27letter_counter
reset_line
si zéro (cyan clair à 2 blocs)cur_letter
au sommet de la pilecheck_done
ifcur_letter > 'X'
(sarcelle / bloc rouge, côté droit)cur_letter
et affiche le résultat (coin inférieur droit)reset_letter
ifcur_letter > 'Y'
(bloc vert clair, gauche)reset_line
branche (grand carré rose):letter_count
à 27check_done
branche (moitié droite à l'intérieur)line_counter
to topline_counter
et revient au bas de la pilereset_line
branche (côté gauche, bloc vert):cur_letter
à '@'la source
MATL , 8 octets
Merci à @Dennis , qui a suggéré que MATL devrait incorporer une indexation modulaire, et à @Suever , qui a eu l’ idée des opérations par paires automatiques.
Essayez-le en ligne!
la source
Javascript,
113969176 octetsUne version très courte pour fonctionner dans la console:
Javascript / HTML,
140123118105 octetsUne version plus jolie, avec une sortie HTML qui permet à l'OP de copier et coller plus facilement:
(EDIT: J'aurais juste utilisé la chaîne AZ au lieu de la générer)
(EDIT 2: Merci à @Neil et @DanTheMan pour leur contribution (voir commentaires))
la source
l.slice(0,1)
est justel[0]
, alors que le,27
est inutile, à quel point vous pouvez déplacer la tranche et vous retrouver avecl.slice(1)+l[0]
. De plus, je pense que vous pouvez déplacer leconsole.log
corps vers la boucle, évitant ainsi le trailing;
.console.log
.PowerShell, 44 octets
la source
R,
474241 octetsEssayez-le en ligne!
Génère 27 alphabètes, supprime les 27e lettres et imprime en 26 colonnes.
Amélioration inspirée par la solution de @Giuseppe .
la source
rep
mais c'était particulièrement inspirant! Très agréable. Je voterais encore si je le pouvais.1
au lieu de""
pourstdout
.Sesos ,
2725 octetsEssayez-le en ligne! Cochez Debug pour voir le code SBIN généré. †
Assemblage Sesos
Le fichier binaire ci-dessus a été généré en assemblant le code SASM suivant.
Comment ça fonctionne
Nous commençons par initialiser la bande à
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Ceci est comme suit.Ecrivez 26 dans une cellule en laissant la bande dans l'état suivant.
Tant que la cellule sous l'en-tête de données est non nulle, nous procédons comme suit.
Copiez le numéro dans les deux cellules à gauche et ajoutez 64 à la copie la plus à gauche.
Déplacez la copie la plus à gauche vers l'emplacement d'origine, puis soustrayez 1 de la copie la plus à droite.
Le processus s'arrête après 26 itérations, car la copie la plus à droite est 0 à ce moment-là. Nous déplaçons une cellule vers la droite, l'état final de la bande après l'initialisation est le suivant.
Nous sommes maintenant prêts à générer la sortie en répétant le processus suivant jusqu'à ce que la cellule située sous l'en-tête de données soit à zéro.
Tout d'abord, nous imprimons le caractère sous l'en-tête de données et nous nous déplaçons à droite, en répétant cette étape jusqu'à ce qu'une cellule de valeur 0 soit trouvée. Après l’impression
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, la bande se présente comme suit.Maintenant, nous déplaçons la tête de données de 27 unités vers la gauche (de retour au 0 ) et répétons la combinaison impression-déplacement jusqu'à ce qu'une cellule de valeur 0 soit trouvée. Cela n'imprime rien et laisse la bande comme suit.
Maintenant, nous écrivons 10 dans la cellule en cours, imprimons le caractère correspondant (saut de ligne) et remettons à zéro la cellule avec un appel à
get
sur une entrée vide, en laissant la bande inchangée.Ensuite, nous déplaçons le contenu de la cellule vers la droite vers la cellule actuelle, puis nous déplaçons la tête de données vers les unités vers la droite.
La prochaine itération est légèrement différente. La première étape d'impression s'imprime
BCDEFGHIJKLMNOPQRSTUVWXYZ
en laissant la bande comme suit.Nous déplaçons maintenant la tête de données de 27 unités vers la gauche.
La boucle d’impression suivante imprime
A
et laisse la bande comme suit.Une fois encore, nous imprimons un saut de ligne, déplaçons le contenu de la cellule de droite à la cellule actuelle, puis la tête de données vers les unités de droite.
Après 24 autres itérations, la dernière étape du déplacement de la tête de données vers la droite laisse la bande dans l'état suivant.
La cellule sous l'en-tête de données est maintenant 0 et le programme se termine.
† TIO utilise une version plus récente de Sesos, qui est rétro-compatible pour SASM, mais génère un code SBIN plus court.
la source
Haskell,
565352 octetsmême longueur: (suggestion de @AndersKaseorg)
pour faire des choses modulaires, vous devez importer Data.Char pour obtenir la fonction chr,
745958 octets était le meilleur que je pouvais obtenir avec ça: (merci à @nimi pour avoir suggéré la fonction toEnum)Cela pourrait probablement être beaucoup plus court, mais je ne connais aucun tour de golf chez Haskell.
mapM utilisé à la place de mapM_ (voir le commentaire de @ Lynn)
la source
['A'..x]
à['A'..'Z']
, qui est maintenant utilisé deux fois, et élève cela à une définition.chr
deData.Char
, vous pouvez utiliser à latoEnum
place et omettre leimport
.mapM_
demapM
devrait être bon. Cela vaut peut-être un meta post…R, 53 octets
La voici sur un interprète en ligne .
la source
Retina,
3631 octets5 octets grâce à Martin Ender.
Le saut de ligne est significatif.
Essayez-le en ligne!
Crédits .
la source
Brain-Flak , 222 octets
Essayez-le en ligne!
Je suis nouveau à Brain-Flak, alors peut-être que cela peut être joué au golf beaucoup, mais au moins c'est un premier essai. Il stocke 27 alphabets complets sur la pile de gauche, puis les déplace à droite et les remplace toutes les 27 lettres par une nouvelle ligne.
Mon code source est un peu déroutant, mais je l’ajouterai quand même.
la source
V ,
36, 10 octetsEssayez-le en ligne!
Ceci utilise le codage "Latin1".
Explication:
la source
C #, 98 octets
J'ai essayé de voir si je pouvais générer des lettres plus courtes qu'une simple initialisation sous forme de chaîne, mais ce n'est pas vraiment possible. Les lettres sont 26 octets et cet extrait seul
est 25 octets. Je pense que les initialiser et ensuite les ajouter avec un + = a est une bonne solution, mais avec C #, vous êtes limité par le nombre de fonctions telles que
Substring()
etConsole.WriteLine()
.Ma tentative à 98 octets:
la source
Octave, 27 octets
Nous ajoutons un vecteur ligne et colonne, et Octave étend bien les dimensions de sigleton, ce qui est inutile
bsxfun
(comme dans Matlab).la source
q, 20 octets
la source
-1_'26 27#.Q.A
Java,
190176172163 octetsla source
System.out.printf("%c", ...)
->System.out.write(...)
,'\n'
->10
,'A'
->65
. Notez que la suggestion de caractère de saut de ligne / ligne est autorisée, mais que vous devez fournir une sortie idéale . :)String[]a
jouer au golf: l’espace peut être supprimé; etint s=0;while(s<26){p(s,26);p(0,s++);p(-1,0);}
peut êtrefor(int s=0;s<26;p(0,s++),p(0,s++))p(s,26);
.Bash, 66 octets
Je crée un alphabet complet dans
A
, puis en imprime 26 versions pivotées en prenant les caractères commençant parn
et en ajoutant ceux qui précèdentn
.la source
Perl, 42 octets
Nous remercions @Dom Hastings pour cela.
Ou (même nombre d'octets):
A besoin
-M5.010
ou-E
à courir, par exemple:Mon ancienne réponse (55 octets):
Besoin
-M5.010
de courir. Alors courez avec:Il est probablement possible de faire plus court cependant, mais je n'ai pas encore découvert comment ... encore
la source
@l=A..Z;say@l[$_..25],@l[0..$_-1]for 0..25
et les$_=join"",A..Z;eval'say;/./;$_=$\'.$&;'x26
deux nécessitent-E
/-M5.010
.