Drucken Sie eine Tabula Recta!
Die Tabula Recta (manchmal als "Vigenere-Tabelle" bezeichnet) wurde von Johannes Trithemius erstellt und in mehreren Chiffren verwendet, einschließlich aller Varianten der Bellaso-Vigenere-Chiffre und der Trithemius-Chiffre. Es sieht aus wie das:
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
Ich brauche das häufig, kann es aber nirgendwo im Internet finden, wo ich es kopieren und einfügen kann. Da der quadratische Tisch so lang ist und die Eingabe verdammt viel Zeit in Anspruch nimmt , muss Ihr Code so kurz wie möglich sein.
Regeln / Anforderungen
- Jede Einreichung sollte entweder ein vollständiges Programm oder eine Funktion sein. Wenn es sich um eine Funktion handelt, muss sie ausgeführt werden können, indem nur der Funktionsaufruf am Ende des Programms hinzugefügt wird. Alles andere (z. B. Überschriften in C) muss enthalten sein.
- Wenn es möglich ist, geben Sie einen Link zu einer Site an, auf der Ihr Programm getestet werden kann.
- Ihr Programm darf nichts schreiben
STDERR
.
- Standardlücken sind verboten.
- Ihr Programm kann in jedem Fall ausgeben, es muss jedoch gedruckt werden (kein Array oder ähnliches).
Wertung
Programme werden nach Bytes, standardmäßig in UTF-8 oder einem anderen Zeichensatz Ihrer Wahl bewertet.
Irgendwann gewinnt die Antwort mit den wenigsten Bytes.
Einreichungen
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Bestenliste
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
/* 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
, müssen wir einschließenstdio.h
, wennisalpha
verwendet wird,ctype.h
benötigt wird usw. Ist das richtig?Antworten:
05AB1E ,
65 BytesVielen Dank an Downgoat für das Speichern von 1 Byte. Code:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
v
Befehl verbraucht einen Wert und iteriert darüber. In diesem Fall wird das Alphabet verbraucht und 26 Mal wiederholt. Das ist auch die genaue Anzahl von Malen, die wir benötigen, um die=À
Funktion zu iterieren . Das=
lässt den Stapel intakt und dasÀ
dreht nur die Oberseite des Stapelelements 1 nach links. Beantwortet das deine Frage? :)Vim,
2523 BytesWo
↵
ist die Return-Taste.BEARBEITEN : Kleinbuchstaben sind in Ordnung, daher kann ich zwei Schlüssel speichern.
quelle
:h<_<cr>jjY
ist GenieV~
Python 2,
595753 BytesDanke an @xsot für -4 Bytes!
quelle
print bytearray(a)
./// 220 Bytes
Probieren Sie es online!
Dies war überraschend nicht trivial und ich habe keine Ahnung, ob es optimal ist.
Die einzige Möglichkeit, ein Problem wie dieses in /// zu lösen, besteht darin, gemeinsame Teilzeichenfolgen zu extrahieren.(Es stellte sich heraus, dass ich mich geirrt hatte. ) Aufgrund der Art der Ausgabe ist jedoch überhaupt nicht klar, welche Teilzeichenfolgen am besten extrahiert werden sollten, da Sie aufgrund der Zeilenumbrüche nicht das gesamte Alphabet extrahieren können. Sie müssen also einige Teilzeichenfolgen des umgebrochenen Alphabets extrahieren, aber dann gibt es Kompromisse in Bezug darauf, wie lange Sie die Teilzeichenfolgen erstellen und welche Sie auswählen.Also hier ist was ich getan habe. Dies ist ein CJam-Skript, das alle Teilzeichenfolgen bis zur Länge 25 in der angegebenen Zeichenfolge findet und für jede von ihnen berechnet, wie viele Bytes durch das Extrahieren gespeichert würden. Grundsätzlich
N
speichernM
Sie Unterzeichenfolgen , wenn Kopien einer Längensubstring vorhanden sind.(N-1)*(M-1) - 5
Diese Unterzeichenfolgen enthalten keine Schrägstriche. Technisch gesehen reduziert sich der konstante Versatz am Ende auf, wenn Sie bereits etwa 8 Teilzeichenfolgen extrahiert haben-4
, aber das Skript berücksichtigt dies nicht.Wie auch immer, hier ist was ich mit dem Skript gemacht habe:
/x/ABC/
den Code voran, in demx
sich der gewählte Buchstabe undABC
die Teilzeichenfolge befinden.Am Ende sparen wir ein paar weitere Bytes, indem wir das Ergebnis
//
durch|
und das vorangestellte ersetzen/|/\/\//
(daher kostet das Extrahieren von Teilzeichenfolgen nach dem achten Teilzeichenfolgen nur 4 anstatt 5 Bytes oder so).Wie gesagt, ich habe keine Ahnung, ob dies optimal ist und finde das eher unregelmäßig aussehende Ergebnis recht interessant. Möglicherweise können Sie zu einer kürzeren Lösung gelangen, indem Sie nicht optimale (aber mehr) Teilzeichenfolgen auswählen. Ich frage mich, was die Komplexitätsklasse dieses Problems ist ...
quelle
YX
in der Ausgabe bemerkte . ;)C 47 Bytes
Probieren Sie es auf Ideone
Eine einzelne Schleife, in der das Alphabet alle 26 Zeichen gedruckt wird, wobei jedoch jedes 27. Zeichen durch eine neue Zeile ersetzt wird.
quelle
f(i)
dann einfachf()
ohne Argumente aufrufen .i=702;f(){for(;i--;)//...
J, 15 Bytes
Online-Dolmetscher .
quelle
|. (Shift)
ist 8 Bytes länger!(i.26)(|."0 _)u:65+i.26
u:65+1&|.^:]i.26
da die Power-Adverbien die vorherigen Ergebnisse verfolgen, wenn Sie eine Liste erhalten.|.
ist 17 Bytes:u:65+|."0 1/~i.26
(immer noch mit/~
)u:65+(|./~,.)i.26
. Ich habe den Rang mit einem Haken entfernt und,.
den Bereich kolumniert, aber er endete in der gleichen Länge./// 128 Bytes
Probieren Sie es online!
Inspiriert von Jakubes erstaunlicher Antwort auf die L-Phabet-Herausforderung, dachte ich, ich würde mich auch beim eigentlichen Programmieren in /// versuchen, anstatt es nur für die Komprimierung zu verwenden. Das war ziemlich knifflig und ich brauchte vier Versuche, aber am Ende war es viel kürzer als meine auf Komprimierung basierende Lösung .
Erläuterung
Eine kurze Einführung zu ///: Im Grunde liest der Interpreter den Code nur zeichenweise und führt die folgenden Aktionen aus:
\
noch ein ist/
, drucken Sie es aus.\
, drucken Sie das nächste Zeichen./
Fall ist, analysieren Sie eine/x/y/
Anweisung (mit denselben Escape-Regeln) und ersetzen Sie alle Anweisungenx
im verbleibenden Code wiederholt durchy
.Ich lasse mich von Jakube etwas mehr inspirieren und erkläre der Einfachheit halber nur eine 4x4-Version davon:
Wir beginnen damit, diese
:
durch das Zeug zwischen dem zweiten und dem dritten zu ersetzen/
. Dies wird der Code sein, der die nachfolgenden Zeilen dreht. Wir bekommen das:Die
f
,b
undx
sind nur Kürzel für gemeinsame Strings, die wir jetzt erweitern werden. Dasf
ist für Schrägstriche, dasb
ist für Backslashes und dasx
ist,\//
wofür zufällig ziemlich viel aufkommt. Der Grund , warum ich bin mit Aliasnamen für die Einzelzeichenstrings/
und\
ist , dass sie in dem ersten Substitutionsbefehl maskiert werden müßten, so spare ich eigentlich ziemlich viele Bytes nicht all diese Schrägstriche zu benötigen. Hier ist , was wir nach bekommenx
,f
undb
haben in ausgefüllt:Sehr gut lesbar.
Die erste Zeile wird also nur wörtlich gedruckt. Dann kommen wir zu dem funky Teil, der alle weiteren Reihen dreht. Es besteht eigentlich aus vier verschiedenen Anweisungen. Eine Sache zu bemerken ist, dass ich mich allen Vorkommnissen
A
in dieser Anleitung entzogen habe. Der Grund dafür ist, dass ichA
s innerhalb der Anweisungen vonA
s in den verbleibenden Zeilen unterscheiden kann, die unterschiedlich verarbeitet werden müssen.Dies entspricht
/A
und ersetzt es durch/
Entfernen desA
. Beachten Sie, dass diese Teilzeichenfolge nur amABCD
Anfang jeder Zeile angezeigt wird. Dadurch wird das erste Zeichen aller folgenden Zeilen gelöscht:Dies entspricht einem Zeilenvorschub gefolgt von einem Schrägstrich und ersetzt ihn durch
A_/
. Dies fügt alsoA
am Ende jeder Zeile ein, schließt die Drehung ab und verwandelt den Zeilenvorschub in einen Unterstrich.Dies entspricht
_/
und ersetzt es durch einen Zeilenvorschub, gefolgt von einem Schrägstrich. Der Grund, warum ich diesen Umweg über den Unterstrich machen muss, ist die Tatsache, dass /// jede Anweisung wiederholt anwendet, bis die Zeichenfolge nicht mehr übereinstimmt. Das bedeutet , dass Sie nie eine Anweisung der Form verwenden können ,/x/axb/
wox
,a
undb
beliebige Zeichenketten sind, denn nach dem Wechselx
immer noch übereinstimmen. Dies bedeutet insbesondere, dass wir nicht einfach etwas vor einem Zeilenumbruch einfügen können. Wir müssen den Zeilenvorschub im Prozess ersetzen und diesen Austausch rückgängig machen.Dies stimmt überein
\A
und ersetzt es durch\B
, so dass die Anweisungen nach den verbleibenden Zeilen das nächste Zeichen verarbeiten. Nachdem alle vier Anweisungen verarbeitet wurden, sieht der verbleibende String folgendermaßen aus:Jetzt wird die erste gedrehte Zeile gedruckt, und der nächste Befehlssatz dreht die verbleibenden Zeilen um eine andere Zelle und so weiter. Nach der letzten Umdrehung haben wir noch ein paar Anweisungen, die wir ignorieren können, und dann beenden wir die unvollständige Anweisung:
Unvollständige Anweisungen am Ende werden einfach ignoriert und das Programm wird beendet.
quelle
A->B
,B->C
... aber es hat nicht ganz funktioniert. Das Entfernen des ersten Zeichens und das Anhängen am Ende ist definitiv ein viel besserer Ansatz.Gelee , 7 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Emacs, 47 Bytes
Wobei
^P
"Control P" usw. bedeutet. Das sind 47 Bytes, da die Tasten F3 und F4 zwei ASCII-Bytes erfordern.Nach der Eingabe der Starteingabe wird ein Tastaturmakro definiert, um die Zeile zu duplizieren und das erste Zeichen ans Ende zu verschieben. Anschließend wird das Makro weitere 24 Mal ausgeführt.
quelle
JavaScript (ES6), 56 Byte
Ja, das stimmt, mein halber Code ist das Buchstabentext-Literal. Das Beste, was ich ohne das Literal machen könnte, sind 81 Bytes:
Wenn Sie ein Programm anstelle einer Funktion wünschen, entfernen Sie das
_=>
und wickeln Sie esconsole.log()
für 10 Byte ein.quelle
/./g
jedem Buchstaben der angegebenen Buchstabenfolge. Stellt in der Ersatzzeichenfolge$&
die Übereinstimmung selbst dar,$'
den Teil der Zeichenfolge nach der Übereinstimmung und$`
den Teil der Zeichenfolge vor der Übereinstimmung.$`$&$'
würde daher die ursprüngliche Zeichenfolge darstellen, aber es ist natürlich trivial, das Teil nach dem Match an den Anfang zu verschieben, wodurch der Rotationseffekt erzielt wird.Mathematica
6861 BytesDank an...
@MartinEnder (7 Bytes)
quelle
Array
könnte kürzer sein , dass Mapping über einRange
.Array
speichere tatsächlich ein Byte, aber Sie können dann ein anderes speichern, indem Sie vermeidenColumn
:Array[{"A"~CharacterRange~"Z"~RotateLeft~#,"\n"}&,26,0]<>""
(Sie müssen nur das\n
durch einen tatsächlichen Zeilenvorschub ersetzen ).Print@@@NestList[RotateLeft,"A"~CharacterRange~"Z",25]
Grid@Array[FromCharacterCode[Mod[+##-2,26]+65]&,{26,26}]
Python 2,
75656158 BytesRuft das Alphabet mit ab
map(chr,range(65,91))
und wendet dann die Zeichenfolgenverschiebungsoperation manuell an.Danke an @LeakyNun und @TheBikingViking für -4 Bytes!
Danke an @xnor für -3 Bytes!
quelle
a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ist kürzer.a[1:]
anstelle von tuna[1:26]
.for x in s:print s;s=s[1:]+x
.s='%c'*26%tuple(range(65,91))
.C
88-64BytesAufruf
f()
ohne Argumente.Probiere es auf ideone aus .
quelle
Piet , 247 Bytes / 190 Codels
Probieren Sie es online!
Also nahm dies viel länger als ich erwartet hatte, und ich habe ein paar Ideen auf einige andere effizienter (mehr Stapel freundlich) annähert, aber ich habe endlich das Ding dang arbeiten (und fixiert einen Interpreter Fehler und hinzugefügt IDE - Funktionen entlang der Weg), also hier ist es. Kaum die byteeffizienteste Sprache, aber verdammt viel Spaß. Hier ist eine größere Ansicht und eine Spur, die den eingeschlagenen Weg zeigt. Geschichte auf meinem GitHub .
Als stapelbasierte Sprache ist es viel zu kompliziert, um es kurz zu erklären, aber hier ist ein grundlegender Überblick darüber, was die verschiedenen Abschnitte / Schleifen tun. Alle Variablen- und Funktionsnamen dienen nur der Erklärung, da Piet keine Variablen oder Funktionen enthält.
line_counter
bei 27, lädt '@' wiecur_letter
, setztletter_count
auf 27letter_counter
reset_line
Null (heller Cyan-2-Block)cur_letter
an die Spitze des Stapelscheck_done
ifcur_letter > 'X'
(blaugrün / roter Block, rechte Seite)cur_letter
und gibt es aus (rechte untere Ecke)reset_letter
ifcur_letter > 'Y'
(hellgrüner Block links)reset_line
Zweig (großes rosa Quadrat):letter_count
auf 27 zurückcheck_done
Ast (rechte Hälfte innen)line_counter
nach obenline_counter
und rollt zurück zum Stapelendereset_line
Abzweig (linke Seite, grüner Block):cur_letter
auf '@' zurückquelle
MATL , 8 Bytes
Dank an @Dennis , der vorgeschlagen hat, dass MATL eine modulare Indizierung beinhalten soll, und an @Suever , der die Idee hatte, automatische paarweise Operationen durchzuführen.
Probieren Sie es online!
quelle
Javascript,
113969176 BytesEine superkurze Version zum Laufen in der Konsole:
Javascript / HTML,
140123118105 BytesEine schönere Version mit einer HTML-Ausgabe, die OP das Kopieren und Einfügen erleichtert:
(BEARBEITEN: Ich hätte nur die Zeichenfolge AZ verwenden sollen, anstatt sie zu generieren)
(EDIT 2: Danke an @Neil und @DanTheMan für die Eingabe (siehe Kommentare))
quelle
l.slice(0,1)
ist nurl[0]
, während das,27
unnötig ist, an welcher Stelle können Sie die Scheibe verschieben und am Ende mitl.slice(1)+l[0]
. Ich denke auch, dass Sie dasconsole.log
auf den Schleifenkörper bewegen können, um so das Nachlaufen zu vermeiden;
.console.log
.PowerShell, 44 Byte
quelle
R,
474241 BytesProbieren Sie es online!
Erzeugt 27 Buchstaben, entfernt 27. Buchstaben und druckt in 26 Spalten.
Verbesserung von inspiriert @Giuseppe ‚s Lösung .
quelle
rep
aber das war besonders inspiriert! Sehr schön. Ich würde noch einmal abstimmen, wenn ich könnte.1
anstelle von verwenden""
für verwendenstdout
.Sesos ,
2725 BytesProbieren Sie es online! Überprüfen Sie Debug , um den generierten SBIN-Code anzuzeigen. †
Sesos Montage
Die obige Binärdatei wurde durch Zusammenstellen des folgenden SASM-Codes generiert.
Wie es funktioniert
Wir beginnen mit der Initialisierung des Bandes auf
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Das ist wie folgt.Schreiben Sie 26 in eine Zelle und lassen Sie das Band im folgenden Zustand.
Solange die Zelle unter dem Datenkopf nicht Null ist, gehen wir wie folgt vor.
Kopieren Sie die Nummer in die beiden Zellen links und fügen Sie sie hinzu der Kopie ganz links 64 .
Verschieben Sie die Kopie ganz links an die ursprüngliche Position und subtrahieren Sie sie 1 von der Kopie ganz rechts.
Der Vorgang stoppt nach 26 Iterationen, da sich die Kopie ganz rechts befindet 0 ist. Wir verschieben eine Zelle nach rechts, so dass der endgültige Zustand des Bands nach der Initialisierung wie folgt ist.
Jetzt können Sie die Ausgabe generieren, indem Sie den folgenden Vorgang wiederholen, bis die Zelle unter dem Datenkopf Null ist.
Zuerst drucken wir das Zeichen unter den Datenkopf und bewegen uns nach rechts, wobei wir diesen Schritt wiederholen, bis eine Zelle mit dem Wert 0 gefunden wird. Nach dem Drucken
ABCDEFGHIJKLMNOPQRSTUVWXYZ
sieht das Band wie folgt aus.Jetzt bewegen wir den Datenkopf 27 Einheiten nach links (zurück zur führenden 0 ) und wiederholen die Druck-Verschiebungs-Kombination, bis eine Zelle mit dem Wert 0 gefunden wird. Dies druckt nichts und lässt das Band wie folgt.
Jetzt schreiben wir 10 in die aktuelle Zelle, drucken das entsprechende Zeichen (Zeilenvorschub) und setzen die Zelle mit einem Aufruf von
get
bei leerer Eingabe auf Null , wobei das Band unverändert bleibt.Anschließend verschieben wir den Inhalt der Zelle nach rechts in die aktuelle Zelle und verschieben den Datenkopf in Einheiten nach rechts.
Die nächste Iteration ist etwas anders. Der erste Druckschritt wird gedruckt
BCDEFGHIJKLMNOPQRSTUVWXYZ
, wobei das Band wie folgt belassen wird.Jetzt bewegen wir den Datenkopf 27 Einheiten nach links.
Die nachfolgende Druckschleife druckt
A
und verlässt das Band wie folgt.Wir drucken erneut einen Zeilenvorschub, verschieben den Inhalt der Zelle nach rechts in die aktuelle Zelle und den Datenkopf in Einheiten nach rechts.
Nach weiteren 24 Iterationen verbleibt das Band im folgenden Zustand, wenn Sie den Datenkopf nach rechts bewegen.
Die Zelle unter dem Datenkopf ist jetzt 0 und das Programm wird beendet.
† TIO verwendet eine neuere Version von Sesos, die für SASM abwärtskompatibel ist, jedoch kürzeren SBIN-Code generiert.
quelle
Haskell,
565352 Bytesgleiche Länge: (mit einem Vorschlag von @AndersKaseorg)
um modulare Sachen zu machen, muss man Data.Char importieren, um die chr-Funktion zu erhalten.
745958 Bytes waren das Beste, was ich damit bekommen konnte: (Danke an @nimi für den Vorschlag der toEnum-Funktion)Dies könnte wahrscheinlich viel kürzer sein, aber ich kenne keine Haskell-Golftricks.
Verwendete mapM anstelle von mapM_ (siehe @Lynns Kommentar)
quelle
['A'..x]
in['A'..'Z']
, der jetzt zweimal verwendet wird, und heben Sie ihn zu einer Definition auf.chr
ausData.Char
, können SietoEnum
die Stelle und weglassenimport
.mapM_
,mapM
sollte in Ordnung sein. Vielleicht ist dies einen Meta-Post wert ...R, 53 Bytes
Hier handelt es sich um einen Online-Dolmetscher .
quelle
Retina,
3631 Bytes5 Bytes dank Martin Ender.
Der Zeilenvorschub ist signifikant.
Probieren Sie es online!
Credits .
quelle
Brain-Flak , 222 Bytes
Probieren Sie es online!
Ich bin neu in Brain-Flak, also kann man vielleicht viel Golf spielen, aber es ist zumindest ein erster Versuch. Es speichert 27 vollständige Alphabete auf dem linken Stapel, verschiebt die Alphabete dann nach rechts und ersetzt jeden 27. Buchstaben durch eine neue Zeile.
Mein Quellcode ist ein bisschen verwirrend, aber ich werde ihn trotzdem hinzufügen.
quelle
V ,
36, 10 BytesProbieren Sie es online!
Dies verwendet die "Latin1" -Codierung.
Erläuterung:
quelle
C # 98 Bytes
Ich habe versucht zu sehen, ob ich die Buchstaben kürzer erzeugen kann, als sie nur als Zeichenfolge zu initialisieren, aber das ist nicht wirklich möglich. Die Buchstaben sind 26 Bytes und dieses Snippet alleine
ist 25 Bytes. Ich denke, sie zu initialisieren und sie dann mit einem + = a anzuhängen, ist eine gute Lösung, aber mit C # sind Sie durch die Anzahl der Funktionen wie
Substring()
und begrenztConsole.WriteLine()
.Mein Versuch mit 98 Bytes:
quelle
Oktave, 27 Bytes
Wir fügen einen Zeilen- und einen Spaltenvektor hinzu, und Octave erweitert die Sigleton-Dimensionen, ohne dass dies erforderlich ist
bsxfun
(wie Sie es in Matlab benötigen würden).quelle
q, 20 Bytes
quelle
-1_'26 27#.Q.A
Java,
190176172163 Bytesquelle
System.out.printf("%c", ...)
->System.out.write(...)
,'\n'
->10
,'A'
->65
. Beachten Sie, dass der Zeichenvorschlag für Zeilenvorschub / Zeilenvorschub zulässig ist, jedoch nur eine Ausgabe erforderlich ist. :)String[]a
kann entfernt werden; undint s=0;while(s<26){p(s,26);p(0,s++);p(-1,0);}
kann seinfor(int s=0;s<26;p(0,s++),p(0,s++))p(s,26);
.Bash, 66 Bytes
Ich erstelle ein vollständiges Alphabet und drucke
A
dann 26 gedrehte Versionen davon aus, indem ich die Zeichen beginnend ann
der vorhergehenden Position anhängen
.quelle
Perl, 42 Bytes
Voller Dank an @Dom Hastings dafür.
Oder (gleiche Byteanzahl):
Muss
-M5.010
oder muss-E
ausgeführt werden, zum Beispiel:Meine alte Antwort (55 Bytes):
Müssen
-M5.010
rennen. Also lauf mit:Es ist wahrscheinlich möglich, etwas kürzer zu machen, aber ich habe noch nicht herausgefunden, wie
quelle
@l=A..Z;say@l[$_..25],@l[0..$_-1]for 0..25
und$_=join"",A..Z;eval'say;/./;$_=$\'.$&;'x26
beide erfordern-E
/-M5.010
.