Ini adalah keyboard QWERTY.
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
Kita bisa "spiral keluar" pada keyboard ini, mulai dari G. Spiral akan mulai dari G, pergi ke H, lalu ke Y, lalu ke T, lalu F, lalu V, lalu B, lalu N, lalu J, lalu U , lalu R, lalu D, lalu C, ... dll. Tantangan Anda adalah, mengingat angka 1 ≤ N ≤ 26, menghasilkan karakter N pertama dalam spiral ini. (Jika Anda bingung, lihat gambar di akhir posting.)
Tangkapan? Skor program Anda sebanding dengan indeks karakter yang ditemukan di dalam spiral!
Mencetak gol
- Untuk setiap huruf (tidak peka huruf besar-kecil) dalam kode Anda, tambahkan indeks karakter tersebut di dalam spiral ke skor Anda (mulai dari 1).
- Untuk setiap karakter yang tidak ada dalam spiral, tambahkan 10 ke skor Anda.
- Skor terendah menang.
Misalnya, program print("Hello, World!")
memiliki skor 300.
Untuk kenyamanan Anda, saya telah menulis program grader otomatis.
Aturan lainnya
- Kiriman Anda dapat berupa program atau fungsi.
- Anda dapat mengambil N mulai dari 0 atau 1 dan berakhir pada 25 atau 26, masing-masing, tetapi output masih harus dimulai dengan "G" dan diakhiri dengan "GHYTFVBNJURDCMKIESXLOWAZPQ".
- Anda harus menampilkan karakter dalam spiral secara berurutan .
- Jika suatu fungsi, Anda dapat mengembalikan daftar karakter alih-alih string.
- Anda mungkin memiliki satu trailing newline mengikuti output.
- Anda dapat menggunakan huruf kecil alih-alih huruf besar, atau kombinasi keduanya.
Uji kasus
number -> output
1 -> G
2 -> GH
5 -> GHYTF
12 -> GHYTFVBNJURD
15 -> GHYTFVBNJURDCMK
24 -> GHYTFVBNJURDCMKIESXLOWAZ
26 -> GHYTFVBNJURDCMKIESXLOWAZPQ
Foto-foto
Spiral yang ditumpangkan:
ascii-art
code-challenge
keyboard
Conor O'Brien
sumber
sumber
Jawaban:
Japt ,
304264162 poinMenyimpan 40 poin berkat @ ConorO'Brien
Uji secara online!
Untuk menyimpan poin sebanyak mungkin, seluruh string dikondensasi menjadi 9 karakter Unicode dengan menginterpretasikan setiap proses 3 huruf sebagai angka dasar-36, kemudian mengkonversi ke titik kode. Program itu sendiri mengambil string terkompresi ini (yang biayanya 110 poin, termasuk tanda kutip) dan memetakan setiap
c
kode sandi dengan mengonversinya menjadis
tring di base-36 (G
setelah;
di awal).î
mengambil {input} chars pertama dari ini, yang dicetak secara implisit.sumber
C, skor: 544
Cobalah online!
sumber
g
adalah huruf termurah per skor yang digunakan dalam tantangan.Spiral , skor:
619215127471546554191Seorang juru bahasa dapat ditemukan di sini .
Penjelasan:
Program dimulai pada
0
karakter di baris keempat. Potongan kode pertama yang dijalankan adalah0;vg
.;
mengambil nomor sebagai input dan menempatkannya di tumpukan.v
menempatkan apa yang ada di register (nol) ke dalam tumpukan. Ini akan digunakan sebagai penghitung.g
adalah label, ketika tercapai, kontrol melompat ke kemunculan hurufg
dalam kode.Jadi di sinilah kontrolnya sekarang:
Karena ada spasi putih di semua arah lain, penunjuk instruksi mulai bergerak ke atas.
v
menempatkan nol ke dalam tumpukan, danX
segera mengeluarkannya dari tumpukan. Karena nilai yang muncul adalah nol, penunjuk instruksi bergerak keX
(jika tidak akan memperlakukannya sebagai spasi).Secara default, aliran kontrol dalam mode belok kanan, jadi sekarang ketika mencapai persimpangan, penunjuk instruksi berbelok ke kanan.
v
lagi-lagi mendorong angka nol ke tumpukan,*
menambah register dengan satu.Tempat berikutnya
v
apa yang ada di register (nomor 1) ke dalam tumpukan, penunjuk instruksi mencoba untuk berbelok ke kanan, memukul yang berikutnyaX
. Nilai yang baru ditambahkan ke stack muncul dan ditempatkan di register. Karena itu bukan nol,X
tidak dimasukkan, dan IP melanjutkan ke yang berikutnya*
di sebelah kanan, lagi-lagi menambah nilai dalam register.Ini terjadi berulang-ulang sampai kita mencapai akhir bagian ini dan garis
*
s dimulai. Sekarang nilai dalam register adalah 6, yaitu suratg
ASCII dikurangi surat ASCIIa
. Maka dengan garis 97*
detik kami menambah nilai dalam register menjadi 103, yang cocok dengan huruf yangg
ingin kami cetak.v
mendorongnya ke tumpukan, danP
label lain setelah memukul yang kita lompat ke yang lainP
di baris pertama kode.Di sini
.
muncul nilai dari tumpukan dan mencetaknya sebagai karakter. Setelah ituX
muncul nol asing dari tumpukan, kemudian~
membandingkan dua nilai yang tersisa di tumpukan (nilai menjadi penghitung dan nilai input). Jika nilainya sama, operator menempatkan nol dalam tumpukan (jika tidak -1 atau 1). Sekali lagi, kontrol mencoba berbelok ke kanan.X
muncul nilai perbandingan dari tumpukan, jika itu nolX
,, dan setelah!
dimasukkan, mengakhiri program.Kalau tidak, IP berlanjut ke
Z
, yang merupakan label yang dalam hal ini hanya melompat satu langkah ke kanan. Alasan untuk melakukan ini adalah bahwa melompat menetapkan nilai dalam register kembali ke nol.*
menambah register danv
menempatkan 1 yang dihasilkan ke dalam tumpukan.+
muncul dua elemen teratas tumpukan (1 dan penghitung), menambahkannya, dan menempatkan hasilnya di tumpukan (pada dasarnya ini menambah penghitung dengan satu).^
menyalin hasil dari tumpukan ke register tanpa menghapusnya dari tumpukan.#
mengurangi nilai dalam register dengan satu,v
mendorong nilai yang dikurangi ke stack, IP mencoba untuk berbelok ke kanan, danX
muncul nilai dari stack. Jika nilainya tidak nol, IP terus bergerak ke timur, menurunkan nilai dalam register, hingga mencapai nol, dan IP memasukiX
cabang.Cabang mengarah ke label yang sesuai dengan nilai penghitung. Setelah memukul label, kontrol melompat ke kemunculan label lainnya di bagian di mana kita mulai dengan label
g
, memulai iterasi lain. Seperti halnyag
, nilai dalam register akan bertambah hingga nilai ASCII dari surat yang perlu kita cetak. Kemudian karakter dicetak dan penghitung bertambah, label lain dipilih. Ini terjadi sampai setelah iterasi terakhir penghitung sama dengan input, dan program berakhir.Edit:
Mencapai hal yang sama dengan
tetapi dengan spasi yang lebih sedikit.
Edit 2:
Dapat digunakan sebagai ganti:
sumber
Haskell , 471
Cobalah online!
Ini sedikit patokan, saya merasa harus ada cara yang lebih baik, tapi ini yang terbaik yang saya temukan sejauh ini.
Penjelasan
Kurasa aku harus menjelaskan ini untuk mereka yang tidak terlalu mengenal Haskell. Fungsi ini
take
mengambil elemen n pertama dari daftar. Disebut seperti ini:Kami ingin mengambil elemen pertama dari sengatan
"GHYTFVBNJURDCMKIESXLOWAZPQ"
, jadi kami ingin sesuatu sepertiKita bisa melakukan yang lebih baik, kita dapat menambahkan
take
menggunakan backticksDan sekarang ini bisa dibuat pointfree
sumber
partial
di Clojure. Ini adalah tujuan saya, tetapipartial
terlalu mahal.Jelly , 211 skor
19 byte
Cobalah online!
menyimpan banyak skor berkat saran Emigna untuk menggunakan
œ?
: Dsumber
Vim ,
461418Terima kasih @pacholik untuk skor -43!
Cobalah online!
sumber
CGHYTFVBNJURDCMKIESXLOWAZPQg©G@" D
(© melarikan diri)Befunge, Nilai: 531
Saya merasa tantangan ini akan lebih menarik jika output harus dalam spiral juga.
sumber
TI-Basic (TI-84 Plus CE),
454432 poin-22 poin dari Conor O'Brien
Jalankan dengan
5:prgmNAME
.Mengembalikan / mencetak
sub
string dari1
keAns
(input nomor).TI-Basic adalah bahasa yang tokenized , jadi saya mencetak ini dengan nilai byte dari token.
sub(
adalah 0xbb 0x0c, jadi 20"
adalah 0x2a, jadi*
, jadi 10 * 2 = 20Huruf besar tidak berubah, jadi stringnya 351
,
adalah 0x2b, jadi+
, jadi 10 * 2 = 201
adalah 0x31, jadi1
, jadi 10Ans
adalah 0x72, yaitur
, jadi, jadi 1120 + 20 + 351 + 20 + 10 + 11 = 432
sumber
Python 3, skor =
762753Input berbasis 1. Ini lebih buruk daripada pendekatan sepele, karena menggunakan 37 non-huruf. Ini agak menarik.
Terima kasih untuk Leo .
Cobalah online!
sumber
[:g*3][-3:]
bisa[g*3-3:g*3]
menurunkan skor total dengan 9 poin05AB1E , skor: 204
Cobalah online!
sumber
Brainf ** k, skor = 2690
Masukkan satu byte mulai dari
0x1
hingga0x1a
.Cobalah online!
sumber
APL (Dyalog) , skor: 391
Cobalah online!
Satu-satunya penggunaan untuk huruf Latin di Dyalog adalah dalam nama variabel dan beberapa fungsi sistem. Selain itu, hanya mesin terbang dan beberapa huruf Yunani yang digunakan.
sumber
Python 3, 522
Cobalah online!
Lambda anonim yang memanfaatkan sling string Python (
"asdf"[:i]
mendapati
karakter pertama"asdf"
)sumber
Clojure,
484474 poin-10 poin karena ternyata
%
bisa ada setelah angka tanpa spasi memisahkan mereka !? Saya mungkin harus kembali dan meningkatkan beberapa pengiriman.Fungsi anonim. Pada dasarnya port Clojure dari apa yang sudah diposting. Skor bagus! Saya pikir ini adalah program Clojure pertama yang pernah saya tulis yang tidak mengandung satu ruang.
sumber
Ly , 521 poin
Cobalah online!
Saya merasa ini tidak dapat dioptimalkan.
sumber
Bash , skor: 465
Cobalah online!
sumber
Sekam , 293 byte
Ini adalah yang terpendek yang dapat saya temukan, lebih dekat berikutnya
¨gHYtfvB⌋ȷÜdCmkÏex←ẆAzpq¨
dengan skor 293 ..Cobalah online!
Penjelasan
Pencarian brute force, ternyata semua huruf kecil memberi skor terbaik. Ini pada dasarnya sama dengan solusi @Wheat Wizard,
take
(↑
) pada string terkompresi (¨
).sumber
Gangguan Umum, skor: 580
Cobalah online!
sumber
Excel, 490 poin
Convention for Excel ansers adalah untuk mengambil input dari
A1
. Mengubah ini untukG1
memotong 22 poin (468).sumber
C # , skor 546
sumber
Rust, skor 443
Jarang bahwa Rust pandai kode golf tetapi di sini ia mengalahkan banyak bahasa
sumber
Golang, skor 861
Mainkan online!
sumber
Javascript ES6, 527 poin
Cobalah !
sumber
PHP, 590 poin
Cobalah online!
sumber
PHP, skor 584
mengotak-atik kamus; fakta bahwa xoring string memotongnya menjadi
substr
usang.Cobalah online .
sumber
Mathematica, 528
Cobalah online!
sumber
Pyth , skor: 371
Coba di sini.
Bagaimana?
sumber
Ruby , 453 poin
Cobalah online!
sumber
> <> , 558 + 16 = 574 poin
Menggunakan
-v
bendera untuk mendorong input ke tumpukan.Dorong spiral ke tumpukan dengan urutan terbalik, lalu putar input ke atas. Kemudian, sementara bagian atas tumpukan bukan nol, cetak huruf berikutnya dan kurangi bagian atas tumpukan.
Cobalah online!
sumber
Pyth , 261 poin
Coba di sini!
Ini menghasilkan huruf besar. Untuk huruf kecil, Anda dapat mencoba alternatif 261 byter .
sumber