재부팅 할 때 문자열을 유지하기 위해 언어에서 가장 짧은 코드


48

귀하의 프로그램 :

두 가지 프로그램을 작성합니다 (둘 다 동일한 언어로). 스토리지 프로그램은 STDIN에서 문자열을 가져와 영속적 인 위치 (아래 참조)에 저장 한 다음 오류없이 종료합니다. 검색 프로그램은 입력을받지 않고 저장된 문자열을 검색하여 STDOUT에 인쇄합니다.

지속성에 대한 객관적인 테스트 :

로컬 머신에서 스토리지 프로그램을 실행 한 다음 로컬 머신의 전원을 껐다 켜고 로컬 머신에서 검색 프로그램을 호출 할 수 있어야합니다. 이 재부팅 테스트를 통과하는 한 웹 에서조차도 원하는 문자열을 숨길 수 있습니다.

테스트 사례 :

저장 후 검색 :

echo foo | Store
Retrieve
foo

반복 된 상점은 (set () 메소드와 같이) 겹쳐 써야합니다.

echo foo | Store
echo bar | Store
Retrieve
bar

반복 검색은 비파괴 적입니다 (get () 메소드처럼).

echo foo | Store
Retrieve
foo
Retrieve
foo

스토리지를 호출하기 전에 검색 :

당신은 이것에 대해 걱정할 필요가 없습니다. 검색 프로그램은 스토리지 프로그램이 과거 어느 시점에서 실행되었다고 가정 할 수 있습니다.

입력 / 출력 유연성.

사람들은 엄격한 STDIN / STDOUT에서 표준 IO 규칙으로 이것을 확장하도록 요청했습니다. 허점이 너무 많기 때문에 나는 할 수 없습니다. 일부 표준 IO 옵션에는 이미 입력이 지속적으로 저장되어 있습니다 (예 : "프로그램이 파일에서 입력을받을 수 있음"). 엄격한 STDIN 및 STDOUT보다 유연하지만 플러드 게이트를 열지 않고 싶습니다.

표준 IO 규칙 스레드에서 나는 도전을 깨뜨리지 않는 것을 선택합니다.

대체를 사용하는 경우 사용자 대화식이어야합니다. 사용자는 입력을 프로그램에 파이핑하거나 프로그램이 제공하는 프롬프트에 입력하거나 입력을 프로그램의 명령 줄 인수로 입력하는 것 외에 다른 작업을 수행 할 필요가 없습니다. 화면에 출력이 표시되거나 STDOUT 또는 STDERR로 전송되는 것을보기 위해 검색 프로그램을 실행하는 것 이외의 작업을 수행하지 않아도됩니다.

허용되는 가정 :

  • 두 프로그램은 같은 디렉토리에서 실행됩니다
  • 프로그램에 해당 디렉토리에 대한 읽기-쓰기 권한이 있습니다
  • 생성 한 파일은 재부팅 후에도 유지됩니다 (temp dir 아님)
  • 문자열의 일부가 아닌 하나의 후행 줄 바꿈이 허용됩니다. 다른 후행 공백이 없습니다.

이것은 코드 골프이며, 점수는 두 프로그램의 바이트 합계입니다.


9
그래서 그냥 echo $@>xcat x유효합니까?
Adám

1
귀하의 사양에는 여러 번 저장할 수있는 기능이 언급되어 있지 않지만 사례가 있습니다. 호출 할 때마다 깨끗한 환경을 가정 할 수 Store있습니까?
Adám

4
@EriktheOutgolfer 왜 유효하지 않습니까? 메타에 대해 논의 된 허점이 있어도 도전이이를 구체적으로 허용하지 못하게합니다.
dylnan

6
웹 제한은 일반적으로 웹에서 물건을 가져 오는 허점으로 물건을 만드는 작업에서 벗어나는 것입니다. 이 경우 웹에 있으면 웹에 넣는 작업을 수행했기 때문입니다.
Jared K

3
자기 코어 메모리가있는 컴퓨터에 대한 답변을 작성해야합니다.
Mark

답변:


88

zsh, 4 바이트

Store : >f(STDIN에서 읽고이라는 파일에 씁니다 f)
Retrieve : <f(의 내용 f을 STDOUT에 씁니다 )


8
승자가 있다고 생각합니다.
Adám

@ Adám 1 바이트로 파일에 입력을 기록하는 토큰이 없다면 : P
FreezePhoenix

1
@FreezePhoenix 허용되지 않는 새 언어를 쓰지 않는 한 아마도 없을 것입니다.
Chromium

4
@Chromium check Z80 답변 : 일부 기존 언어는 0 바이트 프로그램에서 쓸 수 있습니다.
Cœur

55

TI-BASIC (Z80), 1 바이트 ?

상점 :  (문자열 만 입력)
검색 : Ans(바이트 27)

그러나 이것이 유효하지 않은 경우 :

TI-BASIC (Z80), 7 6 바이트

Jakob에게 -1 감사합니다.

상점 : Prompt Str0(bytes DD AA 09)
검색 : disp Str0(bytes ED AA 09)


1
5 바이트입니까?
FreezePhoenix

6
@FreezePhoenix TI-Basic은 토큰을 사용합니다.
Adám

3
흠 ... 왜 Ans같은 변수에 입력을하지 않고 유지합니까? 비어있는 상점 프로그램과 Ans검색 전용으로 작동해야합니다 : 1 바이트!
야콥

9
@Arthur Yep는 Ans계속된다. 실제로 모든 사용자 변수, 방정식 및 기록을 포함하여 많은 상태가 지속됩니다. 사용자 관점에서, 전원 끄기는 기본적으로 PC의 절전 상태에 해당하는 TI 계산기이므로 크게 방해하지 않습니다.
Jakob

2
@JaredK 나는 1 바이트 솔루션이 규칙 남용의 냄새를 맡는 것에 분명히 동의합니다 (제가 제안한 사람 임에도 불구하고). 그러나 다른 프로그램 솔루션의 작동을 방해하지만 이후에 실행할 있기 때문에 상점 프로그램이 종료되었다고 말합니다 . "객관적인 객관적인 테스트"에 대한 나의 해석은 프로그램이 전원주기 직전과 직후에 실행될 것이라는 것이 었습니다. 그것이 틀렸다면, 아마도 1 바이트 솔루션을 비경쟁으로 표시해야합니까?
Jakob

23

브라우저 JS, 44 바이트

저장 :

localStorage.a=prompt()

검색 :

alert(localStorage.a)

prompt()STDIN에서 읽어?
파이프

9
그래픽 웹 브라우저에 STDIN이 있습니까? 아니요. prompt()텍스트를 입력하라는 경고 메시지가 나타나면 결과를 반환합니다.
Dev

5
@Dev 물론 그래픽 웹 브라우저에는 다른 모든 프로세스와 마찬가지로 STDIN이 있습니다. 특정 언어에서 사용할 수없는 또 다른 질문이며 대답이 "아니오"이면이 질문에 사용될 수 있습니다.
파이프

5
@Dev 기본 I / O 방법에는 GUI 프롬프트를 통한 입력GUI 디스플레이를 통한 출력이 포함 됩니다 . OP가 표준을 무시하지 않는 한 유효합니다. 나는 명확히 할 것이다.
Esolanging 과일

2
더 많은 IO를 허용하도록 과제를 편집했지만 기본 IO 방법의 제한된 하위 집합으로 만 확장하고 있습니다. 이 답변은 내 하위 세트 내에 있습니다. 나는 그것을 좋아한다.
Jared K

19

POSIX 쉘 sh / bash / ... 8 바이트

저장:

dd>f

가져 오기:

dd<f

2
좋은 하나, 심지어 뛰는 cat...
cmaster

12

파이썬 3 , 46 바이트

저장, 45 바이트 :

open(*'fw').write('print(%r)'%open(0).read())

검색 프로그램은 이름이라는 파일 인 store 명령으로 빌드됩니다 f. ( 파일 이름은 1 바이트 )


2
확실하게 사용할 수 input()있습니까?
Artemis Fowl

@ArtemisFowl input()은 첫 번째 줄 바꿈까지만받습니다. STDIN 모두open(0).read 읽기
Jo King

상황이 여전히 모호한 경우 게시했을 수도 있지만이 답변은 현재 사양을 충족하지 않습니다. 원래 STDIN / STDOUT 요구 사항을 엄격하게 설정하고 기본값은 허용되지 않았습니다. 나는 그것을 확장했지만 기본값의 하위 세트로만 확장했습니다. 검색 프로그램이 STDOUT을 사용하지 않는 경우에도 화면에 출력을 표시해야합니다. 전체 기본값을 허용하면 모든 언어에 대한 솔루션은 '파일에 입력을받습니다', '파일에 출력을 제공합니다', 0 바이트입니다.
Jared K

@JaredK 나는 이것이 어떻게 작동하는지 잘 모른다고 생각합니다. store- 프로그램 표준 입력으로부터의 입력을 판독하고이 입력을 출력 파이썬 프로그램을 저장한다 f. 예 : STORE는 입력으로 호출됩니다 abc. 그런 다음 기록 print('abc')f. 이제 f(RETRIEVE)를 호출 abc하면 STDOUT으로 인쇄 됩니다.
ovs

@JaredK STORE가 RETRIEVE를 수정할 수 있는지 여부를 의견으로 물었습니다.
ovs


8

Powershell-4 바이트

저장:

ac

(대안도 sc)

검색

gc

편집 : 방금 출력에 사용자 입력이 허용되지 않는 것을 알았습니다 ... 그래서 4에서 6 또는 8 바이트로 이동합니다.

저장:

ac f

sc f8 바이트 버전의 경우 (대체 )

ac

f6 바이트 버전의 경우 경로로 지정하십시오.

검색

gc f

8

녹, 136 바이트

저장 (84 바이트)

use std::{fs::*,io::*};

||{let mut v=vec![];stdin().read_to_end(&mut v);write("a",v)}

검색 (52 바이트)

||print!("{}",std::fs::read_to_string("a").unwrap())

감사의 말


1
당신은에 가져 오기를 변경하여 바이트를 저장할 수 있습니다 use std::{io::*,fs::*}다음 사용하는 write대신 std::fs::write.
Esolanging 과일

어때요 write("a",String::from_iter(stdin().chars()))?
Bergi

@ 버기 니스. 그러나 chars트리거 error[E0658]: use of unstable library feature 'io'안정 녹에.
Jakob

chars()에 찬성하여 사용되지 않는 것 같습니다 String::from_utf8(stdin().bytes()). (또한 야간 문서를 사용
했는데 그것이

내가 가진 몇 가지 변화 시도 @Bergi bytes()또는 chars()하지만 반복자 항목에 싸여 있기 때문에 그들 중 누구도 매우 짧은 없었다 io::Result.
Esolanging 과일

8

세게 때리다, 12 11 10 바이트

저장, 7 6 5 바이트

cat ->f# 필요 없음 -, stdin이 기본값입니다

cat >f# 공간이 필요 없으며 >분리 가능

cat>f

검색, 5 바이트

cat f

1
-상점 프로그램에서 필요하지 않습니다 .
Konrad Rudolph

2
"cat"과 ">"사이에 공백이 필요 없습니다!
psmears

쓰기 및 사용을 위해 zsh 게시물과 동일한 작업을 수행 할 수 있어야합니다 >f. <f그래도 읽을 수 있는지 확실하지 않습니다 .
allo

@allo 적어도 Cygwin에서는 (존재하는 경우 파일 비우기, 존재하지 않는 경우 만들기) >f처럼 작동하지만 작동 echo '' > f하지 않는 <f것 같습니다.
sundar

7

HP 49G RPL, 48 바이트

저장하려면 : :2: A DUP PURGE STO26.5 바이트

복원하려면 : :2: A RCL21.5 바이트

백업 배터리를 그대로두면 다음과 같은 이점이 있습니다.

HP 49G RPL, 0 바이트

저장하려면 , 0 바이트

HP 49G는 재부팅시 스택을 그대로 유지하므로, 0 바이트 를 복원 합니다.


0 바이트 솔루션은 다양한 caluclators에 적합합니다. 집에 도착하면 42 대가 터질 것입니다.
SIGSTACKFAULT

제로 바이트 솔루션과 비파괴 적으로 재부팅하는 계산기에서 실행되는 다른 솔루션은 "두 개의 프로그램을 만들 것"이라는 질문의 두 부분을 충족시키지 못한다고 생각합니다. 당신이 가진 것은 재부팅 후에도 살아남는 단일 프로그램입니다. "스토어는 STDIN에서 읽은 다음 오류없이 종료됩니다 ." 프로그램은 여전히 ​​사용자가 키를 누를 때까지 기다리고 있습니다. 프로그램의 스택 및 실행 상태는 여전히 변경 가능합니다. 나는 그것이 여전히 실행 중이고 종료되지 않았다는 것을 의미한다고 생각합니다.
Jared K

@JaredK이 질문은 두 프로그램이 동일 할 수 없다고 규정하지 않았습니다. 종료 부분 : 전통적으로 프로그램에 대한 RPL 입력은 스택에 제공됩니다. 즉, 표준 입력.
Jason

1
스택이 전원을 껐다 켜도 유지됩니까? 아마도 계산기의 버튼을 통한 부드러운 전원 차단 일 수도 있지만 배터리를 제거하지는 않을 것입니다. 전원 사이클에 따라 다를 수 있습니다.
사용자

1
@user 아니요, 플래시 메모리 인 포트 2에 저장하는 것과 달리 스택은 소프트 (ON + C) 또는 하드 리셋 (ON + A + F) (소프트 파워 오프, 오른쪽 Shift + ON)과는 다릅니다. 소프트 및 하드 리셋에서도 유지됩니다). TI-BASIC 답변이 해당 정의를 사용하는 것처럼 보였으므로 완료를 위해 스택 답변을 포함 시켰습니다.
Jason

6

APL (APLX) , 5 바이트

상점 : ⍞⍈1
검색 :⍇1

 stdin
⍈1 write에서 파일 번호 1의 다음 사용 가능한 구성 요소로 줄 가져 오기

⍇1파일 번호 1  의 첫 번째 * 마지막 구성 요소 읽기

APLX 스토어 세션APLX 검색 세션

* 문서는 먼저 말 했지만 실험은 마지막 입니다.


6

bash, 10 바이트 (비경쟁)

touch $@
ls

유닉스 파일 이름 NUL and를 제외한 모든 문자 를 포함 할 수 있으며/ , 이름의 길이는 최대 255 바이트 일 수 있으므로 해당 길이까지만 문자열을 저장할 수 있으며 (저장 매체의 제한을 고려하여) '/ '에서 그들. 이것이 경쟁이 아닌 이유 중 하나이며, 다른 하나는 이것이 실행되는 디렉토리가 비어 있다고 가정하거나 외부 출력 ls이 허용 된다고 가정하기 때문 입니다. 정보를 저장하는 것이 멋지고 명백하지 않은 방법으로 보였기 때문에 여전히 이것을 게시하고 싶었습니다.

길이와 문자 제한이 같지 않은 비슷한 맥락의 다른 것은 다음과 같습니다.

35 33 바이트

mkdir -p $@
find|sed '$!d;s/..//'

이를 통해 /문자열 의 문자를 허용하고 더 많은 문자를 지원할 수 있습니다 (정확히 몇 개가 구현에 달려 있는지).

(@Cows quack 덕분에 이것에 2 바이트)


1
IIRC, 저는 버클리의 한 그룹이 1990 년대에 테이블 열 데이터를 파일 이름 (최대 255 자)으로 저장 한 데이터베이스 시스템을 만든 것으로 생각합니다. 행과 테이블이 부모 디렉토리라고 생각합니다.
David R Tribble

35 바이트 답변에서 두 번째 문을로 변경할 수 있습니다 s/..//. 는 $다른 모든 라인이 그래서 이것은 마지막 라인에 적용 할 수있는 삭제되기 때문에 필요하지 않습니다, 그리고는 ^대체가 첫 번째 경기에 적용되기 때문에 삭제 될 수 있습니다.
Kritixi Lithos

@Cowsquack 님. 변경 사항이 적용되는 이유를 설명해 주셔서 감사합니다.
sundar

당신은 사용할 필요 "$@"하지 $@공백에 의해 불에 점점 방지하기 위해 *, ?또는 ~문자.
Anders Kaseorg

5

파이썬 3, 56 바이트

저장 (33 바이트)

open(*'aw').write(open(0).read())

검색 (23 바이트)

print(open('a').read())

후행 줄 바꿈으로 인쇄합니다.


input()대신에 open(0).read()그리고 생략 end=하지 print?
MoxieBall

@MoxieBall 왜 input사용 되지 않았는지 확실 하지 않지만 생략 end=하면 문자열 끝에 새 줄이 추가됩니다 (예 : 원래 문자열이 아님)
NickA

@NickA 어쨌든, 그것은 개행이 질문에 인쇄 된 것처럼 보입니다. 그래서 나는 그것이 중요 하다고 생각 하지 않습니다 ...
MoxieBall

내가 미쳤거나 23 + 33 = 56 (54가 아님)입니까? 또한 왜 사용하지 input()않습니까?
Artemis Fowl

1
@ArtemisFowl 잘 잡았습니다. 에 관해서는 input, 유지할 문자열에 줄 바꿈이 포함될 수 있다고 가정합니다.
Jakob

4

apt, 46 30 바이트

-16는 덕분에 바이트 얽히고 설킨 .

처음으로 Japt를 사용해 보았습니다. JS eval은 때때로 까다로울 수 있습니다. 브라우저를 사용합니다 window.localStorage.

저장 (16 바이트)

Ox`lo¯lSÈSge.P=U

검색 (14 바이트)

Ox`lo¯lSÈSge.P

표준 파일 IO 이외의 다른 것을 처음 사용하는 것에 대해 +1을 좋아합니다.
Jared K

1
Japt에 오신 것을 환영합니다! :)
얽히고 설킨

1
그건 그렇고,를 사용 setItem하여 getItem완전히 우회 할 수 있습니다 localStorage.key. 값 설정 , 검색 값
Shaggy

@Shaggy 감사합니다! 당신은 또한 이상한 제어 문자를 피합니다.
LegionMammal978

4

하스켈, 46 바이트

저장 (26 바이트) :

getContents>>=writeFile"t"

검색 (20 바이트) :

readFile"t">>=putStr

3

루비 (26 바이트)

세트 (16 바이트)

IO.write'a',gets

가져 오기 (10 바이트)

IO.read'a'

3

MATLAB (30 바이트)

세트 (22 바이트)

a=input('','s');save a

로 변경하여 4 바이트를 줄일 수 input('')있지만 입력을 작은 따옴표로 묶어야합니다.'input string'

가져 오기 (8 바이트)

load a;a

3

C (GCC), 98 바이트

저장 (46 바이트)

입력은 첫 번째 명령 행 인수를 통해 이루어집니다.

main(c,v)char**v;{fputs(v[1],fopen("a","w"));}

검색 (52 바이트)

c,d;r(){for(d=open("a",0);read(d,&c,1);)putchar(c);}

휴대 불가

  • 에 맞는 몇 가지 포인터 유형이 필요합니다 int.

감사의 말


1
int암시 적 int fopen()으로 작동 하려면 포인터를 보유 할 수 있는 C 구현이 필요합니다 . (예를 들어 대부분의 32 비트 시스템이거나 gcc -m32x86-64를 사용하여 32 비트 실행 파일을 만드는 경우 사용 합니다.) 그리고 BTW는 Linux sendfilecopy_file_range(2)시스템 호출을 사용해 보았지만 TTY와는 작동하지 않습니다.
Peter Cordes

1
프로그램이 아닌 함수를 작성하고 있기 때문에 입력 문자열을 fputs(fopen()), 및을 허용하는 함수 인수로 사용하는 것이 정당 할 수 read(open(),buf,-1)있습니다. (질문은 이제 명령 줄 인수를 입력으로 허용합니다.)
Peter Cordes

Linux '스플 라이스'기능은 파이프에서 파일로 (또는 그 반대로) 복사합니다. stdin / out이 파이프 인 경우 더 많은 매개 변수를 희생하여 함수 호출을 저장합니다.
CSM


2

R (27 바이트)

저장 (21 바이트)

x=readLines('stdin')

로드 (6 바이트)

cat(x)

이 작업을 위해, 첫 번째 스크립트는 명령 줄 옵션을 사용하여 호출해야 --save하고,와 두 번째 --restore(:이 옵션은 기본입니다 대화 형 모드에서이 필요하지 않습니다하지만).

R의 버그로 인해 기본 인수가 readLine비 대화식 모드에서 작동 하지 못하기 때문에 7 바이트 단축 될 수 있습니다 . 대화식 모드에서는 필요 하지 않으므로 솔루션은 20 바이트 만 사용 합니다 .


1
q첫 번째 프로그램 x=scan(); q("y")과 두 번째 프로그램 중 하나를 사용 x하거나 cat(x)문자열을 인쇄하는 방법에 대해 얼마나 엄격한 지에 따라 직접 사용하는 것이 훨씬 효율적이라고 생각합니다 . 일반적인 코드 골프 규칙에 따라 명령 줄 인수도 세어야합니다. 따라서 바이트를 추가 --save하고 --restore(내 공식이 필요하지 않은)
JDL

@JDL scan은 임의의 내용에 대해 작동하지 scan(w='character')않으며보다 깁니다 readLines(). q불필요합니다 (그러나 q('y')작동하지 않으므로 철자를 입력해야합니다 yes). 나는 x두 번째 프로그램 에서만 사용 하는 것에 대해 생각 했지만 요구 사항을 이해하는 한 요구 사항을 위반합니다.
Konrad Rudolph

1
을 사용할 수 scan(w="")있으며 유형을 철자 할 필요가 없으며 scan지정된 인수 유형에서 유추합니다. 나를 위해, q ( "y")는 저장 유도 종료로 작동하지만 아마도 R 버전과 Rstudio 사용 여부에 따라 다릅니다.
JDL

@JDL scan: 아, 깔끔하다. 문서에는 이것을 언급하지 않았다! 불행히도 scan여전히 일부 구문 분석을 수행하므로 모든 입력에서 작동하지 않습니다. 어쨌든와 scan('stdin',w='')정확히 같은 길이 readLines('stdin')입니다. q: R 3.4.4에“q ( "y") 오류 : 인식 할 수없는 'save'값 "이라고 표시되어 있습니다.
Konrad Rudolph

아, 그것은 Rstudio 일입니다. 저는 Rstudio와 터미널에서 별도로 시도했지만 Rstudio에서만 작동했습니다.
JDL

2

자바 (JDK 10) , 204 바이트

경고 : 모든 Java 프로그램이 사용자 이름에 저장 한 기본 설정을 덮어 씁니다!

저장, 94 바이트 :

interface S{static void main(String[]a){java.util.prefs.Preferences.userRoot().put("",a[0]);}}

온라인으로 사용해보십시오!

110 바이트를 검색합니다 :

interface R{static void main(String[]a){System.out.print(java.util.prefs.Preferences.userRoot().get("",""));}}

온라인으로 사용해보십시오!

java S foo
java R
foo

이것은 입력을 arg로 가져 와서 java.util.prefs가 제공하는 사용자 환경 설정 backing-store에 저장하여 작동 합니다. 노드 이름을 지정할 때 1 바이트를 저장하기 위해 사용자의 루트 노드를 덮어 씁니다. 비파괴 적으로 테스트하려는 경우, 무시한 사용자 이름으로 실행하거나 키를 ""에서 노드 이름으로 변경하십시오.


좋은 생각! Java 10을 사용하고 있으므로 람다 식을 만들어서 단축시킬 수 있습니다. 또한 바이트 수에 포함되지 않은 z경우 프로그램 및 TIO에서 제거해야합니다. 사람들에게 경고하기 위해 제출 맨 위에 경고를하는 것을 고려하십시오. TIO에는 94 바이트 및 110 바이트 솔루션이 있어야합니다.
Jakob

감사! 제안한 내용을 수정했습니다. 확실하지는 않지만 람다 식이이 질문에 대한 사용자 지정 IO 규칙을 충족시킬 수 있다고 생각하지 않습니다.
Jared K

도 네 말이 맞아 잊어 버렸어
Jakob

2

C #, 157 바이트

세트, 74 바이트 :

class P{static void Main(string[]a){System.IO.File.WriteAllLines("a",a);}}

받기, 83 바이트 :

class P{static void Main(){System.Console.Write(System.IO.File.ReadAllText("a"));}}

VisualMelon 덕분에 -1 바이트
LiefdeWen 덕분에 -2 바이트


후에 그 공간을 제거하고 "a",, 이것이
이길

WriteAllLines및 두 번째 매개 변수 를 사용하여 다른 바이트를 절약 할 수 있습니다a
LiefdeWen

2

펄 5, 48 26 23 바이트

쓰기, 20 + 1 (-n) 바이트

mob 덕분에 -3 바이트

open f,">>f";print f

실제로이 점에 대해서는 확실하지 않지만 기준을 충족시킵니다. 지난 항목의 경우 cli 옵션 만 계산되었으므로 이것이 내가 함께하는 것입니다.

읽기, 0 + 2 바이트

perl -pe "" f

1
왜 점수 않은 -ne1 (그것은이 있어야 e하지만, 너무) -pe2? 대신 -Esay을 사용할 수 있습니다 print.
simbabque

에 대해 알려 주셔서 감사합니다 -E. 그 점에 익숙하지 않았습니다. 왜 내가 가지 않은 -ne이유는 그 파일이기 때문에 실제로 파일에서 실행 중이기 때문입니다. 같은, 그것은 보일 것 perl -n w.pl이 비록 PCG 커뮤니티 표준에 반하는 경우에, 나는 그에 따라 내 대답을 편집 할 수 있습니다.
Geoffrey H.

아냐 괜찮아 여분의 명령 줄 인수에 대한 맬 러스를 추가하므로 괜찮습니다.
simbabque

2
">>","f"-> ">>f"3 문자를 저장합니다
mob

1

첨부 , 23 + 16 = 39 바이트

STDIN을 파일에 쓴 A다음 파일을 읽습니다 A.

store.@:

$A&FileWrite!AllInput[]

retrieve.@:

Echo!FileRead!$A

테스팅

C:\Users\conorob\Programming\attache (master -> origin)
λ echo testing | attache store.@

C:\Users\conorob\Programming\attache (master -> origin)
λ attache retrieve.@
testing

1

루아, 57 53 51 바이트

저장, 27 바이트

io.open("x","w"):write(...)

24 바이트 검색

print(io.open"x":read())

1

루비

저장 (24 바이트)

File.write('a', ARGV[0])

검색 (16 바이트)

p File.read('a')

4
이 질문은 논쟁이 아니라 STDIN으로부터 입력을 저장하도록 요구합니다
Ferrybig

이후 인수를 포함하여 IO 대체를 허용하도록 편집했습니다.
Jared K

1
File.write'a',gets그리고 p File.read'a'조금 더 짧습니다;)
DarkWiiPlayer

1

C (Unix / GNU), 23 + 23 = 46 바이트

저장, 27 23 바이트

main(){system("dd>f");}

검색, 27 23 바이트

main(){system("dd<f");}

이것은 기본적으로 jofel의 답변 을 C 프로그램 으로 래핑 합니다.

참고 :이 dd명령은에 일부 통계를 출력 stderr하므로 셸에서 순진하게 실행할 때 추가 출력이 표시됩니다. 도전은 저장된 문자열에 제시해야합니다 있다고 때문에, stdout하지 stderr, 나는에 추가 출력을 가질 수 있음을 가져 stderr... 어쨌든, 억제 stderr출력하는 교체하는 것만 큼 쉽습니다 ddcat의 바이트 수를 증가 각각 두 개의 프로그램.


컴파일러에 따라에서 int반환 유형 을 제거 할 수도 있습니다 main. 이전 ANSI C 스타일 int은 기본 반환 유형입니다.
Jakob

@Jakob 아, 물론입니다. 나는 암시 적 선언에 대해 암묵적으로 의지하고 그 선언을 system()잊었다 main(). 지적 해 주셔서 감사합니다 :-)
cmaster

1

PHP, 26 + 1 + 21 = 48 바이트

Store.php :

<?fputs(fopen(s,w),$argn);

로 실행하십시오 echo <input> | php -nF Store.php.

Retrieve.php :

<?=fgets(fopen(s,r));

로 실행하십시오 php -n Retrieve.php.


1

C (gcc) , 77 67 + 25 = 92 바이트

내 gcc에 대해 몇 가지 경고만으로 컴파일합니다.

store.c

#include<stdio.h>
main(int c,char**v){fputs(v[1],fopen("f","w"));}

아마도 포함을 골라 낼 수는 있지만 어떻게 알아낼 수 없었습니다. Segfaults는 아무것도 전달하지 않으면 무엇이든 전달합니다.

피터 코 데스 : -1

read.c

main(){system("cat f");}

int*f=fopen작동해야합니다. 즉 포인터 유형에 대해 컴파일러에게 거짓말하십시오. 그러나 32 비트 시스템 (즉 int, 포인터를 보유 할 수있는 시스템 gcc -m32또는 gcc완전 32 비트 시스템에서 컴파일 할 수있는 시스템)을 위해 컴파일하는 경우에만 가능합니다 . main을 선언 main(int c,char**v)하거나 int**v역 참조하지 않았을 수도 있습니다.
Peter Cordes

main(int c,char**v)작품. 나는 또한 fputs(v[1],fopen("f","w")어떤 이유로 여전히 stdio가 필요하지만 할 수 있음을 깨달았습니다 .
SIGSTACKFAULT

32 비트 실행 파일을 컴파일하면 작동합니다. x86-64의 경우 컴파일러는 int반환 값을 32 비트로 자른 다음 포인터로 부호 확장합니다. 리턴 된 FILE*비트 수가 32 비트 인 경우 작동하지만 x86-64 Linux에서는 그렇지 않습니다.
Peter Cordes

모든 포인터의 크기가 같은 시스템에있는 경우 fopen수동으로 선언하여 포함을 피할 수 있습니다. 인수와 함께 구식 학교를 가면 바이트도 절약 *fopen();main(c,v)int**v;{fputs(v[1],fopen("f","w"));}됩니다.
gastropner

1

배치-11 바이트

%12>f
type f

입력은 명령 행 인수로 수신되고 (CMD가 매개 변수를 실행하려고 시도하므로 실행 시도시 작성된 오류 메시지와 함께)에 지속됩니다 f.


배치-7 바이트 (비경쟁)

'>%1
dir

파일 이름에 유효하지 않은 문자가 너무 많으므로 일부 문자열에서는 작동하지 않지만 본질적으로 매개 변수가 제공하는 파일 이름에 임의의 문자를 저장합니다. 그것을 읽으려면 문자열을 포함하여 디렉토리의 모든 파일을 나열합니다.


1
솔루션이 STDOUT에서 출력 된 것으로 보이며 이는 유효합니다. STDERR은 다른 옵션 일 뿐이며 필수는 아닙니다. 입력 주위의 따옴표는 경쟁에서 멈추지 않습니다. 유일한 질문은 바이트 수로 계산 해야하는지 여부입니다. 나는 그들이 질문에 구체적이지 않기 때문에 그렇지 않다고 생각합니다. Batch가 표준 명령 줄 플래그를 필요로하는 언어와 크게 다르지 않은 명령 줄 인수를 취하는 표준 상용구처럼 보입니다. 아마도 Batch 지식을 가진 다른 누군가가 들릴 것입니다. 지금은 바이트 수에서 제외하십시오. Code Golf에 오신 것을 환영합니다! :)
Jared K
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.