Anda menangani kartu berlabel 0 hingga 9 dari tumpukan kartu sekaligus, membentuk tumpukan yang dimulai dari 0 dan dihitung dengan 1.
- Saat Anda memberikan 0, Anda meletakkannya di atas meja untuk memulai tumpukan baru.
- Ketika Anda memberikan kartu lain, Anda menumpuknya di atas kartu yang nilainya persis lebih rendah, dan menutupinya. Jika tidak ada kartu seperti itu, dek tidak dapat ditumpuk.
Diberi geladak, tentukan apakah bisa ditumpuk ketika dibagikan sesuai urutan. Dengan cara yang sama, diberikan daftar digit, putuskan apakah ia dapat dipartisi menjadi disjoint selanjutnya dari masing-masing bentuk0,1,..,k
Contoh
Ambil dek 0012312425
. Dua kartu pertama adalah 0
, jadi mereka naik ke atas meja:
Stacks: 00
Deck: 12312425
Selanjutnya, kita berurusan dengan 1
, yang berlangsung 0
, tidak masalah yang:
1
Stacks: 00
Deck: 2312425
Kami kemudian menangani 2
di atas yang baru saja ditempatkan 1
, dan 3
di atasnya.
3
2
1
Stacks: 00
Deck: 12425
Selanjutnya, 1
, 2
dan ditempatkan di atas tumpukan pertama dan 4
atas yang kedua.
4
3
22
11
Stacks: 00
Deck: 25
Sekarang, kita perlu menempatkan 2
, tetapi tidak ada 1
di atas tumpukan. Jadi, dek ini tidak bisa ditumpuk.
Input: Daftar angka 0-9 yang tidak kosong, atau stringnya. Anda tidak dapat berasumsi bahwa 0 akan selalu ada di input.
Keluaran : Salah satu dari dua nilai konsisten yang berbeda, satu untuk urutan yang dapat ditumpuk dan satu untuk yang tidak dapat ditumpuk
Kasus uji:
Stackable:
0
01
01234
00011122234567890
012031
0120304511627328390
Tidak bisa ditumpuk:
1
021
0001111
0012312425
012301210
000112223
Untuk kenyamanan, sebagai daftar:
[0]
[0, 1]
[0, 1, 2, 3, 4]
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[0, 1, 2, 0, 3, 1]
[0, 1, 2, 0, 3, 0, 4, 5, 1, 1, 6, 2, 7, 3, 2, 8, 3, 9, 0]
[1]
[0, 2, 1]
[0, 0, 0, 1, 1, 1, 1]
[0, 0, 1, 2, 3, 1, 2, 4, 2, 5]
[0, 1, 2, 3, 0, 1, 2, 1, 0]
[0, 0, 0, 1, 1, 2, 2, 2, 3]
Dikelompokkan:
[[0], [0, 1], [0, 1, 2, 3, 4], [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], [0, 1, 2, 0, 3, 1], [0, 1, 2, 0, 3, 0, 4, 5, 1, 1, 6, 2, 7, 3, 2, 8, 3, 9, 0]]
[[1], [0, 2, 1], [0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 2, 3, 1, 2, 4, 2, 5]]
Papan peringkat:
var QUESTION_ID=144201,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/144201/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>
int a[99]
di C1
ke10
Jawaban:
Python 2 ,
4543 byte-2 byte terima kasih kepada @TFeld
Cobalah online!
sumber
Haskell , 55 byte
Fungsi anonim mengambil daftar bilangan bulat dan mengembalikan a
Bool
.Penggunaan:
(all(<1).foldr(?)[]) [0,1,2,3,4]
.Cobalah online!
Bagaimana itu bekerja
foldr(?)[]
melipat argumen daftar dari menggunakan kanan ke kiri?
, dimulai dengan daftar kosong. Hasilnya adalah daftar angka dalam daftar yang tidak cocok di atas angka sebelumnya.all(<1)
menguji apakah satu-satunya angka yang tidak pas di atas angka sebelumnya adalah nol.m?l
menambahkan nomorm
ke daftarl
nomor yang tidak sesuai. Jikam+1
sudah ada dalam daftar, sekarang dapat dihapus karena cocok di atasm
.(p,r)<-span(/=m+1)l
membagi daftarl
menjadi dua bagianp
danr
pada contoh pertama nomor tersebutm+1
. Jika tidak ada, bagian kananr
akan kosong.m:p++drop 1r
prependsm
pada bagian yang dibagi. Jikar
bukan kosong, maka itu harus dimulai denganm+1
, yang dihapus olehdrop 1
.sumber
?
secara rekursif, tetapi mendapatkan panjang yang sama .Data.List.delete
Sekam , 9 byte
Cobalah online!
Kembali
1
untuk deck yang dapat ditumpuk dan0
untuk deck yang tidak dapat ditumpuk.Sepertinya Ørjan Johansen di jawaban Haskell-nya sudah muncul dengan algoritma yang sama, tetapi dalam Husk ini jelas jauh lebih ringkas.
Penjelasan
Kami mengambil masalah dari sisi lain: membalik geladak dan membuat tumpukan menurun. Jika setelah melewati semua dek semua tumpukan memiliki 0 di atas, dek tersebut dapat ditumpuk.
sumber
Jelly ,
1511 byteCobalah online!
sumber
‘Ṭ€+\I>0FṀ
bekerja selalu?C (gcc),
7473 byteMembutuhkan array input untuk menandai akhir dengan -1. Contoh penggunaan:
sumber
return r
?Retina , 42 byte
Cobalah online!
Penjelasan
Ini mengurutkan digit, secara stabil, dengan seberapa sering digit yang sama telah terjadi sebelumnya. Akibatnya, ini merangkum berbagai calon kandidat bersama-sama. String yang dihasilkan pertama-tama akan memiliki kemunculan pertama dari setiap digit, dan kemudian kemunculan kedua dari setiap digit dan seterusnya. Dalam input yang dapat ditumpuk, hasilnya akan terlihat seperti
0123...0123...0123...
, di mana masing-masing substring ini dapat berakhir pada titik mana pun.Paling mudah untuk menentukan apakah input memiliki pola seperti ini di unary.
Kami mengganti setiap digit n dengan n
1
s, diikuti oleh koma untuk memisahkan masing-masing digit.Akhirnya kami menggunakan referensi maju untuk mencocokkan berturut-turut peningkatan angka. Kami mencoba mencocokkan seluruh string baik dengan mencocokkan satu koma (mewakili 0 , yang memulai proses baru) atau dengan mencocokkan hal sebelumnya yang didahului oleh tambahan
1
, yang hanya berfungsi jika digit saat ini adalah penerus dari yang sebelumnya.sumber
TI-Basic (83 series), 25 byte (49 karakter)
Bagaimana itu bekerja
Mengambil input sebagai daftar di
Ans
. Output1
untuk input stackable,0
jika tidak.Untuk masing-masing
I
,cumSum(Ans=I)
hitung daftar berapa kaliI
telah terjadi di setiap segmen awal, jadimin(cumSum(Ans=I)≤cumSum(Ans=I-1))
hanya 1 jika, di setiap posisi, kami telah melihatI-1
setidaknya sebanyak kaliI
. Ekspresi keseluruhan adalah1
setiap kali ini berlaku untuk masing-masingI
.sumber
JavaScript (ES6),
614540 byteMengambil input sebagai daftar.
Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Untuk setiap nilai 0 ... 9 , kami melacak jumlah tumpukan yang tersedia dengan kartu sebelumnya di atas. Penghitung ini disimpan dalam [-9] ke [0] , di mana a [] adalah array input asli. Satu-satunya penghitung yang bertabrakan dengan data input adalah [0] , tetapi kami tidak terlalu peduli dengan yang ini karena 1) kartu berlabel 0 selalu diizinkan dan tetap harus diproses secara terpisah dan 2) nilai input a [0 ] diproses sebelum memiliki kesempatan untuk diperbarui.
sumber
MATL , 16 byte
Input adalah array angka.
Kode output
1
dalam STDOUT jika input dapat ditumpuk, atau keluar dengan kesalahan dan output kosong dalam STDOUT jika input tidak dapat ditumpuk.Cobalah online!
sumber
Retina , 110 byte
Cobalah online! Tautan termasuk kasus uji. Saya tidak sering menggunakan
$16
...sumber
Mathematica, 80 byte
sumber
Python 2 ,
6961554746 byteCobalah online!
Output adalah
error
/no error
.sumber
R , 88 byte
Cobalah online!
Fungsi yang mengambil vektor R; kembali
TRUE
untuk stackable danFALSE
unstackable.Penjelasan:
sumber
Nim, 133 byte
1
jika itu bekerja;0
jika tidak.Harus menarik beberapa bisnis yang funky untuk menghadapi perubahan variabel dalam for-loop, oh well.
sumber
Haskell ,
7775 byteCobalah online! Penggunaan:
g.reverse $ [0,1,2]
. KembaliTrue
untuk input yang bisa ditumpuk danFalse
sebaliknya.Ini adalah solusi rekursif yang melintasi daftar yang diberikan dari belakang ke depan. Ini mengimplementasikan pengamatan itu
r
dan elemen terakhirx
dapat ditumpuk jikar
dapat ditumpuk dan apakahx
nol atau keduanyax-1
muncul dir
danr
denganx-1
dihapus juga dapat ditumpuk.sumber
Java 8,
168150142 bytePengembalian
0
/1
apakah itu dapat ditumpuk dengan benar atau tidak.Penjelasan:
Coba di sini.
sumber
C, 248 byte
Catatan: Untuk mencetak status pengembalian, ketik "echo $ status" ke terminal
Status pengembalian 0: Tidak bisa ditumpuk
Status pengembalian 1: Stackable
Penjelasan: Menambahkan elemen array dengan indeks yang setara dengan digit saat ini di tumpukan. Kemudian, program memeriksa apakah elemen array yang baru saja bertambah ini lebih besar dari elemen sebelumnya. Jika demikian, kembalikan 0. Lain jika program berhasil sampai akhir array mengembalikan 1.
sumber
Jelly , 15 byte
Tautan monadik mengambil daftar bilangan bulat non-negatif dan kembali
0
jika dapat ditumpuk atau1
jika tidak dapat ditumpuk.Cobalah online!
Bagaimana?
sumber
Japt , 16 byte
Uji secara online! Output
false
untuk stackable,true
untuk non-stackable.Penjelasan
sumber
05AB1E , 25 byte
Tantangannya tidak terlihat terlalu sulit, tapi cukup sulit di 05AB1E (setidaknya untuk saya ..)
Output
0
jika stackable, dan1
jika tidak stackable.Cobalah online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Java 8, 87 byte
Alih-alih membangun tumpukan saya hanya menghitung jika elemen tidak bisa ditumpuk pada elemen sebelumnya, dan mengembalikan 0 ketika elemen unstackable ditemukan. Jika saya mencapai akhir, seluruh string dapat ditumpuk dan 1 dikembalikan:
Cobalah online!
Penjelasan:
sumber