Codegolf — Экспортировать Переменную $Path, Построчно

  • Автор темы Setar
  • Обновлено
  • 18, Oct 2024
  • #1

Вдохновлено этот вопрос на АскУбунту.

Ваша работа предельно проста. Возьмите переменную среды PATH (

 
 
 
 <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> 
) and export it such that each entry (separated by the body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px} символ) находится на отдельной строке.

Например, если PATH var QUESTION_ID=96334,OVERRIDE_USER=15422;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/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; , your program should output:

:

Ваша программа может не возвращать начальную новую строку, но может возвращать одну завершающую новую строку. Вам не нужно проверять, правильный ли PATH или существует ли каталог. Ваша программа не должна принимать никаких входных данных, а это означает, что ваша программа сама отвечает за получение PATH. Вы можете смело предположить, что объекты в PATH не содержат /bin /usr/bin /usr/local/bin or newlines. However, spaces are fair game.

Эталонные реализации присутствуют в ответах на вопрос выше.

Правила

  • Это (очевидно) код-гольф, поэтому самый короткий ответ получит ценную зеленую галочку.
  • Принятый ответ будет проверен, чтобы убедиться, что он действительно верен.
  • Принимаются записи как для Windows, так и для *nix.
    • Однако, если вы явно не укажете Windows, я попытаюсь запустить ее в Linux, но безуспешно. (Если это очевидно (привет, Батч!), вам не нужно указывать это явно.)
  • Имейте только одно решение для каждого ответа. Если у вас есть версия как для Windows, так и для *nix, я буду считать более короткую.
  • Если два ответа имеют одинаковую длину, я отдам приоритет тому, у которого больше голосов. Если у них одинаковое количество голосов, я буду считать старшего. Если время указано одинаковое, я выберу то, которое выполняется быстрее. Будут ли они выполняться за одинаковое время, я не знаю.

Таблица лидеров

/bin:/usr/bin:/usr/local/bin : echo $PATH

#код-гольф #строка

Setar


Рег
19 Dec, 2013

Тем
90

Постов
187

Баллов
657
  • 26, Oct 2024
  • #2

Оболочка Z (zsh), 13 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 BITS 32                                         ;
ORG 0x10eb5000                                  ;

;   ELF HEADER    --   PROGRAM HEADER
; ELF HEADER                                    ; +-------------+
DB 0x7f,'E','L','F'                             ; | magic       |    +--------------------+

; |             |    |                    |
; PROGRAM HEADERS                               ; |             |    |                    |
DD 1                                            ; |*class   32b | -- | type: PT_LOAD      |

; |*data   none |    |                    |

; |*version   0 |    |                    |

; |*ABI    SysV |    |                    |
DD 0xf43        ; offset = vaddr & (PAGE_SIZE-1); |*ABI vers    | -- | offset             |

; |             |    |                    |
entry:  inc     ebx     ; STDOUT_FILENO         ; |*PADx7       | -- | vaddr = 0x10eb5f43 |

pop     edi     ; discard argc          ; |             |    |                    |

jmp     short skip                      ; |             |    |                    |
DW 2                                            ; | ET_EXEC     | -- |*paddr LO           |
DW 3                                            ; | EM_386      | -- |*paddr HI           |
DD 0x10eb500c                                   ; |*version     | -- | filesz             |
DD 0x10eb500c                                   ; | entry point | -- | memsz              |
DD 4                                            ; | ph offset   | -- | flags: RX          |

; |             |    |                    |
skip:   pop     edi     ; discard argv[0]       ; |*sh offset   | -- |*align              |

pop     edi     ; discard argv[1]=NULL  ; |             |    |                    |
env:    mov     cl,5    ; \ strlen("PATH=")     ; |             |    |                    |

mov     esi,PATH; > "PATH="             ; |*flags    /--|    |                    |
DB 0x3d         ; cmp eax,0x10020               ; |*ehsize      |    +--------------------+
DW 32                                           ; | phentsize   |
DW 1                                            ; | phnum       |

; |             |

pop     edi     ; > envp                ; |*shentsize   |

repe    cmpsb   ; > strcmp(envp,"PATH="); |*shnum       |

jne     env     ; /                     ; |*shstrndx    |

mov     ecx,edi                         ; +-------------+

nlcolon:cmp     byte[edi],58  ; \ if (char == ':')

jne     nosub         ; >

sub     byte[edi],48  ; >   char -= '0'
nosub:  inc     edx           ; > wlen++

scasb                 ; >

jne     nlcolon       ; / while(char != 0)

dec     edx           ; wlen--

add     al,4

int     0x80          ; write(1, ecx, wlen)

xchg    eax,ebx

int     0x80          ; exit(...)

PATH: db "PATH="
 

Использует 00000000 7f 45 4c 46 01 00 00 00 43 0f 00 00 43 5f eb 10 |.ELF....C...C_..| 00000010 02 00 03 00 0c 50 eb 10 0c 50 eb 10 04 00 00 00 |.....P...P......| 00000020 5f 5f b1 05 be 49 50 eb 10 3d 20 00 01 00 5f f3 |__...IP..= ..._.| 00000030 a6 75 ef 89 f9 80 3f 3a 75 03 80 2f 30 42 ae 75 |.u....?:u../0B.u| 00000040 f4 4a 04 04 cd 80 93 cd 80 50 41 54 48 3d |.J.......PATH=| 0000004e parameter, который представляет собой специальный параметр массива, используемый оболочкой, которая связанный к , parameter, and a флаг расширения параметра для объединения массива с символами новой строки.

 

Murzilka


Рег
09 Mar, 2004

Тем
67

Постов
182

Баллов
537
  • 26, Oct 2024
  • #3

Bash/Coreutils, 17 16 байт

:':-!'0*- ||answer||

Пакетный, 41 байт

:!k@

"HTAP"G is semicolon-delimited on Windows of course. Conveniently, "RAVE"4( по умолчанию разбивается на точки с запятой, но неудобно, а также на пробелы, поэтому мне приходится использовать трюк с заменой строки, чтобы цитировать каждый элемент пути перед разделением. После этого остается удалить кавычки.

 

Otikas


Рег
23 Jul, 2014

Тем
65

Постов
181

Баллов
546
  • 26, Oct 2024
  • #4

Оболочка Z (zsh), 15 байт

"RAVE"4("HTAP"Gv :!k@:':-!'0*-, >

Вы можете протестировать код на Анархия Гольф: нажмите использовать форму, выбирать зш, вставьте код и отправьте.

Bash (чистый), 19 байт

bash-4.3$ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' bash-4.3$ gema '\A=@subst{\\:=\\n;@getenv{PATH}}@end' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

Та же идея, но с менее изящным синтаксисом Bash. Проверьте это на идея.

 

Finizabilie


Рег
09 May, 2020

Тем
87

Постов
215

Баллов
670
  • 26, Oct 2024
  • #5

Powershell, 20 байт

\A=@subst{\\:=\\n;@getenv{PATH}}@end

Редактировать:

  • -2 байты отключены. Спасибо @TimmyD

Старый:

System.env['PATH'].replaceAll(":","\n") ||answer||

Рубин, 25 байт

: ||answer||

Перл, 22 байта

cat(gsub(":","\n",Sys.getenv('PATH')))

Потребности char or strrep запустить:

disp(strrep(getenv('PATH'),58,10)) ||answer||

Bash+Python, 43 байта

Давайте воспользуемся расширением переменных оболочки. Это исключает вызов _=>process.env.PATH.split`:`.join` ` , thus less code and less imports. That gives us 46 bytes, and with bash-4.3$ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' bash-4.3$ awk 'BEGIN{FS=":";OFS=RS;$0=ENVIRON["PATH"];$1=$1;print}' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin трюк и удаление места перед BEGIN{FS=":";OFS=RS;$0=ENVIRON["PATH"];$1=$1;print} we've got 43 bytes.

awk ||answer||

Ява, 58 байт

awk

Полная программа: 106 байт.

gsub() ||answer||

ГНУ BEGIN{$0=ENVIRON["PATH"];gsub(":",RS);print} + "PATH"getenv ":" "\n"replace , 25 байт:

replace

Если import System.Environment m ':'='\n' m x=x map m<$>getEnv"PATH">>=putStr contains no directory name with whitespace, no quoting needed, 23 bytes:

using System;class P{static void Main(){Console.Write(Environment.GetEnvironmentVariable("PATH").Replace(";","\n"));}}

Еще короче, транслитерацией : to newline, thanks to @Деннис:

; ||answer||

Вим, 19 байт

using System; namespace ExportPathVariable { class Program { static void Main(string[] args) { Func<object,string>f= x=>Environment.GetEnvironmentVariable("PATH").Replace(";","\n"); Console.WriteLine(f(0)); } } }

Схватить () from the expression register and paste it. Turn the x s в новую строку. Ничего сложного.

 

Александр_К


Рег
19 Aug, 2012

Тем
66

Постов
205

Баллов
555
  • 26, Oct 2024
  • #6

С (x86), 60 байт

x=>Environment.GetEnvironmentVariable("PATH").Replace(";","\n");

Это не будет работать на 64-битных платформах без включения stdlib.h, с получить возвращает интервал (32 бита), в то время как голец Указатели имеют ширину 64 бита.

Мне еще предстоит найти в Интернете 32-битный компилятор C.

С (x86-64), 70 байт

put %*ENV<PATH>~~tr/:/ /

Вместо включения stdlib.h, мы заявляем получить себя как функцию, возвращающую голец указатель.

Я тестировал это с помощью gcc и clang в Linux; другие настройки могут плакать кровью. Попробуйте это идея.

 

Su-11


Рег
11 Dec, 2007

Тем
74

Постов
212

Баллов
602
  • 26, Oct 2024
  • #7

PHP, 36 35 33 32 байта

Сэкономлен 1 байт благодаря Blackhole
Сэкономлено 2 байта, спасибо пользователю59178.
сэкономлен 1 байт, спасибо Мартейну

*никс-версия

put %*ENV<PATH>~~tr/:/\n/

версия для Windows

%*ENV<PATH>.split(':')».put ||answer||

Питон 2, 49 байт

Экономия 2 байта благодаря @xnor и 1 байта за счет замены sys.env("PATH").replace(':','\n') with a.b(c) спасибо @Serg и @Oliver

a b c

Для Python 3 просто добавьте sys env "PATH"replace(':','\n') and /usr/local/bin /usr/bin /bin /usr/games /usr/lib/java/bin /usr/lib/java/jre/bin #t вокруг (define (f) (system "sed 's/:/\\n/g' <<<\"$PATH\"") ) argument and add 1 to the byte count.

 

Lexandr


Рег
07 Sep, 2011

Тем
84

Постов
202

Баллов
682
  • 26, Oct 2024
  • #8

jq, 18 символов

(код из 16 символов + опция командной строки из 2 символов)

(system "sed 's/:/\\n/g' <<<\"$PATH\"")

Пример запуска:

#import<stdlib.h> main(){char*a=getenv("PATH");while(*a)putchar(*a++==58?10:a[-1]);} ||answer||

С, 85 84 байта

-1 байт для использования #import

bash-4.3$ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' bash-4.3$ jq -nr 'env.PATH/":"|.[]' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ||answer||

Ракетка 39 байт

Используя команду sed @heemayl:

env.PATH/":"|.[]

Негольфед:

print

Тестирование:
(е)

Выход:

) ||answer||

Скала, 31 байт

(

В скале, import os print os.getenv('PATH').replace(*':\n') is syntactic sugar for getenv , так что это компилируется в environ

 

Svetlov


Рег
19 Oct, 2019

Тем
87

Постов
198

Баллов
643
  • 26, Oct 2024
  • #9

Perl 6, 28 25 24 байта

<?=strtr(getenv(PATH),";"," ")?> <?=strtr(getenv(PATH),":"," ")?> f(){char*getenv(),*p=getenv("PATH");for(;*p;p++)putchar(*p-58?*p:10);} ||answer||

С#, 64 байта

f(){char*p=getenv("PATH");for(;*p;p++)putchar(*p-58?*p:10);}

Анонимная функция, которая возвращает переменную пути для каждого каталога в отдельной строке. Обратите внимание, что : is just a dummy object to save 1 byte instead of using $PATH .

Полная программа:

"=$PATH<CR>p:s/:/\r/g<CR>

Также работает в системах UNIX, если вы замените sed y/:/\\n/<<<"$PATH" with : , предполагая, что библиотеки Mono доступны. Попробуйте онлайн на идея, .NET Fiddle возвращает исключение безопасности.

В качестве альтернативы можно использовать полную программу на C#, которая довольно многословна:


С#, 118 байт

sed 's/:/\n/g' <<<$PATH ||answer||

Хаскель, 72 байта

PATH

Дорогой импорт и нет sed 's/:/\n/g' <<<"$PATH" within the standard library make it quite long.

 

Nohrin


Рег
25 Sep, 2006

Тем
62

Постов
194

Баллов
564
  • 26, Oct 2024
  • #10

Фактор, 28 байт

для unix-подобных. Я не знаю, как это сделать в Windows, так как у меня нет Windows.

bash ||answer||

Awk, 51 44 символа

sed

Благодаря:

  • нинджалдж за предложение использовать class E { public static void main (String[] args) { System.out.print(System.getenv("Path").replace(';', '\n')); } } instead of manipulating built-in variables (-7 characters)

Типичный System.out.print(System.getenv("Path").replace(';','\n')); way would be to set up the built-in variables which influences how python -c"print('$PATH'.replace(*':\n'))" автоматически манипулирует данными:

-c

Пример запуска:

xnor ||answer||

Node.js, 36 байт

os.environ

Довольно прямолинейно.

 

DJ5KiLleR


Рег
15 Apr, 2014

Тем
68

Постов
196

Баллов
556
  • 26, Oct 2024
  • #11

МАТЛАБ, 34 байта

perl -E 'say$ENV{PATH}=~y/:/ /r'

Вот онлайн-демо в Octave с небольшими изменениями, поскольку -M5.010 in octave requires the second and third inputs to be -E переменные, а не числовые значения.

 

Oweplerex


Рег
12 Jul, 2014

Тем
57

Постов
217

Баллов
552
  • 26, Oct 2024
  • #13

Отличный, 43 байта

$env:PATH.split(":") ||answer||

Гема, 36 символов

$env:PATH-split':'

Пример запуска:

echo "${PATH//:/ }" ||answer||

Befunge-98 + отпечаток пальца EVAR, 34 байта

<<<${PATH//:/ }

Загружает отпечаток EVAR ( for ) to easily access environment variables, gets the PATH envvar ( PATH ), и для каждого символа завершает программу, если это символ "\0" ( @for %%a in ("%PATH:;=";"%")do @echo %%~a ), substracts ASCII 48 "0" if the char is ASCII 58 ":" ( tr : ' '<<<$PATH ) и выводит символ ( $PATH ).

 

Dementyev max


Рег
07 Jan, 2006

Тем
83

Постов
222

Баллов
657
  • 26, Oct 2024
  • #14

ЭЛЬФ/x86, 78 байт

$path

Источник НАСМ:

<<<${(F)path}
 

Taraymovich


Рег
28 Apr, 2006

Тем
66

Постов
200

Баллов
570
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно