Dalam permainan Yahtzee , pemain melempar lima dadu enam sisi, dan berusaha menciptakan tangan tertentu untuk mencetak poin. Satu tangan semacam itu adalah lurus kecil : empat angka berurutan, tidak harus berurutan. Tiga lurus kecil yang mungkin adalah 1, 2, 3, 4
, 2, 3, 4, 5
, dan 3, 4, 5, 6
.
Misalnya, [3, 5, 6, 1, 4]
berisi straight kecil [3, 4, 5, 6]
.
Memasukkan
Daftar lima bilangan bulat yang tidak disortir, masing-masing antara 1 dan 6 inklusif, mewakili tangan Yahtzee.
Keluaran
Nilai kebenaran jika tangan berisi nilai lurus kecil dan nilai falsy sebaliknya.
Uji kasus
Benar:
[[1, 2, 3, 3, 4], [1, 2, 3, 4, 5], [3, 5, 6, 1, 4], [1, 5, 3, 4, 6], [4, 5, 2, 3, 5], [1, 4, 3, 2, 2], [5, 4, 3, 6, 3], [5, 3, 5, 4, 6], [2, 4, 5, 1, 3], [3, 6, 4, 5, 3], [5, 6, 4, 3, 5], [4, 5, 3, 6, 3], [4, 5, 5, 3, 2], [4, 5, 2, 3, 5], [4, 6, 5, 3, 6], [4, 2, 3, 1, 5], [3, 6, 4, 6, 5], [5, 2, 1, 3, 4], [4, 4, 1, 2, 3], [4, 1, 4, 2, 3], [5, 1, 4, 3, 6], [5, 2, 2, 3, 4], [4, 4, 6, 5, 3], [2, 4, 3, 5, 1], [5, 4, 2, 5, 3], [2, 3, 5, 5, 4], [1, 6, 3, 4, 5], [4, 5, 3, 3, 6], [6, 4, 3, 6, 5], [4, 6, 6, 5, 3], [4, 3, 5, 2, 2], [2, 3, 2, 1, 4], [4, 2, 6, 1, 3], [4, 4, 5, 3, 6], [4, 5, 6, 3, 6]]
Falsy:
[[1, 2, 3, 5, 6], [5, 1, 1, 6, 6], [4, 6, 4, 1, 1], [6, 4, 1, 6, 4], [4, 6, 3, 6, 6], [2, 1, 4, 6, 4], [2, 6, 1, 5, 6], [2, 6, 1, 5, 6], [3, 6, 5, 3, 2], [3, 2, 3, 5, 3], [5, 5, 6, 2, 3], [3, 4, 6, 4, 3], [1, 4, 5, 5, 1], [1, 4, 4, 4, 1], [1, 6, 5, 1, 4], [6, 6, 4, 5, 4], [5, 3, 3, 3, 2], [5, 2, 1, 5, 3], [3, 5, 1, 6, 2], [6, 4, 2, 1, 2], [1, 3, 1, 3, 2], [3, 1, 3, 4, 3], [4, 3, 1, 6, 3], [4, 6, 3, 3, 6], [3, 6, 3, 6, 4], [1, 1, 3, 1, 3], [5, 5, 1, 3, 2], [3, 4, 2, 6, 6], [5, 4, 2, 6, 1], [2, 4, 4, 5, 4], [3, 6, 2, 5, 5], [2, 5, 3, 5, 1], [3, 2, 2, 3, 4], [5, 2, 2, 6, 2], [5, 6, 2, 5, 6]]
Terinspirasi oleh ini
Katalog
var QUESTION_ID=74997;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=30525;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"http://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#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="language-list"> <h2>Shortest Solution 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> <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> <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>
code-golf
number
array-manipulation
game
decision-problem
lirtosiast
sumber
sumber
[1,2,3,3,4]
. Banyak jawaban mati karena ini.Jawaban:
MATL ,
71211986 byteTerima kasih banyak kepada @ lirtosiast karena telah menghapus 2 byte
Truthy adalah array nilai bukan nol. Falsy adalah array kosong (tidak ada output yang ditampilkan).
Pada rilis 16.2.0,
u
stabil secara default. Jadi kode membutuhkan ekstraS
untuk mengurutkan output:uSd7BXf
( 7 byte ). Tautan ini menyertakan modifikasi ini.Cobalah online!
sumber
Python, 44 byte
Kembali setelah 9 bulan dengan peningkatan. Kita tidak perlu memeriksa apakah
i
ada di set dengan ide Zgarb untuk memeriksa hanya nilai awal di set. Kita sekarang dapat juga menggunakan<
subset ketat karenai
juga harus disertakan.47 byte:
Memeriksa apakah ada gulungan mati adalah awal dari set kecil lurus. Terima kasih kepada Zgarb untuk gagasan hanya memeriksa nilai awal dalam daftar, menghemat 5 byte.
Python 3.5 memiliki konversi konversi yang lebih pendek, untuk 45 byte
Ini panjang yang sama untuk melakukan
{*range(i,i+4)}
seperti{i,i+1,i+2,i+3}
.sumber
Labirin, 41 byte
Jawaban collab dengan @ MartinBüttner. Saya pikir kami telah meremas yang satu ini jauh melampaui harapan awal saya.
Keluaran adalah
1
untuk kebenaran, kosong untuk kepalsuan. Cobalah online!Penjelasan cepat
Ubah setiap angka
n
menjadi bilangan bulat biner 1 diikuti olehn+1
nol, yaitu2^(n+1)
. Bitwise ATAU hasilnya dan periksa1111
(dalam biner). Eksponensial perlu diimplementasikan secara manual di Labirin.Penjelasan detail
Primer yang biasa:
n
dan mendorongn*10 + <digit>
. Untuk memulai nomor baru,_
tekan nol.Mendirikan
Eksekusi dimulai di kiri atas, dengan penunjuk instruksi menghadap ke kanan. Kami melaksanakan:
Selain mendorong angka nol secara efektif, petunjuk ini tidak mengubah tumpukan.
Loop kiri: eksponensial dan bitwise ATAU
Labyrinth tidak memiliki eksponensial, jadi kita perlu mengimplementasikannya secara manual. Pertama kita membaca bilangan bulat dengan
?
, dan karena ini dijamin positif kita berbelok ke kanan._1
mendorong 1 dan kami memasuki lingkaran dalam.Loop dalam melakukan hal berikut:
Karena ini adalah do-while, untuk input
n
ini menghitung2^(n+1)
. Kita akhiri dengan input nol pada stack, dan30
mengubah nol ini menjadi 30. Kita kemudian melakukan instruksi yang sama dari setup, tetapi kali ini mereka sebenarnya berguna.Loop ini berlanjut untuk setiap angka dalam input sampai EOF, ketika
?
mengembalikan 0. Ini membuat kita bergerak maju daripada berputar, mengarah ke ...Bridge: beberapa pengaturan tambahan
The
30
setelah?
bergantian 0 dari EOF ke 30, yang didorong ke stack tambahan melalui}
. Yang paling penting adalah fakta bahwa kami mendorong 30 ke tumpukan tambahan untuk setiap nomor input, jadi sekarang tumpukan tambahan berisi5 + 1 = 6
salinan dari nomor 30 .Sementara itu, tumpukan utama berisi ATAU bitwise
2^(n+1)
untuk setiap inputn
. Mari kita sebut bitwise ini ATAUb
, karena akan dimodifikasi di loop kanan.Lingkaran kanan: periksa hasil dan keluaran
Inilah yang terjadi di loop sisi kanan:
Sekarang, penghentian sedikit rumit dengan program ini. Berikut adalah beberapa cara yang mungkin dilakukan oleh program:
Setelah 3 iterasi dari loop kanan, dan
b
masih positif: Ingat bagaimana kita menempatkan enam 30-an ke stack tambahan? Karena kami menggunakan dua dari mereka setiap iterasi, pada iterasi keempat kami mulai menarik nol dari bagian bawah tumpukan tambahan. Ini menyebabkan pembagian dengan nol ketika kita lakukan{/
, dan program berakhir.Setelah menghasilkan 1 untuk straight kecil : Jadi kita telah mengeksekusi
!
kemudian berbelok ke kanan di"
persimpangan no-op . Lalu, kami akan bermain rollercoaster saat kami mulai merangkak di seluruh bagian kiri lagi:Setelah beberapa perjalanan di eksponentiator, tumpukan terlihat seperti
[12 | 30 30]
, yang kesalahan keluar dengan pembagian dengan nol setelah dua iterasi lain di loop kanan.:
di loop kanan ada di persimpangan. Jika inputnya adalah, katakanlah,1 1 1 1 1
makab
akan menjadi4
, lalu2
, kemudian1
, kemudian0
setelah iterasi ketiga. Alih-alih berbalik pada:
, IP sekarang bergerak lurus ke depan, dan sesuatu seperti kasus sebelumnya terjadi menyebabkan penghentian akhirnya.Semua dalam semua itu berantakan bagaimana program berakhir, tapi hei apa pun untuk menyimpan beberapa byte itu!
sumber
Mathematica,
394344313944 bytesumber
Haskell,
3934 byteContoh penggunaan:
f [1,2,3,3,4]
->True
.Mirip dengan jawaban xnor , yaitu memeriksa apakah ada jalan lurus kecil dalam daftar input. Sebenarnya saya sedang menguji semua "small straights" (yaitu 4 angka berurutan) yang dimulai dengan angka apa saja dari daftar input, beberapa di antaranya tidak valid dan karena itu selalu gagal dalam
all
tes dan tidak mengubahany
tes, mis[5,6,7,8]
.Sunting: @Zgarb menyimpan 5 byte. Terima kasih!
sumber
MATL, 11 byte
Cobalah online
sumber
JavaScript (ES6),
5553 bytekembali
true
untuk yang benar dan yang salahfalse
.Bagaimana itu bekerja
Kembali jika beberapa nilai dalam [0, 1, 2, 3] memenuhi syarat bahwa untuk setiap nilai dalam [0, 1, 2, 3] jumlah kedua nilai ini ada di dalam array input.
Jadi, kembali jika array memiliki setiap nilai dalam [0, 1, 2, 3] (tidak mungkin), [1, 2, 3, 4], [2, 3, 4, 5], atau [3, 4, 5 , 6].
sumber
Ruby, 31
Alih-alih mencoba menjadi pintar seperti jawaban Ruby pertama , ini hanya melewati array bilangan bulat, dan untuk setiap bilangan bulat, melihat apakah ada sedikit lurus pada input yang dimulai dengan bilangan bulat itu. Tidak khawatir tentang kemungkinan nilai atau keunikan.
Ini tampaknya menggunakan algoritma yang sama dengan jawaban Sherlock .
sumber
Ruby,
585550474333 byteSaya baru saja melihat bahwa saya telah dipukuli oleh pukulan oleh jawaban Ruby Paul . Namun saya tidak tergoyahkan karena saya pikir ini masih bisa menjadi jawaban yang layak dengan bermain golf lagi. Didasarkan, sebagian, pada jawaban Python xnor .
Sunting: Beberapa bermain golf dan memperbaiki kesalahan dalam kondisi ternary.
Sunting: Saya sekarang menggunakan
.any?
seperti Bukan yang Charles lakukan dalam jawaban Ruby mereka, tetapi hanya karena saya membutuhkan cara sederhana untuk menghapusa
dan mengembalikan hanya kebenaran dan kesalahan dengan!([*i..i+3]-l)[0]
karena.map
akan mengembalikan arraytrue
danfalse
.Mengembalikan salah satu
true
ataufalse
.Tidak Disatukan:
Catatan penting: Bagi mereka yang ingin menggunakan
(a2 - a1).empty?
kode untuk menentukan apakah semua elemena2
dalama1
, perhatikan bahwa jika Anda ingin memastikan bahwa, misalnya,[2,1,2]
ada dalam[1,2,3,3]
multiplisitas elemen, Anda memerlukan kode lain. Diskusi yang relevan tentang masalah ini di sini .sumber
0
itu benar di Ruby, saya pikir jawaban Anda tidak valid.p
adalah nilai kepalsuan satu karakter.Japt,
1312 byteUji secara online! atau Verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Perl,
474342393729 byteTermasuk +1 untuk
-p
Jalankan dengan urutan pada STDIN, mis
smallstraight.pl
:Penjelasan
sumber
CJam,
161512 byteMenghasilkan string yang tidak kosong untuk kasus uji yang benar dan string kosong untuk yang palsu.
Suite uji.
Penjelasan
Pada akhir program, daftar ini diratakan menjadi string tunggal dan dicetak ke STDOUT. Jika ada jalan kecil yang ditemukan, elemen yang tersisa akan berada di string. Kalau tidak, semua daftar itu kosong, dan string juga kosong.
sumber
[0 1 2 3]
akan menelan biaya 2 byte.05AB1E ,
9810 byteTruthy berisi array dalam output, falsy adalah ketika tidak ada output yang dihasilkan. Kode:
Penjelasan kedaluwarsa :
Cobalah online!
Menggunakan pengodean CP-1252 .
sumber
Javascript ES6 47 byte
Javascript ES6 52 byte
Jawaban lama
Javascript ES6 64 byte
terima kasih kepada produk ETH untuk membantu menghemat beberapa byte
Pengujian
sumber
t=(t>4)?t:1
.q=>q.sort().map(o=>(o-s?o-s<2?t++:t=t>4?t:1:0,s=o),t=1,s=9)|t>3
Versi ini kembali1
untuk yang benar dan yang salah0
.C #,
156151150131121939290 byteatau: (jumlah byte yang sama)
Tidak Disatukan:
Sunting Besar: Baru sadar saya hanya perlu memposting fungsi, bukan keseluruhan program. Itu menghemat banyak. Tidak ada boilerplate, tidak perlu mengubah input string menjadi angka, dll. Sekarang kita benar-benar mendekati jumlah byte yang terhormat (bagaimanapun juga untuk bahasa non-golf).
sumber
main
dalam C # harus mengembalikan salah satuvoid
atauint
.) Sayangnya, saya juga mendapatkan 2 byte karena saya mengharapkan 0-5 bukannya 1-6. Jadi kerugian bersih sebesar 1 byte.Ruby - 80 -> 79 -> 76 -> 54 -> 48 -> 40 byte
Coba Kelima (40 byte):
Menggunakan sintaks lambda untuk mendefinisikan fungsi. (Terima kasih untuk bersaing pegolf Ruby @ Sherlock9 untuk ide ini.)
Untuk menguji menggunakan panggilan lambda:
Coba Keempat:
Diganti nihil? dan negasi dengan operator ===.
Coba ketiga:
Menggunakan ekspresi reguler.
Coba Kedua:
Pendekatan baru menggunakan dedup (uniq), sortir dan gabung, plus sertakan? untuk mencari kecocokan dari setiap solusi di input yang diberikan sebagai string.
Coba Pertama: 79 byte
Penguji:
Menggunakan deduping (fungsi uniq) ditambah set persimpangan (& operator) untuk menguji apakah ada urutan yang cocok dengan urutan yang diberikan. Tidak diperlukan penyortiran.
sumber
Pyth,
13112 byte berkat Jakube!
Mengembalikan daftar yang tidak kosong untuk yang benar, daftar kosong untuk yang salah.
Cobalah secara online atau jalankan Test Suite (dibagi dengan kesalahan sintaks untuk Readability ™).
sumber
.PQ4
bukannya.:{SQ4
PHP, 95 byte
Tampilan meledak Input / panggilan fungsi Keluaransumber
Serius, 21 byte
Cobalah online!
Menghasilkan nilai positif untuk true, dan 0 untuk false.
Penjelasan:
sumber
PARI / GP , 71 byte
Ini mungkin bisa diagendakan lebih jauh, tetapi sebagai permulaan:
Saya tidak melihat cara mengurangi duplikasi tanpa menggunakan lebih banyak ruang; versi ini adalah 75 byte:
sumber
Retina ,
7054 byteInput adalah string tunggal dari bilangan bulat seperti
13342
. Output adalah1
jika ditemukan, atau0
jika tidak.Perhatikan bahwa penghapusan duplikat hanya perlu terjadi sekali, karena hanya ada lima angka. Perlu menghapus lebih dari satu angka berarti tidak ada lurus kecil pula.
Cobalah online
Terima kasih kepada Martin untuk ide untuk memindahkan koma di dalam kelompok tangkap, menghemat 16 byte kekalahan.
sumber
. $*x Replace numbers with n x's, where n is the number.
+` Repeat the following until the string stabilizes
(x+(x+,))\2 $2$1 Replace n*xm*x,m*x, with m*x,n*xm*x
(x+,)\1 $1 Replace x*n,x*n, with x*n,
(x+,)x\1xx\1xxx\1 Match n*x,xn*x,xxn*x,xxxn*x
DiperbaruiPyth, 11 byte
Suite uji
Hasilkan substring panjang 4 dari [1..6], lalu filter pada tidak ada elemen yang tersisa ketika elemen input dihapus.
sumber
Jelly, 9 byte
Harus ada solusi 8-byte, akan terus mencari ... Kode:
Ini sama dengan solusi 05AB1E saya .
Penjelasan:
Cobalah online!
sumber
Œ!I=1ZS3e
...[1, 2, 1, 2, 1]
Sayangnya tidak berhasil , dan tidak juga jawaban Anda yang lain. Alternatif saya tampaknya berhasil (tapi saya sudah salah sebelumnya ... mengujinya juga :)), jangan ragu untuk menggunakannya.Jelly, 8 byte
Cobalah online! atau memverifikasi kasus uji kebenaran dan kasus uji palsu .
Bagaimana itu bekerja
sumber
Scala,
76706160 bytePenguji:
sumber
Javascript ES6 43 byte
// tidak bisa membuatnya bekerja: /
Ini mengambil angka 62 (111110 dalam biner) Untuk setiap angka dalam larik input, ia menghilangkan bit itu
Jumlah yang dihasilkan harus
jadi saya memeriksa apakah hasilnya kurang dari 7 (0000111) atau apakah itu sama dengan 32 (100000)sumber
[3, 4, 5, 4, 3]
. Saya pikir Anda perlu menggunakan 126, bukan 62 ...TI-BASIC, 25 byte
Ekspresi Python ekuivalen (ungolfed) yang dapat Anda uji :
Gagasan di balik ini adalah sifat bisa dibagi. Untuk memeriksa apakah a
1, 2, 3, 4
,,2, 3, 4, 5
atau3, 4, 5, 6
terjadi, kita dapat memetakan angka 1-6 hingga 37-42, lalu mengalikan angka yang benar menjadi satu.Masing-masing angka dalam [37,42] memiliki faktor utama yang tidak dimiliki oleh angka lainnya.
Oleh karena itu, jika produk dari lima angka dapat dibagi oleh 37, daftar asli berisi 1. Jika pada 19, itu berisi 2; dll Jika habis dibagi
37*19*13*5
=65*703
, berisi1
,2
,3
, dan4
demikian pula dengan dua nomor lainnya.Solusi ini merupakan peningkatan pada salah satu yang diposting @Weregoose pada tahun 2009.
sumber
Mumps,
11378 BytesVersi Mumps yang saya gunakan adalah InterSystems Cache.
Saya tidak bisa memikirkan cara bermain golf teknik ini lebih pendek; dengan teknik berbeda mungkin saja dilakukan, tetapi untuk saat ini ini akan dilakukan dan setidaknya lebih pendek dari C ++ ... tetapi tidak banyak. Bagaimanapun...Oke, ini cara yang lebih singkat. Alih-alih memiliki 3 variabel terpisah untuk jangka pendek, gunakan variabel tunggal untuk semua 6 'dadu' dan ekstrak bagian nanti:
sangat banyak bagi saya tidak menemukan cara yang lebih baik dengan teknik yang sama ... saya harus melihat sebelum saya melompat, eh? ;-)
Saya akan meninggalkan jawaban asli saya di bawah ini untuk tujuan historis ...
dan inilah penjelasan tentang apa yang terjadi dengan kode:
Saya tidak menguji setiap input benar & salah karena itu melibatkan mengetik semuanya secara manual; tetapi saya melakukan pengujian kira-kira setengah bagian pertama dari masing-masing, memverifikasi jalan lurus yang panjang masih menunjukkan kebenaran dan beberapa jalan tercatat tidak selalu bekerja dengan benar ([4,2,5,3,4], [1,2,3,3 , 4] dll.) Dan tampaknya berfungsi dengan benar.
sumber
Dyalog APL , 15 byte
{∨/∧/⍵∊⍨⍵∘.+⍳4}
menggunakan
⎕IO=0
⍳4
aku s0 1 2 3
⍵∘.+⍳4
adalah 5 × 4 sebuah matriks dari setiap die yang ditambahkan oleh masing-masing⍳4
⍵∊⍨
memeriksa apakah elemen-elemen dari matriks ada di tangan, hasilnya adalah matriks boolean (0-atau-1), kita perlu menemukan deretan semua 1s∧/
adalah dan-reduksi dengan baris, hasilnya adalah vektor boolean∨/
adalah atau-reduksi dari vektor itusumber
Jelly, 11
Cobalah online!
Ini cukup banyak salinan jawaban Pyth saya, hanya mencoba mencari cara untuk rantai barang. Rasanya seperti itu harus golf.
Ekspansi:
Jika Anda ingin mengajukan pertanyaan sulit, seperti mengapa pemisah berbeda, maka jawaban saya kepada Anda adalah: "Saya akan menjawab dalam 6-8 minggu": P (Lebih serius, saya pikir itu adalah pencocokan pola, monad-diad vs nilad-dyad, tapi saya tidak tahu dan tidak ingin menyebarkan informasi yang salah.)
sumber
Q Unique elements
Ṣ sort the list
ṡ4 all slices of length 4
ðf filter by {
6R range form 1 to 6
ṡ4 all slices of length 4 from that
Q
adalah dengan operator overdot huruf besar dalam dokumentasi. Mungkin itu overdot sekali?