Imprima una Tabula Recta!
La Tabula Recta (a veces llamada 'Mesa Vigenere'), fue creada por Johannes Trithemius, y se ha utilizado en varias cifras, incluidas todas las variantes de la cifra Vigenere de Bellaso y la cifra Trithemius. Se parece a esto:
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
Frecuentemente necesito esto, pero no puedo encontrarlo en ningún lugar de Internet para copiar y pegar. Debido a que la tabla cuadrada es muy larga y requiere una gran cantidad de tiempo para escribir, su código debe ser lo más corto posible.
Reglas / requisitos
- Cada presentación debe ser un programa completo o una función. Si es una función, debe ser ejecutable solo necesitando agregar la llamada a la función al final del programa. Se debe incluir cualquier otra cosa (por ejemplo, encabezados en C).
- Si es posible, proporcione un enlace a un sitio donde se pueda probar su programa.
- Su programa no debe escribirle nada
STDERR
.
- Las lagunas estándar están prohibidas.
- Su programa puede generar resultados en cualquier caso, pero debe imprimirse (no una matriz ni similar)
Puntuación
Los programas se puntúan según los bytes, en UTF-8 de forma predeterminada o en un conjunto de caracteres diferente de su elección.
Eventualmente, la respuesta con la menor cantidad de bytes ganará.
Envíos
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Tabla de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
/* 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
, debemos incluirstdio.h
, siisalpha
se usa,ctype.h
se necesita, etc. ¿Es esto correcto?Respuestas:
05AB1E ,
65 bytesGracias a Downgoat por guardar 1 byte. Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
v
comando consume un valor, iterando sobre él. En este caso, consume el alfabeto, por lo que itera 26 veces. Esa es también la cantidad exacta de veces que necesitamos iterar la=À
función. Las=
hojas de la pila intacto y elÀ
sólo gira la parte superior del elemento de la pila 1 a la izquierda. ¿Responde esto a tu pregunta? :)Vim,
2523 bytes¿Dónde
↵
está la tecla de retorno?EDITAR : minúsculas está bien, así que puedo guardar dos claves.
fuente
:h<_<cr>jjY
es genialV~
Python 2,
595753 bytes¡Gracias a @xsot por -4 bytes!
fuente
print bytearray(a)
./// , 220 bytes
Pruébalo en línea!
Esto fue sorprendentemente no trivial y no tengo idea de si es óptimo.
La única forma de jugar un problema como este en /// es extrayendo subcadenas comunes.( Resulta que estaba equivocado ) . Sin embargo, debido a la naturaleza de la salida, no está claro qué subcadenas deberían extraerse mejor, ya que no se puede extraer todo el alfabeto debido a los saltos de línea. Por lo tanto, deberá extraer algunas subcadenas del alfabeto envuelto, pero luego hay compensaciones en términos de cuánto tiempo hace las subcadenas y cuáles elige.Así que esto es lo que hice. Este es un script CJam que encuentra todas las subcadenas hasta una longitud de 25 en la cadena dada y para cada una de ellas calcula cuántos bytes ahorraría su extracción. Básicamente, si hay
N
copias de unaM
subcadena de longitud , guardaría(N-1)*(M-1) - 5
subcadenas, estas subcadenas no contienen barras inclinadas. Además, técnicamente, cuando ya ha extraído 8 subcadenas más o menos, el desplazamiento constante al final se reduce a-4
, pero el script no lo considera.De todos modos, esto es lo que hice con el script:
/x/ABC/
al código dondex
está la letra elegida yABC
es la subcadena.Al final, ahorramos unos pocos bytes más al reemplazar el resultado
//
con|
y anteponer/|/\/\//
(es por eso que extraer subcadenas solo cuesta 4 en lugar de 5 bytes después de la octava subcadena más o menos).Como dije, no tengo idea de si esto es óptimo y encuentro el resultado de aspecto bastante irregular bastante interesante. Es posible llegar a una solución más corta eligiendo subcadenas no óptimas (pero más) en algún punto de la línea. Me pregunto cuál es la clase de complejidad de este problema ...
fuente
YX
en la salida. ;)C, 47 bytes
Pruébalo en Ideone
Un solo bucle, imprimiendo el alfabeto cada 26 caracteres pero con cada 27 caracteres reemplazados por una nueva línea.
fuente
f(i)
luego simplemente llamarf()
sin ningún argumento.i=702;f(){for(;i--;)//...
J, 15 bytes
Intérprete en línea .
fuente
|. (Shift)
es 8 bytes más largo!(i.26)(|."0 _)u:65+i.26
u:65+1&|.^:]i.26
ya que los adverbios de poder rastrean resultados anteriores si se les proporciona una lista.|.
es de 17 bytes:u:65+|."0 1/~i.26
(todavía usando/~
)u:65+(|./~,.)i.26
.,.
Eliminé el rango usando un gancho y para columnizar el rango, pero terminó en la misma longitud./// , 128 bytes
Pruébalo en línea!
Inspirado por la sorprendente respuesta de Jakube al desafío L-phabet, pensé que también probaría mi suerte en la programación real en /// en lugar de solo usarlo para la compresión. Esto fue bastante complicado y necesitaba cuatro intentos, pero al final salió mucho más corto que mi solución basada en compresión .
Explicación
Una introducción rápida en ///: básicamente el intérprete solo lee el código carácter por carácter y hace lo siguiente:
\
ni a/
, imprímalo.\
, imprime el siguiente personaje./
, analiza una/x/y/
instrucción (con las mismas reglas de escape) y sustituye repetidamente todox
el código restante cony
.Tomando un poco más de inspiración de Jakube, por simplicidad solo explicaré una versión 4x4 de esto:
Comenzamos reemplazando aquellos
:
con las cosas entre el segundo y el tercero/
. Esto terminará siendo el código que rota las filas subsiguientes. Obtenemos esto:Los
f
,b
yx
son solo shorthands para cadenas comunes, que expandiremos ahora. Elf
es para barras inclinadas,b
es para barras diagonales inversas yx
es para lo\//
que resulta bastante. La razón por la que estoy usando alias para las subcadenas de un solo carácter/
y\
es que tendrían que escapar en la primera instrucción de sustitución, por lo que en realidad estoy ahorrando muchos bytes al no necesitar todas esas barras invertidas. Esto es lo que obtenemos despuésx
,f
yb
se han rellenado:Muy legible
Entonces, la primera línea se imprime textualmente. Luego llegamos a la parte funky que gira todas las filas adicionales. En realidad consta de cuatro instrucciones diferentes. Una cosa a tener en cuenta es que he escapado de todas las ocurrencias
A
dentro de estas instrucciones. La razón de esto es que me permite distinguirA
s dentro de las instrucciones deA
s en las filas restantes, que deben procesarse de manera diferente.Esto coincide
/A
y lo reemplaza con/
, eliminando elA
. Tenga en cuenta que esta subcadena solo aparece en la parte frontal de cada unaABCD
, por lo que se elimina el primer carácter de todas las líneas posteriores:Esto coincide con un salto de línea seguido de una barra diagonal y lo reemplaza por
A_/
. Entonces esto inserta unA
al final de cada línea, completando la rotación y también convierte el salto de línea en un guión bajo.Esto coincide
_/
y lo reemplaza con un salto de línea seguido de una barra diagonal. La razón por la que necesito hacer este desvío a través del guión bajo es el hecho de que /// aplica cada instrucción repetidamente hasta que la cadena ya no coincida. Eso significa que nunca puede usar una instrucción de la forma/x/axb/
dondex
,a
yb
son cadenas arbitrarias, porque después de la sustituciónx
siempre coincidirá. En particular, esto significa que no podemos simplemente insertar algo delante de un salto de línea. Necesitamos reemplazar el salto de línea en el proceso y deshacer este reemplazo.Esto coincide
\A
y lo reemplaza con\B
, de modo que las instrucciones después de las filas restantes procesan el siguiente carácter. Después de que se hayan procesado las cuatro instrucciones, la cadena restante se ve así:Entonces, ahora se imprime la primera fila girada, y luego el siguiente conjunto de instrucciones gira las filas restantes por otra celda y así sucesivamente. Después de la última rotación, tenemos algunas instrucciones más que podemos ignorar y luego terminamos con la instrucción incompleta:
Las instrucciones incompletas al final simplemente se ignoran y el programa finaliza.
fuente
A->B
,B->C
... Pero no funcionó del todo. Quitar el primer carácter y agregarlo al final es definitivamente un enfoque mucho mejor.Jalea , 7 bytes
Pruébalo en línea!
Cómo funciona
fuente
Emacs, 47 bytes
Dónde
^P
significa "Control P", etc. Eso es 47 bytes, ya que las teclas F3 y F4 requieren dos bytes ASCII.Después de ingresar la entrada inicial, define una macro de teclado para duplicar la línea y mover el primer carácter al final. Luego ejecuta la macro otras 24 veces.
fuente
JavaScript (ES6), 56 bytes
Sí, es cierto, la mitad de mi código es el literal de la cadena del alfabeto. Lo mejor que podría hacer sin el literal es 81 bytes:
Si desea un programa en lugar de una función, elimine
_=>
y envuelvaconsole.log()
por un costo de 10 bytes.fuente
/./g
coincide con cada letra de la cadena del alfabeto suministrada. En la cadena de reemplazo,$&
representa la coincidencia misma,$'
la parte de la cadena después de la coincidencia y$`
la parte de la cadena antes de la coincidencia.$`$&$'
por lo tanto, representaría la cadena original, pero, por supuesto, es trivial mover la parte después del partido al comienzo, proporcionando así el efecto de rotación.Mathematica
6861 bytesGracias a...
@MartinEnder (7 bytes)
fuente
Array
podría ser más corto que el mapeo sobre aRange
.Array
hecho guarda un byte, pero luego puedes guardar otro evitandoColumn
:Array[{"A"~CharacterRange~"Z"~RotateLeft~#,"\n"}&,26,0]<>""
(solo tendrás que reemplazarlo\n
con un salto de línea real).Print@@@NestList[RotateLeft,"A"~CharacterRange~"Z",25]
Grid@Array[FromCharacterCode[Mod[+##-2,26]+65]&,{26,26}]
Python 2,
75656158 bytesObtiene el alfabeto con
map(chr,range(65,91))
, luego aplica manualmente la operación de cambio de cadena.¡Gracias a @LeakyNun y @TheBikingViking por -4 bytes!
¡Gracias a @xnor por -3 bytes!
fuente
a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
es más corto.a[1:]
lugar dea[1:26]
.for x in s:print s;s=s[1:]+x
.s='%c'*26%tuple(range(65,91))
.C,
8864 bytesLlamar
f()
sin argumentos.Pruébalo con ideone .
fuente
Piet , 247 bytes / 190 codeles
Pruébalo en línea!
Entonces, esto tomó mucho más tiempo de lo que había anticipado, y tengo algunas ideas sobre otros enfoques más eficientes (más aptos para la pila), pero finalmente conseguí que funcionara el problema (y solucioné un error de interpretación y agregué características IDE a lo largo del proceso). manera), así que aquí está. Apenas el lenguaje más eficiente en bytes, pero muy divertido. Aquí hay una vista más grande y un rastro que muestra el camino tomado. Historia en mi GitHub .
Como lenguaje basado en la pila, es demasiado complicado explicarlo brevemente, pero aquí hay una descripción básica de lo que hacen las diferentes secciones / bucles. Todos los nombres de variables y funciones son solo para explicación, ya que no hay variables o funciones en Piet.
line_counter
en 27, carga '@' comocur_letter
, se estableceletter_count
en 27letter_counter
reset_line
cero (bloque cian claro de 2 bloques)cur_letter
a la cima de la pilacheck_done
ifcur_letter > 'X'
(verde azulado / bloque rojo, lado derecho)cur_letter
y genera (esquina inferior derecha)reset_letter
ifcur_letter > 'Y'
(bloque verde claro, izquierda)reset_line
rama (gran cuadrado rosa):letter_count
a 27check_done
rama (mitad derecha dentro)line_counter
hacia arribaline_counter
y regresa al fondo de la pilareset_line
rama (lado izquierdo, bloque verde):cur_letter
a '@'fuente
MATL , 8 bytes
Gracias a @Dennis , quien sugirió que MATL debería incorporar indexación modular, y a @Suever , quien tuvo la idea de operaciones automáticas por pares.
Pruébalo en línea!
fuente
Javascript,
113969176 bytesUna versión súper corta para ejecutar en la consola:
Javascript / HTML,
140123118105 bytesUna versión más bonita, con una salida HTML que facilita que OP copie y pegue:
(EDITAR: debería haber usado la cadena AZ en lugar de generarla)
(EDITAR 2: Gracias a @Neil y @DanTheMan por sus comentarios (ver comentarios))
fuente
l.slice(0,1)
es justol[0]
, mientras que,27
es innecesario, en cuyo punto puede mover el corte y terminar conl.slice(1)+l[0]
. También creo que puede mover elconsole.log
cuerpo del bucle para evitar el arrastre;
.console.log
.PowerShell, 44 bytes
fuente
R,
474241 bytesPruébalo en línea!
Genera 27 alfabetas, elimina las letras 27 e imprime en 26 columnas.
Mejora inspirada en la solución de @Giuseppe .
fuente
rep
pero esto fue particularmente inspirado! Muy agradable. Votaría de nuevo si pudiera.1
lugar de""
parastdout
.Sesos ,
2725 bytesPruébalo en línea! Verifique la depuración para ver el código SBIN generado. †
Asamblea Sesos
El archivo binario anterior se ha generado al ensamblar el siguiente código SASM.
Cómo funciona
Comenzamos inicializando la cinta a
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Esto es lo siguiente.Escriba 26 en una celda, dejando la cinta en el siguiente estado.
Siempre que la celda debajo del encabezado de datos no sea cero, hacemos lo siguiente.
Copiar el número a las dos celdas a la izquierda y añadir 64 a la copia más a la izquierda.
Mueva la copia más a la izquierda a la ubicación original, luego reste 1 de la copia más a la derecha.
El proceso se detiene después de 26 iteraciones, ya que la copia más a la derecha es 0 para entonces. Movimos una celda a la derecha, por lo que el estado final de la cinta después de la inicialización es el siguiente.
Ahora estamos listos para generar la salida, repitiendo el siguiente proceso hasta que la celda debajo del encabezado de datos sea cero.
Primero, imprimimos el carácter debajo del encabezado de datos y nos movemos hacia la derecha, repitiendo este paso hasta encontrar una celda con valor 0 . Después de imprimir
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, la cinta se ve de la siguiente manera.Ahora movemos el cabezal de datos 27 unidades hacia la izquierda (de vuelta al 0 inicial ) y repetimos la combinación de impresión-movimiento hasta que se encuentre una celda con valor 0 . Esto no imprime nada y deja la cinta de la siguiente manera.
Ahora, escribimos 10 en la celda actual, imprimimos el carácter correspondiente (salto de línea) y ponemos a cero la celda con una llamada a una
get
entrada vacía, dejando la cinta sin cambios.Después, movemos el contenido de la celda a la derecha a la celda actual, luego movemos el cabezal de datos a las unidades a la derecha.
La siguiente iteración es ligeramente diferente. Se imprime el primer paso de impresión
BCDEFGHIJKLMNOPQRSTUVWXYZ
, dejando la cinta de la siguiente manera.Ahora movemos el cabezal de datos 27 unidades hacia la izquierda.
El siguiente ciclo de impresión imprime
A
y deja la cinta de la siguiente manera.Una vez más, imprimimos un salto de línea, movemos el contenido de la celda a la derecha a la celda actual, luego movemos el cabezal de datos a las unidades a la derecha.
Después de 24 iteraciones más, el paso final de mover el cabezal de datos a la derecha deja la cinta en el siguiente estado.
La celda debajo del encabezado de datos ahora es 0 y el programa termina.
† TIO utiliza una versión más reciente de Sesos, que es compatible con versiones anteriores para SASM, pero genera un código SBIN más corto.
fuente
Haskell,
565352 Bytesmisma longitud: (utilizando una sugerencia de @AndersKaseorg)
para hacer cosas modulares, debe importar Data.Char para obtener la función chr,
745958 Bytes fue lo mejor que pude obtener con eso: (gracias a @nimi por sugerir la función toEnum)Esto probablemente podría ser mucho más corto, pero no conozco ningún truco de golf de Haskell.
usó mapM en lugar de mapM_ (vea el comentario de @ Lynn)
fuente
['A'..x]
a['A'..'Z']
, que ahora se usa dos veces, y eleve eso a una definición.chr
deData.Char
, puede usartoEnum
en su lugar y omitir elimport
.mapM_
amapM
debería estar bien. Tal vez esto valga una meta publicación ...R, 53 bytes
Aquí está en un intérprete en línea .
fuente
Retina,
3631 bytes5 bytes gracias a Martin Ender.
El avance de línea principal es significativo.
Pruébalo en línea!
Créditos .
fuente
Brain-Flak , 222 bytes
Pruébalo en línea!
Soy nuevo en Brain-Flak, así que tal vez esto se pueda jugar mucho, pero al menos es un primer intento. Almacena 27 alfabetos completos en la pila izquierda, luego mueve los alfabetos hacia la derecha y reemplaza cada letra 27 por una nueva línea.
Mi código fuente es un poco confuso, pero lo agregaré de todos modos.
fuente
V ,
36, 10 bytesPruébalo en línea!
Esto usa la codificación "Latin1".
Explicación:
fuente
C #, 98 bytes
He tratado de ver si puedo generar las letras más cortas que solo inicializarlas como una cadena, pero en realidad no es posible. Las letras son de 26 bytes y este fragmento solo
es de 25 bytes. Creo que inicializarlos y luego agregarlos con a + = a es una buena solución, pero con C # está limitado por el recuento de funciones como
Substring()
yConsole.WriteLine()
.Mi intento en 98 bytes:
fuente
Octava, 27 bytes
Estamos agregando una fila y un vector de columna, y Octave expande muy bien las dimensiones del esqueleto, no es necesario
bsxfun
(como lo haría en Matlab).fuente
q, 20 bytes
fuente
-1_'26 27#.Q.A
Java,
190176172163 bytesfuente
System.out.printf("%c", ...)
->System.out.write(...)
,'\n'
->10
,'A'
->65
. Tenga en cuenta que la sugerencia de caracteres de salto de línea / línea nueva está permitida, pero es un requisito de salida ideone . :)String[]a
se puede quitar; yint s=0;while(s<26){p(s,26);p(0,s++);p(-1,0);}
puede serfor(int s=0;s<26;p(0,s++),p(0,s++))p(s,26);
.Bash, 66 bytes
Creo un alfabeto completo
A
, luego imprimo 26 versiones rotadas tomando los caracteres que comienzan enn
y agregando las posiciones anterioresn
.fuente
Perl, 42 bytes
Crédito total a @Dom Hastings por esto.
O (mismo recuento de bytes):
Necesita
-M5.010
o-E
ejecutarse, por ejemplo:Mi vieja respuesta (55 bytes):
Necesito
-M5.010
correr. Entonces corre con:Sin embargo, probablemente sea posible hacerlo más corto, pero no descubrí cómo ... todavía
fuente
@l=A..Z;say@l[$_..25],@l[0..$_-1]for 0..25
y$_=join"",A..Z;eval'say;/./;$_=$\'.$&;'x26
ambas requieren-E
/-M5.010
.