Penafian: Ini bukan tantangan saya tetapi ThisGuy mengatakan saya baik-baik saja untuk mengirim.
Kadang-kadang saya ingin membuat kata menjadi kebalikannya, seperti happiness
pergi ke unhappiness
. Sayangnya ketika ini terjadi, otak saya terkadang menjadi kosong. Kemudian suatu hari, setelah kejadian ini terjadi lagi, saya berpikir dalam hati, "Ini untuk program apa!"
Karena bahasa Inggris memiliki banyak pengecualian, saya telah membuat daftar yang berisi awalan untuk huruf awal
q or h -> dis- (honest -> dishonest)
l -> il- (legal -> illegal)
m or p -> im- (mature -> immature)
r -> ir- (responsible -> irresponsible)
everything else -> un- (worthy -> unworthy)
Tugas
Diberikan input sebagai string, buat string menjadi negatif dan hasilkan hasilnya. Anda dapat mengasumsikan bahwa semua input yang diberikan sesuai dengan aturan di atas. Kiriman dapat berupa program atau fungsi, bukan cuplikan.
Memasukkan
Satu string, diambil sebagai parameter atau dari STDIN
Keluaran
Bentuk string yang dinegasikan, sesuai dengan aturan di atas
Bagaimana cara Menang
Ini adalah kode-golf sehingga kode terpendek menang
q
tanpa"u
?qadi
,qat
, yang disebutkan di atasqi
,qirsh
danqwerty
. (Saya banyak bermain Scrabble)q
selalu diikuti olehu
dalam string atau tidak?u
Jawaban:
Python, 55 byte
Cobalah online!
Kita perlu menangani 7 huruf awal yang berbeda:
g
->dis
,h
->dis
,p
->im
,m
->im
,l
->il
,r
->ir
dan yang lainnya ->un
Kita dapat menyimpan semua negasi ini dalam satu string dan mengekstrak yang benar melalui pengiris:
Sekarang kita perlu menghitung indeks awal
i
.'rlmphq'.find
mengembalikan 0 untuk'r'
, 5 untukq
dan -1 untuk semua yang tidak ada dalam string. Untuk mendapatkan nilai yang dibutuhkan dari 0 hingga 6 kita masih perlu mengurangi nilai kembali dari 5, menghasilkan kode ini:sumber
ddiiiiuiimmlrnss
danrlmphq
dan nomor5
untuk, mengapa slice skip 7?GNU sed , 50 byte
Termasuk +1 untuk
-r
Tidak ada yang mewah. Gunakan
&
pengganti untuk menggabungkan beberapa penggantian, dant
untuk melewatkan yang terakhir jika salah satu dari penggantian pertama terjadi.Cobalah online!
sumber
Jelly , 30 byte
Cobalah online!
Bagaimana?
Perhatikan bahwa diulang
r
di“qmlrrhp”
dalam indeks ke-5, yang, jika direferensikan, akan menghasilkan prependingun
, sehingga bisa sama-sama baik menjadi apa pun selainh
ataup
.sumber
/// ,
5956 byteCobalah online!
Input berjalan setelah yang terakhir
#
.Bagaimana itu bekerja:
Saya membuat optimasi yang mengurangi ukurannya menjadi 56 byte, tetapi karena itu menyulitkan saya akan menjelaskan versi aslinya, lalu menjelaskan golf.
Intuisi: Tantangannya cukup sederhana, cukup tambahkan negatif tergantung pada awal kata. Namun, di ///, Anda tidak bisa adil
concatenate if [...]
, Anda hanya bisa mengganti sesuatu mengikuti pola tertentu. Jadi dalam program ini, kata awal yang positif diganti dengan kata awal yang negatif. Itu#
ditambahkan untuk memastikan bahwa sekali awal baru ditambahkan, tidak ada lagi awal baru yang akan ditambahkan. The#
juga memungkinkan untuk melakukan 'segala sesuatu yang lain: un'.Golf menggabungkan substitusi baru di ia mulai:
/^/\/\/#/
. Ini menggantikan semua^
dengan//#
, yang merupakan pola umum di versi asli.sumber
TI-Basic, 104 byte
Membutuhkan semua huruf kapital.
Penjelasan:
sumber
JavaScript (
716461 byte)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
Suntingan:
charAt(0)
->[0]
)sumber
w[0]
bukanw.charAt(0)
?w=>...
? Definisi fungsi yang sebenarnya akan mencakuplet f=w=>...
? (Mungkin tercakup dalam FAQ di suatu tempat ...)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
3 byte kurangBatch, 114 byte
Periksa karakter pertama dari kata itu terhadap daftar awalan khusus dan jika demikian mengubah awalan dari default
un
. Casing khususqu
dimungkinkan dengan biaya 21 byte.sumber
Haskell, 71 byte
Contoh penggunaan:
f "legal"
->"illegal"
. Cobalah online!Buat tabel pencarian pasangan awalan / pengganti untuk mencari karakter pertama dari string input dengan nilai default
"un"
jika tidak ditemukan.sumber
Retina , 54 byte
Penjelasan:
Pertama kali saya menggunakan Retina. Itu bahasa yang cukup rapi.
Cobalah online!
sumber
Javascript,
727166616059 bytew=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Ya, ini masih lebih lama dari solusi yang ada. :)Dalam hal ini perlu penjelasan apa pun, saya mengambil keuntungan dari pasangan q / h dan m / p dengan menggabungkan indeks mereka dalam string pencarian dengan mod 4, kemudian menggunakannya sebagai pencarian ke dalam array awalan.
sumber
search
bukanindexOf
. Dan beberapa lagi, saya pikir, menggunakan&
bukannya%
search
. Tidak dapat melihat cara membuat & trik bekerja - akan sempurna jika array saya hanya 4 elemen.C,
109107 byteCobalah online!
sumber
Mathematica, 107 byte
Penjelasan:
StartOfString~~x:#:>#2<>x&
adalah fungsi murni di mana argumen pertama adalah pola string yang cocok pada awal string dan argumen kedua adalah string untuk ditambahkan ke pertandingan. Ini mengembalikan aturan tertunda yang cocok untuk digunakan di dalamStringReplace
. Ini kemudian diterapkan pada masing-masing pasangan yang{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}
menghasilkan daftar aturanAkhirnya daftar ini dimasukkan ke dalam
StringReplace
yang memberikan operator pada string.sumber
PHP, 101 Bytes
Versi Online
sumber
Excel 78 byte
Saya menemukan beberapa pesaing dekat menggunakan metode berbeda yang mencetak 81 byte:
Dan 84 byte:
sumber
REXX, 78 byte
Menghemat beberapa byte dengan membalas di UPPERCASE, mis. Potent -> IMPOTENT.
sumber
Perl, 49 + 1 (
-p
bendera) = 50 byteMenggunakan:
Cobalah online .
sumber
Clojure, 65 byte
Yah ini membosankan ... tapi saya tidak bisa membuatnya lebih pendek. Setidaknya ada sedikit ruang putih.
sumber
OCaml, 85
Fungsi anonim, menggunakan pencocokan pola pada karakter pertama.
sumber