Tantangan ini telah diposting di subreddit DailyProgrammer, dan saya pikir itu akan menjadi kandidat yang bagus untuk tantangan kode golf. Menentukan apakah surat saldo didasarkan pada jaraknya dari titik keseimbangan, dan nilai surat itu. Nilai huruf dapat ditentukan dengan mengambil posisi satu-indeksnya dalam alfabet, atau dengan mengurangi 64 dari nilai ASCII-nya. Selain itu, nilai surat dikalikan dengan jaraknya dari titik keseimbangan. Mari kita lihat sebuah contoh STEAD
,:
STEAD -> 19, 20, 5, 1, 4 ASCII values
This balances at T, and I'll show you why!
S T EAD -> 1*19 = 1*5 + 2*1 + 3*4
Each set of letters on either side sums to the same value, so
T is the anchor.
Namun, perlu dicatat bahwa tidak semua kata seimbang. Misalnya, kata WRONG
tersebut tidak seimbang dalam konfigurasi apa pun. Juga, kata-kata harus seimbang pada satu huruf, bukan di antara dua huruf. Misalnya, SAAS
akan menyeimbangkan jika ada huruf di tengah dua A
s, tetapi karena tidak ada itu tidak seimbang.
Tugas
Anda harus membuat program atau fungsi yang menggunakan kata huruf besar sebagai input atau argumen fungsi , dan kemudian menghasilkan salah satu dari dua output:
Jika kata tersebut seimbang, maka kata tersebut harus dicetak dengan sisi kiri, spasi, huruf jangkar, spasi lain, dan sisi kanan.
function (STEAD) -> S T EAD
Jika kata itu tidak seimbang, Anda harus mencetak kata, diikuti oleh
DOES NOT BALANCE
function (WRONG) -> WRONG DOES NOT BALANCE
Anda dapat mengasumsikan bahwa semua input akan menjadi huruf besar dan hanya akan ada karakter alfa.
Contoh I / O
function (CONSUBSTANTIATION) -> CONSUBST A NTIATION
function (WRONGHEADED) -> WRO N GHEADED
function (UNINTELLIGIBILITY) -> UNINTELL I GIBILITY
function (SUPERGLUE) -> SUPERGLUE DOES NOT BALANCE
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
function (A)
->A
bukannya -> `A`?BALANCE DOES NOT BALANCE
Jawaban:
Pyth, 49 byte
Demonstrasi.
Penjelasan:
sumber
Bash murni (tanpa coreutils atau utilitas lain), 125
Pusat standar perhitungan massa menggunakan momen tentang asal:
Output tes:
sumber
Python 3, 124
Kode ini tidak menguji titik tumpu potensial, tetapi menemukan "pusat massa" dan memeriksa apakah itu bilangan bulat. Itu dilakukan dengan menjumlahkan massa total
a
dan massa posisi-tertimbangb
, untuk menemukan pusat massam=b/a
. Kemudian mencetak string yang dipisah pada posisim
, atau string plus"DOES NOT BALANCE"
, yang dipilih oleh[_::2]
trik slicing daftar.sumber
CJam, 57 byte
Ini masih bisa golf sedikit.
Cobalah online di sini
sumber
'@fm
lebih pendek dari64f-:i
.JavaScript (ES6),
211200160 byteUpaya sebelumnya, 200 byte
Terima kasih kepada edc56 dan nderscore untuk membantu saya bermain golf ini
Demo
Firefox dan Edge hanya untuk saat ini, seperti ES6
sumber
j=0
ke dalam panggilan kecharCodeAt
:)C,
236198192188180 180byteDiperluas dengan main ():
Verifikasi:
sumber
i,l=1,j;g(char*v){for(;v[i]&&l;++i)for(j=l=0;v[j];++j)l+=(i-j)*(v[j]-64);l?printf("%s DOES NOT BALANCE",v):printf("%.*s %c %s",--i,v,v[i],v+i+1);}
Catatan: menggunakan perilaku yang tidak terdefinisi :)CJam, 50 byte
Menggunakan penerjemah Java, ini keluar dengan kesalahan ke STDERR untuk kata-kata yang tidak seimbang.
Jika Anda mencoba kode dalam juru bahasa CJam , abaikan saja semuanya kecuali baris keluaran terakhir.
Ide
"Ide asli" saya ternyata adalah pendekatan yang sama dengan @xnor yang diposting beberapa jam sebelum saya. Namun demikian, ini dia:
Diberikan daftar nilai (v 0 , ... v n ) , kami berpendapat bahwa v_t adalah jangkar daftar jika dan hanya jika salah satu dari kondisi berikut ini, yang setara berlaku:
tv 0 + ... + 1v t-1 == 1v t + 1 + ... tv n
(0 - t) v 0 + ... + (n - t) v n == 0
0v 0 + ... + nv n == t (v 0 + ... + v n )
t: = (0v 0 + ... + nv n ) / (v 0 + ... + v n ) adalah bilangan bulat.
Kode
Pada bagian ini, kami mulai bersenang-senang dengan operator yang kelebihan beban.
Bagi hasil bagi, ini terjadi:
Untuk string, ini terjadi:
Pada titik ini, kesalahan runtime terjadi, karena
""
tidak memiliki karakter terakhir. Tumpukan dicetak dan mengeksekusi dibatalkan segera.sumber
Julia, 122 byte
Ini menciptakan fungsi tanpa nama yang menerima string sebagai input dan mengembalikan string. Untuk menyebutnya, berikan nama, mis
f=s->...
.Kami memperlakukan kata seperti sistem satu dimensi yang kami butuhkan untuk menemukan pusat massa. Pusat massa dihitung sebagai produk titik dari massa dengan lokasi mereka, dibagi dengan total massa sistem. Jika pusat yang dihitung adalah bilangan bulat, itu sesuai dengan salah satu huruf dalam kata. Kalau tidak, kata itu tidak seimbang.
Penjelasan + tidak dikumpulkan:
Contoh:
sumber
PHP,
249174 byteMengambil satu argumen baris perintah.
Upaya awal:
sumber
Haskell,
161135 byteContoh penggunaan:
Cara kerjanya:
f
memanggil fungsi helper!
yang mengambil dua parameter, bagian kiri dan kanan kata pada posisi tertentu. Itu berhenti jika kedua bagian memiliki bobot (fungsiv
) yang sama atau menyebut dirinya secara rekursif dengan huruf pertama dari bagian kanan dipindahkan ke kiri. Itu berakhir denganDOES NOT BALANCE
pesan jika bagian kanan kosong.sumber
C,
183134 byteVersi Baru Dijelaskan:
Seperti dua entri lainnya, ia menggunakan penambahan konstan di satu sisi dan pengurangan di sisi lain untuk mudah-mudahan mencapai nol yang merupakan indikasi keseimbangan. Keluaran asli saya digunakan kembali dari jawaban pertama, meskipun sedikit dimodifikasi.
Versi Lama Dijelaskan:
Loop pertama (h) adalah iterator utama untuk panjang string. Loop kedua (i) terakumulasi (b) hingga h == i. Setelah itu terjadi, (b) disimpan dalam (a), reset ke 0, dan kemudian berlanjut sampai akhir string tercapai di mana (a) dibandingkan dengan (b). Jika ada kecocokan, loop iterator utama rusak dan hasilnya dicetak.
sumber
Ruby 175
Uji secara online: http://ideone.com/G403Fv
Ini adalah implementasi Ruby yang sangat mudah. Inilah program yang dapat dibaca:
sumber
R, 190 byte
Sebagai fungsi yang tidak disebutkan namanya. Saya pikir saya bisa mendapatkan beberapa lagi, tetapi itu harus menunggu.
Tidak digabungkan sedikit dengan penjelasan singkat
Itu tidak menempatkan baris baru di akhir.
Uji coba
sumber
C, 142 byte
Kredit untuk beberapa pengguna karena telah mengalahkan saya :)
sumber
Java, 240 byte
sumber