检测MS Windows


78

挑战

创建一个程序,该程序在Microsoft Windows上运行时返回真实值(为简单起见,我们将坚持使用Windows 7、8.1和10),而在任何其他操作系统(OSX,FreeBSD,Linux)上运行时则返回假值。

规则

  • 无法在平台上运行/编译的代码不算作假值。

获奖标准

我将其标记为,因此得分最低者获胜,但是我也非常有兴趣看到针对该问题的创造性解决方案。


7
程序可以通过退出代码输出吗?(通常允许
FlipTack

13
您能否给出一个明确的列表,说明它需要在哪些操作系统上运行?
FlipTack

2
在Windows RT下结果应该是什么?
亚当

6
您可能需要指定一些必须支持的特定非Windows系统。关于DOS和OS2之类的评论中存在一些辩论。
jpmc26

2
我们可能需要就退出代码的正确与错误达成共识;正常约定为true表示为0,否则表示false,但是许多答案都将其视为相反,并且“ if语句”定义显然不适用。

Answers:


75

Vim,2个字节

<C-a>1

在Windows上,<C-a>默认情况下(ctrl + a)映射到Select All。如果您1在Windows中以选择模式键入内容,它将用您键入的内容(1)替换选择内容,并在缓冲区中保留1。

在其他操作系统上,<C-a>默认情况下映射到Increment number。因为没有要增加的数字,所以它是无操作的,然后1会增加计数,但就缓冲区而言是无操作的。

1在Vim中是真实的,空字符串是虚假的


看起来像3次击键。Ctrl + a + 1
Pavel

12
我认为,根据此meta postmeta.codegolf.stackexchange.com/questions/8995/…Vim答案通常在不带修饰符的情况下评分(尤其是考虑到帖子的第一个答案使用<ctrl + a>作为一个1字节的示例)
nmjcman101

4
@Pavel它Ctrl + a1。如果是,Ctrl + a + 1则将其计为1次击键。
曼队长

7
美丽,我喜欢这个答案!
DJMcMayhem

挺优雅的,我喜欢。

108

MATLAB,4个字节

ispc

文档中

tf = ispc如果MATLAB®软件的版本适用于Microsoft®Windows®平台,则返回逻辑1(真)。否则,它返回逻辑0(假)。

还有功能ismacisunix我将它留给读者了解这些功能的作用。 Mego恳求提供图表说明ismacisunix因此我尝试在此处进行说明:

在此处输入图片说明

这不是要了一个图ispc,但我可以透露的是,行为非常相似,不同的是用OSXUnixWindows


第二种方法:

这是getenv使用23个字节的第二种方法,该方法应该是防弹的,除非另有另一个操作系统开头W

x=getenv('OS');x(1)==87

getenv 'name'底层操作系统环境列表中搜索形式为的文本name=value,其中name是输入字符向量。如果找到,MATLAB®将返回字符向量值。如果找不到指定的名称,则返回一个空矩阵。


4
评论不作进一步讨论;此对话已转移至聊天
丹尼斯,

54

Python 2.7.10,24字节

import os
0/('['>os.sep)

感谢FlipTack提供了3个字节

该程序利用Windows是唯一\用作路径分隔符的操作系统这一事实。通常这是令人沮丧和糟糕的,但实际上这是一次优势。在Windows上,它'['>os.sep为false,然后0/0进行计算,从而导致a ZeroDivisionError并以非零的退出代码退出。在非Windows平台上,'['>os.sep为true,则使表达式0/1不执行任何操作,并且程序以退出代码0退出。


DOS还使用反斜杠作为路径分隔符,并且它至少具有一个Python 2实现。
isanae

5
@isanae我已经编辑了标题以指定Python 2.7-DOS上唯一的Python 2实现是古老的越野车2.4.2
Mego

OS / 2还使用反斜杠并具有Python 2.7实现;)
isanae

9
@isanae在这里,我指定了2.7.10。祝你好运。
Mego

2
显然,它只需要在3个最新的Windows版本上给出正确的结果,并且大概与列出的其他三个系统的最新版本类似,OS2和DOS无关紧要
Jasen

45

x86 Assembly,7个字节(受Runemoro的回答启发)

31 DB 89 D8 40 CD 80

要么

xor ebx, ebx 
mov eax, ebx
inc eax
int 0x80

描述

首先,我们将设置eax1(系统调用号exit(int val)LinuxFreeBSDOSX)。然后,我们将调用中断门0x80这是系统调用门LinuxFreeBSDOSX。这将导致程序退出,其状态ebx0false)。

在Windows上int 0x80是无效的门(它2e用作syscall门),并且会使程序崩溃,导致其以正退出代码(true)结尾。

编辑:将无法进行,OSX因为它在32位上(通过堆栈)具有不同的参数传递约定。

参考资料和进一步阅读


3
那太好了!
z0rberg

为什么崩溃案例具有真实价值?是因为EAX(通常是返回值)为1?此外,EAX是否在程序启动时保证为0?还是您需要xor eax, eax在那里?
科尔·约翰逊

3
@ColeJohnson:操作系统检测到的崩溃(在通常与x86一起使用的操作系统上)永远不会保留退出代码0,因为这是为成功终止而保留的。(通常,退出代码是操作系统专门为这种情况保留的一些奇怪的值。)但是,由于正常的约定是完全相反(唯一的真实含义是0,例如,标准UNIX / Linux / POSIX程序false以代码1 true退出,而代码0退出)。

1
该答案隐式地假定为寄存器,eax并且ebx在程序启动时(在非Windows操作系统上)清零,如果我没有记错的话,这不能保证。它还明确地假定Linux的syscall参数传递约定与FreeBSD和OSX的传递约定相匹配,这确实非常令人惊讶。
zwol

1
@Sebastian-LaurenţiuPlesciuc好问题。mov eax, 1会被转换为\xB8\x01\x00\x00\x00,只需移动寄存器并调用就会更长inc
Shmuel H.

29

C,44 43 38 36字节

感谢@Downgoat一个字节!划掉44仍然是常规44
感谢@Neil提供了两个字节!

f(){return
#ifdef WIN32
!
#endif
0;}

最初,我是建议您可以通过将0out移出ifdef并更改为1to 来节省一堆字节!,但是我认为_WIN32+0效果更好。
尼尔

如果c99正常,则可以将f更改为main,并粘贴return 1;在ifdef内,然后删除else,因为c99中不返回的main必须返回
0。– simon

11
那是一个编译器指令。如果它是Windows系统和运行在Linux系统上编译,比如,它仍然会返回1
迈克尔·约翰逊

4
@MichealJohnson不。我可以在linux上编译它(使用mingw32gcc msvc)snd获取在Windows上运行时返回true的代码。我不知道任何Windows托管的Linux编译器。如果您想争论像“酒”这样的仿真层,那么所有其他答案都可能遇到相同的问题
Jasen

1
不知道WIN32是否刚刚定义,但定义为非零。如果是后一种情况,您可以说#if WIN32。在非Windows上,由于未定义WIN32,因此需要预处理器将其视为
0。– Shahbaz

27

PHP,22字节

`<?=PATH_SEPARATOR>":";`  

1如果路径分隔符为分号(对于DOS和OS / 2除外的所有其他OS,则为冒号或空),则打印,否则输出。

也是22个字节,但不是那么安全:

<?=strpos(__FILE__,92);

如果文件路径包含反斜杠,则输出正整数;否则没有。
一个安全的替代方案,有27个字节<?=DIRECTORY_SEPARATOR>"/";打印1或不打印。

一个奇怪的发现<?=__FILE__[1]==":";20个字节)是应该的,没有任何安全的,但确定。但是,尽管__FILE__假装为字符串(我尝试过var_dumpgettype),但对其进行索引会引发错误,除非您将其复制到其他位置(连接也可以)或将其用作函数参数。

编辑:(
<?=(__FILE__)[1]==":";也为22个字节)在PHP 7中工作;但这是因为括号将常量的值复制到一个临时变量。

27个字节<?=stripos(PHP_OS,win)===0;
测试预定义PHP_OS常量是否以win(不区分大小写; Windows,WIN32,WINNT,但不包括CYGWIN或Darwin)开头;1为Windows 打印,否则为空。

17/18字节

<?=strlen("
")-1;

打印1是否与Windows换行符一起存储(也在DOS,OS / 2和Atari TOS上存储-尽管我怀疑有人曾经为TOS编译过PHP),否则进行打印0

您还可以检查常数PHP_EOL

更多选择:

PHP_SHLIB_SUFFIXdll在Windows上,但不一定只有在那里。
php_uname()返回有关操作系统等的信息;从WindowsWindows 开始。在Windows的浏览器中调用时
$_SERVER['HTTP_USER_AGENT']将包含Windows
<?=defined(PHP_WINDOWS_VERSION_BUILD);(38个字节)在PHP> = 5.3中有效

结论

判断它是否真的是Windows而不是看起来像Windows的唯一故障保护方法似乎是检查操作系统名称。对于PHP:php_os()出于安全原因可能被禁用;但PHP_OS可能始终包含所需的信息。


4
* nix上的文件名可以包含反斜杠,因此这并不是万无一失的。不过,规则并没有说它必须是万无一失的,所以\\ _(ツ)_ /?
Jordan

@乔丹:你是对的。我在说明中添加了该信息。谢谢。
泰特斯

4
替代方法:<?=class_exists(COM);COM据我所知,该类仅在Windows下可用。那应该为您节省一个字节。
伊斯梅尔·米格尔

@IsmaelMiguel足够不同的答案供您发布。(但是,这样做可能并不值得;这个答案写得很好。)
wizzwizz4

1
@ wizzwizz4这是不值得的。答案将被遗忘。这就是为什么我只留下评论而不是写自己的答案的原因。
伊斯梅尔·米格尔

16

Befunge-98,7个字节

6y2%!.@

在线尝试!

这可以通过查询\Windows和/其他操作系统上的系统路径分隔符来实现。

6y            System information query: #6 returns the path separator.
  2%          Test the low bit - this will be 1 for '/' and 0 for '\'.
    !         Not the value, so it becomes 0 for '/' and 1 for '\'.   
     .@       Output the result and exit.

15

Mathematica,28个字节

$OperatingSystem=="Windows"&

使它具有功能性有什么意义?您可以删除与号并保存一个字节,并且代码将直接评估它是否在Windows操作系统上执行。
Ruslan

@Ruslan所有答案必须是打印结果的完整程序或可调用函数。如果将其声明为Mathematica笔记本答案,则可以将其称为完整程序,但是如果我从命令行调用不带的&东西,它将不会打印任何内容(因此它也不是可调用函数) ,但仅是代码段/表达式)。
Martin Ender

@MartinEnder真的没有输出吗?我从中得到Out[1]= False输出:~/opt/Mathematica/11.0/Executables/math <<< '$OperatingSystem=="Windows"'
Ruslan

@Ruslan我相信这也会启动一个笔记本环境(只是基于命令行的环境)。我从命令行运行程序的意思是使用脚本模式。
Martin Ender

13

Java 8,33字节

特别感谢separatorCharOlivierGrégoire的建议,以及Kritixi Lithos的-1个字节!

这是一个lambda表达式,它返回一个布尔值。可以将其分配给Supplier<Boolean> f = ...;并调用f.get()

()->java.io.File.separatorChar>90

在线尝试!-服务器不是Windows,因此会打印false。但是,在我的Windows计算机中,将打印相同的代码true

该代码的作用是获取系统的文件分隔符,并检查其代码点是否大于character [。对于Windows,这是正确的,因为它\用作分隔符-但其他所有操作系统都使用/,在ASCII表中具有较低的代码。


在以W开头的其他操作系统上不会中断吗?
Downgoat

()->java.io.File.separatorChar=='\\'只有36个字节。
奥利维尔·格雷戈尔

1
@OlivierGrégoire一个不错的人-我可以用它打高尔夫球到34岁()->java.io.File.separatorChar>'['
FlipTack

2
@Titus WebOS,Whonix。可能更多。
OlivierGrégoire17年

3
@Titus等待,等待呢?
NoOneIsHere

11

J,7个字节

6=9!:12

这是一个动词(类似于一个函数),它使用内置的外部连词9!:12来获取系统类型,其中5是Unix,而6是Windows32。


J官方文档显示它为较旧的Windows返回此值。“ 6 Windows32(95/98/2000 / NT)”是否需要更新文档?如果是64位Windows,会发生什么?jsoftware.com/help/dictionary/dx009.htm
Keeta

在64位Windows 7上进行了测试,它返回6。文档似乎很旧。
Keeta

@Keeta是的,我认为它很旧,但在Windows 10 64位上仍然为我返回了6。
英里

11

R,15个字节

.Platform$O>"v"

感谢plannapus建议使用部分匹配进行列表元素提取。

.Platform是一个列表,其中包含构建R的平台的一些详细信息。有一个元素OS.type(唯一的名称以“ O”开头的元素)是字符串,给出了计算机的操作系统(家族)。其中一个"unix""windows"

所以"unix"少了"v",但"windows"更大了"v"。其他有效的15个字节的答案是

.Platform$O>"V"
.Platform$O>"w"
.Platform$O>"W"

R为正在为操作系统的类Unix,Windows和Mac家庭发展。不支持其他OS系列。


1
还有比UNIX等平台是你不知道的窗口...

2
@muddyfish:.Platform [[1]]在R文档中定义为“ unix”或“ windows”。github.com/wch/r-source/blob/…–
liori

抱歉,那没关系。答案也许应该进行修改,以包括这个事实来停止被再次问

10

Perl,11个字节

print$^O=~MS

^O 应该用文字Control-O代替。

1在Windows上输出,在另一个OS上没有输出。

请注意,我没有使用say它,因为它添加了结尾的换行符,这在Perl中是正确的。

-2个字节,感谢primo。(和已解决的潜在问题)
由于使用了ais523,因此为-1个字节。


AFAIR在Cygwin Perl中不起作用。
伊戈尔·斯科钦斯基

这在mingw Perl中也不起作用。不过,Perl将这两者视为与Windows截然不同的操作系统(因为它们通常遵循UNIX而不是Windows约定),并且尚不清楚它们是否应计入该问题的目的。在其他新闻中,您可以在此处通过使用文字Control-O字符而不是来保存一个字节^O

@ ais523我编辑了,谢谢。至于Cygwin和Mingw,如果将它们视为Windows,我将删除该帖子,但是正如您所说,将它们视为独立的OS(或者至少是非Windows OS)是更有意义的。
达达

$^O=~W尽管没有必要使用正则表达式定界符,但我可能会反对MS。另外,您也可以匹配$^X=~':'
primo

@primo对,谢谢。我不知道任何其他操作系统与W它,所以我假定检查的W精细..为什么你提出任何理由MS呢?
Dada

9

朱莉娅,10个字节

is_windows

对于Windows返回true的函数


9

x86机器码,9个字节

40 39 04 24 75 02 CD 80 C3

编译自:

inc eax        ; set eax to 1
cmp [esp], eax ; check if [esp] == 1 (linux)
jne windows    ; jump over "int 0x80" if on windows
int 0x80       ; exit with exit code 0 (ebx)
windows:
ret            ; exit with exit code 1 (eax)

3
纯二进制(COM)无法在Windows或Linux上运行,因此不确定这是否有效
Igor Skochinsky

@IgorSkochinsky必须有一个用于汇编的解释器。
Shmuel H.

您可以通过仅保留inc eax和来使代码更短int 0x80,我认为它应该在Windows上失败并终止进程。
Shmuel H.

2
@IgorSkochinsky也有一些程序运行原始二进制文件。请参阅我之前的评论中的链接。
Shmuel H.

1
Bochs和QEMU模拟裸机环境,并且不在主机OS下运行二进制代码。因此,它们将不适用于IMO。但这可能是对meta的讨论。
伊戈尔·斯科钦斯基

8

JavaScript, 42 30 26 25字节

console.log((
//Begin
_=>navigator.oscpu[0]>'V'
//End
)())

经过Firefox测试。(Chrome没有该oscpu属性。)由于小写字母的字符代码比大写字母的字符代码高,因此这取决于Firefox支持的任何平台上的首字母为navigator.oscpu大写而不是WXYZ(除了Windows,当然)。根据这篇文章,情况就是这样。

编辑

  1. 感谢Neil节省了12个字节。
  2. 保存了另外四个字节
  3. 由于Blender节省了另一个字节。

oscpu可能navigator是您可以使用的最短属性。另外,测试一个正则表达式可能会更短一些,但是我还没有测量它。
尼尔

您可以删除!=-1并在~右边的箭头后面添加一个右箭头,以节省3个字节。
路加福音

您必须创建一个功能吗?你不能只是console.log正则表达式测试吗?也将navigator.oscpu[0]=='W'工作或者是有没有也开始与另一W. OS

2
嗯,由于某种原因,我的Chrome没有oscpu。
Muzer

2
navigator.oscpu>'V'可能工作以及
搅拌机

8

C#,61 48字节

()=>(int)System.Environment.OSVersion.Platform<4

感谢TheLethalCoder,节省了13个字节

或83字节的完整程序:

class P{static int Main(){return(int)System.Environment.OSVersion.Platform<4?1:0;}}

Microsoft .NET实现中,各种Windows变体都使用枚举值0到3 。4是Unix,5是Xbox [360](我不会考虑“ Windows”),6是MacOSX。Mono使用相同的值,在早期版本的Unix / Linux中增加128。

因此,所有<4的都是Windows,其他所有的都不是Windows。


2
不知道我是否缺少某些内容,但是为什么要将值强制转换为int
auhmaan

@auhmaan- CS0019 Operator '<' cannot be applied to operands of type 'PlatformID' and 'int'基本上,C#的输入规则说我不能直接比较a PlatformIDint直接,也没有从PlatformIDto 隐式转换int。但是,一个明确的从所有枚举投给他们的价值观,这是我拿的优势在这里...
鲍勃·

1
@MustafaAKTAŞ另外,我必须指出,这是针对C#/。NET Framework / .NET Core的。在Xbox之一,它是唯一可以运行UWP的应用程序,它使用不同的API 不包括System.Environment.OSVersion在所有。如果您对此有疑问,则还应该删除所有其他非UWP答案。事实证明,您不能(当前)在非Windows平台上运行UWP应用,因此您也可以删除所有这些。剩下0个答案和一个无法回答的问题。
鲍勃(Bob)

1
您可以Action<bool>在第一个示例中将其编译为48字节(我尚未测试过,但相信它可以工作)_=>(int)System.Environment.OSVersion.Platform<4;()=>...尽管它可能需要49字节
TheLethalCoder

1
这里一直使用编译为Funcs和Actions的匿名函数。我相信它在“高尔夫技巧”页面中,并且我几乎一直都在使用它们。另外,匿名函数在其他语言中也大量使用,因此我认为在这里使用它们是安全的
TheLethalCoder

7

批处理,50个字节

@if %OS%==Windows_NT if not exist Z:\bin\sh echo 1

编辑:固定为忽略DOS,而不是声称它是Windows。

我知道在Windows外部运行Batch 的唯一其他方法是使用WINE,默认情况下它将映射Z:/。因此,如果Z:\bin\sh存在,则可能是/bin/sh,而不是MS Windows。

我不知道WINE将%OS%设置为什么,但是如果不是,Windows_NT那么我可以节省23个字节。


1
另一种方法是DOS,而不是Windows。
Ruslan

这不仅在DOS下失败,而且在映射Z:的计算机上也失败,并且恰好包含这样的路径。
2015年

1
至少我正在尝试检测WINE。在WINE下运行时,其他任何答案都不会给出正确的结果。
尼尔

3
@Adám当然,如果用-DWIN32 = 1编译C答案,那么它也会失败。你的意思是?
尼尔

1
是的,酒具OS=Windows_NT
Jasen's

7

QBasic,31个字节

?INSTR(ENVIRON$("COMSPEC"),"W")

在Windows下输出非零,在其他所有条件下输出0。

COMSPEC是Microsoft操作系统特有的环境变量。它指向命令解释器,通常为command.comcmd.exe。在Windows下,命令解释器位于Windows目录中的某个位置。在MS-DOS下,它位于DOS目录中或磁盘的根目录上,而在任何其他OS下,它都不存在。

通过检查的值是否COMSPEC包含“ W”,我们可以判断Windows与非Windows之间的区别。


COMSPEC在Linux下并没有保留特别的含义(默认情况下处于用户控制之下),因此用户是否有可能将其设置为他们用于自己目的的值(并且恰好包含一个W)?诚然,这有点极端。

1
@ ais523:另外,Windows目录不必包含W。在任何情况下,它都非常脆弱。
乔伊(Joey)

7

Node.js,27 16 15 13字节

感谢@Patrick,他使用Node的REPL将我的解决方案节省了 12个字节:

_=>os.EOL>`
`

原始解决方案:

_=>require('path').sep!='/'

如果将其更改为Node.js REPL,则只需使用_=>path.sep!='/'
Patrick Roberts

我是Codegolf的新手。我可以这样做吗?
GilZ

是的,否则我不会建议。REPL表示读取,执行,打印循环,即您node在控制台上输入时运行的程序。从那里开始,所有系统节点模块都可以使用,而无需require()它们。
Patrick Roberts

哦,对不起。我的意思是11.您可以通过更改保存另一个字节!=>自ASCII指数\ 为92,并/为47
帕特里克·罗伯茨

7

Excel VBA,41 40 30 29 26 24字节

立即窗口函数,返回true如果系统的OS代码开始比3的长度更长,因为信息被限制为输出或者其他macpcdos该返回true仅在Windows PC上

?[Len(Info("SYSTEM"))>3]

之前的版本

''# Ignore the second `"` that follows every `\` - its only there for highlighting 

?Left(Environ("OS"),1)="W"                 # 24 Bytes

?InStr(ThisWorkbook.Path,"\"")             # 29 Bytes

?Mid(ThisWorkbook.Path,3,1)="\""           # 30 Bytes, Restricted to local Files

?Application.PathSeparator="\""            # 30 Bytes

?Left(Application.OperatingSystem,1)="W"   # 40 Bytes

变化

-1感谢Neil使用Left(...,1)Mid(...,1,1)

-10感谢ChrisH指出@Mego 的Path Separator Trick

-1对于检查WorkbookPath"\" ,而不是使用Application.Path Separator

-4切换到 Environ()

-2用于切换到 [Len(Info(...

新颖的解决方案,51字节

通过条件编译的方法将新的sub例程输出到VBE立即窗口,1 (truthy)在Windows 0 (falsey)下和在Mac下。

Sub a
i=1
#If Mac Then
i=0
#End If
Debug.?i
End Sub

1
left节省您一个字节。
尼尔

您是否已在Office365在线上尝试过?那甚至支持VBA吗?只是好奇。
克里斯·H

@ChrisH据我所知,office.com不支持在线VBA脚本编写(尽管如果其他人知道的更多,请告诉我,这会使我的生活变得更加轻松);但是,使用O365,您有权将Office 2016的副本(或最新版本)下载到桌面上,并且确实支持VBA脚本。
泰勒·斯科特

到目前为止,我设法避免了这种情况。考虑到您的评论似乎将继续(我使用的唯一Windows计算机具有Office的台式机副本,个人计算机都是Linux)
Chris H

1
@Mego的路径分隔符技巧?Application.PathSeparator)="\"由于是单个字符,因此为32)
Chris H

6

Perl 6的 19  18个字节

put $*DISTRO.is-win
put ?($*CWD~~/\\/)

无论是输出True␤还是False␤取决于运行它的系统。


第二个依赖于CWD的非窗口值,其中不包含任何“-无法保证这一点,
Jasen

5

APL(Dyalog),21 字节

'W'∊∊#⎕WG'APLVersion'

在线尝试!

#⎕WG'APLVersion' 根(W indow G et property APL版本

 征募(拼合)

'W'∊ 是W¯¯一员?(非Windows返回值不包含大写字母W)


4

tcl,38个字节

 expr [lsearch $tcl_platform windows]>0

4

PHP 17字节

如果是Windows,则以下内容将输出1,否则将不输出任何内容。忽略字符串转换的通知。

<?=PHP_OS==WINNT;

在线尝试 Linux在线测试,因为沙箱是用于PoC的Linux。


确定够了吗?由于可能的值而询问:PHP_OS
manatwork

1
'<?= PHP_OS [0] == W;`都短了1个字节,并且捕获了由操作链接的问题中的所有其他windows值。>V可能也可以。
user59178

具体操作取决于在哪个Windows版本上编译PHP,因为Windows Visa \ 7以来,由于NT Authority Kernel,Windows版本已用WINNT表示。Windows XP及以下版本之前是WIN32,Windows Server 2003之前是Windows。
DrWhat

4

Java 8,49字节

()->System.getenv().get("OS").contains("Windows")

其他Java回答更长,但是采用了不同的方法。

此lambda符合,Supplier<Boolean>可以通过以下程序进行测试:

public class DetectMSWindows {

  public static void main(String[] args) {
    System.out.println(f(() -> System.getenv().get("OS").contains("Windows")));
  }

  private static boolean f(java.util.function.Supplier<Boolean> s) {
    return s.get();
  }

}

这与您链接的初始答案非常非常相似(在编辑之前)。
奥利维尔·格雷戈尔(OlivierGrégoire),

为什么不只是.contains("W")呢?
Cyoce

@Cyoce实际上,变量OS似乎是Windows特定的。


4

bash + coreutils,5个字节

rm $0

也可以在大多数其他POSIXy shell中使用。(请注意,存在Windows bash和的Windows端口rm;即使通常仅在更重的POSIXy操作系统上使用它们,也不是完全虚空的条目。)通过退出代码输出(0 =否,1 =正确)。如果允许使用文件名(例如rm a),则可以算作4个字节。请注意,在文件名非常奇怪的情况下,这可能会失败(rm由于缺少引号而将其解释为自变量,并且可能会删除您关心的文件,因此,建议不要从名称奇怪的文件中运行该程序)。

注意:从磁盘上删除程序是有副作用的,或者至少是尝试这样做。如果我们在Windows上运行,则操作系统将无法删除正在运行的文件(Windows不允许该操作默认或完全停止),因此rm将出错。bash捕获错误并将其转换为退出代码(因此该程序作为一个整体正常终止)。这里的其他大多数条目在退出代码中都使用0代表虚假,使用1代表真实,因此也是如此。请注意,bash' if语句根本不接受整数(而是根据命令和分支是否成功运行来接受命令和分支,并且算术测试是通过诸如test会故意在比较失败时报告“崩溃”),因此,在合法性方面,这比通过退出代码输出的程序(在if语句测试中0为有效的语言,并将其发送到else分支)的合法性更高。


4

8th,11字节

 
os 1- not .
 

true在Windows,falseLinux和macOS上打印。8th支持的其他平台是Android,iOS和Raspberry Pi,但我无法对其进行测试。

非高尔夫版本(带注释)

 
G:os  \ Return a number n indicating the operating system 
      \ 0 for Linux
      \ 1 for Windows 
      \ 2 for macOS
      \ 3 for Android 
      \ 4 for iOS 
      \ 5 for Raspberry Pi
n:1-  \ Subtract 1
G:not \ If Windows --> true, otherwise --> false
.     \ Print result
 

4

Python 3(13字节)

import winreg

如果在Windows上,则返回退出代码为零(通常在shell中为true),否则返回非零退出代码。

如果您更喜欢它,可以使用12个字节的解决方案:import posix


我认为如果winreg.py在同一目录中有一个文件,这将无法正常工作。
扎卡里

1
同样,按照规则:“无法在平台上运行/编译的代码不算作伪造的值。”
扎卡里

4

TrumpScript,17个字节

America is great.

在线尝试!


如果在Windows上运行,此程序将打印:

The big problem this country has is being PC

这被认为是真实值。


空输出和以下值是虚假的:

Boycott all Apple products  until such time as Apple gives cellphone info to authorities regarding radical Islamic terrorist couple from Cal

空输出将出现在任何linux系统上(对于该程序),长苹果响应显然发生在Mac上(对于任何程序)。在TIO上,后端(我假设)是Unix操作系统,因此您只能得到虚假的值。在我的计算机上,我收到PC消息。


不能100%确定这是否算作错误消息(这将使答案无效),但是如果您不知道这件事,可能值得您大笑。


世界来到了什么……
ooransoy

@avaragecoder再次实现PYTHON!
魔术章鱼缸
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.