Tantangan
Tampilkan alfabet dari huruf tertentu yang dibaca dari input konsol. Jika huruf besar, Anda harus menampilkan alfabet huruf besar. Alfabet yang dicetak harus diakhiri dengan huruf preseden dari yang dimasukkan. Jika parameter tambahan ditambahkan ke input (titik sederhana .
) alfabet harus dicetak satu huruf di setiap baris. Jika tidak, alfabet harus dicetak pada baris yang sama, dipisahkan oleh spasi sederhana. Jika input yang salah dikirimkan ke program, ia tidak akan mencetak apa pun.
Contoh input:
Memasukkan:
c
Program ouput:
d e f g h i j k l m n o p q r s t u v w x y z a b
Memasukkan
H.
Program ouput:
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
Jawaban:
GolfScript
48 75 73 70 67 66 63 5753Demo online:
Test case 1 ('c')
Test case 2 ('H.')
Test case 3 (input tidak valid)
Memperbarui:
Sekarang aturan terakhir juga diterapkan. Terima kasih kepada Ventero karena menunjukkan masalah ini.
Memperbarui:
Saya menulis ulang kode dari awal dan menemukan cara baru untuk mempersingkat lebih jauh.
Sejarah modifikasi:
sumber
If wrong input is send to the program it will not print anything.
C,
135 129128 karakterSial, begitu banyak angka sihir yang berbeda, tetapi tidak ada cara untuk menghilangkannya.
Harus dijalankan dengan input sebagai parameter program. Sekarang ikuti persyaratan "input salah".
Penjelasan:
Bagian ini
**b+6&31
menggunakan fakta bahwa kode ASCII untuk karakter huruf kecil / huruf besar adalah sama jika hanya melihat 5 bit terakhir dan 5 bit sisanya berada dalam kisaran 1..26.Versi tanpa persyaratan "input salah" (82 karakter):
sumber
test
, sebut sepertitest c
atautest X.
main(a,b)char**b;{
. Juga, orangb++
akan membiarkan Anda mengganti*b[1]
->**b
danb[1][1]
->1[*b]
.Ruby,
727161 karakterVersi ruby ini menggunakan ekspresi reguler untuk memverifikasi input. Untungnya, metode string Ruby
succ
melakukan sebagian besar pekerjaan untuk kami (termasuk bungkus-sekitar).Sunting: 61 karakter dengan bantuan chron dan Ventero .
sumber
c=gets[0];25.times{$><<c.next![-1]+($1?$/:' ')}if~/^[a-z](\.)?$/i
gets;25.times{$><<$_=$_.next[0]+($1?$/:' ')}if~/^[a-z](\.)?$/i
- pada dasarnya sama dengan Anda hanya menyalahgunakan$_
dan$/
+=
Sebagai gantinya+
, Anda bisa meletakkan tanda kurung di sekitar$1?$/:' '
.Ruby:
12711392 (?) Karakter(Saya tidak dapat menemukan aturan tentang skor penalti menggunakan
-p
. Menambahkan 1 untuk saat ini. Jika salah, mohon koreksi saya.)Contoh dijalankan:
sumber
Ruby,
10195Cobalah online
sumber
('a'..'z').to_a
=>[*?a..?z]
GolfScript,
8072 KarakterBanyak kode yang menguji input yang valid dan opsi "print nothing". Logika sebenarnya hanya 37 karakter.
Uji kasus secara online
sumber
penalti q / k4
66 64 63 60 5856 + 2penalti untuk variabel global init, algoritma adalah 56 seperti di bawah ini:
56:
58:
60:
63:
64:
EDIT:
Menambahkan penalti 2 untuk inisialisasi global (x :), sama jika membungkus fungsi ke dalam tanda kurung (seperti yang disarankan slackware)
tidak yakin apakah mengubah namespace harus dihukum juga ... maka itu adalah 3 lainnya
Contoh:
sumber
Perl,
1311271171121061041029896929190937166656458 karakterPemakaian:
Satu karakter telah ditambahkan ke hitungan untuk
n
opsi.Pemotongan terbesar hanya mungkin karena melihat perilaku
++
pada karakter dalam jawaban Jon Purdy .sumber
s/a.$1/az/
untuk menghemat 2 lagi.chop().($2?$/:$")
->chop,$2?$/:$"
untuk 4 lainnyaPerl,
149, 167Memperbarui
sumber
$s=($d)?"\n":" ";
dengan$s=$d?$/:$";
dan mungkin hanya menyingkirkan$s
semuanyaPython, 83
sumber
PHP,
120119113sumber
$v[1]=='.'?"\n":" "
hasil dalam variabel $ s, biarkan PHP menghitungnya setiap kali dalamecho
pernyataan. Dengan begitu Anda dapat menyimpan 6 karakter.Mathematica
158 159 204 199 183 167 165162Kode
Pemakaian
sumber
J 43
Contoh:
opqr tuvwxyzabcdefghijklmn
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
Solusi ini berkembang pada forum pemrograman J: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Penulis: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
Penjelasan
Frase J dieksekusi mulai di sebelah kanan, meneruskan hasil yang sedang berjalan ke kiri saat dievaluasi. Karena bersifat interaktif, kita dapat melihat potongan-potongan solusi secara terpisah untuk lebih memahami mereka.
Bagian tengah menghasilkan alfabet huruf besar dan kecil di Unicode:
Kata kerja "u:" mengubah argumen hak numerik menjadi karakter Unicode. Argumen numerik dihasilkan dari nilai ASCII untuk karakter huruf besar dan kecil dengan menambahkan angka untuk "A" dan "a" masing-masing ke nilai dari 0 hingga 25 yang dihasilkan oleh "i.26":
Bagian kanan,
mencari ke atas (i.) posisi argumen kanan (]) di sebelah kiri ([) - yang merupakan vektor huruf di atas - dan menjatuhkan (}.) satu lagi (>:) daripada angka itu. '' 0 'menerapkan frasa ini untuk argumen 0-dimensional (skalar).
Frasa "25 {." Mengambil 25 elemen pertama dari vektor di sebelah kanan.
Frasa kedua dari belakang "1j1 #" di sebelah kiri mereplikasi argumen kanannya sesuai dengan angka di sebelah kiri. Sejumlah sederhana melakukan replikasi sederhana:
Namun, bilangan kompleks - ditunjukkan oleh "j" antara bagian nyata dan imajiner - memasukkan elemen isi sesuai dengan bagian imajiner. Di sini kami menunjukkan satu elemen isian dengan elemen di sebelah kanan "j".
Seperti kebanyakan primitif J, kata kerja replikasinya (#) bekerja pada array numerik dengan cara analagous tentang cara kerjanya pada array karakter. Seperti yang ditunjukkan di sini,
kita melihat bahwa elemen isi numerik default adalah nol sedangkan untuk karakter itu adalah karakter spasi.
Akhirnya, token paling kiri "|:" memindahkan hasil dari kata kerja sebelumnya ke kanan.
Penjelasan diberikan oleh Devon McCormick. Devon terima kasih.
sumber
brainfuck, 303
Saat ini tidak mendukung
If wrong input is send to the program it will not print anything
bagian, dan mungkin bisa lebih pendek. Saya berencana memperbaikinya nanti. Saat ini otak saya terlalu sibuk untuk melanjutkan.sumber
C, 110
Terkadang mencetak "spasi" antar huruf, kadang tidak.
Sedikit lebih mudah dibaca:
Berjalan:
sumber
JavaScript, 137
Sayangnya agak bertele-tele (
String.fromCharCode
dancharCodeAt
).sumber
Perl,
77767068Suntingan:
Menyimpan karakter menggunakan regex alih-alih
substr
.Disimpan 6 karakter menggunakan
map
bukanfor
.Disimpan 2 karakter dengan menghilangkan baris terakhir.
sumber
\n
pada final Andaprint
diperlukan, yang akan menghemat beberapa karakter\n
, terima kasih.R, 219
Jelek, lama ... masih bekerja.
Pemakaian:
sumber
C, 146 karakter (mengerikan)
Saya tidak terlalu berpengalaman dalam C, yang mungkin menunjukkan ...>. <Saya punya perasaan bahwa karakter menjadi bilangan bulat akan membantu, tetapi tampaknya tidak membuat dampak sebesar yang saya harapkan ... Saya akan meninggalkan upaya saya di sini, jangan ragu untuk menyarankan perbaikan.
Versi tidak minminasi:
sumber
VBA 225
Diformat untuk dijalankan dari jendela langsung:
Dipecah menjadi garis-garis individual (perlu dikelilingi oleh
Sub
blok dan membutuhkanprint
metode yang berbeda untuk bekerja dalam modul, sehingga membuat kode lebih lama):sumber
Java 8, 127 byte
Penjelasan:
Cobalah online.
sumber
Mumps,
91,86,82,79, 76Bukan bahasa modern;) Saya yakin ada sedikit ruang optimasi yang tersisa ..
Penjelasan:
baca input
periksa apakah t cocok dengan input yang diperlukan
dasar untuk perulangan melalui alfabet. Perhatikan bahwa gondong benar-benar mengevaluasi dari kiri ke kanan. Benar = 1, jadi Anda mendapatkan 65 atau 97 sebagai hasilnya untuk p, # adalah operator modulo
tes:
(Anda akan memerlukan runtime env mumps, yaitu Caché untuk menjalankan ini ini)
sunting: judul tebal
sunting: punya solusi yang salah, diperbaiki sekarang. Terima kasih kepada rtfs dan Averroees untuk menunjukkan ini
sumber
JavaScript: 141
Versi yang dikomentari:
jsFiddle DEMO
sumber
Ini adalah usaha pertama saya dengan APL.
jika saya dapat menggunakan variabel global tunggal
A←2 26⍴6↓26⌽⎕UCS 65+⍳58
maka saya dapat mempersingkat di atas ke bawah sebagai berikut:sumber
C ++ 11
sumber
C (111)
pembedahan
Bekerja] $ ./test 5
Bekerja] $ ./test W XYZABCDEFGHIJKLMNOPQRSTUV
Bekerja] $ ./test M NOPQRSTUVWXYZABCDEFGHIJKL
Bekerja] $ ./test g hijklmnopqrstuvwxyzabcdef
Bekerja] $ ./test [
Bekerja] $ ./test a bcdefghijklmnopqrstuvwxyz
Bekerja] $ ./test Z ABCDEFGHIJKLMNOPQRSTUVWXY
Terima kasih atas makanannya.
sumber
[A-Za-z]\.?
, jika saya mengerti pertanyaannya dengan benar.Perl, 226 karakter
sumber
die
pernyataan Anda dapat dikurangi, menghemat banyak ...C # 170
Tidak terkompresi
sumber
1
: Jika huruf besar, Anda harus menampilkan alfabet huruf besar.2
: Alfabet yang dicetak harus diakhiri dengan huruf preseden dari yang dimasukkan.3
: Jika parameter tambahan ditambahkan ke input (titik sederhana.) Alfabet harus dicetak satu huruf di setiap baris. Jika tidak, alfabet harus dicetak pada baris yang sama, dipisahkan oleh spasi sederhana.4
: Jika input yang salah dikirimkan ke program, ia tidak akan mencetak apa pun. Ini adalah miss 4-out-of-4.char
denganvar
dan mencukur 1 poin dari skor Anda, kehilangan.ToCharArray()
(astring
adalah char-array yang sudah bisa Anda ulangi!), Kehilanganstring[] a
karena Anda tidak berurusan dengan argumen baris perintah, kehilangan namespace, Konstanta Anda 'c' harus dibaca dari input konsol, kehilangan string alfabet dan gunakan ASCII sebagai gantinya dll. Ini bagus untuk Anda mainkan, tetapi cobalah untuk melakukan upaya yang layak; sebagian besar kiriman Anda tampaknya hanya memancing.C, 117
Penghargaan untuk schnaader untuk trik d + 6 & 31.
http://ideone.com/ts1Gs9
sumber
Bash: 110 byte
Dalam hal penjelasan, ini cukup mudah, tidak ada trik sulap - ini hanya sesuatu yang secara intrinsik cocok untuk bash. Dalam hal bit yang tidak jelas:
{a..z}
adalah trik yang sangat jarang digunakan di bash - itu diperluas kea b c d...
. Anda dapat melakukan hal yang sama untuk menghasilkan urutan numerik.[[ $1 =~ [a-z] ]]
menjalankan pencocokan regex terhadap argumen program pertama untuk karakter dari a hingga z. Demikian juga untuk AZ. Anda membutuhkan tanda kurung ganda untuk itu,[
tidak bisa melakukannya.${1:1:1}
mendapat substring dari $ 1 (argumen pertama), satu karakter dalam, satu karakter panjang - yaitu, ia mengembalikan karakter kedua dari string, seperti yang kita harapkan.
.sed 's/ /\n/g'
regex sederhana: mencari dan mengganti spasi dengan baris baru. Jika.
karakter kedua dari string, kita masukan pipa untuk ini, atau sebaliknya ...cat
adalah trik terakhir di sini - jika kita tidak ingin mengganti spasi dengan baris baru, kita memasukkan stdin ke cat sebagai gantinya yang hanya mengeluarkannya lagi.sumber