Inspirado por Print a Tabula Recta de George Gibson .
Você deve imprimir / imprimir este texto exato:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
BBCDEFGHIJKLMNOPQRSTUVWXYZ
CCCDEFGHIJKLMNOPQRSTUVWXYZ
DDDDEFGHIJKLMNOPQRSTUVWXYZ
EEEEEFGHIJKLMNOPQRSTUVWXYZ
FFFFFFGHIJKLMNOPQRSTUVWXYZ
GGGGGGGHIJKLMNOPQRSTUVWXYZ
HHHHHHHHIJKLMNOPQRSTUVWXYZ
IIIIIIIIIJKLMNOPQRSTUVWXYZ
JJJJJJJJJJKLMNOPQRSTUVWXYZ
KKKKKKKKKKKLMNOPQRSTUVWXYZ
LLLLLLLLLLLLMNOPQRSTUVWXYZ
MMMMMMMMMMMMMNOPQRSTUVWXYZ
NNNNNNNNNNNNNNOPQRSTUVWXYZ
OOOOOOOOOOOOOOOPQRSTUVWXYZ
PPPPPPPPPPPPPPPPQRSTUVWXYZ
QQQQQQQQQQQQQQQQQRSTUVWXYZ
RRRRRRRRRRRRRRRRRRSTUVWXYZ
SSSSSSSSSSSSSSSSSSSTUVWXYZ
TTTTTTTTTTTTTTTTTTTTUVWXYZ
UUUUUUUUUUUUUUUUUUUUUVWXYZ
VVVVVVVVVVVVVVVVVVVVVVWXYZ
WWWWWWWWWWWWWWWWWWWWWWWXYZ
XXXXXXXXXXXXXXXXXXXXXXXXYZ
YYYYYYYYYYYYYYYYYYYYYYYYYZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZ
(Sim, eu digitei isso manualmente)
Você tem permissão para usar todas as letras minúsculas em vez de todas as maiúsculas.
No entanto, sua escolha de caso deve ser consistente em todo o texto.
Regras / Requisitos
- Cada envio deve ser um programa ou função completo. Se for uma função, deve ser executável, bastando adicionar a chamada de função na parte inferior do programa. Qualquer outra coisa (por exemplo, cabeçalhos em C) deve ser incluída.
- Se possível, forneça um link para um site onde seu programa possa ser testado.
- Seu programa não deve escrever nada para
STDERR
.
- As brechas padrão são proibidas.
- Seu programa pode produzir em qualquer caso, mas deve ser impresso (não uma matriz ou similar).
Pontuação
Os programas são classificados de acordo com os bytes, em UTF-8, por padrão, ou com um conjunto de caracteres diferente de sua escolha.
Eventualmente, a resposta com o mínimo de bytes vencerá.
Submissões
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
/* Configuration */
var QUESTION_ID = 87064; // 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 = 48934; // 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>
Respostas:
Excel, 19.604 bytes
Cole esta fórmula
A1
e arraste-a por todo o ladoA1:Z26
.Contagem de bytes:
fonte
A1:Z26
na caixa de nome (à esquerda da barra de fórmulas) [ 7 bytes]; (2) digite=CHAR(64+MAX(COLUMN(),ROW()))
+ enter na barra de fórmulas [ 30 bytes]; (3) digiteAlt E I D Alt E I R
para preencher o intervalo selecionado [ 8 bytes]. Total 7 + 30 + 8 = 45 .[A1:Z26]="=CHAR(64+MAX(COLUMN(),ROW()))"
é de 40 bytes e ainda é eleganteVim, 43 bytes
Aqui
↵
representa Return (0x0a
) e♥
representa Ctrl-R (0x12
).Não é tão curto quanto a minha resposta do Tabula Recta, mas…
fonte
h<_↵
isso me leva a:help at_t
v_b_<_example
no Vim 7.4 para Cygwin.Gelatina, 6 bytes
Experimente aqui. Se eu não tivesse sido preguiçoso ontem e implementado essa alternativa de um byte para
j⁷
(ingressar em novas linhas)…fonte
Y
.Y
pós data o desafio emborabrainfuck,
10396959187 bytesIsso usa a constante de troca cerebral de Esolangs por 64 . Experimente online!
fonte
/// ,
141949282 bytesExperimente online: Demonstração
Uma linguagem bastante divertida.
Explicação:
Reduza o código para imprimir apenas um quadrado 4x4:
A primeira substituição
/:/\\\\A/
substitui:
por\\A
. Isto dá:Em seguida,
/#/\\Ab\\Ac\\Ad\\A//\\A/
substitui#
por\Ab\Ac\Ad\A
:Agora
/\\A/\/a\Ab\Ac\Ad\A<newline>\/a\//
substitui cada um\A
no código subsequente por/aAbAcAdA<newline>/a/
, portanto, isso resulta em:Agora a primeira parte
/A//
remove todos osA
s.Os cinco primeiros caracteres
abcd<newline>
são impressos. O próximo comando/a/b/
substituia
porb
, resultando em:Novamente, os cinco primeiros caracteres
bbcd<newline>
são impressos. O próximo comando/b/c/
substituib
porc
:Novamente, os cinco primeiros caracteres
cccd<newline>
são impressos. O próximo comando/c/d/
substituic
pord
:Os cinco primeiros caracteres
dddd<newline>
são impressos. E o próximo comando/d/
está incompleto e, portanto, não faz nada.fonte
Dyalog APL , 11 bytes
A[
...]
seleciona elementos do alfabeto maiúsculo de acordo com∘.⌈⍨
a tabela máxima dos⍳26
26 primeiros números inteirosTryAPL online!
fonte
Mathematica,
696557 bytesSalvo 8 bytes devido a @MartinEnder .
Função anônima. Não recebe entrada e retorna uma string como saída. Basicamente, leva apenas
char('A' + max(x, y))
para todos os x , y de 1 a 26.fonte
/// , 348 bytes
Experimente online!
Eu usei a mesma técnica para criar isso e para minha /// resposta ao desafio em que ele se baseou . No entanto, tive que corrigir o script CJam porque ele não manipulava corretamente substrings que podem se sobrepor.
fonte
Retina , 41 bytes
A contagem de bytes assume a codificação ISO 8859-1. O avanço de linha principal é significativo.
Explicação
Defina a sequência para 26 cópias de
Z
. Em seguida,{...}
instrua Retina a executar as duas instruções restantes em um loop até que a corda pare de mudar.Duplique a primeira linha se ela não começar com um
A
.Este é um estágio de transliteração. É aplicada apenas se a sequência começar com pelo menos duas cópias do mesmo caractere. Nesse caso, todos, exceto o último desses caracteres, são diminuídos. A diminuição ocorre por mapeamento
L
(alfabeto maiúsculo) para_L
(em branco seguido de alfabeto maiúsculo). O "tudo menos o último" é indicado pelo limite-2
que informa ao Retina apenas para transliterar todos os caracteres até o penúltimo na partida.Experimente online!
fonte
Haskell, 35 bytes
fonte
Python 2, 59 bytes
Teste em Ideone .
fonte
R, 58 bytes
Graças à precedência do operador,
2:i-1
é equivalente a1:(i-1)
. Usa a constante internaLETTERS
que contém o alfabeto em maiúsculas. Tudo o resto é bastante auto-explicativo.Uso:
fonte
Sesos , 25 bytes
Experimente online! Marque Debug para ver o código SBIN gerado.
Montagem Sesos
O arquivo binário acima foi gerado montando o seguinte código SASM.
Como funciona
Começamos inicializando a fita para
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Isto é o seguinte.Escreva 26 em uma célula, deixando a fita no seguinte estado.
Desde que a célula sob o cabeçalho de dados seja diferente de zero, fazemos o seguinte.
Copie o número para as duas células à esquerda e adicione 64 à cópia mais à esquerda.
Mova a cópia mais à esquerda para o local original e subtraia 1 da cópia mais à direita.
O processo para após 26 iterações, pois a cópia mais à direita é 0 até então. Movemos uma célula para a direita, para que o estado final da fita após a inicialização seja o seguinte.
Agora estamos prontos para gerar a saída, repetindo o processo a seguir até que a célula sob o cabeçalho de dados seja zero.
Primeiro, movemos o conteúdo da célula sob o cabeçalho de dados uma unidade para a esquerda, depois movemos para a esquerda até a última célula com um conteúdo diferente de zero.
Agora, imprimimos todas as células, começando pela célula sob o cabeçalho de dados e movendo-nos para a direita até encontrarmos uma célula 0 , incrementando cada célula impressa após imprimi-la. Após a impressão
A
, a fita fica da seguinte maneira.Agora vamos para a direita, novamente imprimindo todas as células até encontrar uma célula 0 . Após a impressão
BCDEFGHIJKLMNOPQRSTUVWXYZ
, a fita fica da seguinte maneira.Agora, escrevemos 10 na célula atual, imprimimos o caractere correspondente (avanço de linha) e zeramos a célula com uma chamada para
get
entrada vazia, deixando a fita inalterada.Finalmente, passamos para o último diferente de zero à esquerda, preparando a fita para a próxima iteração.
A próxima iteração é semelhante. Primeiro movemos 66 uma célula para a esquerda, imprimimos as 66 células (
BB
) e aumentamos para 67 , depois imprimimos as células diferentes de zero restantes para a direita (CDEFGHIJKLMNOPQRSTUVWXYZ
) e finalmente colocamos os dados em 67 , deixando a fita da seguinte maneira .Após mais 24 iterações e após a impressão
ZZZZZZZZZZZZZZZZZZZZZZZZZZ
e avanço de linha, as fitas são deixadas no seguinte estado.Mover o cabeçalho de dados para a esquerda para a próxima célula diferente de zero o deixará em sua posição atual; portanto, a célula abaixo dele é 0 e o loop termina.
fonte
J, 13 bytes
Intérprete online .
Explicação
fonte
Matlab / Octave,
4339 bytes1 byte removido graças à idéia de @ beaker de usar
[...,'']
para converter para char.Esta é uma função anônima que retorna uma matriz de caracteres 2D.
Experimente em Ideone .
Explicação
gallery('minij',...)
fornece uma matriz na qual cada entrada é igual ao mínimo de seus índices de linha e coluna:É girado 180 graus com
rot90(...,2)
:A
91-...
operação fornece os códigos ASCII de letras maiúsculas:Finalmente
[...,'']
concatena horizontalmente com uma sequência vazia. Isso tem o efeito de converter para char.fonte
gallery
gallery('maxij',...)
, não é ? ;)PowerShell v2 +,
765240 bytesLoops de
65
para89
. A cada iteração, estamos construindo uma matriz usando o operador de vírgula que consiste no número atual$_
multiplicado pela variável auxiliar pós-incrementada$i++
, concatenada com uma matriz do número atual$_
para90
. Isso é encapsulado em um elenco de conjunto de caracteres e-join
editado em uma sequência. Por exemplo, para a primeira iteração, essa matriz seria equivalente65..90
ou todo o alfabeto. A segunda iteração seria66+66..90
, ou o alfabeto inteiro comB
repetido e nãoA
.Todos eles são deixados no pipeline no final do programa (como uma matriz), e a impressão no console é implícita (o padrão
.ToString()
para uma matriz é separado por nova linha, por isso é gratuito).fonte
C #, 147 bytes
às vezes me pergunto por que estou tentando
edit: fix it
Experimente online
fonte
MATL, 10 bytes
Demonstração on-line (se você tiver problemas com esse intérprete, envie um ping para mim no chat do MATL . Além disso, aqui está o link do TIO, caso você tenha problemas)
Explicação
fonte
Python 2,
767068 bytesMuito parecido com a minha resposta à pergunta vinculada .
Economizou 2 bytes graças a @xnor (novamente)!
fonte
exec
emfor
usar o caráter atual que está sendo iterado:for c in a:a[:i]=[c]*i;i+=1;print'%c'*26%tuple(a)
.Oitava, 26 bytes
Amostra executada em ideone .
fonte
[...,'']
truque05AB1E , 9 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online! .
fonte
Javascript ES6, 81 bytes
Auto-explicativo.
fonte
replace
overmap
quando iterando sobre strings char-by-char.a.slice(y)
onde vem a variávela
?R, 56 bytes
Não tenha o representante para comentar, mas a resposta do @plannapus pode ser um pouco reduzida para:
resultando na mesma saída:
Porém, se a resposta como matriz for permitida ( como aqui ), poderíamos fazer 49 bytes:
fonte
R ,
42bytesExperimente online!
A próxima resposta R mais curta ainda é um pouco longa, pois imprime linha por linha. Eu estava pensando em outra pergunta hoje mais cedo e percebi que era possível uma abordagem muito mais curta para essa: eu gero a matriz de uma só vez usando
outer
epmax
(máximo paralelo) e depois imprimo (*) em uma etapa comwrite
.(*) tecnicamente, sua transposição, mas felizmente simétrica em sua diagonal.
fonte
Haskell,
5346 bytesRetorna uma única string com o alfabeto L.
percorra os caracteres
i
deA
paraZ
e faça uma lista de(length ['B'..i])
cópiasi
seguidas de[i..'Z']
. Junte elementos com novas linhas no meio.fonte
Python 3,
7165 bytesGraças a @LeakyNun por -6 bytes
Um programa completo que imprime em STDOUT.
Como funciona
Nós atribuir códigos de caracteres para as letras do alfabeto, a partir
0
deA
para25
paraZ
. O programa faz um loop no intervalo[0, 25]
com um contador de linhai
, que determina o caractere atual a ser repetido e o comprimento da seção repetida, e um índice de caracteresx
. Ao chamarmax(i,x)
, todos os caracteres abaixo do caractere repetido são fixados no código do mesmo. Adicionar65
e chamarchr
converte os códigos de caracteres resultantes em seus equivalentes ASCII;''.join
concatena os caracteres e cada linha é impressa em STDOUT.Experimente no Ideone
fonte
, 12 caracteres / 15 bytes
Try it here (Chrome Canary only).
Basicamente, uma porta da minha resposta ES6.
fonte
ZZZZZZZZZZZZZZZ...
a linha de fundo. Só conseguindo umZ
.R, 54 bytes
v=L=LETTERS;for(i in 2:26){L[1:i]=L[i];v=cbind(v,L)};v
Esta solução usa a constante interna R
LETTERS
, que ... bem ... lista as letras maiúsculas. Há também a constanteletters
para letras minúsculas.fonte
C,
787067 bytesO código utiliza as seguintes técnicas de golfe para C:
stdio.h
)int
65
vez de'A'
)putchar
para gerar um único caractereputs("")
para gerar uma nova linhaAlém disso, a regra
If it is a function, it must be runnable by only needing to add the function call to the bottom of the program.
não proíbe que a função seja chamada com parâmetros (graças ao ABcDexter!).Experimente no Ideone
Uma versão não gasta (sem nenhum aviso com o gcc) seria assim:
fonte
f(i,j){for(i=0;++i<27;puts(""))for(j=0;++j<27;putchar((i>j?i:j)+64));}
. Você não precisa de um programa completo, apenas de uma função que execute as mesmas operações sempre que for chamada (o que faz).i=0;
e fazer a chamada de função comof(0,0)
?If it is a function, it must be runnable by only needing to add the function call to the bottom of the program.
não parece proibir isso, porque não diz que os parâmetros de tempo para a chamada de função são permitidos). De qualquer forma, deixo que amain
chamada seja feitaf(0)
, porque a inicialização do segundo loop for (aquele comj
o contador) é necessária.Queijo Cheddar, 90 bytes
Isso
String.letters
é muito longo: /Foi necessário adicionar um
.slice(1)
porque a nova linha principal não é permitidaExplicação
Cheddar, 65 bytes (não concorrente)
Trabalha com o ramo noturno . Não competir ... a parte triste é que eu já tive as mudanças ... só nunca cometei; _;
fonte
65@"90
obras para String.letters