Buat fungsi atau program yang membuat kotak sedekat mungkin dengan kotak
- Anda akan diberikan integer N sebagai input, bilangan bulat (1,2,3,25, dll)
- Outputnya harus berupa kotak persegi sempurna huruf N sedekat mungkin dengan kotak
- Kotak (wannabe) harus terdiri dari salah satu huruf O atau X seperti yang ditentukan oleh pengguna
Poin :
- Hardcode hanya untuk O atau X: +1
- Param (0/1, true / false, sesuatu yang mirip) untuk memutar output (seperti dengan 5 atau 8): -10
- Desain kotak (gunakan O dan X dalam beberapa pola): -5
Suatu pola dianggap sah jika mengandung kedua jenis karakter (di mana sumbu x / y> = 3) dan pola tersebut tetap sama ketika dibalik secara horizontal atau vertikal (pertukaran Xs dengan Os diperbolehkan)
Contohnya
INPUT: 4 INPUT: 5 INPUT: 8 INPUT: 9
OO OOOOO XXXX XOX
OO XXXX OXO
or rotated 90deg XOX
Contoh yang tidak diizinkan (baris atau kolom panjang tidak sama)
BAD RESULT: 5a BAD RESULT: 5b BAD RESULT: 8
OOO OO OOO
OO OO OOO
O OO
Jika memungkinkan, berikan contoh online.
"xo"[i]
alih - alihi
? Tampaknya tidak sepadan. Secara umum, semua hadiah Anda tampak agak rendah.Jawaban:
CJam, 16 (31 - 10 - 5)
Ini membutuhkan dua bilangan bulat input, yang pertama adalah untuk
0
atau1
untuk arah dan yang kedua adalah jumlahO
atauX
dalam grid.Ini mencetak alternatif
O
danX
.Ini hanya fungsi tubuh, untuk mencobanya tambahkan
l~
di depan kode seperti:dan beri input like
untuk mendapatkan output seperti
atau masukan suka
untuk
Cobalah online di sini
Bagaimana itu bekerja:
Contoh dijalankan:
sumber
APL (36 - 5 - 10 = 21)
Argumen kiri adalah rotasi, argumen kanan adalah ukuran. Ini juga menggunakan pola sederhana (itu hanya bergantian 'X' dan 'O').
Penjelasan:
∆←,⍳2/⍵
: menghasilkan semua pasangan angka yang mungkin dari1
ke⍵
dan simpan di∆
.∆←∆[⍋|-/¨∆
...]
: urutkan∆
naik dalam perbedaan absolut dari dua angka di setiap pasangan, dan simpan hasilnya kembali∆
.⊃∆/⍨⍵=×/¨∆
: untuk setiap pasangan, kalikan jumlahnya. Pilih hanya pasangan yang berkembang biak⍵
, dan ambil pasangan pertama yang cocok (yang 'paling persegi' karena jenisnya).⍺⌽
: memutar daftar panjang (yang memiliki 2 elemen) oleh⍺
.'OX'⍴⍨
: buat matriks ukuran itu, dan mengisinya dengan bolak-balikO
danX
.sumber
Haskell, 59 karakter
sumber
CJam,
252221 (31 - 10)Ini adalah fungsi tubuh. Jika Anda ingin program lengkap, tambahkan
riri
ke depan. Jika Anda ingin menggunakannya sebagai blok kode, masukkan di dalamnya{}
. Uji di cjam.aditsu.net .Dibutuhkan input sebagai dua argumen integer: saklar untuk apakah persegi panjang itu vertikal (nilai tidak nol) atau horizontal (nol), dan jumlah
O
s yang digunakan.Penjelasan
sumber
JavaScript (E6) 84 (83 +1) atau 101 (116-10-5)
Pola + rotasi (parameter f, 0 atau 1) - bonus 15
Tidak ada pola, tidak ada rotasi - penalti 1
Uji di konsol FireFox / FireBug
sumber
Python,
7975 (tidak ada bonus)Bonusnya terlihat rumit, jadi di sini ada fungsi Python yang cukup sederhana:
sumber
f(8)
memberi saya satu kolom 8O
s, yang tidak benar.>
mana seharusnya ada<
. Sudah diperbaiki sekarang. Terima kasih atas catatannya!Ruby, 74
Penjelasan
Integer
.n
(input) dapat dibagi oleh setiap bilangan bulat dari 1 hinggan
.n
).String#*
untuk "menggambar" kotak.sumber
APL (Dyalog Unicode) , 30 - 15 = 15 byte SBCS
Lambda infix Anonim. Membawa N sebagai argumen benar dan param sebagai argumen kiri. Rectangles akan memiliki garis-garis X dan O atau kotak-kotak.
Cobalah online!
{
...}
"dfn";⍺
adalah argumen kiri (param),⍵
adalah argumen kanan ( N ):⍳⍵
d ndices 1… N∘.×⍨
tabel perkalian itu⍵=
topeng di mana N sama dengan itu⍸
ɩ ndices nilai true dalam maskc←
simpan dalamc
(untuk c andidates)≢
tally para kandidat.5×
setengah dikalikan dengan itu⌈
langit-langit (bulat)⊃∘c
pilih elemen itu daric
⍴∘'XO'
menggunakannya untuk membentuk kembali "XO" secara siklus⍉⍣⍺
transpos jika paramsumber
05AB1E (warisan) , skor: 7 (22 byte - 15 bonus)
Cobalah secara online atau verifikasi beberapa kasus uji lagi .
Mengambil input
N
terlebih dahulu, lalu boolean (0
/1
) apakah itu harus diputar atau tidak.Menggunakan versi Python legacy dari 05AB1E sejak zip dengan daftar string secara implisit meratakan dan bergabung dengan karakter, tidak seperti Elixir menulis ulang versi 05AB1E yang lebih baru.
Penjelasan:
sumber
GolfScript 26 (41 - 10 - 5)
Mengharapkan dua parameter berada di tumpukan:
0
untuk normal atau1
untuk dialihkann
nilaiPolanya adalah bahwa papan penuh
X
dengan dan sudut kiri atas adalahO
. Tak perlu dikatakan, pola ini dipertahankan saat transpos papan.Demo: teratur , dialihkan
sumber
Mathematica, 71 karakter
sumber
Petit Computer BASIC, 72 byte
sumber
J , 32 byte - 15 = 17 byte
Cobalah online!
Rotasi dikendalikan oleh bendera 0/1 yang diambil sebagai argumen kiri
sumber
Retina 0.8.2 , 66 byte + penalti 1 byte = 67
Cobalah online! Penjelasan:
Konversikan input ke string
X
s.Lintasan pertama dari tangkapan luar cocok dengan awal string sedangkan pada lintasan berikutnya nilai tangkapan dalam sebelumnya cocok. Tangkapan batin kemudian ditingkatkan dan dicocokkan. Hasilnya adalah jumlah string yang dikonsumsi oleh tangkapan luar adalah kuadrat dari tangkapan dalam, yang karenanya tidak dapat melebihi akar kuadrat dari input. Sementara itu, pengulangan berikutnya memastikan bahwa tangkapan bagian dalam adalah faktor dari panjang tali.
Simpan faktor yang ditemukan dan hitung pembagi lainnya dengan menambahkan jumlah pengulangan berikutnya.
Susun ulang faktor menjadi persegi panjang.
sumber
Arang , 33 byte - 10 - 5 = 18
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukan
N
.Ambil rentang
0
..N
, simpan hanya angka-angka yang kuadratnya tidak kurang dariN
dan bagiN
, dan ambil minimum dari angka-angka itu.Gunakan faktor yang ditemukan untuk menghasilkan persegi panjang dengan lebar dan tinggi yang sesuai menggunakan pola papan catur. (Ini seharusnya
UOη÷θηXO¶OX
untuk penghematan 1-byte tapi itu buggy sekarang.)Jika input kedua bukan nol maka putar output. (Jika membutuhkan input kedua agar
0
atau2
dapat diterima, maka ini bisa⟲N
untuk penghematan 1-byte.)sumber