Código mais curto do seu idioma para persistir uma cadeia de caracteres durante uma reinicialização


48

Seus programas:

Você escreverá dois programas (ambos no mesmo idioma). O programa de armazenamento pega uma sequência de STDIN e a armazena em algum lugar persistente (veja abaixo) e sai sem erro. O programa de recuperação não recebe entrada, recupera a sequência que foi armazenada e a imprime em STDOUT.

Teste objetivo de persistência:

Você deve poder executar o programa de armazenamento em sua máquina local, depois ligar e ligar a máquina local e depois chamar o programa de recuperação em sua máquina local. Você pode esconder a string da maneira que desejar (mesmo na Web), desde que passe no teste de reinicialização.

Casos de teste:

Armazenamento e recuperação:

echo foo | Store
Retrieve
foo

Lojas repetidas devem substituir (como um método set ()):

echo foo | Store
echo bar | Store
Retrieve
bar

A recuperação repetida não é destrutiva (como um método get ()):

echo foo | Store
Retrieve
foo
Retrieve
foo

Recuperação antes de qualquer invocação do Armazenamento:

Você não precisa se preocupar com isso. Seu programa de recuperação pode assumir que o programa de armazenamento foi executado em algum momento no passado.

Flexibilidade de entrada / saída.

As pessoas me pediram para expandir isso de STDIN / STDOUT estrito para as regras de IO padrão. Não posso, porque introduziria muitas brechas. Algumas opções de IO padrão já têm a entrada armazenada de maneira persistente, por exemplo, "programas podem receber entrada de um arquivo". Eu gostaria de ser mais flexível do que apenas STDIN e STDOUT, mas sem abrir as comportas.

No segmento de regras de IO padrão, eu estou escolhendo aqueles que não quebram o desafio:

Se você usar uma alternativa, ela deve ser interativa. O usuário não deveria ter que fazer nenhum outro trabalho além de canalizar a entrada para o seu programa, digitando-a em um prompt fornecido pelo programa ou digitando a entrada como um argumento de linha de comando do seu programa. O usuário não precisa fazer nada além de executar o programa de recuperação para ver a saída exibida na tela ou enviada para STDOUT ou STDERR.

Premissas permitidas:

  • Seus dois programas serão executados no mesmo diretório
  • Seus programas têm permissões de leitura e gravação para esse diretório
  • Os arquivos criados sobreviverão à reinicialização (não em um diretório temporário)
  • Uma nova linha à direita que não fazia parte da sequência é permitida. Nenhum outro espaço em branco à direita

Isso é código-golfe, e sua pontuação é a soma de bytes dos dois programas.


9
tão justo echo $@>xe cat xé válido?
Adám

11
Sua especificação não menciona a capacidade de armazenar várias vezes, mas você tem um exemplo de caso. Podemos assumir um ambiente limpo para cada chamada de Store?
Adám

4
@EriktheOutgolfer Por que não seria válido? Mesmo se houver uma brecha discutida na meta que não impeça um desafio de permitir especificamente.
dylnan

6
As restrições da Web geralmente tratam de extrair coisas da Web como uma brecha para sair do trabalho de criar essas coisas. Nesse caso, se estiver na Web, é porque você fez o trabalho de colocá-lo lá.
Jared K

3
Alguém precisa escrever uma resposta para um computador com memória de núcleo magnético.
Mark

Respostas:


88

zsh, 4 bytes

Armazenar: >f(lê de STDIN e grava em um arquivo chamado f)
Recuperar: <f(grava o conteúdo de fem STDOUT)


8
Acho que temos um vencedor.
Adám

@ Adám a menos que haja um token para entrada de gravação para arquivo em 1 byte: P
FreezePhoenix

11
@FreezePhoenix Não há provavelmente nenhum a menos que você escrever uma nova linguagem agora que não é permitido ...
Cromo

4
@Chromium check Z80 answer: alguns idiomas existentes podem gravar a partir de um programa de 0 bytes.
Cœur

55

TI-BASIC (Z80), 1 byte ?

Armazenar:  (basta digitar a sequência)
Recuperar: Ans(byte 27)

Mas se isso não for válido:

TI-BASIC (Z80), 7 6 bytes

-1 graças a Jakob.

Armazenar: Prompt Str0(bytes DD AA 09)
Recuperar: disp Str0(bytes ED AA 09)


11
Tem certeza de que são 5 bytes?
FreezePhoenix

6
O @FreezePhoenix TI-Basic usa tokens.
Adám

3
Hmm ... Por que não aceitar Anse persistir na mesma variável? Um programa de armazenamento vazio e apenas Anspara recuperação deve funcionar: 1 byte!
Jakob

9
@ Arthur Sim, Anspersiste. De fato, muitos estados persistem, incluindo (acho) todas as variáveis, equações e histórico do usuário. Do ponto de vista do usuário, desligar é basicamente o equivalente da calculadora da TI a um estado de suspensão para um PC, para que não atrapalhe muito.
214 Jakob Jakob

2
@JaredK Eu definitivamente concordo que a solução de 1 byte cheira a abuso de regras (mesmo que eu tenha sugerido isso). No entanto, eu diria que o programa de armazenamento é encerrado, pois outros programas podem ser executados depois dele (embora eles interfiram na operação da solução). Minha interpretação do seu "teste objetivo de persistência" foi que os programas seriam executados diretamente antes e depois do ciclo de energia. Se isso estiver incorreto, talvez você possa exigir que a solução de 1 byte seja marcada como não competitiva?
21418 Jakob

23

JS do navegador, 44 bytes

Loja :

localStorage.a=prompt()

Recuperar :

alert(localStorage.a)

Vai prompt()ler do STDIN?
pipe

9
Um navegador gráfico possui um STDIN? Não. prompt()Exibe um alerta que solicita a inserção de texto e retorna o resultado.
Dev

5
@ Dev É claro que um navegador gráfico possui um STDIN, assim como qualquer outro processo. Se você não pode usá-lo em um idioma específico, é outra pergunta e se a resposta for "Não", talvez eu possa ser usado nesse desafio.
pipe

5
@Dev Os métodos de E / S padrão incluem entrada via prompt da GUI e saída via exibição da GUI . A menos que o OP pretenda substituir o padrão, isso deve ser válido. Eu vou esclarecer.
Esolanging Fruit

2
Editei o desafio para permitir mais IO, mas só o estou expandindo para um subconjunto limitado dos métodos de IO padrão. Esta resposta está dentro do meu subconjunto. Eu gosto disso.
Jared K

19

Shell POSIX sh / bash / ... 8 bytes

loja:

dd>f

pegue:

dd<f

2
Nice one, bate mesmo cat...
cmaster

12

Python 3 , 46 bytes

armazenamento, 45 bytes:

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

O programa de recuperação é construído pelo comando loja, um arquivo chamado f. ( 1 byte para o nome do arquivo )


2
Certamente você pode usar input()?
Artemis Fowl

O @ArtemisFowl input()recebe apenas até a primeira nova linha. open(0).readtudo STDIN
Jo King

Você provavelmente postou quando as coisas ainda eram ambíguas, mas essa resposta não atende às especificações atuais. Originalmente, eu pretendia que o requisito STDIN / STDOUT fosse rigoroso, com padrões não permitidos. Eu o expandi, mas apenas para um subconjunto dos padrões. Seu programa de recuperação, se não usar STDOUT, ainda precisará exibir a saída na tela. Se eu permitisse os padrões completos, a solução para cada idioma seria 'recebe entrada em um arquivo', 'fornece saída em um arquivo', zero bytes.
Jared K

@ JaredK Eu não acho que você entenda como isso funciona. O storeprograma-lê a entrada do STDIN e, em seguida, armazena um programa Python que imprime essa entrada f. Exemplo: STORE é chamado com uma entrada de abc. Em seguida, escreve print('abc')para f. Se você ligar agora f(RETRIEVE), ele será impresso abcem STDOUT.
ovs 24/07

@JaredK Perguntei a você em um comentário se era permitido ao STORE modificar RETRIEVE.
ovs 24/07


8

Powershell - 4 bytes

Armazenamento:

ac

(alternativa também sc)

Recuperação

gc

Edit: Acabei de notar que a saída não é permitida nenhuma entrada do usuário ... por isso salta de 4 para 6 ou 8 bytes

Armazenamento:

ac f

(alternativa também sc f) para a versão de 8 bytes

ac

(e especifique fcomo caminho) para a versão de 6 bytes

Recuperação

gc f

8

Ferrugem, 136 bytes

Armazenar (84 bytes)

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

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

Recuperar (52 bytes)

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

Agradecimentos


11
Você pode salvar um byte alterando a importação para use std::{io::*,fs::*}e, em seguida, usando em writevez de std::fs::write.
Esolanging Fruit

Que tal write("a",String::from_iter(stdin().chars()))?
Bergi 08/07/19

@Bergi Nice. Mas charsdesencadeia error[E0658]: use of unstable library feature 'io'uma ferrugem estável.
Jakob

Parece que chars()foi preterido em favor de String::from_utf8(stdin().bytes()). (Também eu usei os docs noturnos, não tenho certeza se isso é o culpado)
Bergi

@ Bergi Tentei algumas variações com bytes()ou chars()nenhuma delas era muito curta porque o item do iterador está envolvido io::Result.
Esolanging Fruit

8

Bater, 12 11 10 bytes

loja, 7 6 5 bytes

cat ->f# não há necessidade -, stdin é o padrão

cat >f# não há necessidade de espaço, >separa também

cat>f

recuperar, 5 bytes

cat f

11
Não há necessidade -no programa da loja.
21978 Konrad Rudolph

2
Também não é necessário o espaço entre "gato" e ">"!
Psmears

Você deve fazer o mesmo que na publicação do zsh para escrever e usar >f. Não tenho certeza se <fé válido para leitura, no entanto.
allo

@allo Pelo menos no Cygwin, >ffunciona como echo '' > f(esvaziar o arquivo, se existir, criar, se não existir), enquanto <fparece não funcionar.
Sundar

7

HP 49G RPL, 48 bytes

Para salvar :2: A DUP PURGE STO:, 26,5 bytes

Para restaurar :2: A RCL:, 21,5 bytes

Se pudermos deixar a bateria de reserva, obteremos:

HP 49G RPL, 0 bytes

Para salvar :, 0 bytes

Para restaurar :, 0 bytes, uma vez que o HP 49G deixa a pilha intocada nas reinicializações.


A solução de byte zero deve funcionar para uma variedade de calucladores. Vou perder 42 anos quando chegar em casa.
SIGSTACKFAULT

Acho que sua solução de zero byte e as demais executadas em calculadoras que são reinicializadas de maneira não destrutiva estão falhando em atender duas partes da pergunta: "Você fará dois programas". O que você tem é um único programa que sobrevive à reinicialização. E "A loja lê STDIN e sai sem erro". Seu programa ainda está esperando o usuário pressionar uma tecla. A pilha e o estado de execução do seu programa ainda são mutáveis. Acho que isso significa que ainda está em execução e não saiu.
Jared K

@JaredK A questão nunca estipulou que os dois programas não pudessem ser idênticos. Quanto à parte existente: tradicionalmente na entrada RPL para programas é fornecida na pilha. Essa é a entrada padrão.
Jason

11
A pilha sobreviveria a um ciclo de energia? Talvez um desligamento suave através dos botões da calculadora, mas acho que não estou removendo a bateria. Talvez isso dependa do que é um ciclo de energia.
usuário

11
@user Não, a pilha não sobrevive à reinicialização suave (ON + C) ou reinicialização total (ON + A + F) (diferente do desligamento suave, Shift + ON), ao contrário do armazenamento na porta 2, que é a memória flash ( e sobrevive a reinicialização suave e física). Como a resposta do TI-BASIC parecia usar essa definição, incluí a resposta da pilha para completar.
Jason

6

APL (APLX) , 5 bytes

Loja: ⍞⍈1
Recupere:⍇1

 obter linha da
⍈1 gravação stdin para o próximo componente disponível do número de arquivo 1

⍇1 leia o primeiro * último componente do número de arquivo 1

Sessão da loja APLXSessão de recuperação do APLX

* A documentação diz primeiro, mas a experimentação mostra por último .


6

bash, 10 bytes (não concorrente)

touch $@
ls

Os nomes de arquivos Unix podem conter qualquer caractere, exceto NULe /, e seus nomes podem ter até 255 bytes de comprimento, portanto, será possível armazenar apenas cadeias de caracteres com esse comprimento (considere uma limitação do meio de armazenamento) e que não contenham '/ ' neles. Essa é uma razão pela qual não é concorrente; outra é que isso pressupõe que o diretório em que está sendo executado esteja vazio (ou que saída estranha lsseja permitida). Eu ainda queria postar isso porque parecia uma maneira legal e não óbvia de armazenar informações.

Outro na mesma linha, que não teria as mesmas limitações de comprimento e caráter, seria:

35 33 bytes

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

Isso permite o /caractere na string e suporta muitos outros caracteres (exatamente quantos dependem da implementação).

(-2 bytes sobre isso graças ao charlatão @ Vacas)


11
Para o IIRC, acredito que um grupo em Berkeley já criou um sistema de banco de dados nos anos 90 que armazenava dados da coluna da tabela como nomes de arquivos (até 255 caracteres). Eu acho que as linhas e tabelas eram diretórios principais.
David R Tribble

Na sua resposta de 35 bytes, você pode alterar a segunda instrução para s/..//. Não $é necessário porque todas as outras linhas são excluídas, portanto, isso só pode ser aplicado à última linha e ^pode ser descartado porque a substituição é aplicada apenas na primeira correspondência.
Kritixi Lithos

@Cowsquack Done. Obrigado por explicar por que a mudança também funciona.
Sundar

Você precisa usar "$@", não $@, para evitar queimaduras por espaços em branco, *, ?, ou ~caracteres.
Anders Kaseorg

5

Python 3, 56 bytes

Armazenar (33 bytes)

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

Recuperar (23 bytes)

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

Imprime com uma nova linha à direita.


por que não input(), em vez de open(0).read()e omitir end=a partir de print?
MoxieBall

@MoxieBall Não tenho certeza por que inputnão foi utilizado, mas omitindo end=resultaria em uma nova linha que está sendo adicionado ao final da cadeia (ou seja, não a string original) (talvez)

@NickA Parece que uma nova linha será impresso na pergunta, de qualquer maneira, então eu não acho que deveria importar ...
MoxieBall

Eu fiquei louco ou 23 + 33 = 56 (não 54)? Também porque não usar input()?
Artemis Fowl

11
@ArtemisFowl Good catch. Quanto a input, suponho que a string a persistir possa conter novas linhas.
Jakob

4

Japonês, 46 30 bytes

-16 bytes graças a Shaggy .

Uma das primeiras vezes que tentei usar o Japt. O JS eval pode às vezes ser inquieto. Usa o navegador window.localStorage.

Armazenar (16 bytes)

Ox`lo¯lSÈSge.P=U

Recuperar (14 bytes)

Ox`lo¯lSÈSge.P

+1 por ser o primeiro a usar algo diferente de E / S de arquivo padrão.
Jared K

11
Bem-vindo ao Japt! :)
Shaggy

11
A propósito, você pode ignorar setIteme getItemcompletamente com localStorage.key. Definir valor , recuperar valor
Shaggy

@ Shaggy Thanks! O seu também evita os caracteres de controle mais estranhos.
LegionMammal978

4

Haskell, 46 bytes

Armazenar (26 bytes):

getContents>>=writeFile"t"

Recuperar (20 bytes):

readFile"t">>=putStr

3

Ruby (26 bytes)

Conjunto (16 bytes)

IO.write'a',gets

Obter (10 bytes)

IO.read'a'

3

MATLAB (30 bytes)

Conjunto (22 bytes)

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

Pode cortar 4 bytes alterando para input(''), mas isso exigirá que a entrada esteja entre aspas simples:'input string'

Obter (8 bytes)

load a;a

3

C (GCC), 98 bytes

Armazenar (46 bytes)

A entrada é via primeiro argumento de linha de comando.

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

Recuperar (52 bytes)

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

Inportabilidade

  • Requer que vários tipos de ponteiros se encaixem int.

Agradecimentos


11
Isso requer uma implementação C, onde intpode conter um ponteiro, para que a declaração implícita de int fopen()funcione. (por exemplo, a maioria dos sistemas de 32 bits ou use gcc -m32se você estiver no x86-64 para tornar um executável de 32 bits.) E, BTW, tentei usar as chamadas do Linux sendfilee do copy_file_range(2)sistema, mas elas não funcionam para / de um TTY.
Peter Cordes

11
Como você está escrevendo funções, não programas, talvez você possa justificar tomar a string de entrada como uma função que permite fputs(fopen()), e read(open(),buf,-1). (A questão agora permite uma arg-linha de comando como entrada.)
Pedro Cordes

A função 'splice' do Linux copia de um canal para um arquivo (e vice-versa). Se stdin / out forem pipes, ele salvará uma chamada de função, à custa de mais parâmetros.
CSM

2

APL (Dyalog Unicode) , 18 bytes

Loja: ⍞⎕NPUT⎕A 1 Experimente online!
Recuperar: ⊃⎕NGET⎕A Experimente online!

 get line from stdin
⎕NPUT coloque-o em um arquivo nativo chamado
⎕A alfabeto maiúsculo 1 e sobrescreva se o arquivo existir

 a primeira parte (os dados, as próximas partes são do tipo de codificação e final de linha) de
⎕NGET obter o arquivo nativo com
⎕A o alfabeto maiúsculo


2

R (27 bytes)

armazenamento (21 bytes)

x=readLines('stdin')

carga (6 bytes)

cat(x)

Para que isso funcione, o primeiro script precisa ser chamado com a opção de linha de comando --savee o segundo com --restore(embora no modo interativo isso não seja necessário: essas opções são o padrão).

Isso poderia ser reduzido em 7 bytes, não fosse o fato de um bug no R impedir o argumento padrão de readLinefuncionar no modo não interativo. No modo interactivo, que é não necessário, e a solução, por conseguinte, utiliza apenas 20 bytes .


11
Eu acho que seria muito mais eficiente usar qdiretamente, com o primeiro programa sendo x=scan(); q("y")o segundo xou cat(x)dependendo ou quão rigorosos queremos ser sobre como as strings são impressas. Pelas regras habituais de golfe código também deve contar argumentos de linha de comando, de modo add bytes para --savee --restore(que minha formulação não precisa)
JDL

O @JDL scannão funciona com conteúdo arbitrário e scan(w='character')é maior que readLines(). qé desnecessário (mas q('y')não funcionaria, você deve soletrar yes). Pensei em usar xno segundo programa, mas isso violaria os requisitos, tanto quanto eu os entendo.
21978 Konrad Rudolph

11
você pode usar scan(w=""), não precisa especificar o tipo, scandeduzirá a partir do tipo de argumento especificado. Para mim, q ("y") funciona como uma saída indutora de economia, mas talvez isso dependa da sua versão do R e, possivelmente, se você estiver usando o Rstudio ou não.
JDL

@JDL scan: Oh, pura, a documentação não menciona isso! Infelizmente scan, ainda será realizada uma análise para que isso não funcione com todas as entradas. De qualquer forma, scan('stdin',w='')passa a ter exatamente o mesmo comprimento que readLines('stdin'). q: R 3.4.4 diz “Erro em q (" y "): valor não reconhecido de 'save'”.
21978 Konrad Rudolph

Ah, é uma coisa do Rstudio - tentei no Rstudio e separadamente no terminal e funcionou apenas no Rstudio.
JDL

2

Java (JDK 10) , 204 bytes

Aviso: Substitui as preferências que os programas java armazenaram para o seu nome de usuário!

Loja, 94 bytes:

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

Experimente online!

Recupere 110 bytes:

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

Experimente online!

java S foo
java R
foo

Isso funciona usando a entrada como argumento e armazenando-a no repositório de preferências do usuário fornecido pelo java.util.prefs . Ele substitui o nó raiz do usuário para economizar um byte ao nomear um nó. Se você quiser testá-lo de forma não destrutiva, execute-o com um nome de usuário descartável ou altere a chave de "" para o nome do nó.


Boa ideia! Como você está usando o Java 10, é possível reduzi-los, tornando-os expressões lambda. Além disso, se sua contagem de bytes não incluir, zvocê deverá removê-la dos programas e do TIO. Considere colocar um aviso na parte superior do envio para avisar as pessoas. Com certeza, o TIO deve ter suas soluções de 94 e 110 bytes.
21418 Jakob

Obrigado! Fiz suas edições sugeridas. Não tenho certeza, mas acho que as expressões lambda podem cumprir as regras de E / S personalizadas para esta pergunta.
Jared K

D'oh. Você está certo, eu esqueci disso.
21918 Jakob

2

C #, 157 bytes

Conjunto, 74 bytes:

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

Obter, 83 bytes:

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

-1 Bytes graças ao VisualMelon
-2 Bytes graças ao LiefdeWen


Remova o espaço depois "a",, e eu duvido que isso vai ser batido :)
VisualMelon

Você pode salvar outro byte usando WriteAllLinese o segundo parâmetroa
LiefdeWen

2

Perl 5, 48 26 23 bytes

Gravação, 20 + 1 (-n) bytes

-3 bytes graças ao mob

open f,">>f";print f

Na verdade, não tenho certeza sobre isso, mas atende aos critérios. Para entradas passadas, apenas as opções cli foram contadas, e é com isso que eu vou.

Leitura, 0 + 2 bytes

perl -pe "" f

11
Por que você marcou -necom 1 (também deveria ter e), mas -pecom 2? Você poderia usar -Ee em sayvez de print.
Simbolque

Obrigado por me informar -E, eu não estava familiarizado com isso. Quanto ao motivo de eu não ter concordado -ne, é porque, nesse caso, estou na verdade executando a partir de um arquivo. Portanto, parece que, perl -n w.plse isso for contra os padrões da comunidade PCG, posso editar minha resposta de acordo.
Geoffrey H.

Não, está bem. Nós adicionamos um malus para argumentos extras da linha de comando, então tudo bem.
Simbolque

2
">>","f"-> ">>f"salva 3 char
mob

1

Anexo , 23 + 16 = 39 bytes

Simplesmente escreve STDIN no arquivo Ae depois lê o arquivo A.

store.@:

$A&FileWrite!AllInput[]

retrieve.@:

Echo!FileRead!$A

Testando

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

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

1

Lua, 57 53 51 bytes

Armazenar, 27 bytes

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

Recuperar, 24 bytes

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

1

RUBI

Armazenar (24 bytes)

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

Recuperar (16 bytes)

p File.read('a')

4
A pergunta para o armazenamento de entrada de STDIN, não os argumentos
Ferrybig

Desde então, editei para permitir alternativas de E / S, incluindo argumentos.
Jared K

11
File.write'a',getse p File.read'a'são um pouco mais curtos;);
DarkWiiPlayer 07/07

1

C (Unix / GNU), 23 + 23 = 46 bytes

Loja, 27 23 bytes

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

Recuperar, 27 23 bytes

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

Isso basicamente envolve a resposta de Jofel em um programa em C.

Nota: Os ddcomandos emitem algumas estatísticas para stderr, portanto, você verá alguma saída adicional quando executá-la ingenuamente no shell. No entanto, uma vez que o desafio só diz que a corda armazenado deve ser apresentado em stdout, não stderr, eu levá-la de que está autorizado a ter saída adicional em stderr... De qualquer forma, suprimindo stderrsaída é tão fácil como a substituição ddcom cat, aumentando a contagem de bytes do dois programas por um, cada um.


Dependendo do seu compilador, você também poderá remover o inttipo de retorno main. No estilo ANSI C antigo, inté o tipo de retorno padrão.
21418 Jakob

@ Jakob Ah, sim, é claro. Confiei na declaração implícita system()e esqueci-me da de main()- ai. Obrigado por apontar isso :-)
cmaster

1

PHP, 26 + 1 + 21 = 48 bytes

Store.php:

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

Corra com echo <input> | php -nF Store.php.

Retrieve.php:

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

Corra com php -n Retrieve.php.


1

C (gcc) , 77 67 + 25 = 92 bytes

Compila com apenas alguns avisos no meu gcc.

store.c

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

Provavelmente posso jogar fora o include, mas não consegui descobrir como. Segfaults se você não passar nada, mas tanto faz.

Peter Cordes: -1

read.c

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

int*f=fopendeve funcionar, ou seja, minta para o seu compilador sobre o tipo de ponteiro. Mas somente se você compilar para um sistema de 32 bits (por exemplo, um onde intpossa reter um ponteiro, como gcc -m32, ou apenas gccem um sistema totalmente de 32 bits). Você também pode declarar main como main(int c,char**v), ou talvez int**vporque não esteja fazendo o cancelamento da referência.
Peter Cordes

Os main(int c,char**v)trabalhos. Também percebi que posso fazer fputs(v[1],fopen("f","w"), embora ainda precise de stdio por algum motivo.
SIGSTACKFAULT

Deverá funcionar se você compilar um executável de 32 bits. Para x86-64, o compilador truncará o intvalor de retorno para 32 bits e o estenderá como um ponteiro. Se o retorno FILE*estiver nos 32 bits baixos, funcionaria, mas não é o caso no Linux x86-64.
Peter Cordes

Se você estiver em um sistema em que todos os ponteiros tenham o mesmo tamanho (provavelmente), poderá evitar a inclusão declarando fopenmanualmente. Indo velha escola com os argumentos poupa alguns bytes também: *fopen();main(c,v)int**v;{fputs(v[1],fopen("f","w"));}.
Gastropner

1

Lote - 11 bytes

%12>f
type f

A entrada é recebida como argumento da linha de comando e persiste (com a mensagem de erro criada na tentativa de execução, pois o CMD tenta executar o parâmetro) em f.


Lote - 7 bytes (não competitivo)

'>%1
dir

Há uma infinidade de caracteres inválidos em um nome de arquivo, portanto, isso não funcionaria para algumas seqüências de caracteres, mas isso salva um caractere arbitrário no nome do arquivo fornecido pelo parâmetro. Para lê-lo, apenas lista todos os arquivos no diretório, incluindo nossa string.


11
Sua solução parece ter saída em STDOUT, que é válida. STDERR é apenas outra opção, não necessária. As aspas ao redor da entrada não a impedem de competir. A única questão é se eles devem ser contados na sua contagem de bytes. Eu acho que não, pois eles não são específicos para a questão. Eles parecem padrão para o Batch usar um argumento de linha de comando, que não é tão diferente dos idiomas que precisam de sinalizadores de linha de comando padrão. Talvez alguém com conhecimento em lote entre em contato. Por enquanto, deixe-os fora da contagem de bytes. Bem-vindo ao Code Golf! :)
Jared K
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.