Saya mengharapkan untuk memposting sesuatu yang lebih kompleks sebagai teka-teki pertama saya di PCG, tapi pertanyaan pekerjaan rumah khusus tentang Stack Overflow menginspirasi saya untuk memposting ini. Mereka ingin:
cetak pola berikut untuk kata tertentu yang berisi jumlah ganjil huruf:
P M R A O R G O R R A P M
Perhatikan bahwa huruf adalah langkah ksatria yang terpisah dalam pola yang perlu Anda cetak. Jadi, setiap kolom lainnya kosong. - (Terima kasih xnor untuk menunjukkan ini.)
Aturan
- Dilarang menggunakan C ++. Karena saya dapat menghubungkan pertanyaan ini di sana.
- Anda dapat menggunakan
stdout
, atau cara apa pun untuk mengeluarkan string dengan cepat (misalnyaalert()
dalam JavaScript). - Seperti biasa, kode terpendek menang.
Jawaban:
Pyth , 22
Uji:
Penjelasan:
sumber
~
bitwise tidak dalam Pyth. Lalu kita bisa berubaht-lzd
menjadi+lz~d
- masih 5 karakter.Vz
adalah trik yang rapi: Saya tidak tahu ituU<string>
memberirange(len(<string>))
.APL (
37353427)Dibutuhkan input dari keyboard, seperti:
sumber
Python 2 -
94 90 8988Memasukkan:
Keluaran:
sumber
i in[j,L+~j]
.L+~j
.+~
triknya ...for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)
untuk menyelamatkan char? (Saya tidak punya akses ke Python 2 sekarang untuk menguji.)Python 3: 75 karakter
Untuk baris
i
, kita mulai dengan daftar spasi dan mengatur entrii
dari depan dan belakang menjadi sama dengan huruf-huruf dari string input. Kemudian, kami mencetak hasilnya.String python tidak dapat diubah, jadi
a
harus berupa daftar karakter saja. Daftara
harus diinisialisasi di dalam loop atau modifikasi akan terbawa di antara loop. Kami menggunakanprint(*a)
untuk mencetak setiap karakter dalam daftar, spasi terpisah, yang membutuhkan Python 3.Garis output simetris, jadi kita bisa
i
menghitung mundur daripada menggunakan loop sementara.Ini juga berfungsi untuk jumlah huruf genap.
sumber
VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ
yang 29 byte ... Saya kira saya harus mencoba sesuatu yang lain untuk mengalahkan APL. Juga, +1 sebagai bukti bahwa Python 3 dapat bermain golf Python 2 (kadang-kadang)len("raw_input()") + len("print ") > len("input()") + len("print()")
.input()
juga berlaku di python 2 (hanya bertindak agak berbeda), jadi kecuali jika input untuk tantangan cukup ketat, python 2 biasanya akan menang.print" ".join(a)
kode Anda lebih pendek (82) dari saya.CJam,
2725 byteCobalah online.
Contoh dijalankan
Seperti contoh dalam jawaban, setiap baris memiliki spasi spasi.
Bagaimana itu bekerja
sumber
Jawa - 168
Lingkaran bersarang sederhana, tidak ada yang benar-benar istimewa terjadi di sini.
Dengan jeda baris:
sumber
Pure Bash, 94 byte
sumber
t%l
perhitungan. Simpan pada penggunaan pertama untuk variabel((x=t%l))
kemudian gunakan variabel untuk menguranginya menjadi 94 karakter.x=t%l
dany=t/l
dan itu lebih lama ... tidak terlintas dalam pikiran saya hanya untuk menggunakan x sajaRuby, 64
Penjelasan
String
.n
total):n
spasi.i
th dann-i
th (~i
, thanks xnor) dengan karakteri
th dann-i
th dari input.sumber
-i-1
sebagai pelengkap bit~i
.gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}
(mengasumsikan input tidak diakhiri oleh baris baru, misalnyaecho -n CODE-GOLF
). Satu kemudian dapat menggunakan tambahan.chars
untuk menyimpan karakter lain:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
JavaScript (E6) 101
95 129 136Edit spasi surat yang salah. Tetap.
Edit Lebih sederhana dan lebih pendek menggunakan klasik untuk loop
Sebagai fungsi, output melalui popup.
Versi sebelumnya menggunakan .map
Uji di konsol FireFox / FireBug
Keluaran
sumber
Befunge-93,
6871Anda bisa mengujinya di sini . Ini akan muncul dengan kotak dialog input pada setiap pass
~
; masukkan kata Anda satu karakter pada satu waktu (katanya inputnya 'klunky'), diakhiri dengan spasi.Itu tidak akan mencetak ke konsol; bagaimanapun, ini bukan Befunge tanpa sedikit modifikasi diri! Alih-alih itu akan memodifikasi kisi sendiri untuk menampilkan pesan. Setelah selesai, kotak akan terlihat seperti ini:
(Perhatikan pengorbanan mulia sel di (0,0), setelah kita tahu pointer tidak akan pergi ke sana lagi, untuk tujuan menyimpan sepotong data.)
Ini juga bekerja dengan input yang panjangnya genap. Perhatikan bahwa, karena Befunge-93 terbatas pada kisi 80x25, ukuran input dibatasi hingga 21 karakter jika Anda menjalankannya dalam juru bahasa Befunge-93. Menjalankannya sebagai Befunge-98 harus menghapus batas ini.
Sunting - Sekarang ini berfungsi lebih banyak di sepanjang garis keluaran yang dimaksudkan, dengan mengorbankan hanya tiga karakter panjangnya.
sumber
Javascript 102
84 85Sunting: Harus memperbaiki spasi. Tidak lagi kecil.
sumber
function(s)
karena Anda tidak berulang?CJam,
3836353432 byteUji di sini. Ini membaca kata input dari STDIN. Ini juga berfungsi untuk jumlah karakter genap. Ini mencetak kolom spasi tambahan, tapi saya tidak melihat apa pun dalam aturan yang menentangnya.
Penjelasan
Isi tumpukan dicetak secara otomatis di akhir program.
sumber
l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
di atas serbet daripada↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
... terkekehC, 105
dua cara yang sedikit berbeda untuk melakukannya.
Jika Anda ingin menambahkan spasi tambahan, ganti
putchar(
denganprintf(" %c",
untuk 5 karakter tambahan.sumber
J -
3630 byte:Sunting: 6 karakter lebih pendek, kredit masuk ke @algorithmshark .
misalnya:
Bonus: bekerja dengan string panjang genap juga:
sumber
Prolog - 240 byte
Doa:
Dapat dibaca:
sumber
Kanvas , 5 byte
Coba di sini!
Penjelasan:
sumber
R ,
99989389 byteCobalah online!
Baris 1 membaca string input, membaginya menjadi karakter, menyimpan panjangnya dan membuat matriks dengan kata pada diagonal utamanya - huruf-huruf dari kata tersebut ditumpangkan pada matriks identitas (dan diulangi secara default agar sesuai dengan panjangnya) dan hanya yang cocok 1 dipertahankan, lainnya digantikan oleh spasi.
Baris 2 mencetak matriks yang dibentuk oleh elemen-elemen baik dari matriks diagonal atau versi cermin horizontal, yang mana yang lebih besar.
−2 + 1 = −1 byte berkat JayCe
−4 byte berkat Giuseppe
sumber
pmax
dan sebaris beberapa tugas lagi.C # (
214212)(Tentu saja sangat buruk) Versi golf:
Versi tidak disatukan:
Semua petunjuk, kiat, trik, atau komentar sangat disambut baik, karena ini adalah upaya pertama saya di CodeGolf. Saya hanya ingin mencobanya, meskipun saya tahu panjang C # byte saya bahkan tidak akan mendekati dua kali lipat solusi terbaik;)
Dan bagaimana kalian menghitung byte Anda? Saya baru saja memposting di atas ke jendela Quick Watch dan melakukannya
.Length
. Saya bisa menulis sebuah program kecil untuk menghitung byte untuk saya, tetapi saya yakin ada cara yang lebih mudah yang belum saya ketahui.sumber
for(;i < l;i++)
.JavaScript (ES6) -
185177175170 byteMasukkan ini di konsol Firefox dan jalankan sebagai
f('PROGRAM')
:f("CODE-GOLF")
:sumber
Mathematica, 149 byte
Input dikirimkan sebagai parameter ke fungsi; fungsi mengembalikan string output. Ada baris baru di akhir output.
Penjelasan: Kami membuat matriks diagonal dengan string, lalu kami membuat salinannya secara vertikal menggunakan
Reverse@#
untuk membalikkan baris. Kemudian kita memiliki matriks ketiga dengan dimensi yang sama yang hanya berisi 32 (ruang ascii). Kami menggunakanMapThread
untuk mengambil maks elemen-bijaksana dari 3 matriks ini. Akhirnya, kitaRiffle
spasi ke setiap baris,Append
baris baru di akhir, danFlatten
hasilnya.sumber
C , 119
Ini mungkin tidak dikompilasi sebagai C ++, jadi saya harap, saya tidak melanggar aturan :)
sumber
i=0
danj=0
tidak diperlukan, karena variabel global diinisialisasi ke nol. 3. Anda bisa menggunakannyamain(l,v)char**v;
sebagai gantimain(int l,char**v)
. 4. Jika Anda memperbaruii
sebagaii+=puts("")
, Anda dapat menyingkirkan kurung keriting lingkaran luar.Perl - 90
Dimungkinkan untuk memeras beberapa karakter lagi dari ini:
89
+1
untuk-n
.Jalankan dengan:
Keluaran:
sumber
T-SQL: 180
Mengambil input dari variabel @i
Ini memasukkan karakter tunggal di / decrementing dari awal dan akhir menjadi serangkaian spasi.
Hasil tes
sumber
PowerShell
11810297Output:
sumber
Jelly , 11 byte
Cobalah online!
sumber
JavaScript (Node.js) , 81 byte
EDIT : -1 Terima kasih Joe King. Saya tidak melihat TIO memberikan pasta langsung terformat untuk CG.
Cobalah online!
sumber
-i-1
bisa+~i
C # 208
sumber
t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";
.GolfScript 46 ( DEMO )
sumber
Tidak peduli berapa lama, selalu ada jawaban di ...
Java -
289234 byteTidak Disatukan:
Keluaran, yang dilakukan dengan buruk, adalah:
Menambahkan bagianSial, saya benar-benar payah dalam hal ini.import java.util.Scanner
dalam kode karena saya tidak pernah ingat jika impor dihitung terhadap jumlah byte ...sumber
from math import floor as f
yang sedikit curangSystem.out.print
panggilan menjadi satu, menggunakan beberapa operator ternary.System.out.print
panggilan di akhir.C # (192/170)
Atau, sebagai "Hanya utama ()":
sumber