새끼 고양이 명령


65

새끼 고양이는 고양이와 매우 흡사합니다. 주요 차이점 중 일부는 귀여움, 지능 부족 및 크기입니다. 마찬가지로 cat명령이 명령과 다릅니다 kitten. 다행히도이 경우에는 한 가지 차이점 만 있습니다. 새끼 고양이 명령에서 모든 대문자는 소문자로 바뀝니다.


객관적인

과 유사하게 작동하는 프로그램을 구현합니다 cat. 모든 문자 [A-Z]가 소문자로 출력됩니다.


입력

명령 행 인수로서의 파일 목록. 파일이 나열되지 않으면 표준 입력에서 읽습니다. 입력에 인쇄 할 수없는 문자와 ASCII 범위를 벗어난 문자가 포함될 수 있습니다.


산출

입력이 많은 파일 인 경우 내용을 연결하고 모든 문자를 소문자로 출력하십시오. STDIN에서 읽을 경우 모든 대문자를 소문자로 사용하여 STDIN의 내용을 출력하십시오.

참고 : 문자는 [A-Z]소문자 만 사용하십시오 . 다른 문자를 소문자로 만들면 허용되지 않습니다.


$ echo "HelLo" > file.txt
$ kitten file.txt
hello
$ echo "Good Bye" | kitten
good bye
$ echo "Ä" | kitten
Ä

와 마찬가지로 최소 바이트가 이깁니다.

리더 보드


다음은 일반 리더 보드와 언어 별 수상자 개요를 생성하는 스택 스 니펫입니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

# Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

# Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

# Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들어 리더 보드 스 니펫에 표시 될 수도 있습니다.

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


2
"문자 만 [A-Z]소문자로 지정" 이라고 명시 하면 유니 코드 입력이 예상됩니까?
AdmBorkBork

2
@TimmyD 네, 그러나 주로 사람들이 내장 된 소문자 함수를 사용하지 못하게하기위한 것입니다.
TheNumberOne

3
@FryAmTheEggman 영구 링크
Dennis

1
방법에 대한 Ü, Ñ그리고 좋아?
Mast

2
그것은이다 그래서 당신 작업 ... codegolf에 전혀 Pyth 표시되지 않을 때 좋은
JMM

답변:


52

펄, 6 바이트

5 바이트 코드 + 1 바이트 명령 행

$_=lc

사용법 예 :

echo ABCdef | perl -p kitten.pl
abcdef

올바른 유니 코드 동작 확인 :

echo "HelloÉ" | perl -p kitten.pl
helloÉ

2
이것이 유니 코드 문자에 영향을 미치지 않습니까?
Martin Ender

7
@ MartinBüttner 그렇지 않습니다 . 우리는 여기서 "otherwise"범주에 있습니다. "ASCII 규칙은 사례 변경에 사용됩니다. ASCII 범위 밖의 모든 문자의 소문자는 문자 자체입니다.”답변에 대한 내 +1.
xebtl

178

배쉬, 19 바이트

cat "$@"|tr A-Z a-z

새끼 고양이를 만드는 가장 좋은 방법은 실제 고양이를 사용하는 것입니다.

예제 실행

$ ./kitten kitten
cat "$@"|tr a-z a-z

39
작업에 적합한 도구입니다.
디지털 외상

120
고양이를 만들기 위해 고양이 한 마리 만 있으면 +1, 항상 고양이 두 마리를 데려갑니다
SnoringFrog

4
이제 man woman농담 을 떠올리게됩니다 …
xebtl

2
자손을 만드는 교배 방법보다는 고양이 복제를위한 +1
MD-Tech

25
@SnoringFrog 그는 다른 하나를 bashed.
TheNumberOne

22

펄, 11 바이트

10 바이트 코드 + 1 바이트 명령 행

y/A-Z/a-z/

사용법 예 :

perl -p entry.pl input1.txt input2.txt
echo "ABCdef" | perl -p entry.pl

15

파이썬 3, 77 바이트

from fileinput import*
print(end=b''.join(input(mode='rb')).lower().decode())

1
비 ASCII가 변경되지 않도록 바이트를 사용하는 것이 영리합니다.
matsjoyce

11

루비, 13 바이트

바이트 수에는 p플래그의 1 바이트가 포함됩니다 . 다음과 같이 실행하십시오 ruby -p kitten.rb..

$_.downcase!

자란 고양이처럼 stdin 또는 file 인수에서 입력을받습니다.


이것은 ASCII 또는 다른 문자 만 소문자 Ä입니까?
Paŭlo Ebermann

1
@ PaŭloEbermann : 난 그냥 그것을 테스트 : echo "HelloÉ" | ruby -p kitten.rb->helloÉ
닐 슬레이터

나는 어제 그것에 대해 많은 의견이 있다고 맹세합니다. 나는 그들이 어디로 갔는지 모르지만 : 예, 사양에 따라 작동합니다.
daniero

5

PowerShell, 112 바이트

function l([string]$a){97..122|%{[char]$b=$_;$a=$a-split$b-join$b};$a}if($args){$args|%{l(gc $_)}}else{l $input}

끔찍하게 읽을 수 없습니다. 아래는 약간 확장 된 버전입니다.

function l([string]$a){
  97..122|%{
    [char]$b=$_
    $a=$a-split$b-join$b
  }
  $a
}

if($args){
  $args|%{
    l(gc $_)
  }
}
else{
  l $input
}

l97에서 112까지의 루프를 반복 하는 내부 함수 를 정의합니다 (즉, ASCII a에서 ASCII로 z). 입력 문자열을 해당 문자로 분할하고 (대소 문자를 구분하지 않는 기본값) "올바른"소문자와 다시 결합합니다. 예, 예를 들어 "Test"는을 반복하면서 "T st"가됩니다 e. 출력에는 영향을 미치지 않습니다.

후반부에는 파이프 라인 입력 (PowerShell의 stdin과 동일) 또는 명령 줄 입력이 있는지 알아내는 까다로운 비트입니다. 특수 변수 $args는 명령 행 입력이있는 경우에만 존재하므로 각 변수 를 반복하고 gc(for Get-Content) 최대 schlep합니다 l. 그렇지 않으면, 우리는 단지 우리를 schlep $input합니다 l. if / else 문 (예 :)을 바꿀 수 if($input)있지만 "input"은 "args"보다 한 문자 더 길기 때문에이 방법은 더 짧습니다.


@Nazek 기본 제공되는 내장 "String".ToLower()규칙은 규칙에 위배되는 소문자 유니 코드 문자입니다. PowerShell이 ​​유니 코드와 관련하여 제대로 수행하지 않는 많은 것들이 있지만 불행히도 이것이 제대로 작동하는 인스턴스 중 하나입니다.
AdmBorkBork


5

R, 97 바이트

cat(chartr("A-Z","a-z",sapply(if(length(a<-commandArgs(T))){a}else{"stdin"},readLines)),sep="\n")

용법:

$ echo "HeLlo" > file.txt
$ Rscript kitten.R file.txt
hello
$ echo "Good Bye" | Rscript kitten.R
good bye
$ echo "bLABLa" > file2.txt
$ Rscript kitten.R file.txt file2.txt
hello
blabla
$ echo Ä | Rscript kitten.R
Ä

5

CoffeeScript , 292 바이트

f=require 'fs';d='';p=process;v=p.argv;s=p.stdin;l=((d)=>console.log d.replace /([A-Z])/g,(a,l)=>l.toLowerCase());if v.length>2 then(v.forEach (v,i)=>if i>1 then(f.exists v, (e) =>if e then(f.readFile v,'utf-8',(r,d)=>l d) else l v))else(s.resume();(s.on 'data',(c)=>d+=c);s.on 'end',()=>l d)

용법:

$ echo "HelLo" > file.txt
$ coffee kitten.coffee file.txt
hello
$ echo "Good Bye" | coffee kitten.coffee
good bye
$ echo "Ä" | kitten
Ä
$ coffee kitten.coffee file.txt SoMeTeXt
sometext
hello

codegolf에 대한 첫 번째 참여이므로 무례하지 마십시오. :).

확실히이 코드는 더 골프를 칠 수 있으며 커피 / 자바 스크립트가 최선의 선택은 아니지만 예상대로 작동합니다.

인수를 읽을 때 파일 존재도 관리합니다 (파일이 존재하지 않으면 문자열이 새끼 고양이가됩니다).

이 코드를 개선하기위한 도움이나 조언을 환영합니다!


4

줄리아, 123 바이트

f(s)=for l=readlines(s) print(replace(l,r"[A-Z]",lowercase))end
A=ARGS
length(A)>0?for i=A open(f,i)end:open(f,readline())

언 골프 드 :

function file_to_lower(s::Stream)
    # Loop over the lines of the input stream
    for l in readlines(r)
        # Print the lowercased line
        print(replace(l, r"[A-Z]", lowercase))
    end
end

if length(ARGS) > 0
    # Loop over the files specified from the command line
    for i in ARGS
        # Open the file, apply the function, then close it
        open(file_to_lower, i)
    end
else
    # Get the input file from STDIN
    open(file_to_lower, readline())
end

4

CJam, 18 바이트

ea_:gs{q}?'_,_eler

파일 목록은 CJam이 이해하는 유일한 형식 인 URL 형식으로 제공되어야합니다.

예제 실행

$ cjam kitten <<< "AaÁáÄä"
aaÁáÄä
$ cjam kitten file:///home/dennis/kitten file:///home/dennis/kitten
ea_:gs{q}?'_,_elerea_:gs{q}?'_,_eler

작동 원리

ea                  Push the array of command-line arguments.
  _                 Push a copy.
   :g               Retrieve the contents of all files with those URLS.
     s              Flatten the resulting array of strings.
      {q}           Push a block that reads all input from STDIN.
         ?          Select the string of the array of args is non-empty.
                    Otherwise, execute the code block.
          '_,       Push the string of all ASCII characters before _.
             _el    Push a copy and convert it to lowercase.
                er  Perform transliteration.

4

파이썬 (2), 100 (102) 97 바이트

matsjoyce에 의해 기능이 수정되었으며 4 바이트가 추가되었습니다. 다행히 파이썬 2로 전환하여 2 바이트를 절약했습니다.

from sys import*;print''.join(f.read().lower()for f in(map(open,argv[1:])if argv[1:]else[stdin]))

명령 행 또는 인수가없는 경우 STDIN에서 인수를 가져옵니다.

이것은 일부 함수의 기본 인수를 남용합니다. 기본적으로 open우리가 원하는 바로 읽기 전용 텍스트 모드를 사용합니다. read인수없이 호출하면 스트림의 모든 텍스트를 반환합니다.

언 골프 드 :

import sys

if len(sys.argv) > 1:              # If we have command-line arguments:
    source = []                    # Initialize an empty list
    for path in sys.argv[1:]:      # Iterate through every filename we have
        kitfile = open(path, 'rt') # Open the file in read-only text mode
        source.append(kitfile)     # Add it to the list
else:                              # Otherwise, if the args are empty:
    source = [sys.stdin]           # Set our source to STDIN wrapped in a list

kittened = []                      # Initialize an empty list
for kitfile in source:             # Iterate through every file (or just STDIN)
    text = kitfile.read()          # Read everything from the stream
    kitten_text = text.lower()     # Make it lowercase
    kittened.append(kitten_text)   # Add it to the list
final = ''.join(kittened)          # Join everything together
print final                        # Print the result

1
한 줄만 읽고 소문자를 사용하지 않으므로 stdin에는 작동하지 않습니다.
matsjoyce

@matsjoyce 코드를 수정했습니다. 알림 주셔서 감사합니다! 불행히도 4 바이트를 추가했지만 더 이상 input평가하지 않기 때문에 Python 2로 전환하고 괄호를 제거 할 수 있습니다 print.
bkul

3

파이썬 3 124 123 바이트


from sys import*
for f in list(map(open,argv[1:]))or[stdin]:print(f.read().translate({i:i+32for i in range(65,91)}),end="")

파이썬은 새끼 고양이를 먹는다!

$ python kitten.py file.txt
hello
$ echo "Good Bye" | python kitten.py 
good bye
$ echo "Ä" | python kitten.py 
Ä

3

C, 106 108 바이트

편집 : 바이트를 압착 할 때 발생하는 실수가 수정되었습니다. Stdin이 작동하지 않았습니다.

나는 약간의 바이트를 짜낼 수 있다고 확신하지만, 여기에는 이해하기 쉬운 언어가 아닌 제출이 있습니다.

main(n,s,f,c)void**s;{for(f=n-1?open(*++s,0,0):0;read(f,&c,1);putchar(64<c&c<91?c+32:c));n-->2&&main(n,s);}

그리고 읽기를 위해 다소 깔끔한 형식의 버전이 있습니다.

main(n,s,f,c)
void**s;
{
    for(f=n-1?open(*++s,0,0):0; read(f,&c,1); putchar(64<c&c<91?c+32:c));
    n-->2&&main(n,s);
}

+1 이것은 암묵적인 int 매개 변수가 K & R 구문으로 만 가능하다는 것을 가르쳐 주었기 때문입니다.
Felix Dombek

2

매스 매 티카, 66 바이트

kit=StringReplace[#,x:RegularExpression["[A-Z]"]:>ToLowerCase[x]]&

로 호출

kit@"HelLo"

Mathematica에는 이미 ToLowerCase기능이 있지만 특수 (유니 코드 및 수학) 문자도 변환합니다. 그래서 나는 그것을 새끼 고양이로 만들어야했다. 이 기능은 모든 입력을받습니다.


@TheNumberOne-Mathematica에서 작동하는 방식입니다. 이를 위해 더 이상 코드가 필요하지 않습니다. 실행 파일을 원한다면 Mathematica가 도구가 아닙니다.
Verbeia

필요에 따라 이름이 명령 줄 인수로 입력 된 파일을 연결합니까?
msh210

Mathematica에는 명령 행 인수가 없습니다. 그것은 기능 입력을 conkittenates. 또한 변수에 할당 할 필요가 없습니다.
CalculatorFeline

2

C #을 230 226 바이트

namespace System{using Linq;class P{static void Main(string[]a){Console.Write(string.Concat((a.Length>0?string.Concat(a.Select(f=>IO.File.ReadAllText(f))):Console.In.ReadToEnd()).Select(c=>c>'@'&&c<'['?char.ToLower(c):c)));}}}

언 골프 드 :

namespace System
{
    using Linq;
    class P
    {
        static void Main(string[] a)
        {
            Console.Write(                                                  // Print...
                string.Concat(                                                  // ...all chars combined to a string...
                    (a.Length > 0 ?                                             // ...commandline arguments?...
                        string.Concat(a.Select(f => IO.File.ReadAllText(f))) :  // ...then all files as single string...
                        Console.In.ReadToEnd()                                  // ...else STDIN input
                    ).Select(c => c > '@' && c < '[' ? char.ToLower(c) : c)     // ...Lowercase only A..Z
                )
            );  
        }
    }
}

2

하스켈, 133

import System.Environment
main=getArgs>>=mapM_(>>=putStr.map l).f
f[]=[getContents]
f n=map readFile n
l x=[x..]!!sum[32|x>'@',x<'[']

고양이 스타일 인수 처리는 이 학습서 에서 파생 된 후 문자를 면도하도록 재 배열됩니다.

l한 문자를 소문자로 만드는 함수를 설명 합니다.

  • sum[32|condition]의 짧은 형식입니다 if condition then 32 else 0.
  • [x..]!!count입니다 iterate succ x !! count입니다 toEnum $ fromEnum x + count및 가져 오기 및 사용하는 것보다 짧은 Data.Char.toLowerASCII로 제한하는 조건으로.
  • '@'그리고 '['문자가 바로 앞에 있습니다 A및 다음 Z내가 사용할 수 있도록, <대신 <=.

sum[...|...]and [x..]!!tricks 에 기여한 Anders Kaseorg에게 감사합니다 .


1
l x=[x..]!!sum[32|x>'@',x<'[']
Anders Kaseorg

1

C #, 342 바이트

  • 전달 된 인수에서 파일 목록을 가져옵니다.
  • A..Z 범위의 문자가 STDOUT에 보내는 것보다 경우에만 소문자로 변환하는 것보다 모든 파일의 모든 문자를 읽습니다.
  • STDIN을 읽는 것보다 파일 목록이없는 경우 모든 문자를 읽고 A..Z 범위의 문자가 STDOUT에 보내는 것보다 소문자 인 경우에만 소문자로 변환합니다.
namespace System{
using IO;
using Linq;
class P{
static void Main(string[]a){
Action<char>e=C=>{var c=char.ToLower(C);Console.Out.Write(c>='a'&&c<='z'?c:C);};
if(a.Length>0)a.ToList().ForEach(f=>File.ReadAllText(f).ToCharArray().ToList().ForEach(e));
else 
while(true) Console.In.ReadLine().ToCharArray().ToList().ForEach(e);
}
}
}

C #, 319 바이트

위와 같은 단일 라이너 :

namespace System{using IO;using Linq;class P{static void Main(string[]a){Action<char>e=C=>{var c=char.ToLower(C);Console.Out.Write(c>='a'&&c<='z'?c:C);};if(a.Length>0)a.ToList().ForEach(f=>File.ReadAllText(f).ToCharArray().ToList().ForEach(e));else while(true)Console.In.ReadLine().ToCharArray().ToList().ForEach(e);}}}

1

SILOS 179 자

loadLine :
a = 256
x = get a
lbla
X = x
B = x
C = 91
B - 64
if B c
printChar x
GOTO x
lblc
C - x
if C D
printChar x
GOTO x
lblD
x + 32
printChar x
lblx
a + 1
x = get a
if x a
lblb

이 코드를 온라인 으로 사용해보십시오!


본질적으로 이것은 pusedocode에서 이것을 번역합니다.

String input = input();
for(char c in input)
if(c is uppercase) print c + 32/*lowercase c*/else print c

0

C, 91 바이트

#include <stdio.h>
main(){int c;while(EOF!=(c=getc(stdin))){c=tolower(c);putc(c,stdout);}}

C, 98 바이트

#include <stdio.h>
main(){int c;while(EOF!=(c=getc(stdin))){if(c>64&&c<91)c+=32;putc(c,stdout);}}

가독성이 바이트 수보다 중요한 경우 동일한 논리가 아래에 작성됩니다.

#include <stdio.h>
main()
{
int c;
        while (EOF != (c = getc(stdin))) {
                if ((c >= 'A') && ((c <= 'Z')))
                        c = (c - 'A') + 'a';
                putc(c,stdout);
        }
}

첫 번째 테스트 사례가 실패합니다.
TheNumberOne 2016 년

이것은 사양을 충족하지 않습니다. 파일 이름을 인수로 사용하고 파일 이름이 제공되지 않으면 stdin에서 읽습니다. 현재 stdin에서만 읽습니다.
algmyr

0

sed, 14 바이트

s/[A-Z]/\L\0/g

로 실행하십시오 env -i sed -f kitten.sed.


1
이것은을 말하는 멋진 방법이므로 LANG=C sed -f kitten.sed, 그것을 설명하기 위해 페널티를 적용해야하는지 확신 할 수 없습니다. 이 질문은 프로그램 호출을 계산하는 방법을 지정하지 않으며 메타에서는 다루어지지 않습니다.
Ángel

필요에 따라 이름이 명령 줄 인수로 입력 된 파일을 연결합니까?
msh210

물론입니다.
Ángel

1
s/.*/\L&/9 바이트 솔루션을위한 @ Ángel
someonewithpc

@someonewithpc 감사합니다. 모두 s/.*/\L&/와는 s/./\L&/g참으로 9 바이트 솔루션입니다!
Ángel

0

자바, 198 바이트

b->B->{B="";for(java.io.File c:b)B+=new java.util.Scanner(c).useDelimiter("\\Z").next();for(int c=0;c++<B.length;)if(B.charAt(c)>64&B.charAt(c)<91)B=B.replace(B.charAt(c),B.charAt(c)|32);return B;};

위의 람다를 파일과 함께 사용해야하므로 STDIN에서 입력 할 필요가 없습니다! 또한 Function<File[], UnaryOperator<String>>입니다. 처럼 사용됩니다 foo.apply(anArrayOfFiles).apply(anything).

Java를 처음 사용하는 사람들에게 더 의미있는 것으로서 223 바이트가 걸립니다.

String A(java.io.File[]b){String B="";for(java.io.File c:b)B+=new java.util.Scanner(c).useDelimiter("\\Z").next();for(int c=0;c++<B.length;)if(B.charAt(c)>64&B.charAt(c)<91)B=B.replace(B.charAt(c),B.charAt(c)|32);return B;}

컴파일하는 것으로 232 바이트를 차지합니다.

class a{String A(java.io.File[]b){String B="";for(java.io.File c:b)B+=new java.util.Scanner(c).useDelimiter("\\Z").next();for(int c=0;c++<B.length;)if(B.charAt(c)>64&B.charAt(c)<91)B=B.replace(B.charAt(c),B.charAt(c)|32);return B;}}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.