Wydrukuj Tabula Recta!
Tabula Recta (czasami nazywana „tabelą Vigenere”) została stworzona przez Johannesa Trithemiusa i została użyta w kilku szyfrach, w tym we wszystkich wariantach szyfru Vigenere Bellaso i szyfru Trithemius. To wygląda tak:
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
Często tego potrzebuję, ale nie mogę go znaleźć w Internecie, aby skopiować i wkleić. Ponieważ kwadratowy stół jest tak długi i zajmuje dużo lat, aby napisać , Twój kod musi być jak najkrótszy.
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 = 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
, musimy uwzględnićstdio.h
, jeśliisalpha
jest używany,ctype.h
jest potrzebny itp. Czy to prawda?Odpowiedzi:
05AB1E ,
65 bajtówDzięki Downgoat za oszczędność 1 bajtu. Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
v
Polecenie zużywa wartość, iterując nad nią. W tym przypadku zużywa alfabet, więc iteruje 26 razy. Dokładnie tyle razy potrzebujemy iteracji tej=À
funkcji. W=
pozostawia nienaruszone stos iÀ
tylko obraca się w górnej części elementu stosu 1 w lewo. Czy to odpowiada na twoje pytanie? :)Vim,
2523 bajtówGdzie
↵
jest klawisz Return.EDYCJA : małe litery są w porządku, więc mogę zapisać dwa klucze.
źródło
:h<_<cr>jjY
jest genialneV~
Python 2,
595753 bajtówDzięki @xsot za -4 bajty!
źródło
print bytearray(a)
./// , 220 bajtów
Wypróbuj online!
Było to zaskakująco nietrywialne i nie mam pojęcia, czy jest optymalne.
Jedynym sposobem na rozwiązanie tego problemu w /// jest wyodrębnienie typowych podciągów.( Okazuje się, że się myliłem. ) Jednak ze względu na charakter wyniku nie jest wcale jasne, które podciągi powinny być najlepiej wyodrębnione, ponieważ nie można wyodrębnić całego alfabetu z powodu przełamania linii. Musisz więc wyodrębnić niektóre podciągi z zawiniętego alfabetu, ale są też kompromisy pod względem tego, jak długo tworzysz podciągi i które wybierasz.Oto co zrobiłem. Jest to skrypt CJam, który wyszukuje wszystkie podciągi o długości do 25 w danym ciągu i dla każdego z nich oblicza, ile bajtów zaoszczędziłoby jego wyodrębnianie. Zasadniczo, jeśli istnieją
N
kopieM
podłańcucha o długości , można zapisać(N-1)*(M-1) - 5
podciągi, te podciągi nie zawierają ukośników. Ponadto, technicznie rzecz biorąc, kiedy już wyodrębniłeś około 8 podciągów, stałe przesunięcie na końcu zmniejsza się do-4
, ale skrypt tego nie bierze pod uwagę.W każdym razie oto, co zrobiłem ze skryptem:
/x/ABC/
do kodu, w którymx
jest wybrana litera iABC
podłańcuch.Na koniec, możemy zaoszczędzić kilka bajtów więcej zastępując wynikające
//
z|
i poprzedzenie/|/\/\//
(dlatego wydobywania podciągi kosztuje tylko 4 zamiast 5 bajty po 8 podciągu lub tak).Tak jak powiedziałem, nie mam pojęcia, czy jest to optymalne i dość nieregularnie wyglądający wynik wydaje mi się bardzo interesujący. Może być możliwe uzyskanie krótszego rozwiązania poprzez wybranie nieoptymalnych (ale więcej) podciągów gdzieś poniżej linii. Zastanawiam się, jaka jest klasa złożoności tego problemu ...
źródło
YX
w wynikach . ;)C, 47 bajtów
Wypróbuj na Ideone
Pojedyncza pętla drukująca alfabet co 26 znaków, ale co 27 znak zastępowany jest nową linią.
źródło
f(i)
wtedy wywołaniaf()
bez żadnych argumentów.i=702;f(){for(;i--;)//...
J, 15 bajtów
Tłumacz online .
źródło
|. (Shift)
to 8 bajtów dłużej!(i.26)(|."0 _)u:65+i.26
u:65+1&|.^:]i.26
ponieważ przysłówki mocy śledzą poprzednie wyniki, jeśli podano listę.|.
jest 17 bajtów:u:65+|."0 1/~i.26
(nadal używa/~
)u:65+(|./~,.)i.26
. Pozbyłem się rangi za pomocą haka i,.
do skoluminowania zasięgu, ale skończyło się na tej samej długości./// , 128 bajtów
Wypróbuj online!
Zainspirowany niesamowitą odpowiedzią Jakube'a na wyzwanie związane z literami L, pomyślałem, że spróbuję również swoich sił w programowaniu w ///, zamiast używać go do kompresji. Było to dość trudne i potrzebowałem czterech prób, ale ostatecznie okazało się, że jest znacznie krótsze niż moje rozwiązanie oparte na kompresji .
Wyjaśnienie
Szybki start na ///: w zasadzie interpreter po prostu odczytuje kod znak po znaku i wykonuje następujące czynności:
\
ani a/
, wydrukuj go.\
, wydrukuj następny znak./
, przeanalizuj/x/y/
instrukcję (z tymi samymi regułami zmiany znaczenia) i kilkakrotnie zamień wszystkox
w pozostałym kodzie nay
.Biorąc trochę inspiracji z Jakube, dla uproszczenia wyjaśnię po prostu wersję 4x4 tego:
Zaczynamy od zastąpienia tych
:
rzeczy między drugim a trzecim/
. Skończy się to kodem, który obraca kolejne rzędy. Otrzymujemy to:f
,b
Ix
to tylko skróty dla typowych ciągów, które będziemy rozszerzać teraz. Tof
jest dla ukośników,b
jest dla ukośników odwrotnych ix
dla\//
których zdarza się dość często. Powodem, dla którego używam aliasów dla podłańcuchów jednoznakowych/
i\
jest to, że musiałyby one być poprzedzone znakami ucieczki w pierwszej instrukcji podstawiania, więc w rzeczywistości oszczędzam sporo bajtów, nie potrzebując tych wszystkich odwrotnych ukośników. Oto co otrzymujemy pox
,f
ib
zostały wypełnione:Bardzo czytelny.
Więc pierwszy wiersz jest drukowany dosłownie. Następnie dochodzimy do funky, która obraca wszystkie kolejne rzędy. W rzeczywistości składa się z czterech różnych instrukcji. Należy zauważyć, że uniknąłem wszystkich wystąpień
A
w tych instrukcjach. Powodem tego jest to, że pozwala mi odróżnićA
s wewnątrz instrukcji odA
s w pozostałych wierszach, które muszą być przetwarzane inaczej.To dopasowuje
/A
i zastępuje go/
, usuwającA
. Zauważ, że ten podciąg pojawia się tylko z przodu każdegoABCD
, więc upuszcza pierwszy znak wszystkich kolejnych wierszy:Odpowiada to wysuwowi wiersza, po którym następuje ukośnik i zastępuje go
A_/
. To wstawia znakA
na końcu każdej linii, kończąc obrót, a także zamienia linię na podkreślenie.To dopasowuje
_/
i zastępuje go wierszem, a następnie ukośnikiem. Powodem, dla którego muszę zrobić ten objazd przez podkreślenie, jest fakt, że /// stosuje każdą instrukcję wielokrotnie, dopóki łańcuch nie będzie już pasował. Oznacza to, że nigdy nie można używać instrukcji w formie/x/axb/
gdziex
,a
ib
są dowolne ciągi znaków, bo po podstawieniex
zawsze będzie wciąż takie same. W szczególności oznacza to, że nie możemy po prostu wstawić czegoś przed linią. Musimy w tym procesie wymienić wysuw linii i cofnąć tę zamianę.To dopasowuje
\A
i zastępuje go\B
, dzięki czemu instrukcje po pozostałych wierszach przetwarzają następny znak. Po przetworzeniu wszystkich czterech instrukcji pozostały ciąg wygląda następująco:Tak więc teraz drukowany jest pierwszy obrócony rząd, a następnie następny zestaw instrukcji obraca pozostałe rzędy o inną komórkę i tak dalej. Po ostatnim obrocie mamy jeszcze kilka instrukcji, które możemy zignorować, a następnie kończymy niepełną instrukcją:
Niekompletne instrukcje na końcu są po prostu ignorowane i program się kończy.
źródło
A->B
,B->C
... ale nie dość pracy. Usunięcie pierwszego znaku i dodanie go na końcu jest zdecydowanie lepszym podejściem.Galaretka , 7 bajtów
Wypróbuj online!
Jak to działa
źródło
Emacs, 47 bajtów
Gdzie
^P
oznacza „Control P” itp. To 47 bajtów, ponieważ klawisze F3 i F4 wymagają dwóch bajtów ASCII.Po wprowadzeniu danych wejściowych definiuje makro klawiatury, które powiela linię i przenosi pierwszy znak na koniec. Następnie uruchamia makro kolejne 24 razy.
źródło
JavaScript (ES6), 56 bajtów
Tak, zgadza się, połowa mojego kodu to literał ciąg alfabetu. Najlepsze, co mogę zrobić bez literału, to 81 bajtów:
Jeśli chcesz program, a nie funkcję, usuń
_=>
i owińconsole.log()
za 10 bajtów.źródło
/./g
pasuje do każdej litery dostarczonego ciągu alfabetu. W zastępującym ciągu$&
reprezentuje samo dopasowanie,$'
część ciągu po dopasowaniu i$`
część ciągu przed dopasowaniem.$`$&$'
reprezentuje zatem oryginalny ciąg, ale oczywiście przeniesienie części po dopasowaniu na początek jest trywialne, zapewniając w ten sposób efekt obrotu.Mathematica
6861 bajtówDzięki...
@MartinEnder (7 bajtów)
źródło
Array
może być krótsze niż mapowanie nadRange
.Array
rzeczywiście zapisuję bajt, ale możesz zapisać kolejny, unikającColumn
:Array[{"A"~CharacterRange~"Z"~RotateLeft~#,"\n"}&,26,0]<>""
(wystarczy zastąpić bajt\n
rzeczywistym).Print@@@NestList[RotateLeft,"A"~CharacterRange~"Z",25]
Grid@Array[FromCharacterCode[Mod[+##-2,26]+65]&,{26,26}]
Python 2,
75656158 bajtówPobiera alfabet
map(chr,range(65,91))
, a następnie ręcznie stosuje operację przesunięcia łańcucha.Dzięki @LeakyNun i @TheBikingViking za -4 bajty!
Dzięki @xnor za -3 bajty!
źródło
a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
jest krótszy.a[1:]
zamiasta[1:26]
.for x in s:print s;s=s[1:]+x
.s='%c'*26%tuple(range(65,91))
.C,
8864 bajtówZadzwoń
f()
bez argumentów.Wypróbuj na ideone .
źródło
Piet , 247 bajtów / 190 kodów
Wypróbuj online!
Trwało to znacznie dłużej, niż się spodziewałem, i mam kilka pomysłów na inne, bardziej wydajne (bardziej przyjazne dla stosów) podejścia, ale w końcu udało mi się zadziałać (poprawiłem błąd interpretera i dodałem funkcje IDE wzdłuż sposób), więc oto jest. Nie jest to najbardziej wydajny bajtowo język, ale jest naprawdę świetna zabawa. Oto większy widok i ślad pokazujący wybraną ścieżkę. Historia na moim GitHubie .
Jako język oparty na stosie jest zbyt skomplikowany, by go krótko wyjaśniać, ale oto podstawowy przegląd tego, co robią różne sekcje / pętle. Wszystkie nazwy zmiennych i funkcji służą wyłącznie wyjaśnieniu, ponieważ w Piet nie ma żadnych zmiennych ani funkcji.
line_counter
od 27, ładuje „@” ascur_letter
, ustawialetter_count
na 27letter_counter
reset_line
zera (jasnobłękitny 2-blokowy)cur_letter
na szczyt stosucheck_done
ifcur_letter > 'X'
(turkusowy / czerwony blok, prawa strona)cur_letter
i wyjścia (prawy dolny róg)reset_letter
ifcur_letter > 'Y'
(jasnozielony blok, po lewej)reset_line
gałąź (duży różowy kwadrat):letter_count
do 27check_done
gałąź (prawa połowa wewnątrz)line_counter
to topline_counter
i przewraca z powrotem na dół stosureset_line
gałąź (lewa strona, zielony blok):cur_letter
do „@”źródło
MATL , 8 bajtów
Z podziękowaniami @Dennis , który zasugerował, że MATL powinien obejmować modułowe indeksowanie, oraz @Suever , który wpadł na pomysł automatycznych operacji parowania.
Wypróbuj online!
źródło
JavaScript,
113969176 bajtówSuper-krótka wersja do uruchamiania w konsoli:
JavaScript / HTML,
140123118105 bajtówŁadniejsza wersja z wyjściem HTML, który ułatwia OP kopiowanie i wklejanie:
(EDYCJA: Powinienem był po prostu użyć ciągu AZ zamiast go generować)
(EDYCJA 2: Podziękowania dla @Neil i @DanTheMan za ich wkład (patrz komentarze))
źródło
l.slice(0,1)
jest po prostul[0]
, podczas gdy nie,27
jest konieczne, w którym momencie możesz przenieść plasterek i skończyć zl.slice(1)+l[0]
. Myślę też, że można przesunąćconsole.log
ciało do pętli, unikając w ten sposób przeciągania;
.console.log
.PowerShell, 44 bajty
źródło
R,
474241 bajtówWypróbuj online!
Generuje 27 alfabetów, usuwa 27 liter i drukuje w 26 kolumnach.
Poprawa zainspirowany @Giuseppe „s rozwiązania .
źródło
rep
ale było to szczególnie inspirujące! Bardzo dobrze. Głosowałbym ponownie, gdybym mógł.1
zamiast""
dlastdout
.Sesos ,
2725 bajtówWypró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 drukujemy znak pod głowicą danych i przechodzimy w prawo, powtarzając ten krok, aż do znalezienia komórki o wartości 0 . Po wydrukowaniu
ABCDEFGHIJKLMNOPQRSTUVWXYZ
taśma wygląda następująco.Teraz przesuwamy głowicę danych o 27 jednostek w lewo (z powrotem do początkowego 0 ) i powtarzamy kombinację print-move, aż do znalezienia komórki o wartości 0 . Nie drukuje nic i pozostawia taśmę w następujący sposób.
Teraz piszemy 10 do bieżącej komórki, wypisujemy odpowiedni znak (wysuw linii) i zerujemy komórkę, wywołując
get
puste wejście, pozostawiając niezmienioną taśmę.Następnie przenosimy zawartość komórki w prawo do bieżącej komórki, a następnie przesuwamy głowicę danych do jednostek w prawo.
Kolejna iteracja jest nieco inna. Pierwszy krok drukowania zostanie wydrukowany
BCDEFGHIJKLMNOPQRSTUVWXYZ
, pozostawiając taśmę w następujący sposób.Teraz przesuwamy głowicę danych o 27 jednostek w lewo.
Kolejna pętla drukująca drukuje
A
i pozostawia taśmę w następujący sposób.Ponownie drukujemy wysuw linii, przesuwamy zawartość komórki w prawo do bieżącej komórki, a następnie przesuwamy głowicę danych do jednostek w prawo.
Po 24 kolejnych iteracjach ostatni krok przesunięcia głowicy danych w prawo pozostawia taśmę w następującym stanie.
Komórka pod głowicą danych ma teraz wartość 0 i program się kończy.
† TIO używa nowszej wersji Sesos, która jest wstecznie kompatybilna z SASM, ale generuje krótszy kod SBIN.
źródło
Haskell,
565352 bajtówta sama długość: (przy użyciu sugestii @AndersKaseorg)
aby robić rzeczy modułowe, musisz zaimportować dane.Char, aby uzyskać funkcję chr,
745958 Bajtów było najlepsze, co mogłem z tym uzyskać: (dzięki @nimi za sugestię funkcji toEnum)To może być prawdopodobnie krótsze, ale nie znam żadnych sztuczek golfowych Haskell.
użyłem mapM zamiast mapM_ (patrz komentarz @ Lynn)
źródło
['A'..x]
na['A'..'Z']
, który jest teraz używany dwa razy, i przenieś go do definicji.chr
odData.Char
, można użyćtoEnum
zamiast i pominąćimport
.mapM_
namapM
powinna być w porządku. Może to jest warte meta postaR, 53 bajty
Tutaj jest na tłumacza online .
źródło
Siatkówka,
3631 bajtów5 bajtów dzięki Martinowi Enderowi.
Wiodące podawanie linii jest znaczące.
Wypróbuj online!
Kredyty .
źródło
Brain-Flak , 222 bajty
Wypróbuj online!
Jestem nowy w Brain-Flak, więc może to można dużo zagrać w golfa, ale przynajmniej to pierwsza próba. Przechowuje 27 pełnych alfabetów na lewym stosie, a następnie przesuwa alfabety w prawo i zamienia każdą 27 literę na nową linię.
Mój kod źródłowy jest nieco mylący, ale mimo to go dodam.
źródło
V ,
36, 10 bajtówWypróbuj online!
Wykorzystuje to kodowanie „Latin1”.
Wyjaśnienie:
źródło
C #, 98 bajtów
Próbowałem sprawdzić, czy mogę wygenerować litery krótsze niż tylko inicjowanie ich jako łańcucha, ale tak naprawdę nie jest to możliwe. Litery mają 26 bajtów i sam ten fragment kodu
ma 25 bajtów. Myślę, że zainicjowanie ich, a następnie dodanie ich za pomocą + = a jest dobrym rozwiązaniem, ale w C # jesteś ograniczony liczbą bajtów funkcji takich jak
Substring()
iConsole.WriteLine()
.Moja próba na 98 bajtów:
źródło
Oktawa, 27 bajtów
Dodajemy wektor wiersza i kolumny, a Octave ładnie rozszerza wymiary sigleton, bez potrzeby
bsxfun
(tak jak w Matlabie).źródło
q, 20 bajtów
źródło
-1_'26 27#.Q.A
Java,
190176172163 bajtówźródło
System.out.printf("%c", ...)
->System.out.write(...)
,'\n'
->10
,'A'
->65
. Należy pamiętać, że sugestia znaku nowej linii / wiersza jest dozwolona, ale wymaga wyjściowej ideone . :)String[]a
można usunąć; iint s=0;while(s<26){p(s,26);p(0,s++);p(-1,0);}
może byćfor(int s=0;s<26;p(0,s++),p(0,s++))p(s,26);
.Bash, 66 bajtów
Tworzę pełny alfabet
A
, a następnie drukuję 26 jego obróconych wersji, biorąc znaki zaczynające się odn
i dołączając poprzednien
.źródło
Perl, 42 bajty
Pełny kredyt za @Dom Hastings za to.
Lub (ta sama liczba bajtów):
Potrzebuje
-M5.010
lub-E
uruchomić, na przykład:Moja stara odpowiedź (55 bajtów):
Musisz
-M5.010
biec. Więc uruchom z:Prawdopodobnie można to zrobić krócej, ale nie dowiedziałem się, jak ... jeszcze
źródło
@l=A..Z;say@l[$_..25],@l[0..$_-1]for 0..25
i$_=join"",A..Z;eval'say;/./;$_=$\'.$&;'x26
oba wymagają-E
/-M5.010
.