Yeniden başlatma sırasında bir dize devam ettirmek için kendi dilinizde en kısa kod


48

Programlarınız:

İki program yazacaksınız (ikisi de aynı dilde). Depolama programı bir dizgiyi STDIN'den alır ve kalıcı bir yerde saklar (aşağıya bakınız) ve sonra hatasız biçimde çıkar. Alma programı giriş yapmaz, kaydedilen dizeyi alır ve STDOUT'a yazdırır.

Kalıcılığın nesnel testi:

Depolama programını yerel makinenizde çalıştırabilmeli, daha sonra yerel makinenizi kapatıp ardından yerel makinenizden alma programını aramalısınız. Bu yeniden başlatma testini geçtiğiniz sürece dizeyi istediğiniz şekilde (hatta web'de) saklayabilirsiniz.

Test Durumları:

Depolama sonra almak:

echo foo | Store
Retrieve
foo

Tekrarlanan Mağazalar üzerine yazılmalıdır (bir set () yöntemi gibi):

echo foo | Store
echo bar | Store
Retrieve
bar

Tekrarlanan Alma tahribatsızdır (bir get () yöntemi gibi):

echo foo | Store
Retrieve
foo
Retrieve
foo

Depolama herhangi bir çağrısından önce alma:

Bunun için endişelenmene gerek yok. Alma programınız, depolama programının geçmişte bir noktada çalıştırıldığını varsayabilir.

Giriş / Çıkış esnekliği.

İnsanlar benden katı STDIN / STDOUT'dan standart IO kurallarına genişletmemi istediler. Yapamam çünkü çok fazla boşluk gösterecek. Bazı standart G / Ç seçenekleri, sürekli bir şekilde saklanmış girişe sahiptir, örneğin "programlar bir dosyadan giriş alabilir". Sadece katı STDIN ve STDOUT'dan daha esnek olmak istiyorum, ancak taşkın kapılarını açmadan.

Standart GÇ kuralları başlığından, zoru çözmeyenleri kiraz toplayacağım:

Alternatif kullanıyorsanız, kullanıcı etkileşimli olması gerekir. Kullanıcının, girişlerini programınıza aktarma, programınızın sağladığı bir bilgi istemine yazma veya programın komut satırı bağımsız değişkeni olarak girme dışında başka bir iş yapması gerekmemelidir. Kullanıcının ekranda görüntülenen veya STDOUT veya STDERR'ye gönderilen çıktısını görmek için alma programınızı çalıştırmaktan başka bir şey yapması gerekmemelidir.

İzin verilen varsayımlar:

  • İki programınız aynı dizinde çalıştırılacak
  • Programlarınızın bu dizin için okuma-yazma izinleri var.
  • Yarattığınız dosyalar yeniden başlatmaya devam eder (geçici bir dizinde değil)
  • Dizenin parçası olmayan bir son satırın girilmesine izin verilir. Başka iz bırakmayan boşluk yok

Bu kod golf ve puanınız her iki programdaki baytların toplamıdır.


9
yani sadece echo $@>xve cat xgeçerli mi?
Adám

1
Spesifikasyonunuz birden fazla kez saklama yeteneğinden bahsetmiyor, ancak bunu yapan bir örnek durumunuz var. Her çağrı için temiz bir ortam kabul edebilir miyiz Store?
Adám

4
@EriktheOutgolfer Neden geçerli olmasın? Meta üzerinde tartışılan bir boşluk var olsa bile, özellikle izin vermek zorluğunu engellemiyor.
dylnan

6
Web kısıtlamaları genellikle, web’deki işleri bir iş deliği olarak çekmek, bu işleri oluşturma işini yapmaktan ibarettir. Bu durumda, eğer web üzerinde ise, onu oraya yerleştirme işini yaptığınız içindir.
Jared K

3
Birinin manyetik çekirdekli belleği olan bir bilgisayar için bir cevap yazması gerekiyor.
Mark

Yanıtlar:


88

zsh, 4 bayt

Mağaza: >f(STDIN'den okur ve bir dosyaya yazar f)
Al: <f(STDOUT'a yazıyor f)


8
Bir kazananımız olduğunu düşünüyorum.
Adám

@ 1 byte dosyaya girdi yazmak için bir belirteç yoksa Adám: P
FreezePhoenix

1
@FreezePhoenix Şu anda izin verilmeyen yeni bir dil yazmazsanız muhtemelen yok ...
Chromium

4
@ Krom kontrol Z80 cevap: bazı mevcut dilleri 0 baytlık bir programdan yazabilir.
Julur

55

TI-BASIC (Z80), 1 bayt ?

Mağaza:  (sadece dizeye giriniz)
Alma: Ans(bayt 27)

Ancak bu geçerli değilse:

TI-BASIC (Z80), 7 6 bayt

-1 Jakob'a teşekkürler.

Mağaza: Prompt Str0(bayt DD AA 09)
Al: disp Str0(bayt ED AA 09)


1
5 bayt olduğundan emin misin?
FreezePhoenix

6
@ FreezePhoenix TI-Basic belirteçleri kullanır.
Adám

3
Hmm ... Neden Ansaynı girişi alıp devam ettirmiyorsunuz? Boş bir mağaza programı ve sadece Ansgeri almak için çalışması gerekir: 1 byte!
Jakob

9
@ Arthur Yep, Ansdevam ediyor. Aslında, tüm kullanıcı değişkenleri, denklemler ve tarih dahil (sanırım) birçok durum devam ediyor. Kullanıcının bakış açısından, kapalı kapatma temel olarak bir PC için uyku durumuna eşdeğer bir TI hesaplayıcısıdır, bu yüzden fazla bozmaz.
Jakob

2
@JaredK 1-byte çözümünün kural ihlali kokusu aldığını kesinlikle kabul ediyorum (bunu öneren kişi ben olmama rağmen). Diğer programlar Ancak, ben, mağaza programı çıkışları söyleyebilirim olabilir (bunlar çözümün çalışmasına engel olsa da) ondan sonra çalıştırılabilir. “Kalıcılığın nesnel testi” hakkındaki yorumum, programların doğrudan güç döngüsünden önce ve sonra çalıştırılacağı yönündeydi. Eğer bu doğru değilse, 1 baytlık çözümün rakipsiz olarak işaretlenmesi gerekebilir.
Jakob

23

Tarayıcı JS, 44 bayt

Mağaza :

localStorage.a=prompt()

Al :

alert(localStorage.a)

Will prompt()STDIN'den okumak?
boru,

9
Bir grafik web tarayıcısının bir STDIN'i var mı? Hayır prompt(), sizden metin girmenizi isteyen bir uyarı açılır ve sonucu döndürür.
Dev

5
@Dev Tabii ki grafiksel bir web tarayıcısı, diğer tüm işlemlerde olduğu gibi bir STDIN'e sahiptir. Belirli bir dilden kullanamazsanız başka bir soru ve cevabı "Hayır" ise, o zaman belki bu zorlukla kullanılabilir.
boru,

5
@Dev Varsayılan G / Ç yöntemleri GUI istemi üzerinden giriş ve GUI ekranı üzerinden çıkış içerir . OP standardı geçersiz kılmadığı sürece, bu geçerli olmalıdır. Açıklayacağım.
Esolanging Fruit,

2
Daha fazla GÇ'ye izin vermek için mücadeleyi düzenledim, ancak yalnızca varsayılan GÇ yöntemlerinin sınırlı bir alt kümesine genişletiyorum. Bu cevap benim alt kümemde var. Bunu sevdim.
Jared K,

19

POSIX kabuk sh / bash / ... 8 bayt

depolamak:

dd>f

almak:

dd<f

2
Nice one, hatta yener cat...
cmaster

12

Python 3 , 46 bayt

mağaza, 45 bayt:

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

Alma programı, adlandırılmış bir dosya olan store komutu tarafından oluşturulur f. ( Dosya adı için 1 bayt )


2
Elbette kullanabilirsin input()?
Artemis Fowl,

@ArtemisFowl input()yalnızca ilk satırsonuna kadar alır. STDINopen(0).read
Jo King'in

Muhtemelen işler hala belirsizken gönderildiniz, ancak bu cevap şu anki şartnameye uygun değil. Başlangıçta STDIN / STDOUT gereksiniminin katı olmasına izin verdim, varsayılanlara izin verilmezdi. Genişlettim, ancak yalnızca varsayılanların bir alt kümesine. STDOUT kullanmıyorsa, alma programınız hala çıktının ekranda gösterilmesine ihtiyaç duyar. Tam varsayılanlara izin verirsem, her dilin çözümü 'bir dosyada girdi alır', 'bir dosyada çıktı verir', sıfır bayt olur.
Jared K,

@JaredK Bunun nasıl çalıştığını pek anlamadığınızı düşünüyorum. store-Program STDIN'den girişini okur ve daha sonra bu girişi yazdıran bir Python programı saklar f. Örnek: MAĞAZA bir giriş ile çağrılır abc. Daha sonra yazar print('abc')için f. Şimdi ararsanız f(ALMA), STDOUT'a yazdırır abc.
ovs

@JaredK Bir yorumda STORE'ın RETRIEVE'i değiştirmesine izin verilip verilmediğini sordum.
ovs


8

Powershell - 4 Bayt

Depolama:

ac

(ayrıca alternatif sc)

geri alma

gc

Düzenleme: Çıktının herhangi bir kullanıcı girişine izin vermediğini fark ettim ... bu yüzden 4'den 6 ya da 8 bayta atlar

Depolama:

ac f

sc f8 alternatif versiyon için (alternatif )

ac

(ve fyol olarak belirtin ) 6 baytlık Sürüm için

geri alma

gc f

8

Pas, 136 bayt

Mağaza (84 bayt)

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

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

Al (52 bayt)

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

Teşekkür


1
İçe aktarma öğesini değiştirip use std::{io::*,fs::*}ardından writeyerine kullanarak bir bayt kaydedebilirsiniz std::fs::write.
Esolanging Fruit,

Ne dersiniz write("a",String::from_iter(stdin().chars()))?
Bergi

@ Bergi Güzel. Ancak kararlı Pas ile charstetiklenir error[E0658]: use of unstable library feature 'io'.
Jakob

Hm, chars()lehine itiraz edilmiş görünüyor String::from_utf8(stdin().bytes()). (Ayrıca gece doktorlarını kullandım, suçlu olup olmadığından emin değilim)
Bergi

@Bergi Birkaç varyasyonla denedim bytes()ya da chars()hiçbiri çok kısa olmadı çünkü yineleyici öğesi sarıldı io::Result.
Esolanging Fruit

8

Bash, 12 11 10 bayt

mağaza, 7 6 5 bayt

cat ->f# gerek yok -, stdin varsayılan

cat >f# alana gerek yok, >ayrılıyor

cat>f

5 bayt al

cat f

1
-Mağaza programına gerek yok .
Konrad Rudolph

2
Ya "kedi" ve ">" arasındaki boşluğa gerek yok!
psmears,

Yazma ve kullanma için aynı zsh post'unda olduğu gibi yapmalısınız >f. <fYine de okumak için geçerli olup olmadığından emin değilim .
allo,

@allo Cygwin En azından >fgibi eserleri echo '' > f(varsa bunları yapmazsa oluşturarak, dosya boşaltma) iken <fbir no-op gibi görünüyor.
sundar

7

HP 49G RPL, 48 bayt

Kaydetmek için:, :2: A DUP PURGE STO26,5 bayt

Geri yüklemek için:, :2: A RCL21,5 bayt

Yedek bataryada kalabilirsek:

HP 49G RPL, 0 bayt

Kaydetmek için:, 0 bayt

Geri yüklemek için:, 0 bayt, çünkü HP 49G yığını yeniden başlatmalar arasında el değmemiş bırakıyor.


Sıfır baytlık çözüm, çeşitli hesap makineleri için çalışmalıdır. Eve döndüğümde 42'lerimi mahvedeceğim.
SIGSTACKFAULT

Sanırım sıfır baytlık çözümünüz ve diğerleri tahribatsız bir şekilde yeniden başlayan hesap makinelerinde çalışıyorlar, sorunun iki bölümünü karşılayamıyorlar: "İki program yapacaksınız." Elinizde olan şey, yeniden başlatmaya dayanan tek bir program. Ve "Mağaza STDIN'den okur ve ardından hatasız çıkar ." Programınız hala kullanıcının bir tuşa basmasını bekliyor. Programınızın yığını ve yürütme durumu hala değişkendir. Bence bu hala çalışıyor ve çıkmamış demektir.
Jared K,

@JaredK Soru hiçbir zaman iki programın aynı olamayacağını öngörmedi. Çıkmakta olan kısım ise: geleneksel olarak programlara RPL girişinde yığında verilir. Yani bir standart girdi.
Jason,

1
Yığın bir güç döngüsünden kurtulur mu? Hesap makinesinin düğmeleriyle yumuşak bir kapanma olabilir, ancak pili çıkarmayacağımı düşünüyorum. Belki de bir güç döngüsünün ne olduğuna bağlı.
kullanıcı

1
@ kullanıcı Hayır, yığın flash bellek olan port 2'de saklamanın aksine yumuşak (ON + C) veya sert sıfırlama (ON + A + F) (yumuşak güç kapalı, Sağ Shift + ON’tan farklı) ve yumuşak ve sert resetleme hayatta kalır). TI-BASIC cevabı bu tanımı kullanıyor gibi göründüğü için yığın cevabını tamlık için ekledim.
Jason,

6

APL (APLX) , 5 bayt

Mağaza: ⍞⍈1
Al:⍇1

 stdin yazımından
⍈1 dosya numarasının bir sonraki kullanılabilir bileşenine satır almak 1

⍇1Dosya numarası 1'in ilk * son bileşenini  okuyun

APLX Mağazası oturumuAPLX Alma oturumu

* Dokümantasyon önce diyor ama deney son gösteriyor .


6

bash, 10 bayt (rekabetçi olmayan)

touch $@
ls

Unix dosya adları içerebilir dışında herhangi bir karakter NULve /ve isimleri olabilir 255 bayt uzunluğunda kadar bu yalnızca o uzunluğa asar saklamak mümkün olacak, böylece ve 'içermediğini (depolama aracının bir sınırlama olduğunu düşünün) / 'onların içinde. Bunun rekabetsiz olmasının bir nedeni, bir diğeri de üzerinde çalıştığı dizinin boş olduğunu varsaymasıdır (ya da dışarıdan çıkan çıktıya lsizin verilir). Bunu hala göndermek istedim çünkü bilgi depolamak için harika ve açık olmayan bir yol gibiydi.

Benzer bir damar üzerinde, aynı uzunluk ve karakter sınırlamalarına sahip olmayacak bir başka:

35 33 bayt

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

Bu, /karakter dizisindeki karaktere izin verir ve daha birçok karakteri destekler (tam olarak kaç tanesi uygulamaya bağlıdır).

(@Cows quack sayesinde buna -2 bayt)


1
IIRC, Berkeley'deki bir grubun bir zamanlar 1990'larda tablo sütun verilerini dosya adı (255 karaktere kadar) olarak depolayan bir veritabanı sistemi oluşturduğuna inanıyorum. Sanırım satır ve tablolar üst dizinlerdi.
David R Tribble,

35 baytlık cevabınızdaki ikinci ifadeyi olarak değiştirebilirsiniz s/..//. Bu $gerekli değildir, çünkü diğer tüm satırlar silinir, bu sadece son satıra uygulanabilir, ve ^oyuncu değişikliği sadece ilk maçta uygulandığı için bırakılabilir.
Kritixi Lithos

@Cowsquack Yapıldı. Değişimin neden işe yaradığını açıkladığınız için teşekkür ederiz.
sundar

Sen kullanmak gerekir "$@", değil $@boşluk, tarafından yakılarak elde önlemek için, *, ?veya ~karakterlerin.
Anders Kaseorg,

5

Python 3, 56 bayt

Mağaza (33 bayt)

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

Al (23 bayt)

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

Sondaki yeni satır ile yazdırır.


neden olmasın input()yerine open(0).read()ve omit end=gelen print?
MoxieBall

@MoxieBall Neden inputkullanılmadığından emin değiliz, ancak atlamak end=, dize sonuna yeni bir satır eklenmesine neden olacak (yani, orijinal dize değil) (belki)
NickA,

@NickA Her neyse, soruda yeni bir satır basılıyor gibi görünüyor, bu yüzden bunun önemli olduğunu düşünmüyorum ...
MoxieBall

Deli oldum mu yoksa 23 + 33 = 56 mı (54 değil) mi? Ayrıca neden kullanmıyorsun input()?
Artemis Fowl,

1
@ArtemisFowl İyi yakala. Gelince input, devam edecek dizenin yeni satırlar içerebileceğini varsayıyorum.
Jakob

4

Japt, 46 30 bayt

Shaggy sayesinde -16 bayt .

Japt’i kullanmayı ilk kez denedim. JS değerlendirmesi bazen gizli olabilir. Tarayıcıyı kullanır window.localStorage.

Mağaza (16 bayt)

Ox`lo¯lSÈSge.P=U

Al (14 bayt)

Ox`lo¯lSÈSge.P

Standart dosya IO'dan başka bir şey kullanan ilk kişi olduğun için +1 sevdim.
Jared K,

1
Japt’e hoş geldin! :)
Shaggy,

1
Bu arada, bypass setItemve getItemtamamen ile yapabilirsiniz localStorage.key. Değeri ayarlayın , değeri alın
Shaggy

@Shaggy Teşekkürler! Sizinki de tuhaf kontrol karakterlerinden kaçınır.
LegionMammal978

4

Haskell, 46 bayt

Mağaza (26 bayt):

getContents>>=writeFile"t"

Al (20 bayt):

readFile"t">>=putStr

3

Yakut (26 Bayt)

Ayarla (16 Bayt)

IO.write'a',gets

Alın (10 Bayt)

IO.read'a'

3

MATLAB (30 Bayt)

Ayarla (22 Bayt)

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

4 bayt'ı değiştirerek tıraş olabilir input(''), ancak bu, girişin tek tırnak içinde olmasını gerektirir:'input string'

Alın (8 Bayt)

load a;a

3

C (GCC), 98 bayt

Mağaza (46 bayt)

Giriş, ilk komut satırı argümanı ile yapılır.

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

Al (52 bayt)

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

Unportability

  • Birkaç işaretçi tipinin sığmasını gerektirir int.

Teşekkür


1
Bu, çalışmanın intörtülü beyanı için bir işaretçi tutabilecek bir C uygulaması gerektirir int fopen(). (örneğin, 32 bitlik sistemlerin çoğu, veya gcc -m3232 bitlik bir yürütülebilir dosyayı yapmak için x86-64 kullanıyorsanız kullanın .) BTW, Linux sendfileve copy_file_range(2)sistem çağrılarını kullanmayı denedim , ancak bir TTY'den / den çalışmıyor.
Peter Cordes,

1
Eğer fonksiyonlar, değil programları yazıyoruz yana, belki de izin arg bir fonksiyonu olarak girdi dizesi alarak haklı fputs(fopen())ve read(open(),buf,-1). (Şimdi soru, komut satırı argümanına girdi olarak izin veriyor.)
Peter Cordes

Linux 'splice' işlevi bir borudan bir dosyaya kopyalar (ve tersi). Stdin / out, boru ise, daha fazla parametre pahasına, bir işlev çağrısını kaydeder.
CSM

2

APL (Dyalog Unicode) , 18 bayt

Mağaza: ⍞⎕NPUT⎕A 1 Çevrimiçi deneyin!
Almak: ⊃⎕NGET⎕A Çevrimiçi deneyin!

 stdin'den satır almak  , büyük harfli alfabe
⎕NPUT denilen yerel bir dosyaya koyulur  ve eğer dosya varsa
⎕A1

 ilk
⎕NGET dosya (veri, sonraki parça kodlanıyor ve satır biten tür) yerel dosyaya
⎕A büyük harf


2

R (27 bayt)

mağaza (21 bayt)

x=readLines('stdin')

yük (6 bayt)

cat(x)

Bunun çalışması için, ilk komut dosyasının komut satırı seçeneğiyle --save, ikincisinin de --restore(etkileşimli modda bu gerekli olmasa da: bu seçenekler varsayılandır) çağrılması gerekir.

Bu, 7 bayt ile kısaltılabilir, çünkü R'deki bir hatanın varsayılan argümanların readLineetkileşimli olmayan modda çalışmasını engellemesi gerçeği değildi . Etkileşimli modda, gerekli değildir ve bu nedenle çözüm yalnızca 20 bayt kullanır .


1
qİlk program olmak x=scan(); q("y")ve ikincisi olmak üzere ya xda cat(x)dizelerin nasıl yazdırılacağına ne kadar katı olmak istediğimize bağlı olarak doğrudan kullanımın çok daha etkili olacağını düşünüyorum . Her zamanki gibi, golf kurallarına göre komut satırı argümanlarını da saymanız gerekir, bu yüzden --saveve --restore(benim formülasyonumun gerekmediği) için bayt ekleyin
JDL

@JDL scanisteğe bağlı içerikler için çalışmıyor ve scan(w='character')bundan daha uzun readLines(). qgereksiz (ama q('y')işe yaramazsa, hecelemelisin yes). Sadece xikinci programda kullanmayı düşündüm ama bu onları anlayabildiğim kadarıyla gereksinimleri ihlal ediyor.
Konrad Rudolph

1
kullanabilirsiniz scan(w=""), türü hecelemenize gerek yoktur, scanbelirtilen argüman türünden çıkartacaktır. Benim için, q ("y") kaydetmeye neden olan bir çıkış olarak çalışıyor, ancak bu muhtemelen R sürümünüze ve muhtemelen Rstudio kullanıp kullanmamaya bağlı.
JDL,

@JDL scan: Oh, temiz, belgeler bundan bahsetmiyor! Ne yazık ki scan, hala bazı ayrıştırma işlemlerini gerçekleştirecek, bu nedenle tüm girdilerle çalışmayacak. Her neyse, scan('stdin',w='')tam olarak aynı uzunlukta olur readLines('stdin'). q: R 3.4.4 “q'daki hata (“ y ”):“ kaydet ”in tanınmayan değeri” diyor.
Konrad Rudolph

Ah, bu bir Rstudio meselesi - Rstudio'da ve ayrı olarak terminalde denedim ve sadece Rstudio'da çalıştı.
JDL

2

Java (JDK 10) , 204 Bayt

Uyarı: Herhangi bir java programının kullanıcı adınız için kaydettiği tercihlerin üzerine yazar!

Mağaza, 94 Bayt:

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

Çevrimiçi deneyin!

110 Baytı Al:

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

Çevrimiçi deneyin!

java S foo
java R
foo

Bu, girdiyi bir argüman olarak alıp, java.util.prefs tarafından sağlanan kullanıcı tercihleri ​​yedek deposuna kaydederek çalışır . Bir düğümü adlandırırken bir bayttan tasarruf etmek için kullanıcının kök düğümünün üzerine yazar. Tahribatsız bir şekilde test etmek istiyorsanız, ya bir kullanıcı adı üzerinden çalıştırın ya da "" tuşunu bir düğüm adına değiştirin.


İyi bir fikir! Java 10 kullandığınız için bunları lambda ifadeleri yaparak kısaltabilirsiniz. Ayrıca, bayt sayınız içermiyorsa, zbunu programlardan ve TIO'dan kaldırmanız gerekir. İnsanları uyarmak yerine gönderimin en üstüne bir uyarı koymayı düşünün. Elbette TIO 94 ve 110 baytlık çözümlere sahip olmalı.
Jakob

Teşekkürler! Önerilen düzenlemeleri yaptım. Emin değilim ama lambda ifadelerinin bu soru için özel IO kurallarını yerine getirebileceğini sanmıyorum.
Jared K,

D'oh. Haklısın, bunu unuttum.
Jakob

2

C #, 157 Bayt

Ayarla, 74 Bayt:

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

Alın, 83 Bayt:

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

-1
VisualMelon sayesinde Bayt -2 LiefdeWen sayesinde Bayt


Sonra o boşluğu kaldırın "a",ve bunun dayak olacağından şüpheliyim :)
VisualMelon

Başka bir byte'ı WriteAllLinesve ikinci a
paramu

2

Perl 5, 48 26 23 bayt

Yaz, 20 + 1 (-n) bayt

Mafya sayesinde -3 bayt

open f,">>f";print f

Ben aslında bu konuda emin değilim, ama kriterleri karşılamaktadır. Geçmiş girişler için, sadece cli seçenekleri sayıldı, bu yüzden birlikte gidiyorum.

0 + 2 bayt oku

perl -pe "" f

1
Niçin -ne1 ile (neye sahip olmalı e) ama -pe2 ile puan aldınız ? -EVe sayyerine kullanabilirsiniz print.
simbabque

Bana haber verdiğin için teşekkür ederim -E, buna aşina değildim. Neden birlikte gitmediğime gelince -ne, bunun nedeni aslında bir dosyadan kaçmam. Öyleyse, bu perl -n w.plPCG topluluk standartlarına aykırıysa, cevabımı buna göre düzenleyebilirim.
Geoffrey H.

Hayır, bu iyi. Ekstra komut satırı argümanları için bir malus ekliyoruz, bu yüzden sorun değil.
simbabque

2
">>","f"-> ">>f"3 karakter kazandırır
mob

1

Ataşesi , 23 + 16 = 39 bayt

Basitçe STDIN'i dosyaya yazar A, ardından dosyayı okur A.

store.@:

$A&FileWrite!AllInput[]

retrieve.@:

Echo!FileRead!$A

Test yapmak

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 bayt

Mağaza, 27 bayt

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

Al, 24 bayt

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

1

YAKUT

Mağaza (24 bayt)

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

Al (16 bayt)

p File.read('a')

4
Soru, argümanlardan değil,
STDIN'den veri

O zamandan beri argümanlar da dahil olmak üzere IO alternatiflerine izin vermek için düzenlendi.
Jared K,

1
File.write'a',getsve p File.read'a'biraz daha kısa;)
DarkWiiPlayer

1

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

Mağaza, 27 23 bayt

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

Al, 27 23 bayt

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

Bu temelde jofel'in cevabını bir C programına sarar .

Not: ddKomutlar bazı istatistikleri stderrçıkarır, böylece kabuğunda saf olarak çalıştırdığınızda bazı ek çıktılar görürsünüz. Meydan sadece kayıtlı dize üzerinde gösterilmesi gerekmektedir söylüyor Ancak, stdoutdeğil stderr, ben ek çıkışı izin verildiğini götürün stderrNeyse, bastırmak ... stderrçıkışını yerine kadar kolaydır ddile catbayt sayısını artırarak, her biri birer iki program.


Derleyicinize bağlı olarak, intgeri dönüş türünü de kaldırabilirsiniz main. Eski ANSI C stilinde intvarsayılan dönüş türüdür.
Jakob

@ Jakob Ah, evet, elbette. Ben bilinçli olarak örtük beyanına güvenmiştim ve haberi system()unuttum main(). Bunu işaret ettiğiniz için teşekkürler :-)
cmaster

1

PHP, 26 + 1 + 21 = 48 bayt

Store.php:

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

İle koş echo <input> | php -nF Store.php.

Retrieve.php:

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

İle koş php -n Retrieve.php.


1

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

Gcc'mde sadece birkaç uyarı ile derler.

store.c

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

Büyük olasılıkla dahil golf olabilir, ama nasıl olduğunu anlayamadım. Hiçbir şeyi geçemezsen, ama her neyse.

Peter Cordes: -1

read.c

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

int*f=fopençalışması gerekir, yani işaretçinin türü hakkında derleyicinize yalan söyleyin. Ama 32 bit sistem için (yani bir tane derleme yalnızca intgibi bir işaretçi tutabilir gcc -m32, ya da sadece gcctam 32 bit sistemde). Ayrıca ana olarak ilan edebilirsiniz main(int c,char**v)veya belki int**vbaşvuruda bulunmadığınız için.
Peter Cordes,

main(int c,char**v)Eserleri. Ayrıca yapabileceğimi de farkettim fputs(v[1],fopen("f","w"), yine de bir nedenden dolayı stdio'ya ihtiyaç duyuyor.
SIGSTACKFAULT

32 bitlik bir yürütülebilir dosyayı derlerseniz çalışmalıdır. X86-64 için derleyici intdönüş değerini 32 bit olarak kesecek ve daha sonra bunu bir işaretçi olarak işaretleyecektir. Döndürülen FILE*32 bit ise, işe yarar, ancak x86-64 Linux'ta durum böyle değil.
Peter Cordes,

Tüm işaretçilerin eşit boyutta olduğu bir sistemdeyseniz (büyük olasılıkla), fopenelle bildirerek dahil etmekten kaçınabilirsiniz . Argümanları kullanarak eski gidiyor bazıları çok bayt kaydeder: *fopen();main(c,v)int**v;{fputs(v[1],fopen("f","w"));}.
gastropner

1

Toplu İş - 11 Bayt

%12>f
type f

Girdi, bir komut satırı argümanı olarak alınır ve devam eder (CMD parametresini çalıştırmaya çalıştığından yürütme denemesi sırasında oluşturulan hata iletisiyle) f.


Toplu İş - 7 Bayt (rekabetçi olmayan)

'>%1
dir

Bir dosya adında geçersiz karakterler var, bu nedenle bu bazı dizeler için işe yaramaz, ancak bu aslında parametre tarafından verilen dosya adına rasgele bir karakter kazandırır. Okumak için dizgimiz de dahil olmak üzere dizindeki tüm dosyaları listeler.


1
Çözümünüz geçerli olan STDOUT'da çıktı veriyor gibi görünüyor. STDERR başka bir seçenektir, zorunlu değil. Girişin etrafındaki tırnaklar rekabet etmesini engellemez. Tek soru, bayt sayınıza göre sayılması gerekip gerekmediği. Sanırım, çünkü soruya özgü değiller. Batch'ın standart komut satırı bayraklarına ihtiyaç duyan dillerden çok farklı olmayan bir komut satırı argümanı alması için standart bir kazan gibi görünüyorlar. Belki de Batch bilgisine sahip başka biri içeri girecek. Şimdilik onları bayt sayısından uzak tutabilirsiniz. Code Golf'a Hoşgeldiniz! :)
Jared K
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.