Keluarkan atau tampilkan tiga baris teks berikut, persis seperti yang ditunjukkan di bawah ini. Newline tambahan diterima.
bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ
Blok teks itu sama dengan yang di bawah, tetapi di mana kolom ke-n diputar n kali ke bawah:
!"#$%&'()*+,-./0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
Perlu diingat bahwa ini adalah tantangan kompleksitas-kolmogorov , sehingga format output tidak fleksibel.
code-golf
string
kolmogorov-complexity
alphabet
Stewie Griffin
sumber
sumber
Jawaban:
Java 8,
16916215014611611310695949392919084 byteYay, akhirnya kami berhasil! Kami telah mengalahkan output literal 88-byte yang dapat ditemukan di bagian bawah. Terima kasih untuk semua yang berpartisipasi dalam golf!
-7 byte terima kasih kepada @StewieGriffin .
-42 byte terima kasih kepada @Neil .
-11 byte terima kasih kepada @PeterTaylor .
-3 byte terima kasih kepada @ OlivierGrégoire .
-6 byte berkat @ OlivierGrégoire dan @ Neil (Olivier menyarankan pelabuhan Neil jawaban JavaScript ).
Cobalah online.
Penjelasan:
Lihat di sini apa yang dilakukan masing-masing bagian aritmatika, dan bagaimana hasilnya pada karakter yang benar.
Java 8, 88 byte
Membosankan,
tetapi memanfaatkan rotasi kolom yang diinginkan tidak akan lebih pendek di Jawa pasti ..Saya berdiri dikoreksi!Akan memposting solusi dalam beberapa saat baik cara untuk melihat berapa banyak byte yang berbeda.Ternyata perbedaannya hanya -4 byte! : DCobalah online.
sumber
(x, y)
, yang kemungkinan besar akan mengalahkan pendekatan 169-byte Anda dan mungkin bahkan string literal.v->{String a="";for(int i=2,j,t;++i<6;){for(j=31;++j<58;a+=(char)(t<1?j+65:t>1?j:j+33))t=(j-i)%3;a+="\n";}return a;}
v->{for(int i=0,r,c;++i<81;System.out.printf("%c",c<1?10:32*++r+c-1/r))r=(i/27+28-(c=i%27))%3;}
c
seluruhnya)Sekam , 13 byte
Perhatikan ruang trailing. Cobalah online!
Penjelasan
sumber
SPL (Bahasa Pemrograman Shakespeare),
167916181600 byteSaya memiliki beberapa masalah dengan juru bahasa ( https://github.com/drsam94/Spl ), jadi tidak sekecil yang saya kira bisa. Tapi setidaknya ini bekerja :)
Berikut logika yang sama di PHP, untuk membuatnya sedikit lebih mudah untuk melihat apa yang terjadi.
sumber
JavaScript (ES6),
8675 byteSunting: Disimpan 11 byte berkat @Ryan. Sekarang 10 byte lebih pendek dari literal!
JavaScript (Node.js) , 64 byte
Cobalah online! Terima kasih kepada @Ryan.
sumber
f=(i=k=0)=>i-80?String.fromCharCode(++i%27?(4-k++%3)*32%97+i%27:10)+f(i):''
dan 11 lainnya di lingkungan Node sebagai tambahan:f=(i=k=0)=>i-80?Buffer([++i%27?(4-k++%3)*32%97+i%27:10])+f(i):''
05AB1E ,
1715 byteDisimpan 2 byte berkat Erik the Outgolfer
Cobalah online!
Penjelasan
sumber
εN
harus menjadi sesuatu. Menggabungkan dua idevyNFÁ])ø»
dan ide Anda.N
saat menggunakanε
. Secara teknis tidak cocok karenaε
bukan loop, meskipun seperti yang kadang-kadang kita gunakan seperti itu, akan lebih baik untuk memilikinya.CJam (18 byte)
Demo online
Pembedahan
Pendekatan yang jelas adalah menghasilkan garis asli, zip, rotate with
ee::m>
, dan zip back. Tetapiee::
cukup panjang, dan lebih pendek untuk menghasilkan kolom secara langsung.sumber
Python 2 , 72 byte
Cobalah online!
Ini berfungsi dengan menghapus
31.333..
dari karakter sebelumnya, menambahkan97
ketika codepoint sebelumnya kurang dari 60, dan mengurangi26
pada akhir setiap baris.sumber
R ,
6463 byteCobalah online!
-1 byte terima kasih kepada Giuseppe
Saya sampai pada hal ini melalui sedikit trial and error, jadi saya berjuang dengan penjelasan singkat. Pada dasarnya, alih-alih kode karakter, saya memulai dengan urutan yang lebih sederhana yaitu 1:81 yang mewakili blok teks asli (3 * 26 ditambah 3 baris baru), dan memeriksa indeks di mana nilai-nilai ini berakhir di blok yang diputar. Ini mengikuti urutan reguler yang turun 26 setiap kali, modulo 81 (atau setara, meningkat sebesar 55 mod 81). Saat itu adalah masalah menciptakan kembali urutan itu
(0:80*55)%%81+1])
, memetakan ke nilai unicode nyatac(32:57,10,65:90,10,97:122,10)
, mengkonversi ke karakter dan mencetak.sumber
55
daripada-26
sejak-26 == 55
(mod 81).Japt ,
1715 byteUji secara online!
Penjelasan
7 kemungkinan 15-byters lainnya:
sumber
CJam ,
2321 byteCobalah online!
Penjelasan
sumber
MATL , 16 byte
Cobalah online!
Penjelasan
sumber
1:26
sebagai shift. Saya harus mencobanya dalam jawaban R saya ...&
adalah tambahan yang bagus, dari ide Suever :-)Jelly , 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Perl 5 , 46 byte
Disimpan 13 byte berkat sihir misterius @TonHospel !
Cobalah online!
sumber
$i++
adil$_
dan Anda dapat menggunakannyasay
sebagai gantiprint
jadi ini benar50
{}
di peta untuk49
:say map$/x/26|52/.chr$_%26+(32,65,97)[$_%3],0..77
47
:print map{chr$n+++$_,$/x!($n%=26)}(32,97,65)x26
. Sayangnyasay
memberi satu baris baru terlalu banyak.48
:say map$/x/.A/.chr$n++%26+(65,32,97)[$n%3],A..BZ
R ,
8886 byteCobalah online!
R mengerikan dalam manipulasi string dan meskipun memiliki beberapa matriks bawaan yang rapi, rotasi adalah hal lain yang tidak mudah dilakukan.Saya akan dengan senang hati memberikan hadiah kepada siapa saja yang bisa bermain golf di R.Meskipun saya telah menemukan jawaban yang lebih pendek, saya akan tetap memberikan hadiah 50 rep untuk jawaban R pertama lainnya yang lebih pendek dari 88 byte.
Saya kira saya akan menghadiahkan diri saya hadiah jika saya bisa, tetapi ini adalah keseluruhan dua byte lebih pendek dari jawaban "membosankan"! Saya menghindari rotasi dengan hanya menggunakan kegemaran R untuk daur ulang.
EDIT: jawaban user2390246 benar-benar mengungguli saya dan saya akan memberikan hadiah 100 poin karena solusi itu jauh lebih unggul.
Untuk sampai di sini, saya mendekonstruksi output yang diinginkan ke titik kode ASCII mereka dengan
utf8ToInt
(menghapus baris baru), membangun sebuah matriks, dan menjalankannyadiff
untuk mendapatkan perbedaan arah kolom. Memperhatikan periodisitas di sana, saya mulai membuat matriks dengan gaya golf, berharap dapat digunakandiffinv
untuk membuat ulang yang asli.Berkat periodisitas, kita dapat membuat ulang
diff
ed matrix dengan memaksa R untuk mendaur ulang dengan panjang non-banyak, dan mengekstrak kolom yang sebenarnya kita inginkan:Kemudian kita membalikkan proses ini, dengan
diffinv
untuk menciptakan kembali poin kode, menambahkan deretan10
(baris baru) ke bawah, kembali ke ASCII denganintToUtf8
, dancat
hasilnya.sumber
Stax ,
1412 byteJalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
Program ini hanya menggunakan fitur-fitur yang telah tersedia sejak rilis awal stax, tetapi tampaknya saya lupa
K
untuk cross-map ketika saya awalnya menulis jawaban ini.Satu hal yang hampir menarik untuk dicatat tentang jawaban ini adalah bahwa itu
R
adalah instruksi yang tidak perlu karenaK
secara implisit mengubah bilangan bulat menjadi rentang. Namun tidak ada cara untuk mendorong3
dan26
tanpa byte tambahan di antaranya.sumber
PowerShell , 53 byte
Cobalah online!
Saya melihat ini mirip dengan jawaban Dom's Perl, tetapi saya tiba secara mandiri.
Ini mengeksploitasi fakta bahwa polanya berjalan
Symbol - Lowercase - Capital
, bahkan ketika membungkus baris baru (8 - z - A
, misalnya), dan dengan demikian hanya menambahkan offset yang sesuai (dipilih melalui$j++%3
) ke angka saat ini$_
sebelum-join
menyatukan mereka menjadi satu string. Itu dilakukan tiga kali untuk menghasilkan tiga garis (melestarikan di$j
antara iterasi). Tiga baris itu dibiarkan di saluran pipa, dan yang tersiratWrite-Output
memberi kita baris baru secara gratis.sumber
Julia 0,6 , 79 byte
[' ':'9' 'A':'Z' 'a':'z']
adalah array karakter 2d yang tidak diputar,[n,mod1(i-n,3)]
mengindeks ke dalam array dengan rotasi yang sesuai.prod
mengambil Vektor Karakter ke String (karena perkalian digunakan untuk string bergabung). Ada dua pemahaman vektor bersarang menghasilkan vektor yang berisi 3 string, laluprintln.
mencetak setiap string dalam vektor diikuti oleh baris baru.TIO tidak memiliki metode yang tepat untuk melipatgandakan (dengan
prod
) dua karakter untuk mendapatkan sebuah String. Saya tahu metode yang ditambahkan agak baru-baru ini, tetapi versi TIO tampaknya sama dengan versi di PC saya di mana kode ini bekerja, jadi saya tidak bisa sepenuhnya menjelaskan mengapa itu tidak bekerja pada TIO.Salin contoh tempel (yang
;
tidak perlu, itu hanya menekan output tambahan dalam REPL):sumber
Arang ,
262115 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
J ,
29, 2725 byte-2 bytes berkat FrownyFrog -2 bytes berkat miles
Cobalah online!
Pendekatan awal: J , 29 byte
Penjelasan:
i.26
- kisaran 0-2632 65 97+/]
- buat tabel 3-baris untuk karakter&.|:
transpos lalu lakukan kata kerja berikutnya (|.
) dan transpos lagi-|."_1
putar setiap baris n kaliu:
konversi ke unicodeCobalah online!
sumber
|:u:(<26)2&(|.>:)32 65 97
menghemat 2 byte.C,
7069676064 byte+4 byte untuk membuat fungsi ini dapat digunakan kembali .
Jawaban 60-byte tidak valid yang tidak dapat digunakan kembali:
Port of
Java 8 answer@Neil 's JavaScript answer .Cobalah online.
sumber
i=t=0
.APL + WIN, 26 byte
Indeks asal 0
Hasilkan matriks nilai indeks integer dari karakter dalam vektor atom APL.
Putar setiap kolom ke bawah dengan nilai nomornya.
Gunakan indeks yang dihasilkan untuk menampilkan karakter dari vektor atom.
sumber
Vim,
8179 bytePenjelasan (disederhanakan)
sumber
C, 72 byte
sumber
Python 2 , 65 byte
Cobalah online!
sumber
brainfuck ,
121115 byteTerima kasih kepada @ JoKing karena telah menghemat 6 byte!
Cobalah online!
sumber
+++[[<+>>++<-]>]
benar-benar adalah awal dari segalanya, ya? Terima kasih!Japt , 17 byte
Menguji
Penjelasan
sumber
;Bå_cÄ é}"@`" ·y
C
setelah makan siang. Tidak tahu bagaimanay
dan·
berakhir dengan cara yang salah; Saya harusCtrl+Z
mengedit terlalu banyak sebelum masukCtrl+A
!Python 2 , 79 byte
Cobalah online!
sumber
APL (Dyalog Unicode) , 23 byte ( Adám's SBCS )
Cobalah online!
-1 terima kasih kepada Adám .
Berjalan di lingkungan yang interaktif.
Diasumsikan
⎕IO←0
.sumber
(⎕UCS-⊖∘↑32 65 97+⊂)⍳26
atau(⎕UCS-⊖32 65 97∘.+⊢)⍳26
K4 , 38 byte
Larutan:
Contoh:
Penjelasan:
9 karakter untuk melakukan rotasi ...
sumber
Perl,
4946 byteatau
sumber
$^x8
, tetapi tidak dapat memikirkan var lain dengan panjang yang cukup, mungkin"@INC"
tetapi terlalu panjang, dan menggunakan"@-"
bukannya$n++
, tetapi masih, dengan panjang yang sama. Kecuali itu membantu Anda mengecilkan ini lebih jauh? Kecuali Anda menambahkan-p
flag dan memiliki output implisit?