You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复J语言中'noun result was required'错误(AoC第4题)

问题分析与修复

错误提示|noun result was required: loop指向condicion,说明condicion的计算结果不是J能识别的合法数值(0/1布尔值),无法用于if.判断。核心问题出在数据解析阶段没有将字符串转换为整数,导致后续的比较操作<:/>:无法生成正确的布尔值。

具体问题点

你的concatIntegers函数将数据拼接成带x的字符串(比如2x4),但后续没有把这些字符串转换成整数类型。当你用<:比较字符串时,J会按字符顺序比较,结果不是0/1的布尔值,而是非预期的字符串或结构,最终导致condicion不符合if.的语法要求。

修复方案

1. 修正数据解析,转换为整数

在生成matriz时,添加J的".(名词化,即字符串转数字)操作,把解析后的字符串转换为整数:

matriz =. 250 4 $ ". > lista_2  NB. 关键修复:将字符串转为整数

2. 可选:简化循环逻辑(更符合J的风格)

原显式循环可以用J的向量操作简化,避免手动循环的冗余,同时减少出错概率:

loop =: monad : 0
  'a b c d' =. |: y  NB. 把矩阵四列拆分到四个变量
  condicion =. ((a <: c) *. (b >: d)) +. ((c <: a) *. (d >: b))
  +/ condicion  NB. 直接求和满足条件的行数
)

完整修复后的代码

fn =. < 'D:/PyCharm/AOC/output4.txt'
data =. freads fn
concatIntegers  =. ,&'x'@,&.&": 

separado =.  ;: data
lista =. > ((i.(#separado)%2)*2) {separado

n_lista =. #lista 
n_2 =. n_lista % 4

lista_2 =. concatIntegers each/|:lista
matriz =. 250 4 $ ". > lista_2  NB. 转换为整数

loop =: monad : 0
res =. 0
for_i. i.250 do.
    fila =. i { matriz
    elfo11 =. 0 {fila
    elfo12 =. 1 {fila
    elfo21 =. 2 {fila
    elfo22 =. 3 {fila 
    condicion =. ((elfo11 <: elfo21) *. (elfo12 >: elfo22)) +. ((elfo21 <: elfo11) *. (elfo22 >: elfo12))
    if. condicion do.
      res =. >: res
    end.
end.
res
)

loop matriz

验证步骤

  1. 运行前先测试matriz的类型:输入# matriz确认是250 4的矩阵,输入0 { matriz确认每行都是整数而非字符串。
  2. 测试condicion的计算:取任意一行数据,手动执行比较逻辑,确认返回结果是0或1的布尔值。

内容的提问来源于stack exchange,提问作者Oqueo34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:15:35