- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决这个问题。
问题:
Given a Days Array and a data array consisting start and end times of one store in a week, Find the days/times in which the store is open.
const daysArr = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
// This is the times for *ONE STORE* in the entire week.
const data = [
{
startTime: '10:00am',
endTime: '5:00pm',
open: [true, true, false, false, false, false, false]
},
{
startTime: '10:00am',
endTime: '5:00pm',
open: [false, false, true, false, false, false, false]
},
{
startTime: '11:00am',
endTime: '6:00pm',
open: [false, false, false, true, false, false, true]
} ];
解决方案应该是:
[ '10:00am-5:00pm Monday-Wednesday', '11:00am-6:00pm Thursday', '11:00am-6:00pm Sunday' ]
注意:可能会有差距。例如,一家商店可能只在周四和周日营业(就像在示例中一样),在这种情况下,只返回他们营业的日期。
我的解决方案:
const daysArr = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
const data = [
{
startTime: '10:00am',
endTime: '5:00pm',
open: [true, true, false, false, false, false, false]
},
{
startTime: '10:00am',
endTime: '5:00pm',
open: [false, false, true, false, false, false, false]
},
{
startTime: '11:00am',
endTime: '6:00pm',
open: [false, false, false, true, false, false, true]
}
];
function openStoreTimes(data) {
const store = {};
buildStore(store, data);
return printResult(store, data);
function printResult(store, data) {
const values = Object.keys(store);
const res = [];
values.forEach(key => {
const value = store[key]; // [true, true, true]
res.push(...makeString(value, key));
})
return res;
}
function makeString(arr, key) {
const res = [];
let firstTrueidx=undefined;
for(let i=0; i<arr.length; i++) {
const isTrue = arr[i] === true ? true: false;
if(isTrue) {
if(firstTrueidx === undefined) firstTrueidx = i;
if(arr[i+1] === false || !arr[i+1]) {
let resultKey;
if(firstTrueidx === i) {
resultKey = `${key} ${daysArr[firstTrueidx]}`;
} else {
resultKey = `${key} ${daysArr[firstTrueidx]}-${daysArr[i]}`;
}
res.push(resultKey);
firstTrueidx = undefined;
}
}
}
return res;
}
function buildStore(store, data) {
data.forEach(each => {
const {startTime, endTime, open} = each;
const key = `${startTime}-${endTime}`;
if(!store[key]) {
store[key] = [...open];
} else {
makeTrueArray(store[key], open);
}
});
}
function makeTrueArray(a1, a2) {
a2.forEach((each,i) => {
if(each) a1[i] = true;
});
}
}
console.log(openStoreTimes(data));
// [ '10:00am-5:00pm Monday-Wednesday', '11:00am-6:00pm Thursday', '11:00am-6:00pm Sunday' ]
问题:
我提出了以下解决方案,但是,我觉得这可以简化(我觉得我的解决方案过于复杂)。寻找巧妙的方法来解决这个问题。
最佳答案
我希望这是一种更简洁的方法来实现这个问题的解决方案 -
const daysArr = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
const data = [
{
startTime: '10:00am',
endTime: '5:00pm',
open: [true, true, false, false, false, false, false]
},
{
startTime: '10:00am',
endTime: '5:00pm',
open: [false, false, true, false, false, false, false]
},
{
startTime: '11:00am',
endTime: '6:00pm',
open: [false, false, false, true, false, false, true]
}
];
// get open time of the store on d'th day. Returns null if the shop is closed on
// that day.
function getOpenTime(d){
for(var i = 0; i < data.length; i++){
if(data[i].open[d]){
return {
startTime: data[i].startTime,
endTime: data[i].endTime
}
}
}
return null
}
// Helper function to format an `10:00am-5:00pm Monday-Wednesday` format, start and
// end are index in the daysArr representing corresponding day of the week.
function dayFormatter(openTime, start, end) {
return openTime.startTime + '-' + openTime.endTime + ' ' + daysArr[start] + (start == end ? '' : '-' + daysArr[end])
}
function getOpenDays(){
result = []
for(var i = 0; i < 7; i++){
var iThDayOpenTime = getOpenTime(i);
if(iThDayOpenTime != null){
// If the shop is open on last day of the week, then no need to check any
// further, and the open time should be pushed to the result.
if(i == 6){
result.push(dayFormatter(iThDayOpenTime, i, i));
}
for(var j = i + 1; j < 7; j++){
var jThDayOpenTime = getOpenTime(j);
// If the opentime of j'th day does not match with i'th day, that
// means all the days from i to j - 1, the shop is open on a same
// time, which is equal to open time of i'th day
if(jThDayOpenTime == null || iThDayOpenTime.startTime !== jThDayOpenTime.startTime || iThDayOpenTime.endTime !== jThDayOpenTime.endTime) {
result.push(dayFormatter(iThDayOpenTime, i, j - 1));
i = j - 1;
break;
}
// If the opentime of j'th day matches i'th day, there is only
// one case when j == 6, that means we have no other days to
// look at. So we know that all days from i to j, then shop is
// open on a same time.
else {
if(j == 6){
result.push(dayFormatter(iThDayOpenTime, i, j));
i = j;
}
}
}
}
}
return result
}
console.log(getOpenDays());
关于javascript - 转换多个打开时间并减少单个打开时间的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58053923/
我开始学习 Oracle JavaSE 认证考试。 我创建了一个 IntelliJ Idea 项目来处理我的训练源代码。我想尽量减少 IntelliJ Idea 的帮助。 我只想使用:颜色语法、终端选
默认情况下,.DPR 和 .DPROJ 的文件扩展名描述是相同的,因此在资源管理器中打开具有相同基本名称的项目文件时,两个文件描述都会列为“Delphi 项目文件”,这提供了一个选择开发人员 - 要打
我目前正在从 android 网站了解 Navigation Drawer,我正在使用他们的示例 http://developer.android.com/training/implementing-
我需要帮助。 我在 A3:A500 列中有单词和数字 我需要改变他们的名字。 如果单元格包含单词“previ”,则如果单元格是数字,则将字母“p”放入新列中。如果它是一个词,那么不要放“p” ...就
我正在尝试编写一些 VBA,它允许按钮添加一个空行,保持相同的格式,就在 SUM 公式所在的行上方。 到目前为止,我实现了创建一个空行,但我不知道如何实现代码以让该新行继承相同的格式样式(包括边框和格
我在共享网络驱动器上有两个工作簿: 工作簿 A(表) 工作簿 B(数据透视表 - 连接到源工作簿 A) 我正在尝试,当打开 Workbook B 时,运行宏并执行以下操作: 取消保护工作簿 B 上的某
我正在开发一个需要在在线/离线模式下进行测试的应用程序,所以我想知道是否有任何方法可以打开/关闭 iPad 模拟器的互联网连接(不关闭我的 MAC 的互联网服务)。请帮忙 最佳答案 不,模拟器使用与您
我需要对目录的所有文件执行我的脚本(搜索)。以下是有效的方法。我只是问哪个最好。 (我需要格式的文件名:parsedchpt31_4.txt) 全局: my $parse_corpus; #(for
在我的代码中,我想有条件地执行一些操作: #ifdef DEBUG NSLog(@"I'm in debug mode"); #endif 我已配置“项目”->“编辑项目设置”->“构建”选项卡,以便
我编写了一个小程序来比较笔记本电脑的性能。为了使程序CPU更加密集,我用一些多线程代码(通过Parallel API实现)实现了Rabin-Karp模式匹配算法。 我注意到,当在关闭编译器优化标志的情
使用以下代码来关闭模态并打开第二个模态。总是遇到同样的问题可以关闭一个但不能打开第二个,或者如果我更改顺序我可以打开一个但不能关闭另一个。 (我想我已经尝试过101版本了)。如果有人能帮忙的话。
blue sky 默认情况下,当指针悬停时显示标题。 是否可以切换它,例如: $('#button').on('click', function(){ if (something) {turn
我正在编写一个简单的宏,它将打开、保存和关闭一个 Excel 文件(例如 myworkbook.xlsx),但我无法执行此操作。我的文件 myworkbook.xlsx 位于以下位置: C:\User
我正在加载两个 geoJson 层 - 出于测试目的,两个层都是相同的数据,但是是从两个不同的 json 文件中提取的。当我在图层 Controller 中打开和关闭图层时,图层的绘制顺序会发生变化。
我在我的设置 Activity 中发现,当用户单击 ToggleButton 时,它应该在整个应用程序中静音,但它不起作用。我在教程类中放入的 SoundPool onClick 按钮声音仍在 onC
我有一部双卡手机。如果我想打开飞行模式,两个 SIM 卡都会发生这种情况。 是否可以通过编程方式仅对一张SIM卡进行操作(用户可以选择两者之一)?我看到了here上的帖子,他们一直工作到 API 16
我目前正在开发一个带有一些 pipe() 和重定向的 C shell 程序。 我使用 dup2() stdout 和 stderr (1 & 2) 重定向。 当我用 int fd = open("te
Jquery: 有没有办法捕获浏览器打开“打开/另存为”对话框时触发的事件? Open/Save dialog example http://qpack.orcanos.com/helpcenter/
我知道你可以用 window.close 关闭 window.open 但还有其他方法吗?我有一个打开 facebook 连接的弹出窗口,我想在用户连接到 facebook 时关闭弹出窗口,然后刷新父
我搜索一个事件,如果不存在,则搜索一种方法来了解屏幕是否关闭(电源选项 - 控制面板 - 关闭显示设置)。 这些解决方案都不适合我。 所以要么我在某个地方错了,要么就是不合适。 How to get
我是一名优秀的程序员,十分优秀!