Cetak Tabula Recta!
Tabula Recta (kadang-kadang disebut 'Vigenere Table'), diciptakan oleh Johannes Trithemius, dan telah digunakan di beberapa cipher, termasuk semua varian cipher Vigenere Bellaso dan cipher Trithemius. Ini terlihat seperti ini:
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
Saya sering membutuhkan ini, tetapi tidak dapat menemukannya di mana pun di internet untuk menyalin dan menempel. Karena tabel persegi sangat panjang, dan perlu waktu lama untuk mengetik, kode Anda harus sesingkat mungkin.
Aturan / Persyaratan
- Setiap pengajuan harus berupa program atau fungsi lengkap. Jika itu adalah suatu fungsi, itu harus dapat dijalankan dengan hanya perlu menambahkan panggilan fungsi ke bagian bawah program. Hal lain (mis. Tajuk dalam C), harus dimasukkan.
- Jika memungkinkan, berikan tautan ke situs tempat program Anda dapat diuji.
- Program Anda tidak boleh menulis apa pun
STDERR
.
- Celah Standar dilarang.
- Program Anda dapat menampilkan dalam hal apa pun, tetapi harus dicetak (bukan array atau serupa).
Mencetak gol
Program-program dinilai berdasarkan byte, dalam UTF-8 secara default atau serangkaian karakter pilihan Anda.
Akhirnya, jawaban dengan byte terkecil akan menang.
Pengajuan
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Misalnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar penalti penterjemah secara terpisah), pastikan bahwa skor aktual adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
/* 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
, kita perlu memasukkanstdio.h
, jikaisalpha
digunakan,ctype.h
diperlukan, dll. Apakah ini benar?Jawaban:
05AB1E ,
65 byteTerima kasih kepada Downgoat untuk menghemat 1 byte. Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
v
Perintah ini mengkonsumsi nilai, mengulanginya. Dalam hal ini, ia mengkonsumsi alfabet, jadi iterasi 26 kali. Itu juga jumlah tepat yang kita butuhkan untuk beralih dari=À
fungsi. The=
daun tumpukan utuh danÀ
hanya berputar bagian atas elemen tumpukan 1 ke kiri. Apakah ini menjawab pertanyaan Anda? :)Vim,
2523 byteDi mana
↵
tombol Return.EDIT : huruf kecil tidak apa-apa, jadi saya bisa menyimpan dua tombol.
sumber
:h<_<cr>jjY
jeniusV~
Python 2,
595753 byteBerkat @ xsot untuk -4 byte!
sumber
print bytearray(a)
./// , 220 byte
Cobalah online!
Ini mengejutkan non-sepele dan saya tidak tahu apakah itu optimal.
Satu-satunya cara untuk mengatasi masalah seperti ini di /// adalah dengan mengekstraksi substring umum.( Ternyata saya salah. ) Namun, karena sifat dari output itu sama sekali tidak jelas substring mana yang sebaiknya diekstraksi karena Anda tidak dapat benar-benar mengekstrak seluruh alfabet karena linebreak. Jadi, Anda perlu mengekstrak beberapa substring dari alfabet yang dibungkus, tetapi kemudian ada trade-off dalam hal berapa lama Anda membuat substring dan mana yang Anda pilih.Jadi, inilah yang saya lakukan. Ini adalah skrip CJam yang menemukan semua substring hingga panjang 25 dalam string yang diberikan dan untuk masing-masing menghitung berapa byte byte yang akan disimpan. Pada dasarnya jika ada
N
salinan dariM
substring panjang, Anda akan menyimpan(N-1)*(M-1) - 5
substring, substring ini tidak mengandung garis miring. Juga, secara teknis, ketika Anda sudah mengekstraksi 8 substring atau lebih, offset konstan di akhir dikurangi menjadi-4
, tetapi skrip tidak menganggap itu.Bagaimanapun, inilah yang saya lakukan dengan skrip:
/x/ABC/
ke kode di manax
huruf yang dipilih danABC
adalah substring.Pada akhirnya, kami menyimpan beberapa byte lagi dengan mengganti hasilnya
//
dengan|
dan prepending/|/\/\//
(inilah sebabnya mengekstraksi substring hanya memakan biaya 4 alih-alih 5 byte setelah substring ke-8 atau lebih).Seperti yang saya katakan, saya tidak tahu apakah ini optimal dan saya menemukan hasil yang agak tidak teratur cukup menarik. Dimungkinkan untuk mendapatkan solusi yang lebih pendek dengan memilih substring yang tidak optimal (tetapi lebih) di suatu tempat di telepon. Saya ingin tahu apa kelas kompleksitas masalah ini ...
sumber
YX
dalam output. ;)C, 47 byte
Cobalah di Ideone
Satu putaran, mencetak alfabet setiap 26 karakter tetapi dengan setiap 27 karakter digantikan oleh baris baru.
sumber
f(i)
lalu panggil sajaf()
tanpa argumen.i=702;f(){for(;i--;)//...
J, 15 byte
Penerjemah online .
sumber
|. (Shift)
adalah 8 byte lebih lama!(i.26)(|."0 _)u:65+i.26
u:65+1&|.^:]i.26
karena kata keterangan daya melacak hasil sebelumnya jika diberikan daftar.|.
17 byte:u:65+|."0 1/~i.26
(masih menggunakan/~
)u:65+(|./~,.)i.26
. Saya menyingkirkan pangkat dengan menggunakan kail dan,.
untuk membuat kolom rentang tetapi berakhir dengan panjang yang sama./// , 128 byte
Cobalah online!
Terinspirasi oleh jawaban Jakube yang luar biasa untuk tantangan L-phabet, saya pikir saya akan mencoba tangan saya juga pada pemrograman aktual di /// dan bukan hanya menggunakannya untuk kompresi. Ini cukup sulit dan saya membutuhkan empat upaya, tetapi pada akhirnya itu jauh lebih pendek daripada solusi berbasis kompresi saya .
Penjelasan
Sebuah primer cepat pada ///: pada dasarnya penerjemah hanya membaca karakter kode dengan karakter dan melakukan hal berikut:
\
atau a/
, cetaklah.\
, cetak karakter berikutnya./
, parsing/x/y/
instruksi (dengan aturan pelolosan yang sama) dan berulang-ulang gantikan semuax
kode yang tersisay
.Mengambil lebih banyak inspirasi dari Jakube, untuk kesederhanaan saya hanya akan menjelaskan versi 4x4 ini:
Kami mulai dengan mengganti
:
barang-barang dengan yang kedua dan ketiga/
. Ini akan menjadi kode yang memutar baris berikutnya. Kami mendapatkan ini:Itu
f
,b
danx
hanya singkatan untuk string umum, yang akan kita kembangkan sekarang. Thef
yaitu untuk garis miring, yangb
adalah untuk backslashes danx
bagi\//
yang kebetulan datang cukup banyak. Alasan saya menggunakan alias untuk substring karakter tunggal/
dan\
adalah bahwa mereka harus melarikan diri dalam instruksi substitusi pertama, jadi saya sebenarnya menyimpan cukup banyak byte dengan tidak memerlukan semua backslash tersebut. Inilah yang kami dapatkanx
,f
danb
telah diisi:Sangat mudah dibaca.
Jadi baris pertama baru saja dicetak kata demi kata. Kemudian kita sampai pada bagian funky yang memutar semua baris lebih lanjut. Ini sebenarnya terdiri dari empat instruksi berbeda. Satu hal yang perlu diperhatikan adalah bahwa saya telah lolos dari semua kejadian
A
dalam instruksi ini. Alasannya adalah ini memungkinkan saya untuk membedakanA
s di dalam instruksi dariA
s di baris yang tersisa, yang perlu diproses secara berbeda.Ini cocok
/A
dan menggantinya dengan/
, menghapusA
. Perhatikan bahwa substring ini hanya muncul di bagian depan masing-masingABCD
, jadi ini menjatuhkan karakter pertama dari semua baris berikut:Ini cocok dengan umpan baris yang diikuti oleh garis miring dan ganti dengan
A_/
. Jadi ini menyisipkanA
pada akhir setiap baris, menyelesaikan rotasi dan juga mengubah umpan baris menjadi garis bawah.Ini cocok
_/
dan menggantinya dengan linefeed diikuti dengan garis miring. Alasan saya perlu membuat jalan memutar ini melalui garis bawah adalah kenyataan bahwa /// menerapkan setiap instruksi berulang kali hingga string tidak lagi cocok. Itu berarti Anda tidak akan pernah bisa menggunakan instruksi formulir di/x/axb/
manax
,a
danb
merupakan string arbitrer, karena setelah substitusix
akan selalu tetap cocok. Secara khusus, ini berarti kita tidak bisa hanya memasukkan sesuatu di depan umpan baris. Kita perlu mengganti linefeed dalam proses dan membatalkan penggantian ini.Ini cocok
\A
dan menggantinya dengan\B
, sehingga instruksi setelah baris yang tersisa memproses karakter berikutnya. Setelah keempat instruksi diproses, string yang tersisa terlihat seperti ini:Jadi sekarang baris pertama yang diputar akan dicetak, dan kemudian rangkaian instruksi berikutnya memutar baris yang tersisa oleh sel lain dan seterusnya. Setelah rotasi terakhir, kami memiliki beberapa instruksi lagi yang dapat kami abaikan dan kemudian kami akhiri dengan instruksi tidak lengkap:
Instruksi yang tidak lengkap pada akhirnya hanya diabaikan dan program berakhir.
sumber
A->B
,,B->C
... Tapi itu tidak berhasil. Menghapus char pertama dan menambahkannya di akhir jelas merupakan pendekatan yang jauh lebih baik.Jelly , 7 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Emacs, 47 byte
Di mana
^P
berarti "Kontrol P", dll. Itu 47 byte, karena tombol F3 dan F4 memerlukan dua byte ASCII.Setelah memasukkan input awal, itu mendefinisikan makro keyboard untuk menduplikasi baris dan memindahkan karakter pertama ke akhir. Ini kemudian menjalankan makro lebih jauh 24 kali.
sumber
JavaScript (ES6), 56 byte
Ya, benar, setengah kode saya adalah string alfabet literal. Yang terbaik yang bisa saya lakukan tanpa literal adalah 81 byte:
Jika Anda menginginkan program daripada fungsi, maka hapus
_=>
dan bungkusconsole.log()
dengan biaya 10 byte.sumber
/./g
cocok dengan setiap huruf dari string alfabet yang disediakan. Dalam string pengganti,$&
merupakan kecocokan itu sendiri,$'
bagian dari string setelah pertandingan dan$`
bagian dari string sebelum pertandingan.$`$&$'
Oleh karena itu akan mewakili string asli, tetapi tentu saja sepele untuk memindahkan bagian setelah pertandingan ke awal, sehingga memberikan efek rotasi.Mathematica
6861 byteTerimakasih untuk...
@MartinEnder (7 byte)
sumber
Array
mungkin lebih pendek dari pemetaan atas aRange
.Array
memang menyimpan byte, tetapi Anda kemudian dapat menyimpan yang lain dengan menghindariColumn
:Array[{"A"~CharacterRange~"Z"~RotateLeft~#,"\n"}&,26,0]<>""
(Anda hanya perlu mengganti\n
dengan linefeed yang sebenarnya).Print@@@NestList[RotateLeft,"A"~CharacterRange~"Z",25]
Grid@Array[FromCharacterCode[Mod[+##-2,26]+65]&,{26,26}]
Python 2,
75656158 byteDapatkan alfabet dengan
map(chr,range(65,91))
, kemudian secara manual menerapkan operasi string shift.Terima kasih kepada @LeakyNun dan @TheBikingViking untuk -4 byte!
Berkat @xnor untuk -3 byte!
sumber
a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lebih pendek.a[1:]
bukana[1:26]
.for x in s:print s;s=s[1:]+x
.s='%c'*26%tuple(range(65,91))
.C,
8864 bytePanggilan
f()
tanpa argumen.Cobalah di ideone .
sumber
Piet , 247 byte / 190 kode
Cobalah secara Online!
Jadi, ini memakan waktu lebih lama dari yang saya perkirakan, dan saya punya beberapa ide tentang beberapa pendekatan lain yang lebih efisien (lebih ramah tumpukan), tapi saya akhirnya berhasil bekerja (dan memperbaiki bug interpreter dan menambahkan fitur IDE di sepanjang cara), jadi ini dia. Bukan bahasa byte yang paling efisien, tapi sangat menyenangkan. Berikut tampilan yang lebih besar, dan jejak yang menunjukkan jalur yang diambil. Riwayat di GitHub saya .
Sebagai bahasa berbasis stack, terlalu berbelit-belit untuk dijelaskan secara singkat, tapi inilah gambaran umum dasar tentang apa yang dilakukan berbagai bagian / loop. Semua nama variabel dan fungsi hanya untuk penjelasan, karena tidak ada variabel atau fungsi di Piet.
line_counter
pada 27, memuat '@' ascur_letter
, ditetapkanletter_count
ke 27letter_counter
reset_line
jika nol (light cyan 2-block)cur_letter
ke bagian atas tumpukancheck_done
jikacur_letter > 'X'
(blok merah / merah, sisi kanan)cur_letter
dan mengeluarkannya (sudut kanan bawah)reset_letter
ifcur_letter > 'Y'
(blok hijau muda, kiri)reset_line
cabang (kotak merah muda besar):letter_count
ke 27check_done
cabang (setengah kanan di dalam)line_counter
ke atasline_counter
dan gulungan kembali ke bawah tumpukanreset_line
cabang (sisi kiri, blok hijau):cur_letter
ke '@'sumber
MATL , 8 byte
Dengan terima kasih kepada @Dennis , yang menyarankan bahwa MATL harus memasukkan pengindeksan modular, dan kepada @Suever , yang memiliki ide operasi berpasangan otomatis.
Cobalah online!
sumber
Javascript,
113969176 byteVersi super singkat untuk berjalan di konsol:
Javascript / HTML,
140123118105 byteVersi yang lebih cantik, dengan output HTML yang memudahkan OP untuk menyalin dan menempel:
(EDIT: Saya seharusnya hanya menggunakan string AZ daripada menghasilkannya)
(EDIT 2: Terima kasih kepada @Neil dan @DanTheMan atas masukan mereka (lihat komentar))
sumber
l.slice(0,1)
hanyal[0]
, sementara,27
itu tidak perlu, pada titik mana Anda dapat memindahkan slice dan berakhir denganl.slice(1)+l[0]
. Saya juga berpikir Anda dapat memindahkanconsole.log
ke loop body sehingga menghindari trailing;
.console.log
.PowerShell, 44 byte
sumber
R,
474241 byteCobalah online!
Menghasilkan 27 alphabet, menghilangkan 27-huruf dan mencetak dalam 26 kolom.
Peningkatan terinspirasi oleh @Giuseppe 's solusi .
sumber
rep
tetapi ini sangat terinspirasi! Sangat bagus. Saya akan memilih lagi jika saya bisa.1
bukan""
untukstdout
.Sesos ,
2725 byteCobalah online! Periksa Debug untuk melihat kode SBIN yang dihasilkan. †
Perakitan Sesos
File biner di atas telah dihasilkan dengan merakit kode SASM berikut.
Bagaimana itu bekerja
Kami mulai dengan menginisialisasi rekaman ke
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Ini sebagai berikut.Menulis 26 ke sel, meninggalkan kaset dalam keadaan berikut.
Selama sel di bawah kepala data bukan nol, kami melakukan hal berikut.
Salin nomor ke dua sel ke kiri dan tambahkan 64 ke salinan paling kiri.
Pindahkan salinan paling kiri ke lokasi asli, lalu kurangi 1 dari salinan paling kanan.
Proses berhenti setelah 26 iterasi, karena salinan paling kanan adalah 0 saat itu. Kami memindahkan sel ke kanan, sehingga keadaan akhir rekaman setelah inisialisasi adalah sebagai berikut.
Sekarang kita siap untuk menghasilkan output, dengan mengulangi proses berikut sampai sel di bawah kepala data nol.
Pertama, kita mencetak karakter di bawah kepala data dan bergerak ke kanan, mengulangi langkah ini sampai sel dengan nilai 0 ditemukan. Setelah mencetak
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, rekaman itu terlihat sebagai berikut.Sekarang kita memindahkan data head 27 unit ke kiri (kembali ke 0 terkemuka ) dan ulangi kombinasi print-move sampai sel dengan nilai 0 ditemukan. Ini tidak mencetak apa pun dan meninggalkan kaset sebagai berikut.
Sekarang, kita menulis 10 ke sel saat ini, mencetak karakter yang sesuai (linefeed) dan nol sel dengan panggilan masuk
get
pada input kosong, meninggalkan rekaman tidak berubah.Setelah itu, kami memindahkan konten sel ke kanan ke sel saat ini, lalu memindahkan kepala data ke unit di sebelah kanan.
Iterasi berikutnya sedikit berbeda. Langkah pencetakan pertama mencetak
BCDEFGHIJKLMNOPQRSTUVWXYZ
, meninggalkan kaset sebagai berikut.Sekarang kita memindahkan data head 27 unit ke kiri.
Lingkaran pencetakan berikutnya mencetak
A
dan meninggalkan kaset sebagai berikut.Sekali lagi, kami mencetak umpan baris, memindahkan konten sel ke kanan ke sel saat ini, lalu memindahkan kepala data ke unit ke kanan.
Setelah 24 iterasi lagi, langkah terakhir memindahkan kepala data ke kanan meninggalkan rekaman dalam kondisi berikut.
Sel di bawah kepala data sekarang 0 dan program berakhir.
† TIO menggunakan versi Sesos yang lebih baru, yang kompatibel dengan SASM, tetapi menghasilkan kode SBIN yang lebih pendek.
sumber
Haskell,
565352 Bytespanjang yang sama: (menggunakan saran oleh @AndersKaseorg)
untuk melakukan hal-hal modular Anda harus mengimpor Data.Char untuk mendapatkan fungsi chr,
745958 Bytes adalah yang terbaik yang bisa saya dapatkan dengan itu: (terima kasih kepada @nimi untuk menyarankan fungsi toEnum)Ini mungkin bisa jauh lebih pendek, tapi saya tidak tahu ada trik golf Haskell.
mapM bekas, bukan mapM_ (lihat komentar @ Lynn)
sumber
['A'..x]
menjadi['A'..'Z']
, yang sekarang digunakan dua kali, dan angkat ke definisi.chr
dariData.Char
, Anda dapat menggunakantoEnum
bukan dan menghilangkanimport
.mapM_
kemapM
harus baik-baik. Mungkin ini layak untuk sebuah meta post ...R, 53 byte
Ini dia penerjemah online .
sumber
Retina,
3631 byte5 byte berkat Martin Ender.
Linefeed terkemuka adalah signifikan.
Cobalah online!
Kredit .
sumber
Brain-Flak , 222 byte
Cobalah online!
Saya baru mengenal Brain-Flak, jadi mungkin ini bisa banyak bermain golf, tapi setidaknya ini percobaan pertama. Ini menyimpan 27 huruf penuh pada tumpukan kiri, kemudian memindahkan huruf ke kanan dan mengganti setiap 27 huruf dengan baris baru.
Kode sumber saya agak membingungkan, tetapi saya akan menambahkannya.
sumber
V ,
36, 10 byteCobalah online!
Ini menggunakan pengkodean "Latin1".
Penjelasan:
sumber
C #, 98 byte
Saya telah mencoba untuk melihat apakah saya dapat menghasilkan huruf lebih pendek dari sekadar menginisialisasi mereka sebagai string, tetapi itu tidak benar-benar mungkin. Huruf-hurufnya adalah 26 byte dan potongan ini saja
adalah 25 byte. Saya pikir menginisialisasi mereka dan kemudian menambahkannya dengan + = a adalah solusi yang baik, tetapi dengan C # Anda dibatasi oleh bytecount fungsi seperti
Substring()
danConsole.WriteLine()
.Usaha saya di 98 byte:
sumber
Oktaf, 27 byte
Kami menambahkan baris dan vektor kolom, dan Oktaf dengan baik memperluas dimensi sigleton, tidak perlu
bsxfun
(seperti yang Anda perlukan di Matlab).sumber
q, 20 byte
sumber
-1_'26 27#.Q.A
Jawa,
190176172163 bytesumber
System.out.printf("%c", ...)
->System.out.write(...)
,'\n'
->10
,'A'
->65
. Perhatikan bahwa saran umpan baris baru / baris diizinkan, tetapi persyaratan output ideone . :)String[]a
dapat dihapus; danint s=0;while(s<26){p(s,26);p(0,s++);p(-1,0);}
bisafor(int s=0;s<26;p(0,s++),p(0,s++))p(s,26);
.Bash, 66 byte
Saya membuat alfabet penuh
A
, kemudian mencetak 26 versi yang diputar dengan mengambil karakter mulain
dan menambahkan posisi sebelumnyan
.sumber
Perl, 42 byte
Kredit penuh ke @Dom Hastings untuk ini.
Atau (jumlah byte yang sama):
Perlu
-M5.010
atau-E
untuk dijalankan, misalnya:Jawaban lama saya (55 byte):
Perlu
-M5.010
dijalankan. Jadi jalankan dengan:Mungkin mungkin untuk melakukan yang lebih pendek, tetapi saya belum mengetahui caranya ... belum
sumber
@l=A..Z;say@l[$_..25],@l[0..$_-1]for 0..25
dan$_=join"",A..Z;eval'say;/./;$_=$\'.$&;'x26
keduanya membutuhkan-E
/-M5.010
.