Latar Belakang
Anda bekerja untuk beberapa produsen papan permainan dan perlu membuat ubin kayu dengan angka dari 0 hingga n terukir pada mereka untuk beberapa permainan. Namun, tanpa basa-basi lagi, beberapa ubin akan menjadi tidak bisa dibedakan, misalnya, 6dan 9. Untuk menghindari ini, Anda harus melengkapi angka yang dapat dikacaukan dengan orang lain (dan hanya mereka) dengan titik disambiguasi, misalnya, Anda akan memiliki ubin seperti 9.atau 6089..
Sayangnya, Anda perlu menggunakan beberapa perangkat ukiran kayu tua, namun dapat diprogram untuk ini, yang antarmuka sangat rusak sehingga Anda harus menyandikan setiap karakter program dengan tangan dalam proses yang sangat melelahkan. Untungnya perangkat memahami setiap bahasa pemrograman yang ada. Jadi Anda mencari program terpendek yang mencetak ubin seperti itu.
Tugas aktual
Tulis program terpendek yang:
- Mengambil bilangan bulat positif n sebagai input. Bagaimana input dibaca terserah Anda.
- Mencetak setiap angka dari 0 hingga n ( termasuk 0 dan n ) tepat sekali dalam urutan pilihan Anda, dipisahkan oleh karakter spasi tunggal (termasuk baris baru). Angka-angka harus dicetak tanpa angka nol di depan.
- Menambahkan titik (.) Ke setiap angka yang berubah menjadi angka lain yang valid setelah dirotasi oleh π (180 °), bahkan jika angka itu lebih besar dari n. Tipe huruf 0 dan 8 Anda adalah rotasi-simetris dan angka 9 berotasi 6. Angka 2 dan 5 berbeda pada rotasi; 1 bukan rotasi-simetris. Angka dengan nol di depan tidak valid.
Contohnya
Masing-masing angka berikut harus dicetak persis seperti ini:
2
4
5
6.
8
9.
16
60
66.
68.
69
906
909.
8088.
9806.
9886
9889.
60
seharusnya begitu60.
?8088.
dalam contoh Anda sebagai angka rotasi-tidak aman yang tidak memiliki angka 6 atau 9.Jawaban:
Pyth - 34
38Saya harus berterima kasih kepada @ Sp3000 karena membantu saya menghapus 4 byte. Saya awalnya memiliki cek tambahan
&@JK
yang memastikan ada 6 atau 9 dalam jumlah, tetapi setelah membaca jawaban sebelum memposting, saya membaca jawabannya dan memperhatikan bahwa terjemahan dan pembalikan identik saya sudah mengurusnya.Terima kasih juga kepada @isaacg untuk menunjukkan bahwa string adalah iterables, dan Anda dapat menggunakan operasi yang ditetapkan pada mereka. Juga untuk membuat kode saat ini;)
Penjelasan:
sumber
K
danJ
- cukup gunakan string saja. BeralihK
ke <backtick> 69 danJ
ke <backtick> N menyimpan beberapa karakter, seperti halnya inliningK
dalam program yang dihasilkan. Terpendek yang bisa saya dapatkan di bawah teknik itu adalahVhQJ``N+J*\.&nJX_J``69``96&eN!-J"0689
, 34 karakter. (Dua backticks benar-benar satu.)hell`o wo`rld
_
, sebelum`96
.CJam,
46444342 byteSaya pikir ada beberapa ruang untuk perbaikan.
Uji di sini.
Penjelasan
sumber
n
di Input.CJam,
46 45 4342 byteSaya pikir itu bisa bermain golf lebih sedikit.
Diambil
n
dari STDIN.Cobalah online di sini
sumber
APL 66
Penjelasan:
Cobalah di tryapl.org
Perhatikan bahwa dalam interpreter online fungsi ⍎ tidak berfungsi jadi saya harus menggantinya dengan 2⊃⎕VFI yang melakukan hal yang sama dalam hal ini, mengeksekusi dan mengembalikan nomor, diberikan string.
sumber
⊃,/
atau,/
Anda dapat menggunakan∊
di depan.Perl 5, 53 byte
Demo online.
Menggunakan fitur Perl 5.10+
say
, jadi harus dijalankan denganperl -M5.010
(atauperl -E
) untuk mengaktifkannya. (Lihat utas meta ini. ) Membaca input dari stdin, mencetak ke stdout.sumber
Python 2,
130116113 byteMenentukan fungsi
f
yang mencetak angka ke STDOUT, dalam urutan menaik.Kali ini saya pikir saya akan mengambil daun dari buku @ feersum dengan
.translate
:)Diperluas:
Solusi sebelumnya:
Terima kasih kepada @xnor karena menunjukkan
.replace
triknya kepada saya beberapa waktu lalu.sumber
(u''+S[::-1])
bukanunicode(S[::-1])
. Juga, jika Anda menukarprint
dan panggilan rekursif, nomor akan keluar dalam urutan yang meningkat.u""+
akan benar-benar bekerjaC #,
343309 karakterCara terlalu lama, tapi tetap:
Bagaimana cara kerjanya? Untuk menambahkan periode ke nomor, itu harus sesuai dengan persyaratan berikut:
0
,8
,6
dan9
.6
s dan9
s yang sama, danc
= angka dengan semua6
s menggantikan dengan9
s,c
==c
,Angka-angka dipisahkan oleh spasi.
Kode dengan lekukan:
sumber
M (MUMPS) -
7270Sebagian besar perintah dan fungsi bawaan di M memiliki versi singkat. Saya telah menggunakan nama lengkap di bawah ini.
READ n
- Baca string dari keyboard dan simpan din
.FOR i=0:1:n
- Putaran dari nol ken
, bertambahi
1 setiap kali. (Sisa dari garis membentuk badan lingkaran.)WRITE !,i
- Cetak baris baru diikuti dengan nilaii
.SET r=$TRANSLATE($REVERSE(i),69,96))
- Balikkani
, ganti sembilan dengan enam dan enam dengan sembilan, dan simpan itu dir
.WRITE:r=+r*r'=i*'$TRANSLATE(i,0689) "."
:
- Menunjukkan ekspresi postconditional, sehinggaWRITE
perintah hanya dieksekusi jikar=+r*r'=i*'$TRANSLATE(i,0689)
dievaluasi ke nilai yang benar.r=+r
- Pastikanr
tidak ada nol di depannya.+
Operator unary mengonversi string menjadi angka, yang menghilangkan nol di awal jika ada.*
- Operator perkalian. M tidak memiliki urutan operasi; semua operator biner dievaluasi dalam urutan mereka muncul dari kiri ke kanan.r'=i
- Pastikani
tidak sama dengan versi terbalikr
.'$TRANSLATE(i,0689)
- Hapus semua nol, enam, delapan, dan sembilani
, dan periksa bahwa tidak ada yang tersisa. ('
Adalah operator negasi logis.)"."
- Akhirnya argumen keWRITE
perintah (string literal).Sunting: Membuatnya sedikit lebih pendek dengan menyalahgunakan operator perkalian. Versi sebelumnya:
sumber
APL, 53 karakter
∊{⍵,'. '↓⍨∨/(3≡⊃i)(5∊i),⍵≡'9608x'[i←⌽'6908'⍳⍵]}∘⍕¨0,⍳
sumber
C # 205
209C # tidak harus terlalu panjang ...
lebih atau kurang, port jawaban JavaScript saya
Tidak disatukan
sumber
Ruby, 81
Input diambil dari baris perintah.
Menghasilkan daftar
String
s dari0
hinggan
. Itu loop melalui mereka dan mencetaknya. Menambahkan satu titik jika semua kondisi terpenuhi:6
s dengan9
s tidak menghasilkan yang asli0
,6
,8
dan9
0
sumber
JavaScript (ES6) 101
104 106 109Sebuah fungsi dengan n sebagai argumen, output melalui console.log
Edit menggunakan% 10 untuk menguji memimpin 0
Edit 2
for
reorganisasi, saya tidak perlu pemahaman array setelah semuaEdit 3 dimodifikasi (lagi) cek untuk memimpin 0
Tidak disatukan dan lebih mudah untuk diuji
Keluaran
sumber
[]
? Saya mencari dokumentasi, karena saya hanya tahu ini dari python sejauh ini.Bash + coreutils, 105
Uji:
sumber
sed, 467
Lebih lama dari C # ...
Saya cukup banyak menyelesaikan ini ketika @ edc65 menunjukkan bahwa jawaban perlu memproses angka 0-n dan bukan hanya n. Menambahkan kode sed ke kenaikan 0-n menambahkan kode LOT lebih banyak, karena tugas ini tidak cocok untuk sed aritmatika-kurang.
Sesuai OP, pemesanan tidak masalah, jadi kami bekerja ke bawah dari n ke 0.
Keluaran:
sumber
AWK: 120
Baca nilai n dari stdin.
Uji:
sumber
Rebol - 195
Tidak dikumpulkan + beberapa anotasi:
sumber
bc, 158
Setelah melakukan ini sepenuhnya dengan menggunakan semua operasi string dan regex tanpa aritmatika asli, saya ingin tahu bagaimana ini akan terlihat sebaliknya, yaitu semua operasi aritmatika dan logika dan tanpa string / regex:
Output diurutkan dalam urutan menurun.
Keluaran:
sumber
Python - 152
sumber
"."if a[i]else"" -> "."*a[i]
,int(raw_input()) -> input()
(yang benar-benar hanyaeval(raw_input())
)str(i)
dengan`i`
. (2) Andaa
hanya menggunakan sekali, jadi mengapa menetapkannya ke variabel.str(i)
beberapa kali. Mana yang bisa saya gantii
?i
, tetapii
dengan backticks, yang identik denganrepr(i)
. Anda dapat menggunakannya daripada distr(i)
mana - mana, meskipun jika Anda memilikistr(i)
sekitar berkali-kali mungkin lebih pendek untuk menetapkannya ke variabel dan menggunakannya selain menggunakan backticks. (yaitux=`i`; (do stuff with x)
)JavaScript -
168 129 119 113 111108Atau versi yang dapat dibaca:
Saya tidak terlalu senang dengan regex, ada ide?
Mengedit : Belajar trik rapi dengan
~
danfor (... of ...)
dari @ edc65Edit2 : kondisi Reorganisasi
Edit3 : diterapkan saran oleh @ edc65
sumber
i=n+"";for(c of i)
=>for(c of i=n+"")
simpan 2 bytec==6?A:B
=>c!=6=>B:A
=>c-6?B:A
for(c of i=n+"")
cukup logis ketika saya melihatnya, tapi saya tidak akan memikirkannya.c-6?B:A
Tuhan melarang saya pernah memasukkan ini ke dalam kode produksi05AB1E ,
38373029 byteCobalah online.
Penjelasan:
Penjelasan tambahan untuk beberapa bagian:
sumber
Perl - 84
sumber
Powershell,
111102 byteScript tes yang dijelaskan:
Keluaran:
sumber
Stax , 27 byte
Jalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber