Tugas
Diberikan String sebagai input, tugas Anda adalah untuk menghasilkan 42
hanya jika String input kebetulan persis sebagai berikut:
abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz
Ini dapat menampilkan nilai lain, menghasilkan kesalahan atau tidak menghasilkan sama sekali, jika input tidak sama dengan String yang disebutkan di atas.
Kriteria Kemenangan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
abbcccddddeeeee...zzabc
tidak memuaskan yang saya kira dan saya bisa melihat beberapa program memberikan ya pada input itu.Jawaban:
Golfscript, 20
dengan baris baru, 21 karakter (oleh Nabb)
Sebenarnya Nabb mengalahkan milikku, berikut ini solusi orisinil dengan lini baru, 22 karakter
Ini hanya menghasilkan string sumber dan hanya membandingkannya dengan string dari stdin.
sumber
26,{).[96+]*}%n+=42`*
untuk 21 (termasuk baris baru).n+
karena array tidak rata. Anda harus menyimpan 20 karakter asli atau menambahkan~
untuk meratakan persyaratan bagian dalam array.Ruby 1.9,
46 4239 karakterMengasumsikan input tidak diakhiri dengan baris baru.
sumber
Program C -
7889Sunting: Jangan mencetak 42 ketika ada karakter tambahan.
Asumsikan input tidak memiliki baris baru.
Jika awalan tidak cocok, program keluar. Jika awalan cocok tetapi ada 1-3 atau lebih karakter, cetak 2. Jika tidak, menghasilkan perilaku yang tidak ditentukan.
Ini dapat membuat satu karakter lebih pendek dengan mengubah
exit(1)
kefork()
. Oh, dan pada catatan yang tidak terkait, ingatlah untuk menyimpan dokumen terbuka apa pun , untuk alasan apa pun , sistem Anda akan terkunci.sumber
PHP (60)
Dengan asumsi input disediakan di commandline:
Penjelasan : Anda dapat melihat string sebagai struktur segitiga.
Baris
j
dimulai pada indeksi = j*(j+1)/2
(itulah rumus angka segitiga). Memecahkan persamaan kuadrat menghasilkan indeksi
yang on linej = int((sqrt(8*i+1)-1)/2)
dan karenanya mengandung karakter97 + int((sqrt(8*i+1)-1)/2)
. Rentang0-350
indeks memungkinkan kami untuk menyederhanakannya96.5 + sqrt(2*(i+1))
, tetapi itu tidak berlaku untuk nilai yang lebih besar.Sunting : Beralih ke input commandline seperti yang disarankan dalam komentar.
Sunting : Menggunakan operator kondisional untuk menyimpan karakter
sumber
$s.=chr(96.5+sqrt($i+=2));
kerjanya?Perl, 35
43Membutuhkan Perl 5.10 atau lebih baru (dijalankan dengan
-E
), tidak ada baris baru dalam input.Saya lebih suka efek samping regex saya, tetapi kode yang lebih pendek telah berbicara. Ini dia sebagai oleh-oleh. Juga dimaksudkan untuk Perl 5.10 atau lebih baru, tetapi hanya untuk fitur regex maju / eksperimental, jadi hanya
p
opsi baris perintah yang diperlukan.sumber
$a++."{$b}"
bukan hanya$a++.$b
?05AB1E , 7 byte (tidak bersaing)
Cobalah online!
Penjelasan
Hanya melalui beberapa tantangan untuk belajar 05AB1E (dan bermain golf secara umum). Tantangan ini ditandai sebagai aktif kemarin dan saya menemukan solusi singkat, jadi mengapa tidak berbagi? :)
sumber
Program Haskell -
71676457Mengasumsikan tidak ada baris baru, dan tidak menghasilkan satu baris pun.
Pemakaian:
sumber
zipWith
berhenti ketika mencapai akhir daftar yang lebih pendek, Anda dapat mengganti['a'..'z']
dengan['a'..]
dan menyimpan 3 karakter.[c|c<-['a'..'z'],_<-['a'..c]]
J, 29
contoh:
sumber
D: 94 Karakter
Lebih Jelas:
sumber
Delphi,
164132Yang ini membangun string dan membandingkannya dengan argumen baris perintah pertama. Ini lebih pendek dan tidak terlalu rumit daripada kiriman saya yang lain:
(Perhatikan, bahwa versi ini mengasumsikan bahwa
c
dani
variabel mulai diinisialisasi pada 0, seperti halnya dalam versi saya Delphi (2010).)Seperti kiriman saya yang lain, yang ini membutuhkan lebih sedikit karakter jika pembuatan string tidak terjadi dalam suatu fungsi, seperti yang saya lakukan sebelumnya:
Delphi, 181
Perhatikan bahwa output tidak memerlukan baris baru, jadi WriteLn () menjadi Write ().sumber
PHP - 45 karakter
Saya terkejut tidak ada yang diposting jawaban yang menggunakan hashing. Ini adalah cara yang sangat efisien untuk menguji string yang tepat.
Data agak sulit untuk menyalin / menempel karena ada null-byte di tengah kode. Berikut adalah hex-dump kode untuk keperluan pengujian.
sumber
Scala 79
sumber
Pyth, 14
Hanya membangun string yang diperlukan, kemudian membandingkannya dengan input dan mengalikannya dengan 42.
sumber
m
menyebabkan saya kesulitan ...m
,, yang menerapkan fungsi ke setiap elemen inputnya. Inputnya adalahG
alfabet.xGd
menemukan posisid
, karakter dalam alfabet, dalamG
, alfabet.h
meningkatkan itu per satu, dan*d
mereplikasi karakter sebanyak itu berkali-kali. Di luarm
fungsi,s
gabungkan daftar string yang dihasilkan menjadi satu string, kemudianqz
periksa apakah hasilnya sama dengan input. Boolean diwakili seolah-0
olah Salah dan1
jika benar, sehingga*42
menghasilkan nilai42
jika Benar dan0
jika Salah.Brachylog (2), 15 byte, tantangan tanggal bahasa
Cobalah online!
Dan sekarang untuk jawaban yang bekerja pada prinsip yang sama sekali berbeda dengan yang paling banyak dilihat di sini. Ini adalah pengiriman fungsi (pertanyaan tidak menentukan jenis pengiriman apa yang diinginkan, tetapi fungsi diizinkan secara default).
Penjelasan
Jawaban ini bekerja dengan mendefinisikan semacam string: yang a) berisi semua huruf kecil dari alfabet, b) dalam urutan, dan c) yang mengambil jumlah kemunculan setiap karakter dalam string menghasilkan urutan berturut-turut bilangan bulat mulai dari 1. (Seharusnya jelas bahwa ada banyak string seperti itu, tetapi yang kita ingin kasus khusus adalah yang terpendek.) Kemudian jika string memenuhi kriteria tersebut, kita menambahkan 16 ke jumlah karakter berbeda dalam tali; ini akan menghasilkan 42 jika string adalah satu pertanyaan yang meminta kita untuk kasus khusus, dan setidaknya 43 dalam semua kasus lainnya. (Jika string gagal salah satu kriteria untuk masuk ke dalam kategori, fungsi akan berakhir dengan kegagalan, yang seperti melempar pengecualian.)
Berikut cara menafsirkan kode sumber:
sumber
R,
6058Terima kasih atas sarannya oleh @giusppe
sumber
paste
tidak apa-apa di sini, dan Anda dapat menggunakannyascan(,"")
sebagai gantinyareadline()
.Python (84)
Mengasumsikan baris tambahan di akhir input.
sumber
raw_input
sajasys.stdin.read
?raw_input
hanya membaca satu baris; Saya tidak yakin apakah "input" akan selalu menjadi satu baris atau apakah akan ada input yang didiskualifikasi pada baris selanjutnya.Python - 62 karakter
sumber
print("".join(x*chr(x+96)for x in range(27))==input())*42
.Perl,
4946 karakteruntuk digunakan dalam suatu program, bukan pada baris perintah
$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'Salam
rbo
Sunting: Ide yang diambil dari Ventero
sumber
PHP
928887 karakterSUNTING
Diganti
$j<0
dengan$j
danreturn $b==$a?42:0;
denganecho $b==$a?42:0;
Diganti
echo $b==$a?42:0;
denganecho($b==$a)*42;
sumber
ECLiPSe Prolog - 173
sumber
JavaScript (91
939498102116)Penggunaan:,
a('string')
mengembalikan42
jika valid menurut spesifikasi, atau0
.http://jsfiddle.net/g25M3/6/
Sunting : Dihapus
var
dan dihilangkan dua spasi difor (
.Sunting 2 : Diubah
j>0
menjadij
, danreturn (z==r)?42:0;
untukreturn z==r?42:0
Sunting 3 : Inisialisasi
i
dengani=''
, ubah(z==r)?42:0
untuk(z==r)*42
Sunting 4 : Ubah
for(;i<27;i++)
untukwhile(i++<26)
Sunting 5 : Ubah
i=r='';while(i++<26)
untukfor(i=r='';i++<26;)
danfor(j=i;j;j--)
untukfor(j=i;j--;)
sumber
var
untuk mendeklarasikan variabel;)for (
.return(z==r)?42:0;
denganreturn z==r?42:0
j>0
bisa sajaj
saya kira.JavaScript 1.8, 99 karakter
Saya menantang Anda untuk membuatnya masuk akal :)
sumber
PHP - 59
Asumsikan setidaknya 1 input diberikan pada klien
Ini lebih atau kurang berfungsi, kecuali bahwa md5 secara teknis dapat memiliki duplikasi dengan hashing algo.
sumber
PowerShell v2 +, 47 byte
Membangun rentang
1..26
, mengumpankannya melalui loop dengan|%{...}
. Setiap iterasi kami menggunakan operator koma untuk membangun array literal dari arus[char]
dikalikan dengan nomor loop saat ini. Kami kemudian-join
bersama-sama membangun stringabbcccdddd...
dan kemudian menggunakan-ceq
perbandingan case-sensitive terhadap input kami$args
, yang akan menghasilkan salah satu$TRUE
atau$FALSE
. Di PowerShell, nilai Boolean dapat secara implisit dilemparkan sebagai1
atau0
, masing-masing, yang terjadi di sini dengan42*
. Akan mencetak42
jika inputnyaabbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz
dan akan menampilkan0
sebaliknya.sumber
K, 26 Bytes
Terima kasih
sumber
{$[x~.Q.a@&1+!26;42;]}
selama 22 byte.42*(&!27)~-96+"j"$
untuk 18 byte (porting jawaban oK saya ).VBA 91
Tidak ada jawaban VBA tetapi ini berfungsi:
sumber
o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
A1
sebagai input.APL (Dyalog) ,
1817 byteCobalah online!
Empat byte jelas dapat disimpan jika kita diizinkan menggunakan huruf besar.
42
42/⍨
if (lit. direplikasi oleh)⍞
input karakter≡
identik dengan819⌶
yang lebih rendah⎕A
Sebuah lfabet/⍨
direplikasi oleh⍳
satu lewat26
26sumber
Clojure - 61 karakter
Memanfaatkan fakta-fakta berikut:
sumber
Javascript 144
Mungkin bisa ditingkatkan secara signifikan, rekursi selalu menjadi hal yang jauh bagi saya.
Terkompresi
Kurang Terkompresi
sumber
Delphi, 127
Yang ini membaca string dari input, membandingkannya saat berjalan, menulis 42 ketika input cocok sampai yang terakhir
z
.Delphi, 157
Delphi, 188
Versi ini tidak menggunakan fungsi, yang menyimpan beberapa karakter jika dibandingkan dengan versi sebelumnya dari teknik ini:
Delphi, 213
Sayangnya agak lama, sebagian besar karena kata kunci yang panjang Delphi, dan kebutuhan untuk menginisialisasi aplikasi konsol sebelum mereka dapat menulis output.Perhatikan juga bahwa saya menambah CmdLine dengan 77 karakter, karena itu adalah offset yang saya perlukan untuk melewati executablepath lokal saya (Delphi tidak memiliki pointer argumen langsung). Sesuaikan agar sesuai dengan pengaturan Anda sendiri (bisa menyebabkan 1 karakter lebih sedikit saat offset <10).
sumber
program a;
garis. Dan kurung di sekitarb^<>Char(c)
,i>0
dani=27
bisa dilepas.if i>0then
akan dikompilasi!)