Code Golf:找到加权中位数的最短代码?

2023-12-13

我对代码高尔夫的尝试。

的问题找到最小值∑W_i*|X-X_i|简化为查找列表的加权中位数x[i]有重量w[i](定义见下文)。你将如何用一个最短、最简单、最漂亮的程序来做到这一点?

这是我的代码最初的样子(解释在问题的答案简短版本作为下面的答案之一发布)。

    #define zero(x) ( abs(x) < 1e-10 )  /* because == doesn't work for floats */

    float sum = 0;
    int i;

    for (i = 0; i < n; i++) 
         sum += w[i];
    while (sum > 0) 
         sum -= 2*w[--i];

    right = x[i]             // the rightmost minimum point
    left  = ( zero(sum) && zero(w[i]-w[i-1]) ) ? x[i-1] : right;
    answer = (left + right) / 2;

(实际上,正如你看到的变量一样,它已经被大量优化了i and sum reused)

Rules

浮点数和整数:不同的语言有不同的浮点运算标准,所以我将问题重新表述为x[i] and w[i] to be integers如果您愿意,您可以返回答案值的两倍(始终为整数)。您可以返回、打印答案或将答案分配给变量。

加权中位数的定义和说明:

  • 排序数组的中位数x[i]长度n或者是x[n/2] or (x[n/2-1/2]+x[n/2+1/2])/2取决于是否n是奇数还是偶数
  • Median of unsorted array is the median of array after sort (true, but our array is sorted)
  • 加权中位数x[i]具有整数正权重w[i]被定义为较大数组的中位数,其中每次出现x[i]已更改为w[i]的出现次数x[i].

我希望看到什么

提出这个问题的原因之一是我认为最合适的语言将具有简单的数组求和和 lambda 迭代。我认为函数式语言可能是合理的,但我对此不确定 - 所以这是问题的一部分。我希望看到类似的东西

    // standard function   add  :=  (a,b) :-> a + b 
    myreduce := w.reduce  
        with:  add  
        until: (value) :-> 2*value >= (w.reduce with:add)
    answer = x [myreduce  from:Begin] + x [myreduce  from:End]

不知道是否有任何语言可以做到这一点并且实际上更短。

测试数据

static int n = 10;
for (int j = 0; j < n; j++) {
        w[j] = j + 1;
        x[j] = j;
}

答案:6或12。

static int n = 9;
int w[n], x[n] ;
for (int j = 0; j < n; j++) {
    w[j] = j + ((j<6) ? 1 : 0);
    x[j] = j + 1;
}

答案:6.5或13。


J

直接将其输入到解释器中。提示符是三个空格,因此缩进行是用户输入的。

   m=:-:@+/@(((2*+/\)I.+/)"1@(,:(\:i.@#))@[{"0 1(,:(\:i.@#))@])

我在另一个答案中使用的测试数据:

   1 1 1 1 m 1 2 3 4
2.5
   1 1 2 1 m 1 2 3 4
3
   1 2 2 5 m 1 2 3 4
3.5
   1 2 2 6 m 1 2 3 4
4

测试数据添加到问题中:

   (>:,:[)i.10
1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8  9
   (>:m[)i.10
6
   (([+<&6),:>:)i.9
1 2 3 4 5 6 6 7 8
1 2 3 4 5 6 7 8 9
   (([+<&6)m>:)i.9
6.5

   i =: (2 * +/\) I. +/

第一个索引使得总和大于或等于累积总和的两倍。

   j =: ,: (\: i.@#)

列表及其相反。

   k =: i"1 @ j @ [

第一个指数使得-往上看-左论证及其反面。

   l =: k {"(0 1) j @ ]

这些索引分别从正确的参数及其相反的参数中提取。

   m =: -: @ +/ @ l

结果列表总和的一半。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Code Golf:找到加权中位数的最短代码? 的相关文章

  • 代码高尔夫:弗罗贝尼乌斯数

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 编写最短的程序来计算给定正数集的弗罗贝尼乌斯数 弗罗贝尼乌斯数是不能写成集合中数字的正倍数之和
  • 让人们在电影院就座

    这是基于我读到的一篇关于大型软件公司提出的谜题和面试问题的文章 但它有一个转折 一般问题 有一种算法可以让人们在电影院就座 让他们直接坐在朋友旁边 而不是敌人旁边 技术问题 给定一个 N M 网格 用 N M 1 项填充网格 每个项目都有一
  • 计算非图的所有可能突变[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要根据非常具体的配方构建一个非图解算器 对于每一行 我需要计算所有可能的突变 然后检查该行是否仍然使谜题有效 对于那些不知道非图的人 这
  • 长度为 k 的非重叠子串的随机采样

    给定一个长度的字符串n 我将如何 伪 随机采样m大小子串k这样采样的子串就不会重叠 我的大部分脚本编写经验都是使用 Perl 但任何通用语言的易于运行的解决方案就足够了 如果输入中不能出现某个字符 例如X just my size 20 m
  • 如何抑制自己重写一切的强烈冲动?

    Setup 您是否有过这样的经历 在一段代码中进行看似简单的更改 然后意识到您刚刚踏入了一片值得认真关注的荒地 这通常会由官方跟进吓坏了那一刻 重写眼前一切的压倒性感觉开始蔓延 值得注意的是 这些糟糕的代码不一定来自其他人 因为它可能确实是
  • 您能解释一下流的概念吗?

    我知道流是字节序列的表示 每个流都提供了向其给定的后备存储读取和写入字节的方法 但流的意义何在 为什么我们与之交互的不是后备存储本身 不管出于什么原因 这个概念并不适合我 我读过很多文章 但我想我需要一个类比或其他东西 选择 流 这个词是因
  • 将均匀分布转换为正态分布

    如何将均匀分布 大多数随机数生成器产生的结果 例如在 0 0 和 1 0 之间 转换为正态分布 如果我想要我选择的平均值和标准差怎么办 方法有很多 Do not使用博克斯穆勒 特别是当你画很多高斯数时 Box Muller 产生的结果被限制
  • 如何检测(心电图)波的模式?

    我正在尝试读取心电图图像并检测其中的每个主波 P 波 QRS 波群和 T 波 我可以读取图像并获得向量 例如 4 2 4 4 4 9 4 7 我需要一种算法来遍历这个向量并检测每个波何时开始和结束 一个例子 如果它们总是具有相同的大小 或者
  • 多个资源的 REST 接口使用

    我目前正在通过 http 添加 REST API 到在线服务 我遇到了一个非常简单的问题 我找不到令我满意的答案 我主要有 2 个资源 用户 和 报告 正如您所猜测的那样 报告与用户相关联 与一个且仅一个 我的数据库中的外键 不管怎样 我有
  • 有没有办法获取正在运行或新打开的资源管理器窗口的 IExplorerBrowser 接口以供后续 BrowseToXXX 调用?

    这么问是因为在上一个问题 https stackoverflow com questions 6220899 answer 6221898我是指向 IExplorerBrowser 的指针 但是它创建了一个子窗口 而我想模拟资源管理器的 查
  • Big O 用于有限、固定大小的可能值集

    这个问题 https stackoverflow com questions 12305028 java what is the best way to find first duplicate character in a string引
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 哪种数据聚类算法适合检测时间序列事件中未知数量的聚类?

    这是我的场景 考虑在不同地点和时间发生的一组事件 例如 考虑有人在高空记录暴风雨期间城市中的雷击 就我的目的而言 闪电是瞬时的 只能击中某些位置 例如高层建筑 还可以想象每次雷击都有一个唯一的 ID 以便以后可以参考该雷击 这个城市大约有1
  • Windows 应用程序事实上的标准键盘快捷键列表?

    假设我正在为 Windows 开发一个新的桌面应用程序 是否有我可以查阅的所有 Windows 应用程序都应支持的键盘快捷键列表 来自 Microsoft 或第三方 注意 当我在这里说 所有 Windows 应用程序 时 我的真正意思是 特
  • 需要帮助解决 Project Euler 问题 200 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试制定一个算法来解决 We
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • “此应用程序已请求运行时以异常方式终止它”的原因是什么?

    Visual C 运行时抛出一个常见错误 此应用程序已请求运行时以异常方式终止它 请联系应用程序的支持团队以获取更多信息 该错误消息实际上是什么意思mean 让我用一个比喻来准确地解释我的问题 如果我看到一条消息 异常 访问冲突 0xc00
  • 如何在 Erlang 中将数字转换为单词?

    我发现了一个关于将数字转换为 单词 的有趣问题 代码高尔夫 数字到单词 https stackoverflow com questions 309884 code golf number to words 我真的很想看看你如何在 Erlan
  • 优雅降级 - 何时考虑

    在为使用 AJAX 的应用程序设计和构建 UI 时 您何时考虑优雅降级 对于禁用 JavaScript 或正在使用屏幕阅读器的用户 最后 网站的 AJAX 版本完全完成后 在每个发展阶段 I don t 还有别的事 这些日子 渐进增强 ht

随机推荐

  • 为什么PHP的explode错误?

    这是 PHP 代码 var dump value string 103 0e0cU 0Z dddd is moar awesome A6A32C2074B787893DF506F6F466F5919516C44F3 var dump exp
  • Raspberry Pi 无法在 JavaFX 应用程序中隐藏鼠标光标

    目前 我为 Raspberry Pi 3 开发 JavaFX 应用程序 为了在我的 PC 上进行开发 我使用 Ubuntu 16 04 1 OpenJDK 1 8 0 111 和 OpenJFX 8 0 60 对于 Raspberri Pi
  • Oracle 存储过程 OUT 参数

    我有一个存储过程 其 IN OUT 参数声明如下 create or replace PROCEDURE RIFATT SEGN0 INS pIdRifattSegn0 in OUT NUMBER pNumDossier IN VARCHA
  • 如何定义 Swagger 2.0 JSON 来填充 Swagger UI 中的默认主体参数对象?

    我们当前的部署模式要求我手动编写 swagger json 输出 该输出将由我公司使用的基于 Swagger 的 UI 使用 我希望我正在编写的 json 能够提供 默认 值来填充所有输入字段 包括 body 输入参数 的 Swagger
  • 无法通过angularjs在phonegap中显示联系人照片

    我能够从简单的 html 和 javascript 获取并显示联系人照片 但是当我使用 angularjs 模型显示联系人照片时 出现错误 以下是我的源代码 列出我尝试显示联系人的位置 ul class list li class item
  • 如何使用表单从数组动态创建复选框?

    我想使用代码根据传递给函数的数组或对象动态创建复选框 你能修改这个函数来获取数组吗 我有一个脚本 可以根据用户名查找可能的电脑名称并列出匹配项 如果有这个表格 让我能够选择列表中的结果之一作为正确的 PC 以移入正确的容器并安装软件 那就太
  • MySQL 删除重复行

    我有一个评论表 其结构如下 id name email comment 我有很多重复的评论 具有相同的姓名和电子邮件 我需要删除它们 任何人都可以建议我如何使用单个查询来实现此目的 Thanks DELETE FROM comments c
  • 用于在正在运行的 JVM 中打开调试的 Java API [重复]

    这个问题在这里已经有答案了 是否有一种编程方式可以在正在运行的 JVM 实例中打开调试 我正在寻找一个 API 它可以使运行中的 JVM 成为调试服务器 该 API 的作用相当于 Xdebug Xrunjdwp transport dt s
  • 暂停测试执行,直到应用程序空闲

    是否可以实现一些 util 方法来暂停测试 当前线程 执行 直到应用程序空闲 空闲的意思是 1 一段时间内没有GUI事件添加到事件队列中2 在同一时间段内没有工作线程运行任何任务 您能否提供实现 代码片段来跟踪以前的空闲情况 您可以更换Ev
  • 尝试合并 2 个数据帧但出现 ValueError

    这些是我保存在两个变量中的两个数据框 gt print df head gt club name tr jan tr dec year 0 ADO Den Haag 1368 1422 2010 1 ADO Den Haag 1455 14
  • 已删除的数据存储条目重新出现

    我想重新打开已删除的数据存储条目重新出现作为注册用户 老问题可以删除吗 这次我会尽量说得更具体 我遇到以下问题 最初 我将 N 个同类实体放入数据存储中 如下所示 datastore entity MyModel model propert
  • Perl 函数定义中的 $;$ 是什么意思? [复制]

    这个问题在这里已经有答案了 我得到以下代码 sub deg2rad my d DR 0 1 d rad2rad d 谁能告诉我什么 means 子声明后面括号中的内容称为原型 它们的解释在perlsub 一般来说 你can使用它们来限制编译
  • Android 蓝牙:软件导致连接中止

    每当我尝试将 Android 设备连接到支持蓝牙的设备时 我都会遇到异常 它正在连接 并且在一分钟之内就出现异常 要使用 BLuettoth 设备 Spp 配置文件 进行连接 我正在使用 Method m m mmDevice getCla
  • 在Java中将标签设置为图像格式问题

    我正在尝试将 java 程序中的标签设置为图像 然而 它似乎不适用于 bmp 图像 我正在寻找一个转换器 它允许我将图像从 bmp 转换为具有相同文件名的 jpg 这个转换器需要由java程序控制 其中有需要转换的图像的名称和位置 任何帮助
  • 使用 16 位整数的重要性

    开发人员在编写代码时如何认真考虑使用 16 位整数 自从我开始编程以来 我一直在使用 32 位整数 而且我并没有真正考虑过使用 16 位 声明 32 位 int 非常容易 因为它是大多数语言的默认值 使用 16 位整数部分来节省一点内存有什
  • 将Json反序列化为Asp.net中实现Ienumerable的类

    我有下面的函数 它获取 facebook 数据并将其作为字符串返回 public static string GetUserNewsFeed string strAccessToken Dictionary
  • 如何将事件传递给方法?

    我想创建一个方法 将事件作为参数并向其添加 eventHandler 以正确处理它 像这样 我有两个事件 public event EventHandler Click public event EventHandler Click2 现在
  • spring boot application.yml 属性在运行时发生变化

    在 Spring Boot 应用程序中 我可以使用 ConfigurationProperties 注释将 application yml 中的属性绑定到 bean 字段 是否可以在运行时更新 application yml 中的这些属性并
  • 记录 CLR JIT 策略

    我想知道 CLR 适用于 JIT 编译的范围和顺序 例如 如果我的应用程序仅调用给定类的单个方法 那么该类的未使用方法是否会不必要地进行 JIT 编译 如果是的话 它们是在执行我需要的一种方法之前全部编译的 还是在事后延迟编译的 那么方法中
  • Code Golf:找到加权中位数的最短代码?

    我对代码高尔夫的尝试 的问题找到最小值 W i X X i 简化为查找列表的加权中位数x i 有重量w i 定义见下文 你将如何用一个最短 最简单 最漂亮的程序来做到这一点 这是我的代码最初的样子 解释在问题的答案简短版本作为下面的答案之一