Inspirowany przez George'a Gibsona Print a Tabula Recta .
Masz wydrukować / wydrukować ten dokładny tekst:
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
(Tak, wpisałem to ręcznie)
Możesz używać wszystkich małych liter zamiast wszystkich wielkich liter.
Jednak wybór wielkości liter musi być spójny w całym tekście.
Zasady / wymagania
- Każde zgłoszenie powinno być pełnym programem lub funkcją. Jeśli jest to funkcja, musi być uruchomiona, wystarczy dodać wywołanie funkcji na dole programu. Wszystko inne (np. Nagłówki w C) musi zostać uwzględnione.
- Jeśli to możliwe, podaj link do strony, na której można przetestować Twój program.
- Twój program nie może nic pisać
STDERR
.
- Standardowe luki są zabronione.
- Twój program może wysyłać dane w każdym przypadku, ale musi zostać wydrukowany (nie tablica lub podobny).
Punktacja
Programy są oceniane według bajtów, domyślnie w UTF-8 lub według innego zestawu znaków.
W końcu wygra odpowiedź z najmniejszą liczbą bajtów.
Zgłoszenia
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Tabela liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
/* 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>
Odpowiedzi:
Excel, 19 604 bajtów
Wklej tę formułę
A1
, a następnie przeciągnijA1:Z26
.Liczba bajtów:
źródło
A1:Z26
w polu Nazwa (po lewej stronie paska formuły) [ 7 bajtów]; (2) wpisz=CHAR(64+MAX(COLUMN(),ROW()))
+ enter na pasku formuły [ 30 bajtów]; (3) wpisz,Alt E I D Alt E I R
aby wypełnić wybrany zakres [ 8 bajtów]. Razem 7 + 30 + 8 = 45 .[A1:Z26]="=CHAR(64+MAX(COLUMN(),ROW()))"
ma 40 bajtów i jest nadal eleganckiVim, 43 bajty
Tutaj
↵
reprezentuje Return (0x0a
) i♥
Ctrl-R (0x12
).Nie tak krótkie, jak moja Tabula Recta, ale…
źródło
h<_↵
prowadzi mnie do:help at_t
v_b_<_example
w Vim 7.4 dla Cygwina.Galaretka, 6 bajtów
Wypróbuj tutaj. Gdybym tylko nie był wczoraj leniwy i wdrożył tę jednobajtową alternatywę dla
j⁷
(dołącz przez nowe linie)…źródło
Y
.Y
post datuje wyzwaniepieprzenie mózgu,
10396959187 bajtówUżywa stałej mózgowej Esolangsa dla 64 . Wypróbuj online!
źródło
/// ,
141949282 bajtówWypróbuj online: demonstracja
Całkiem fajny język.
Wyjaśnienie:
Skróć kod, aby wydrukować tylko kwadrat 4x4:
Pierwszy zamiennik
/:/\\\\A/
zastępuje:
się\\A
. To daje:Następnie
/#/\\Ab\\Ac\\Ad\\A//\\A/
zastępuje#
się\Ab\Ac\Ad\A
:Teraz
/\\A/\/a\Ab\Ac\Ad\A<newline>\/a\//
zamienia każdy\A
w kolejnym kodzie na/aAbAcAdA<newline>/a/
, więc powoduje to:Teraz pierwsza część
/A//
usuwa wszystkieA
s.Pierwsze pięć znaków
abcd<newline>
zostanie wydrukowanych. Kolejna komenda/a/b/
zastępujea
przezb
, w wyniku:Znów
bbcd<newline>
drukowanych jest pierwszych pięć znaków . Kolejna komenda/b/c/
zastępujeb
przezc
:Znów
cccd<newline>
drukowanych jest pierwszych pięć znaków . Kolejna komenda/c/d/
zastępujec
przezd
:Pierwsze pięć znaków
dddd<newline>
zostanie wydrukowanych. Następne polecenie/d/
jest niepełne i dlatego nic nie robi.źródło
Dyalog APL , 11 bajtów
A[
...]
wybieraj elementy z wielkich liter zgodnie∘.⌈⍨
z maksymalną tabelą⍳26
pierwszych 26 liczb całkowitychWypróbuj APL online!
źródło
Mathematica,
696557 bajtówZapisano 8 bajtów dzięki @MartinEnder .
Funkcja anonimowa. Nie pobiera danych wejściowych i zwraca ciąg wyjściowy. Zasadniczo wystarczy
char('A' + max(x, y))
dla wszystkich x , y od 1 do 26.źródło
/// , 348 bajtów
Wypróbuj online!
Użyłem tej samej techniki, aby to zbudować, jak dla mojej /// odpowiedzi na wyzwanie, na którym było oparte . Musiałem jednak naprawić skrypt CJam, ponieważ nie obsługiwał on poprawnie podciągów, które mogą się nakładać.
źródło
Siatkówka , 41 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1. Wiodące podawanie linii jest znaczące.
Wyjaśnienie
Ustaw ciąg na 26 kopii
Z
. Następnie{...}
poinstruuj Retinę, aby wykonała pozostałe dwie instrukcje w pętli, aż łańcuch przestanie się zmieniać.Duplikuj pierwszą linię, jeśli nie zaczyna się od
A
.To jest etap transliteracji. Jest stosowany tylko wtedy, gdy ciąg zaczyna się od co najmniej dwóch kopii tego samego znaku. Jeśli tak, wszystkie z nich są pomniejszane. Zmniejszanie odbywa się poprzez odwzorowanie
L
(wielkie litery) na_L
(puste, po których następuje wielkie litery). „Wszystkie oprócz ostatnich” jest wskazane przez limit,-2
który mówi Retinie tylko o transliteracji wszystkich znaków do końca meczu.Wypróbuj online!
źródło
Haskell, 35 bajtów
źródło
Python 2, 59 bajtów
Przetestuj na Ideone .
źródło
R, 58 bajtów
Dzięki pierwszeństwu operatora
2:i-1
jest równoważne z1:(i-1)
. Używa wbudowanej stałej,LETTERS
która zawiera wielkie litery alfabetu. Wszystko inne jest raczej oczywiste.Stosowanie:
źródło
Sesos , 25 bajtów
Wypróbuj online! Zaznacz opcję Debuguj, aby zobaczyć wygenerowany kod SBIN.
Montaż Sesos
Powyższy plik binarny został wygenerowany przez skompletowanie następującego kodu SASM.
Jak to działa
Zaczynamy od inicjalizacji taśmy
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Jest to następujące.Napisz 26 do komórki, pozostawiając taśmę w następującym stanie.
Dopóki komórka pod głowicą danych jest niezerowa, wykonujemy następujące czynności.
Skopiuj liczbę do dwóch komórek po lewej stronie i dodaj 64 do kopii najbardziej po lewej stronie.
Przenieś kopię po lewej stronie do oryginalnej lokalizacji, a następnie odejmij 1 od kopii po prawej stronie.
Proces zatrzymuje się po 26 iteracjach, ponieważ prawostronna kopia wynosi do tego czasu 0 . Przesuwamy komórkę w prawo, więc końcowy stan taśmy po inicjalizacji jest następujący.
Teraz jesteśmy gotowi wygenerować wynik, powtarzając następujący proces, aż komórka pod głowicą danych wyniesie zero.
Najpierw przenosimy zawartość komórki pod głowicą danych o jedną jednostkę w lewo, a następnie przesuwamy w lewo, aż do ostatniej komórki z niezerową zawartością.
Teraz drukujemy wszystkie komórki, zaczynając od tej pod głowicą danych i przesuwając się w prawo, aż znajdziemy komórkę 0 , zwiększając każdą drukowaną komórkę po wydrukowaniu. Po wydrukowaniu
A
taśma wygląda następująco.Teraz ruszamy w prawo, ponownie drukując wszystkie komórki, aż napotkamy komórkę 0 . Po wydrukowaniu
BCDEFGHIJKLMNOPQRSTUVWXYZ
taśma wygląda następująco.Teraz piszemy 10 do bieżącej komórki, wypisujemy odpowiedni znak (wysuw linii) i zerujemy komórkę z wywołaniem do
get
pustego wejścia, pozostawiając niezmienioną taśmę.Na koniec przechodzimy do ostatniego niezerowego w lewo, przygotowując taśmę do następnej iteracji.
Kolejna iteracja jest podobna. Najpierw przesuwamy 66 jedną komórkę w lewo, drukujemy obie 66 komórek (
BB
) i zwiększamy je do 67 , następnie drukujemy pozostałe niezerowe komórki w prawo (CDEFGHIJKLMNOPQRSTUVWXYZ
), a na końcu umieszczamy głowicę danych na 67 , pozostawiając taśmę w następujący sposób .Po kolejnych 24 iteracjach oraz po wydrukowaniu
ZZZZZZZZZZZZZZZZZZZZZZZZZZ
i wysunięciu linii taśmy pozostają w następującym stanie.Przesunięcie głowicy danych w lewo do następnej niezerowej komórki spowoduje pozostawienie jej w bieżącej pozycji, więc komórka pod nią ma wartość 0 i pętla kończy się.
źródło
J, 13 bajtów
Tłumacz online .
Wyjaśnienie
źródło
Matlab / Octave,
4339 bajtów1 bajt usunięty dzięki pomysłowi @ beaker,
[...,'']
aby użyć do konwersji na char.Jest to anonimowa funkcja zwracająca tablicę znaków 2D.
Wypróbuj na Ideone .
Wyjaśnienie
gallery('minij',...)
daje macierz, w której każdy wpis jest równy minimum jego indeksów wierszy i kolumn:Jest on obracany o 180 stopni za pomocą
rot90(...,2)
:91-...
Operacja daje kody ASCII wielkimi literami:Wreszcie
[...,'']
łączy się poziomo z pustym łańcuchem. To powoduje konwersję do char.źródło
gallery
gallery('maxij',...)
, nie ? ;)PowerShell v2 +,
765240 bajtówPętle od
65
do89
. W każdej iteracji tworzymy tablicę za pomocą operatora przecinku, który składa się z bieżącej liczby$_
pomnożonej przez zmienną pomocniczą po zwiększeniu$i++
, połączoną z tablicą bieżącej liczby$_
do90
. Jest to otoczone rzutowaniem tablicy-join
znaków i połączone razem w ciąg. Na przykład dla pierwszej iteracji ta tablica byłaby równoważna65..90
lub całemu alfabetowi. Druga iteracja byłaby66+66..90
lub cały alfabet zB
powtórzeniem i nieA
.Wszystkie są pozostawione w potoku na końcu programu (jako tablica), a drukowanie na konsoli jest niejawne (domyślna
.ToString()
tablica jest oddzielona znakiem nowej linii, więc otrzymujemy to za darmo).źródło
C #, 147 bajtów
czasami zastanawiam się, dlaczego nawet próbuję
edycja: naprawiono
Wypróbuj online
źródło
MATL, 10 bajtów
Demo online (jeśli masz problemy z tym tłumaczem, wyślij mi ping na czacie MATL . Oto link do TIO na wypadek problemów)
Wyjaśnienie
źródło
Python 2,
767068 bajtówBardzo podobny do mojej odpowiedzi na powiązane pytanie .
Zaoszczędzono 2 bajty dzięki @xnor (ponownie)!
źródło
exec
sięfor
do korzystania obecny charakter ich powtórzyć w ciągu:for c in a:a[:i]=[c]*i;i+=1;print'%c'*26%tuple(a)
.Oktawa, 26 bajtów
Próbka uruchomiona na ideone .
źródło
[...,'']
sztuczce05AB1E , 9 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
JavaScript ES6, 81 bajtów
Nie wymaga wyjaśnień.
źródło
replace
z niegomap
podczas iteracji po łańcuchach char-by-char.a.slice(y)
którym ma zmiennaa
pochodzi?R, 56 bajtów
Nie mam za co komentować, ale odpowiedź na @plannapus można nieco pograć w golfa, aby:
co daje tę samą wydajność:
Chociaż, jeśli dozwolona jest odpowiedź jako macierz ( tj. Jak tutaj ), moglibyśmy zrobić 49 bajtów:
źródło
R ,
4241 bajtówWypróbuj online!
Obok najkrótsza R odpowiedź jest wciąż nieco zbyt długo, ponieważ wypisuje wiersz po wierszu. Zastanawiałem się dziś nad innym pytaniem i zdałem sobie sprawę, że możliwe jest znacznie krótsze podejście: generuję macierz naraz za pomocą
outer
ipmax
(maksimum równoległe), a następnie drukuję ją (*) w jednym kroku za pomocąwrite
.(*) technicznie rzecz biorąc, jest transponowany, ale na szczęście jest symetryczny na przekątnej.
źródło
Haskell,
5346 bajtówZwraca pojedynczy ciąg z alfabetem L.
przejrzyj znaki
i
odA
doZ
i zrób listę(length ['B'..i])
kopii,i
po których następuje[i..'Z']
. Łącz elementy z nowymi liniami pośrednimi.źródło
Python 3,
7165 bajtówDzięki @LeakyNun za -6 bajtów
Pełny program, który drukuje do STDOUT.
Jak to działa
Przypisujemy kody znaków do liter alfabetu, od
0
forA
do25
forZ
. Program zapętla się w przedziale[0, 25]
z licznikiem liniii
, który określa bieżący znak, który ma zostać powtórzony, długość powtarzanej sekcji oraz indeks znakówx
. Po wywołaniumax(i,x)
wszystkie znaki poniżej powtarzanego znaku są przymocowane do tego samego kodu. Dodanie65
i wywołaniechr
konwertuje wynikowe kody znaków na ich odpowiedniki ASCII;''.join
łączy znaki i każda linia jest drukowana do STDOUT.Wypróbuj na Ideone
źródło
𝔼𝕊𝕄𝕚𝕟, 12 znaków / 15 bajtów
Try it here (Chrome Canary only).
Zasadniczo port mojej odpowiedzi ES6.
źródło
ZZZZZZZZZZZZZZZ...
do dolnej linii. Tylko jedenZ
.R, 54 bajty
v=L=LETTERS;for(i in 2:26){L[1:i]=L[i];v=cbind(v,L)};v
To rozwiązanie wykorzystuje wbudowaną stałą R
LETTERS
, która ... no cóż ... wymienia wielkie litery. Istnieje również stałaletters
dla małych liter.źródło
C,
787067 bajtówKod korzysta z następujących technik gry w golfa dla C:
stdio.h
)int
65
zamiast'A'
)putchar
do wyświetlania pojedynczego znakuputs("")
do wyświetlania nowej liniiPonadto reguła
If it is a function, it must be runnable by only needing to add the function call to the bottom of the program.
nie zabrania wywoływania funkcji z parametrami (dzięki ABcDexter!).Wypróbuj na Ideone
Wersja bez golfa (bez ostrzeżeń z gcc) wyglądałaby tak:
źródło
f(i,j){for(i=0;++i<27;puts(""))for(j=0;++j<27;putchar((i>j?i:j)+64));}
. Nie potrzebujesz pełnego programu, tylko funkcję, która wykonuje te same operacje za każdym razem, gdy jest wywoływana (co robi).i=0;
i wykonać wywołanie funkcji jakof(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.
nie wydaje się tego zabraniać, ponieważ nie mówi, że parametry wywołania funkcji są dozwolone). I tak pozwalam namain
wywołanief(0)
, ponieważ inicjalizacja drugiej pętli for (tej zj
licznikiem as) jest jednak konieczna.Cheddar, 90 bajtów
To
String.letters
za długo: /Musiałem dodać,
.slice(1)
ponieważ wiodący nowy wiersz jest niedozwolonyWyjaśnienie
Cheddar, 65 bajtów (niekonkurencyjny)
Współpracuje z nocnym oddziałem . Niekonkurencyjne ... smutne jest to, że już miałem zmiany ... po prostu nigdy się nie zobowiązałem; _;
źródło
65@"90
działa dla String.letters