Bos Anda baru saja mengirimi Anda daftar 12 tugas pemrograman yang perlu ia selesaikan secepat mungkin. Tugasnya cukup sederhana tetapi bos Anda, menjadi taipan perangkat lunak muda yang disusui oleh jejaring sosial, menegaskan bahwa solusi Anda dapat masuk dalam satu tweet Twitter .
Ini berarti bahwa Anda hanya memiliki kode senilai 140 byte untuk menyelesaikan semua tugas, rata-rata 11,67 byte per tugas. (Ya, Twitter menghitung karakter tetapi bos Anda secara khusus mengatakan byte.)
Anda menyadari bahwa tidak ada cara untuk menyelesaikan semua 12 tugas dalam 140 byte tetapi Anda curiga bos Anda tidak akan benar-benar menguji semua solusi Anda. Jadi Anda melanjutkan untuk menyelesaikan tugas sebanyak yang Anda bisa, benar-benar melewatkan beberapa dari mereka. Pola pikir Anda adalah bahwa tidak peduli yang bagian dari tugas Anda menyelesaikan, hanya hal-hal yang subset adalah sebagai besar mungkin .
Berapa banyak tugas yang dapat Anda selesaikan?
Tantangan
Tulis hingga 12 program yang berbeda, yang masing-masing secara akurat menyelesaikan salah satu dari 12 tugas yang tercantum di bawah ini. Jumlah kumulatif dari panjang program-program ini mungkin tidak melebihi 140 byte
Atau, Anda dapat menulis sebuah program tunggal yang panjangnya tidak lebih dari 140 byte yang membutuhkan integer dari 1 hingga 12 dan (idealnya) menghasilkan untuk menyelesaikan tugas yang sesuai, mengambil lebih banyak input seperlunya. Tidak semua tugas perlu dikerjakan, tetapi hanya tugas-tugas yang diperhitungkan dalam skor Anda. Tugas yang tidak berfungsi diizinkan untuk melakukan kesalahan atau melakukan hal lain.
Dalam kedua kasus, "program" mungkin sebenarnya adalah fungsi yang mengambil input sebagai argumen atau meminta untuk itu dan mencetak atau mengembalikan output. Jadi, misalnya, Anda dapat menulis fungsi 140 byte yang terlihat seperti f(taskNumber, taskInput)
, atau Anda dapat menulis potongan kode terpisah untuk setiap tugas, beberapa sebagai fungsi dan beberapa sebagai program yang lengkap.
Detail lainnya:
Semua kode harus ditulis dalam bahasa yang sama.
Seperti biasa, input harus berasal dari stdin, baris perintah, argumen fungsi, atau apa pun yang biasa untuk bahasa Anda. Output dicetak ke stdout atau alternatif terdekat bahasa Anda, atau dikembalikan dalam jenis yang sesuai.
Jumlah yang wajar dari format input baik-baik saja; mis. kutipan di sekitar string atau
\n
bukannya baris baru yang sebenarnya.Output harus persis seperti apa yang dipanggil tanpa pemformatan atau ruang kosong. Pengecualian adalah opsional single trailing newline.
Kode yang hanya berjalan di lingkungan REPL bukan merupakan program atau fungsi.
Anda tidak boleh menulis banyak program yang menyelesaikan banyak tugas. Entah itu satu program yang (idealnya) menyelesaikan semua tugas, atau (idealnya) 12 program yang masing-masing menyelesaikan satu tugas.
Memposting solusi tugas yang tidak Anda tulis atau hanya sedikit dimodifikasi tidak diizinkan tanpa memberikan atribusi kepada penulis asli, dan idealnya juga mendapatkan izin. Jika jawaban Anda terutama menyusun solusi terpendek dari semua jawaban lain maka itu harus menjadi wiki komunitas.
Mencetak gol
Kiriman yang menyelesaikan sebagian besar tugas adalah pemenang. Jika dua pengiriman mengikat, satu dengan byte terkecil menang. Jika jumlah byte diikat, pengiriman sebelumnya menang. Jawaban wiki komunitas tidak diizinkan untuk menang.
Pastikan untuk memberi tahu kami tugas mana yang Anda selesaikan, bukan hanya berapa banyak!
Handicap untuk pegolf:
Kemungkinan tantangan ini akan didominasi oleh bahasa golf . Banyak bahasa mungkin mengalami kesulitan menyelesaikan bahkan satu atau dua tugas dalam 140 byte. Karenanya, Anda dapat mengirimkan jawaban non-kompetitif dengan batasan 3 tweet, yaitu 420 byte. Semua aturan lainnya tetap sama.
Tugas
Tugas 1 - Bisakah Tiga Angka Membentuk Segitiga?
Ambil tiga bilangan bulat positif dan hasilkan nilai true / falsy yang menunjukkan apakah tiga garis dengan panjang itu bisa membentuk segitiga . Anda tidak boleh berasumsi angkanya datang dalam urutan tertentu.
Contoh kebenaran (satu per baris):
20 82 63
1 1 1
2 3 4
1 2 2
Contoh-contoh palsu:
6 4 10
171 5 4
1 1 2
1 2 3
Tugas 2 - Terdekat Dengan Satu Juta
Diberikan string tepat 7 digit desimal (0-9), atur ulang mereka untuk mendapatkan angka sedekat mungkin dengan satu juta. Artinya, abs(1000000 - rearrangedNumber)
harus diminimalisir.
Cetak atau kembalikan angka yang dihasilkan sebagai integer, bukan string (jadi tidak boleh ada nol terkemuka kecuali itu norma untuk bahasa Anda).
misalnya input 9034318
harus menghasilkan 984331
(dan tidak 1033489
).
2893984
harus menjadi 2348899
.
0001000
harus menjadi 1000000
.
0000020
harus menjadi 200000
.
Tugas 3 - Simulator Keyboard Sederhana
Ambil string huruf kecil (az), spasi, dan kurung sudut <>
. Baca kiri ke kanan, string ini mewakili tombol-tombol yang ditekan pada keyboard standar sementara editor teks yang awalnya kosong terbuka. Huruf dan spasi sesuai dengan tombol normal tetapi <
sesuai dengan tombol panah kiri dan >
tombol panah kanan, yang keduanya menggerakkan kursor saat ditekan.
<
memindahkan kursor satu karakter ke kiri, atau tidak melakukan apa-apa jika kursor berada di awal string.
>
memindahkan kursor satu karakter ke kanan, atau tidak melakukan apa pun jika kursor berada di akhir string.
Keluarkan string yang akan berada di editor teks setelah semua tombol dalam string input telah ditekan. Mengeluarkan kode pelarian untuk memindahkan kursor tidak diizinkan.
Akan selalu ada setidaknya satu karakter kunci non panah dalam input.
misalnya input ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
harus menghasilkan the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
harus memberi llammoptimizer
.
e< <c<b<a
harus memberi abc e
.
<<<>><><<><toast>><<>><><<>><
harus memberi toast
.
Tugas 4 - Surat FILTHE
Dalam banyak font, 6 dari huruf besar huruf bahasa Inggris alfabet seluruhnya terdiri dari garis horizontal dan vertikal: E
, F
, H
, I
, L
, dan T
. Kami akan memanggil ini surat FILTHE.
Ambil string huruf besar (AZ) dan hitung jumlah baris dalam huruf FILTHE, hasilkan bilangan bulat yang dihasilkan.
E
, F
, H
, I
, L
, Dan T
memiliki 4, 3, 3, 3, 2, dan 2 jalur masing-masing.
misal GEOBITS
memiliki 4 + 3 + 2 = 9 baris bagian dari huruf FILTHE (untuk .E..IT.
), jadi hasilnya seharusnya 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
harus keluar 17
.
ABCDGJKMNOPQRSUVWXYZ
harus keluar 0
.
FILTHYLINESINLETTERS
harus keluar 39
.
Tugas 5 - Alex Recursive A.
Moderator kami Alex A. memiliki inisial yang cukup misterius, "A".
Sekarang saya tidak yakin, tapi saya pikir A.
singkatannya .A xelA
. Dan saya juga cukup yakin bahwa di .A
sana ada singkatan Alex A.
.
Dengan demikian untuk mendapatkan nama lengkap Alex kita harus memperluas A.
'dan .A
':
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Mintalah program Anda menerima bilangan bulat non-negatif dan perluas Alex A.
itu berkali-kali, menghasilkan string yang dihasilkan.
Jadi
0
menjadi Alex A.
,
1
menjadi Alex .A xelA
,
2
menjadi Alex Alex A. xelA
,
3
menjadi Alex Alex .A xelA xelA
,
4
menjadi Alex Alex Alex A. xelA xelA
,
5
menjadi Alex Alex Alex .A xelA xelA xelA
,
dan seterusnya.
(Saya membuat ini karena saya merasa buruk karena secara tidak sengaja meninggalkan Alex dari tantangan mod upeti saya .: P)
Tugas 6 - Rotasi Numpad
Ambil bilangan bulat dari 1 hingga 9 inklusif (Anda dapat menganggapnya sebagai string). Output 3 × 3 kuadrat digit
789
456
123
diputar dalam peningkatan 90 ° sehingga digit input muncul di mana saja di baris atas. Kapan 5
input setiap rotasi adalah output yang valid karena 5
tidak dapat diputar ke atas.
misal kapan 3
input, keduanya
963
852
741
dan
321
654
987
adalah output yang valid.
Untuk input 4
, hanya
147
258
369
adalah output yang valid.
Tugas 7 - Membagi Digit Menjadi Puluhan
Ambil string nonempty digit desimal (0-9) dan hasilkan nilai yang sebenarnya jika dapat dipecah menjadi bagian-bagian yang bersebelahan di mana semua digit di setiap bagian dijumlahkan dengan tepat menjadi 10. Jika ini tidak mungkin, hasilkan nilai palsu.
misalnya 19306128
dapat dibagi seperti 19|3061|28
, bagian semua menjumlahkan ke 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8), sehingga nilai yang sebenarnya harus menjadi output.
Contoh kebenaran (satu per baris):
19306128
073
730
0028115111043021333109010
2222255
Contoh-contoh palsu:
6810410
9218
12341
5222225
000
Tugas 8 - Jam Persegi
Ambil string multiline yang berukuran konsisten.
Keluaran 12
jika inputnya adalah
_ _
| | |
|_ _|
Keluaran 3
jika inputnya adalah
_ _
| |_|
|_ _|
Keluaran 6
jika inputnya adalah
_ _
| | |
|_|_|
Keluaran 9
jika inputnya adalah
_ _
|_| |
|_ _|
Tidak ada input kasus lain.
Tugas 9 - Seni Braket
Ambil di string 4 byte yang berisi salah satu dari masing-masing kurung kiri (
, [
, {
, dan <
dalam urutan apapun.
Tambahkan kurung siku yang sesuai sehingga panjang string 8 byte dan memiliki garis simetri vertikal. misalnya [<({
menjadi [<({})>]
.
Kemudian balikkan setiap braket dalam string ini. misalnya [<({})>]
menjadi ]>)}{(<[
.
Keluarkan string braket 8 byte asli dengan versi terbalik di atas dan di bawah pada baris terpisah.
Jadi output akhir untuk input [<({
adalah
]>)}{(<[
[<({})>]
]>)}{(<[
Demikian pula, output untuk <({[
seharusnya
>)}][{(<
<({[]})>
>)}][{(<
Input (<<[
tidak valid karena tidak {
ada dan ada tambahan <
.
Tugas 10 - Membatasi Perimeter
Ambil kotak teks persegi panjang (berukuran paling kecil 1 × 1) yang terbuat dari .
yang mewakili ruang kosong dan X
yang mewakili ubin padat. Sel di luar batas grid dianggap kosong. Anda dapat mengasumsikan masing-masing dari 4 baris tepi kolom dan kolom akan mengandung setidaknya satu X
.
mis. input yang valid mungkin:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Keluarkan kisi teks segi empat lain di mana setiap sel kosong yang bertetangga dengan X
ortogonal atau diagonal, termasuk di luar kisi input , menjadi o
. Jadi intinya pembatas o
digambar di sekitar semua bagian ubin padat. Grid baru tidak boleh lebih besar dari yang seharusnya.
Jadi output dari contoh di atas adalah:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
Demikian pula, output dari input XXX..X.X
seharusnya
oooooooooo
oXXXooXoXo
oooooooooo
dan keluaran
oooooooooo.
oXXXooXoXo.
oooooooooo.
tidak valid karena kolom paling kanan yang kosong tidak perlu.
Anda dapat menggunakan 3 berbeda ASCII printable karakter di tempat .
, X
dan o
.
Tugas 11 - Sator Square
Output Sator Lapangan :
SATOR
AREPO
TENET
OPERA
ROTAS
Salah satu hurufnya mungkin huruf kecil atau besar, jadi
SatOR
aRePO
tenet
OPERa
RoTaS
juga merupakan output yang valid.
Tidak ada input.
Tugas 12 - Tweet Utama
Tidak mengambil input tetapi menghasilkan string ASCII 140 byte yang dapat dicetak yang mengandung setidaknya satu dari masing-masing dari 95 karakter ASCII yang dapat dicetak. (Jadi 45 karakter akan menjadi duplikat.)
Jumlah kode karakter dari semua 140 byte dalam string ini harus berupa perdana Sophie Germain , yaitu bilangan prima p
sedemikian sehingga 2p+1
juga bilangan prima. Kode karakter untuk ruang adalah 32, 33 untuk !
, 34 untuk "
, dan seterusnya hingga 126 untuk ~
. Jumlahnya dapat dihitung dengan Python sebagai sum(map(ord, myString))
.
Contoh output adalah:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
Jumlah kode karakter adalah prime 12203 yang prime safe-nya adalah 24407.
import
s? Katakanlah saya menulis 5 fungsi di mana 2 membutuhkan modul yang sama (misalnya import Math
), apakah ini dihitung dua kali?