var QUESTION_ID=65106,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/65106/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}#answer-list{padding-right: 100px}
<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>
Jawaban:
CJam,
3935 byteCobalah online
Versi terbaru mencakup perbaikan yang disarankan oleh @ MartinBüttner, khususnya menggunakan operator vektor elemen-bijaksana alih-alih mentransposisi dua daftar.
Penjelasan:
sumber
ri60md]r"utehour"+6/W%.{1$1>'s*+}S*
(Sepertinya ini memberi Anda petunjuk yang cukup kuat tentang tantangan ini :))r"utehour"+6/W%
sebenarnya panjangnya sama"hour minute"S/
, sehingga bagian itu akhirnya tidak membantu. Saya pikir saya pernah melihat.
digunakan dengan blok sebelumnya, tetapi saya lupa lagi bahwa itu didukung.Python 3,
506711911611211110494 byteSaya tidak suka kembali ke%
format string-gaya, tetapi menghemat 6 byte.format
.Sunting: Lupa input parse.
Sunting: Lupa menangani bentuk jamak.
Sunting: Yay lambdas!Sunting: Menambahkan ungolfing
Edit: Sial. Lambdas tidak membantu.
Sunting: Karena menit memiliki maksimum tiga digit, dan
int()
tidak keberatan spasi dalam string, saya dapat menyimpan beberapa byte dengan menggunakaninput()[:3]
.Tidak Disatukan:
sumber
JavaScript, 78 byte
Untuk suite tes, masukkan input seperti
"61 min"
ke dalam kotak input.Penjelasan
sumber
parseInt(n)
menjadi+n
.150 min
.2 hours 30 minutes
. Bolehkah saya bertanya bagaimana Anda mengujinya?"61 min"
atau'61 min'
Pyth,
3938 bytesumber
Vitsy ,
575452 byteOh, wow, saya bahkan tidak memiliki bilangan bulat dalam bahasa saya. oo
Cobalah online!
sumber
K5,
5551 byteIni lebih umum daripada yang seharusnya; mungkin masih golf lebih jauh.
Beraksi:
Edit:
Program ini melewati beberapa iterasi yang sangat berbeda selama pengembangan, dan saya pikir mungkin akan lebih mencerahkan untuk menunjukkan beberapa langkah menengah.
Inilah penusukan pertama saya pada masalah, sebelum persyaratan pluralisasi diperkenalkan. Ada pengulangan yang jelas di sini:
Saya menyadari bahwa cara umum untuk menangani casting keluar dari tempat adalah bentuk "decode" K5. Untuk memasukkan nilai slot ke dalam string saya menggunakan primitif "dot-apply", yang menerapkan daftar argumen ke suatu fungsi dan membongkar daftar ke dalam parameter individual:
Tidak banyak redundansi yang tersisa di sini. Ketika pluralisasi ditambahkan, saya mendekomposisi fungsi anonim yang mengarah ke transformasi yang bisa saya terapkan pada setiap angka, seperti ini:
Bergabunglah
x
,,y
dan salah satus
atau tidak sama sekali, tergantung apakahx
sama dengan "1". Pada akhirnya itu bekerja lebih baik untuk membalik urutan argumen ke fungsi ini.Edit 2:
Beberapa perbaikan kecil di sini. Cara yang lebih baik untuk memilih "s" atau string kosong, konstanta yang lebih pendek untuk "decode" yang mencerminkan jangkauan input yang terbatas, dan cara yang lebih sederhana untuk membuang "min".
sumber
Pyth, 46 byte
Mengambil input
x min
dan outputx hours y minutes
Cobalah di Sini
Penjelasan:
sumber
Perl 6 ,
8073 byte80 byte asli
Pemakaian:
Karena perubahan dalam pertanyaan saya dapat menghapus
x?$m
dari akhir fungsi, yang memungkinkan saya untuk mengurangi 3 byte lebih banyak.sumber
JavaScript (ES6),
100948981 byteDemo de-golfed (dikonversi ke ES5, karena belum semua browser mendukung ES6)
sumber
t=parseInt(t)
dan kurung, dan kemudian menempatkan bahwa di mana pun Anda pertama kali menggunakant
begitu:(h=0|(t=parseInt(t))/60)
. Dengan cara ini, Anda dapat menghapus kembalinya dan{}
C #, 127 byte
Ini bisa dimasukkan ke dalam file dan dijalankan melalui shell interaktif C # yang datang dengan Mono, menggunakan konfigurasi default.
[Ini adalah upaya pertama saya di kode golf. Saya berharap kontribusi saya tidak melanggar aturan apa pun.]
sumber
C, 89 byte
sumber
Ruby, 75 byte
sumber
''
→p
.MATLAB,
111 108106 byteIni juga berfungsi dengan Oktaf , dan dapat dicoba sini . Tautan ke ruang kerja yang sudah berisi kode dalam file bernama
runningLength.m
. Jadi untuk mengujinya cukup masukkanrunningLength
pada prompt, lalu masukkan string input, misalnya'123 mins'
dan itu akan menampilkan output.Mengambil input sebagai string, mis
'123 mins'
, mengubahnya menjadi angka (yang secara implisit mengabaikanmins
bit).Menit dan jam kemudian dihitung
Kemudian menampilkan string output
Bit keluaran dihitung dan ditangani dengan benar - an 'ditambahkan' setiap kali angkanya 1.
sumber
Python 2, 96 byte
sumber
Haskell,
117109 byteVersi yang kurang golf:
f
adalah fungsi yang mengambil 3 karakter pertama dari inputnya dan mengubahnya menjadi integer.p#q
adalah fungsi yang majemukq
jikap
tidak sama dengan 1. Untuk mengembalikan hasil tanpa tanda kutip di sekitarnya, saya biasaputStr
mencetak hasilnya ke STDOUT.Terima kasih kepada nimi untuk bantuannya!
sumber
Python 2,
7977 byte3 karakter pertama dari input hanya diurai sebagai integer. Ini hanya berfungsi karena karakter ketiga dalam input 2 digit adalah spasi, yang
int
akan diabaikan selama konversi.sumber
"hour"+m/120*"s"
dan juga selama beberapa menit.m=240
.LabVIEW, 50 Bytes
Ini dihitung berdasarkan saran saya di Meta .
Kode cukup lurus ke depan, ambil angka dari modulo input dengan 60 dan tambahkan s untuk menit! = 1. Sisi lain dari kasus hanya menempatkan string melalui.
sumber
Scala, 135 byte
Pemakaian:
sumber
Haskell,
107101 byteTidak Disatukan:
s!n
menambahkann
kes
, menambahkan a's'
ke akhir jikan /= 1
.f x
melakukan pemformatan setelah menggunakandivMod
.Karena kita dapat mengasumsikan input maksimum
240
,take 3
cukup untuk hanya mengambil nomor.(Harus berusaha sangat keras untuk mengalahkan skor @Craig Roy ...)
sumber
R, 112 byte
Sunting : Memperbaiki kesalahan pelingkupan dan kemudian mengatasi masalah keluaran kutipan.
Uji kasus
Saya mencoba menghemat ruang dengan mencoba menemukan cara untuk menambah atau mengurangi "s" seperlunya tetapi saya harus mengacaukan
sep =
argumen dipaste()
fungsi dan sepertinya tidak akan menghemat banyak ruang. Ada saran?Tidak disatukan
Pembulatan dengan input / 60 atau input %% 60 (mod) memberikan jam dan menit masing-masing. Rantai mereka bersama-sama dengan
ifelse()
pernyataan yang menentukan apakah unit adalah jam atau menit.sumber
cat()
fungsi.s
dan dengan mengubah kondisi Anda.Ruby,
971009988 byteSunting: Memperbaiki output.
Sunting: Menghapus kawat gigi dari
divmod
.Sunting: Yay interpolasi string! Terima kasih kepada Vasu Adari . Juga, ungolfing lebih baik.
Tidak Disatukan:
sumber
divmod
metode. Juga dengan menggunakan interpolasi string Anda dapat menghemat beberapa byte.Pergi, 177 Bytes
(Ini hanya mencakup fungsi dan pernyataan impor)
Solusi cantik -
Mengujinya -
sumber
Mathematica, 61 byte
sumber
AutoHotkey ,
174170160 byteCatatan:
sumber
PHP,
7776 bytemengerikan, mengerikan, mengerikan!
PHP hanya mengeluarkan beberapa
Notice
untuk"s"[$h<2]
Untuk menjalankan:
php -r 'CODE' '150 minutes'
dan tentu saja matikan pelaporan off / away from stdout!
Edit: -1byte assign in assign (kredit: insertusernamehere)
Ini sangat jelek, saya harus memberikan run helper untuk pengguna linux:
sumber
$m=($i=$argv[1])%60;echo$h=$i/60|0," hour","s"[$h<2]," $m minute","s"[$m<2];
.$m=($i=$argv[1])%60;echo$h=$i/60|0," hour",s[$h<2]," $m minute",s[$m<2];
.Arcyóu (non-kompetitif), 93 byte
Kiriman ini menggunakan versi bahasa yang dibuat setelah tantangan ini.
Ya! Bahasa ini membutuhkan manipulasi string yang lebih baik.
Penjelasan:
sumber
Ruby,
747371 byte73 byte
74 byte:
Pemakaian:
sumber
Kotlin, 132 byte
Versi Tidak Serigala:
Uji dengan:
Output contoh:
sumber
Seriously, 77 bytes
Seriously is seriously not good at string manipulation. Try it online with full explanation (you will need to manually enter the input like
"210 mins"
because permalinks don't like quotes).Quick and dirty explanation:
sumber
Java 8, 148 Bytes
I chose to post an alternative to @TheAustralianBirdEatingLouse as this is not only shorter by a good deal (~10%) but also more correct in printing hour(s) and minutes(s) instead of abbreviated hrs and mins. Method implementations in Interfaces are new to Java 8 - so this would be needed to compile/run
sumber