Tugas
- Pengguna memasukkan kalimat - kata saja. Input apa pun selain huruf atau spasi, termasuk bilangan bulat dan tanda baca, harus memberikan pengecualian: "Kalimat hanya boleh menggunakan huruf".
- Outputnya memiliki pola, di mana beberapa kata dibalik dan kata-kata lain normal.
- Pola dimulai sebagai kata normal, dua kata berikutnya dibalik, kemudian dua kata berikutnya normal dan pola berlanjut.
- Contoh di mana kata-kata harus normal dan di mana kata-kata terbalik adalah di bawah ini:
Normal - Terbalik - Terbalik - Normal - Normal - Terbalik - Terbalik - Normal ...
Contoh Input
Dia menjual kerang laut di tepi laut
Contoh Keluaran
Dia melempar peluru ke pantai
Aturan tambahan
- Jika huruf kapital digunakan, mereka harus tetap pada huruf yang semula diposting.
- Beberapa ruang yang awalnya diposting pada input harus dikurangi menjadi satu ruang. Misalnya
Programming Puzzles and Code Golf
menjadiProgramming selzzuP dna Code Golf
Kode Terpendek Menang !!
Selamat coding ...
code-golf
string
word
permutations
Belfield
sumber
sumber
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
Ini berarti menerapkan tugas sekunder yang sama sekali tidak terkait dengan tantangan membalikkan kata, memotong bahasa yang tidak memiliki pengecualian, dan membutuhkan hardcoding atau mengompresi string panjang yang memakan banyak waktu. jumlah byte.Jawaban:
TeaScript , 55 byte
58 60 69 76 78 80 87 89Ini sangat singkat, saya sangat senang dengannya.
Terakhir ~ 20 karakter mungkin tampak seperti omong kosong tapi itu "Kalimat harus hanya menggunakan huruf" yang disandikan. Semua karakter memiliki kode char di bawah 256 sehingga masing-masing satu byte
Penjelasan
sumber
Haskell, 141 byte
Hampir 2/3 dari kode ini untuk pengecekan kesalahan. Tampaknya menjadi tantangan dunia nyata pertama.
Pekerjaan dilakukan dengan
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
membagi input menjadi daftar kata, menutupnya dengan daftar fungsi bersepeda[id,reverse,reverse,id,id,reverse...]
dan menggabungkan hasilnya dengan spasi kembali ke string tunggal.Terima kasih kepada @Christian Irwan untuk 2 byte.
sumber
r=reverse
?reverse
danr=reverse
memiliki panjang yang sama, karena hilangf=
. Tidak memeriksa lagi ketika pindah ke non pointfree).JavaScript (ES6) 122
sumber
Retina , 103 byte
Seharusnya ada satu spasi di baris kedua, yang sepertinya ditelan SE. Jalankan kode dari satu file dengan
-s
bendera.Retina tidak memiliki konsep pengecualian sehingga output hanya digantikan oleh
Sentence must only use letters
jika ada karakter non-spasi putih dalam input.sumber
Pyth, 61 byte
Cobalah online.
sumber
Python,
163160157145Menghapus 15 karakter, terima kasih Mego !!
sumber
Bash + coreutils, 108
Karakter terakhir dari program ini adalah spasi.
Input diambil dari baris perintah:
sumber
Pyth, 72
Tidak mengalahkan jawaban Pyth yang lain, tetapi saya sudah menginvestasikan waktu untuk menuliskannya. Ini pada dasarnya adalah terjemahan dari jawaban Python saya .
Cobalah online
sumber
Julia, 109 byte
i=0
dan(i+=1)%4>1
digunakan untuk memutuskan apakah setiap kata mendapatreverse
d atau tidak.isalpha
berlaku untuk kata-kata setelah dipisah menggunakansplit(s)
untuk menentukan apakah ada karakter yang bukan huruf (spasi telah dihapus pada titik ini).join
mengembalikan string setelah manipulasi, kecuali jikaerror
dilemparkan.sumber
Julia,
150134 byteTidak Disatukan:
Disimpan 16 byte berkat Glen O!
sumber
r
untuk hasilnya? Artinya,r=ismatch(...)||error(...)
- akan memangkas beberapa karakter, dan membalikkan kondisi yang menggunakanr
. Akan berkomentar lagi dengan, saya kira, beberapa penghematan lagi||
berurusan dengan negasi, kemudian menyadari bahwa negasi tidak perlu. Balikkan kembali ke&&
. Dan bahkan lebih baik, gunakan?:
saja untuk melakukannya dengan lebih baik.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
untuk 144 byte. Dan saya pikir saya bisa melakukan yang lebih baik di dalamjoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pyth, 55 byte
Meminjam
%%k4 3
bit dari Pietu1998. Disimpan satu byte tambahan.Cobalah online: Demonstrasi atau Test Suite
Penjelasan
sumber
Perl 5
-ap
, 80 byteCobalah online!
sumber
Java, 215 byte
Regex itu menyenangkan
Cobalah online!
sumber
She slles aeS shells no the aeS shore
, tetapi itu seharusnya menjadiShe slles aeS shells on eht aeS shore
(normal pertama; kemudian bergantian berpasangan dari 2 terbalik atau tidak). Dua masalah menyebabkan ini. Anda sekarang meningkati
bahkan jika suatu item kosong, dani++%2<1
seharusnyai++%4>1
sebaliknya. Di sini versi 211 byte tetap .Jelly , 39 byte
Cobalah online!
Terima kasih kepada Erik the Outgolfer. Dia menyelamatkan saya dari beberapa byte tambahan dan dari banyak jam frustrasi.
Berikut adalah solusi 46 byte
Ini sebenarnya melempar kesalahan sintaksis python ketika input berisi karakter yang tidak valid.
Cobalah online!
sumber
Japt v2.0a0
-S
, 41 byteCobalah
sumber
05AB1E , 36 byte
Cobalah online.
Melempar kesalahan berikut saat input tidak hanya mengandung
[A-Za-z ]
:Penjelasan:
Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
“¸–ƒ—€É€Å™ê“
adalah"sentence must only use letters"
.sumber
PHP , 147 byte
Cobalah online!
Atau jika
die()
dapat diterima sebagai "Pengecualian":PHP , 131 byte
Cobalah online!
sumber