var QUESTION_ID=80196,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/80196/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
/
dan\
. Mungkin untuk pertanyaan lain ...Jawaban:
Siput , 19 byte
Spesifikasi untuk yang satu ini dapat diimplementasikan sejelas mungkin, tanpa perlu pemikiran.
sumber
udlr
atur arah siput ke atas / bawah / kiri / kanan.|
berfungsi seperti halnya di regex reguler, dan)
tidak perlu tanda kurung terbuka yang cocok. Jadi, kode itu diterjemahkan secara langsung menjadi "Temukan salah satuv<>^
dan atur arah dengan tepat, lalu coba cari O di arah itu.",
seperti*
regex.Retina,
565242383130 byteDisimpan 1 byte berkat @ MartinBüttner
Menyalahgunakan properti persegi panjang. Membutuhkan input untuk memiliki baris baru tambahan.
Cobalah online
Penjelasan
Ini berfungsi dalam tiga bagian:
>
<
^
danv
ini karena logika untuk^
danv
benar-benar sama, hanya karakternya.Memvalidasi
<
Ini sederhana:
Ini cocok dengan
O
, opsional diikuti oleh karakter non-baris baru, lalu a<
Memvalidasi
>
Ini sama seperti cara sebelumnya kecuali sebaliknya. Pertama
>
dicocokkan, laluO
Memvalidasi
^
danv
Ini sulit untuk golf dan mengambil iklan dari input selalu valid. Pertama, kami mencocokkan apakah itu
v
atauO
:Jika itu adalah
^
, karakter pertama yang ditemui harus aO
. Jadi, ini cocok dengan karakter pertama yang cocok. Selanjutnya kita menghitung jumlah yang.
mengikutinya hingga ke baris baru:Selanjutnya, ini bisa menjadi dua bagian, saya akan membahas yang pertama:
Jadi pertama, kami mencocokkan sampai yang berikut
O
, menggunakan:Ini secara opsional cocok dengan semua non-
O
karakter sampaiO
ditemui, jika ini berhasil, maka itu berlanjut ... jika tidak, maka berikut ini terjadi ...Sekarang, ia berusaha menemukan
^
penggunaannya:^
adalah karakter khusus dalam regex sehingga perlu diloloskan.[^^]
cocok dengan semua karakter kecuali^
, ini berfungsi sama seperti di atas, jika ini berhasil, maka berikut ini terjadi ...Jadi sekarang, salah satu dari yang di atas telah cocok dengan sukses,
\1
memeriksa dan melihat apakah kelompok penangkap dari sebelumnya(.*\n)
, kelompok penangkap ini menyimpan jumlah.
s setelah adav
atauO
dari sebelumnya, jadi sekarang\1
hanya memeriksa apakah jumlah titik dalam sama.sumber
¶
alih-alih\n
(Retina dapat menangani kode sumber dalam ISO 8859-1.)¶
hanya pengganti, terima kasih atas tipnya!¶
mana - mana, sebelum melakukan penguraian lebih lanjut.Java (tanpa regex),
413412246242212211209198 byteBersaing dalam tantangan golf menggunakan java kurang masuk akal daripada ikut serta dalam balap Formula 1 dengan sepeda, tapi saya tidak selalu melakukan pemikiran yang masuk akal.
Ini adalah solusi java saya yang sangat panjang versi Golf
dan ungolfed
Sepertinya seluruh konsep saya salah, ini solusi saya yang lebih pendek
dan versi yang tidak serigala
EDIT Saya menulis ulang kode untuk mencari 'O', sekarang ini berisi loop tunggal jauh lebih pendek, dan saya juga menggunakan saran @Frozn untuk mengganti beberapa karakter dengan nilai ascii mereka.
Hasilnya, 30 byte lainnya menggigit debu.
Saran lain dari @Frozn, dan kami beberapa byte lebih dekat ke solusi Python
Satu lagi tulis ulang satu putaran, dan gabungkan dua pernyataan if
sumber
return
dan(
untuk menghemat satu byte. Ruang tidak diperlukan ketika nilai pengembalian Anda ada di dalam tanda kurung (atau kutipan untuk Strings). Sumber dari tips golf-code Java.'O' = 79
,'>' = 62
,'<' = 60
,'^' = 94
. Untuk 'v' itu 118 tetapi itu tidak mempersingkat kodenya.MATL (tanpa regex),
26252422 byteCobalah secara Online!
Versi modifikasi untuk semua kasus uji
Penjelasan
sumber
J
'O'
, bukan angka0
. Kode ASCII untuk surat'O'
adalah79
CJam (tanpa regex), 25
Versi sebelumnya salah, ini harus dilakukan untuk saat ini:
Cobalah online
Penjelasan:
Saya mencoba beberapa rumus matematika untuk membedakan antara string "baik" dan "buruk", dan untuk setiap jenis rumus saya mencoba memasukkan dalam berbagai angka. Saya berakhir dengan hal di
HbI%
atas.string "baik" untuk grid asli adalah "> O" dan "O <" dan mereka memberikan hasil 17
string "baik" untuk grid yang dialihkan adalah "vO" dan "O ^" dan mereka memberikan hasil 15
"buruk" string untuk kedua kisi adalah: ">", "<", "^", "v", "O", "", "O>", "Ov", "<O", "<O" dan mereka memberikan hasil 8, 6, 4, 10, 7, 0, 1, 3, 1, 3
sumber
Python 3 (tanpa regex), 184 byte.
Hore untuk eval hacking!
sumber
TSQL (sqlserver 2012) (tanpa regex), 358 byte
Harus menggunakan linechange yang funky dalam deklarasi untuk memaksa versi online untuk mengeksekusinya (menetapkan nilai ke variabel input tidak memengaruhi perhitungan panjang)
Cobalah online!
sumber
Pyth, 43 byte
Demo langsung.
sumber
JavaScript (ES6), 78 byte
Regexp tentu saja. Ternyata pada prinsipnya mirip dengan jawaban Ruby.
sumber
Ruby,
715554 byteSolusi Regex, yang artinya mungkin akan mudah dikalahkan oleh Retina atau Perl.
Mengembalikan nomor indeks (benar) jika ada kecocokan.
Sekarang dengan trik yang mirip dengan @Downgoat Retina menjawab, cocok dengan balok turun dan naik pada saat yang sama.
sumber
JavaScript (ES6) (tanpa regex), 126 byte
Dimana
\n
mewakili karakter baris baru literal.sumber
Clojure (tanpa regex), 293 byte
Tidak terasa enak. Solusi langsung, menemukan indeks karakter yang sesuai dan menghitung jika mereka berada di baris yang sama.
Anda dapat mencobanya di sini https://ideone.com/m4f2ra
sumber
Python (tanpa regex), 105 byte
mengembalikan Benar atau Salah
Pertama, strip '.' dan '\ n' dari ujung sehingga karakter yang menarik, '0 <> v ^', adalah karakter pertama dan terakhir.
'>O<vO^'.find(t[0]+t[-1])//3
- memeriksa apakah karakter adalah pengaturan yang berpotensi valid. Mengevaluasi ke 0 untuk '> O' atau 'O <', ke 1 untuk 'vO' atau 'O ^', dan ke -1 untuk hal lain.'\n'in t
- memeriksa apakah karakter berada di baris yang berbeda,len(t)%(s.find('\n')+1)!=1
- memeriksa apakah mereka berada di kolom yang berbeda, dan1
- adalah defaultThe
not
membalikkan hasil yang dipilih dari daftar, sehinggareturn
ekspresi setara dengan:sumber
Julia (tanpa regex), 98
Fungsi yang beroperasi pada larik karakter, dinormalisasi dengan rotasi, menghapus baris dan kolom yang hanya berisi titik-titik dengan pengindeksan rentang dan akhirnya memeriksa lokasi 'O' dengan mempertimbangkan jika sisanya b adalah vektor kolom atau baris menggunakan perkalian matriks.
Cobalah online
sumber
Python 2 (tanpa regex), 268 byte
Nilai Truthy dan Falsy yang dikembalikan oleh fungsi masing-masing adalah 1 dan 0.
Saya belum memiliki kesempatan untuk bermain golf. Jujur, saya tidak terlalu berharap untuk yang satu ini ...
Setiap saran akan sangat dihargai!
sumber
C # (No Regex), 282 byte
Bekerja seperti versi java tetapi diubah dan dikurangi
Diperluas (Penjelasan termasuk):
sumber
C (ANSI) (Tanpa regex), 237 byte
Diperluas:
Saya pikir saya mengambil pendekatan yang berbeda di sini dibandingkan dengan implementasi Java atau C #. Saya mendapatkan koordinat 'O' dan panah ((c, d) dan (x, y)) dan kemudian membandingkannya untuk melihat apakah panah menunjuk ke arah yang benar.
Mengembalikan 0 jika salah dan 1 jika benar
sumber
Grime v0.1 , 31 byte
Bukan solusi yang sangat menarik. Mencetak
1
untuk contoh yang benar, dan0
untuk yang salah. Cobalah online!Penjelasan
Kami hanya mencari persegi panjang input untuk pola ukuran minimal (n × 1 atau 1 × n) yang berisi laser dan target dalam urutan yang benar. The
n`
bendera membuat penafsir mencetak jumlah pertandingan, yang akan selalu ada paling banyak satu. Sisa garis terdiri dari empat pola yang dipisahkan oleh|
-karakter, yang berarti logika OR: persegi panjang dicocokkan jika cocok dengan salah satu pola. Polanya bekerja sebagai berikut:sumber