함수 작성 [닫기]


15

나는 솔직히이 도전이 존재하지 않는다고 믿을 수 없다.

도전

함수를 작성하십시오.

사양

  • 프로그램은 일종의 호출 가능한 함수를 정의해야합니다. 여기에는 일반적으로 함수, 람다 함수 또는 서브 루틴으로 알려진 것이 포함됩니다. 이러한 유형의 호출 가능 항목은 모두이 게시물에서 "기능"이라고합니다.

    1. 기능에 대한 입력은 선택 사항이며 필수는 아닙니다.

    2. 함수의 리턴 값도 선택 사항이며 필수는 아니지만 제어는 호출 프로그램으로 리턴해야합니다.

  • 나중에 액세스 할 수 있도록 함수를 일종의 변수에 지정해야합니다. 여기에는 간접 할당 (명명 된 함수를 선언하면 이름이 현재 범위에 자동으로 추가되는 가장 일반적인 언어)과 직접 할당 (익명 함수를 변수에 직접 할당)이 포함됩니다.

  • 함수의 이름을 지정할 필요는 없습니다.

  • 이 함수에 의해 생성해야합니다 당신 - 당신은 그냥 변수에 언어에서 기본 기능을 할당 할 수 없습니다.

  • 표준 허점 은 없습니다 .

이것은 이므로 바이트 단위의 최저 점수가 이깁니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
DJMcMayhem

3
처음에 닫은 이유 중 어느 것도 해결되지 않았을 때 이것이 재개 된 이유를 알 수 없습니다. 채팅에서 모드로 숨겨져 있습니다
Jo King

2
또한 언제부터 투표를 할 수 있습니까?
Jo King

7
이 도전에 경쟁하려면 프로그래머가 아닌 변호사 여야합니다.
아나톨리 크

2
현재 상태로 다시 열리지 않아야합니다.
Mego

답변:


30

x86 / x64 머신 코드, 1 바이트

c3

어셈블리:

ret

온라인으로 사용해보십시오! (나옴)

¯ \ _ (ツ) _ / ¯


2
그러나 이것은 함수에 이름을 주거나 함수에 대한 참조를 변수에 저장하지 않습니다.
Tanner Swett

4
@TannerSwett 주소로 호출 할 수 있습니다.
부정 7 7

7
어셈블리에 레이블을 추가 할 수 있습니다. 컴파일 된 코드의 크기를 늘리지 않고 함수에 이름을 지정합니다.
Daniil Tutubalin

21

젤리 , 0 바이트

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

인수를 리턴하는 모나드 링크. 스크립트에 처음 나타나는 함수이므로를 사용하여 호출 할 수 있습니다 1Ŀ.

Jelly에서 0 바이트 링크 / 함수가 작동한다는 점을 지적한 @lirtosiast에게 감사합니다.


3,4,5 1Ŀ

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


0 바이트 응답이 작동해야합니다.
lirtosiast

@KevinCruijssen 네! 좋은 자리
Nick Kennedy

@NickKennedy <pre><code>...</code></pre>코드 블록에서 선행 / 후행 공백 / 줄 바꾸기 를 유지하는 데 사용할 수 있습니다 . 그에 따라 답변을 편집했습니다. :)
Kevin Cruijssen

@KevinCruijssen 감사합니다!
Nick Kennedy

젤리에 대한 나의 지식은 꽤 얇지 만 링크를 끝내기 위해 줄 바꿈이 필요하지 않습니까? 예제에서 사용 된 것 같습니다.
Post Rock Garf Hunter

13

자바 스크립트, 6 바이트

f=_=>0

변수 할당을 포함합니다. 여기서 볼 것이 많지 않습니다.


28
좀 더 이모 지처럼 보이게하려면 :o=_=>o
Daniil Tutubalin

3
또 다른 이모티콘d=_=>b
tsh

3
b이 경우 @tsh, alas 는 정의되지 않았습니다.
Daniil Tutubalin

2
@DanielO : 하나는 분명히 그것을 주장 할 수 있습니다. 그러나 내 의견으로는, 당신이 그것을 호출 할 수 없다고 더 효과적으로 주장 할 수 있으므로 기능이 아닙니다. 자바 스크립트에서 함수 호출은 명확하게 괄호로 표시됩니다.
재귀

2
@DaniilTutubalin 그러나 이것은 호출 한 경우에만 중요합니다. 그리고 예외를 던지지 않고 실행 해야하는지 여부에 대한 기능에 대한 요구 사항은 없습니다.
tsh


8

ZX 스펙트럼 기본, 6 바이트

DEF FN f()=PI

16 진 덤프 : CE 66 28 29 3D A7. CE에 대한 1 바이트 키워드 DEF FN(후행 공백 포함)이고 A7에 대한 1 바이트 키워드입니다 PI. 를 사용하여 전화FN f() . 프로그램 예 :

  10 PRINT FN f(): DEF FN f()=PI

산출:

3.1415927

8

하스켈 , 3 바이트

o=9

이 코드는 o하나의 형식 매개 변수와 하나의 형식 클래스 인스턴스 매개 변수를 취하는 다형성 함수를 정의합니다 . 이 함수가 호출되면 지정된 유형 클래스 인스턴스를 가져 와서 fromInteger멤버를 가져오고 해당 멤버 Integer를 9 의 값으로 호출 한 다음 결과를 리턴합니다.

물론 방금 설명한 것은 Haskell 함수의 동작 일 뿐이며, 9코드 o는에 해당 하는 함수를 정의하기 만합니다 9.

이제 유일한 질문은 9 "당신이 만든 기능"입니까, 아니면 "언어의 기본 기능"입니까?

나는 그것이 "당신에 의해 만들어졌다"고 생각합니다. 이것이 내가 말한 이유는 Haskell의 사양을 읽으면 9어디서나 함수에 대한 언급을 찾을 수 없기 때문 입니다. 대신 사양에 하나 이상의 숫자를 함께 묶어 숫자 리터럴을 만들 수 있다고 명시되어 있습니다. 따라서 숫자 문자열을 쓰면 함수를 작성했습니다. 한 자리 만 사용한 경우에도 마찬가지입니다.


영리한 타입 레벨 기능
Mega Man

8

R , 9 바이트

body(t)=0

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

나는 이것이 규칙을 준수한다고 생각합니다. 이 기능 t은 입력과 출력을받지 않습니다 0. 이것은 t(전치 함수) 라는 함수가 이미 존재하고 함수 본문을 재정의하기 때문에 작동합니다. say body(a)=0(라는 객체 없음 a) 또는 body(F)=0( F논리적이며 함수가 아닙니다)에서는 작동하지 않습니다. 나는 그것이 여전히 나에 의해 만들어지기 때문에 준수한다고 생각합니다. 나는 미리 정의 된 함수가하는 것, 단순히 그 이름을 재사용하지 않습니다.

나는 이것이 R 골퍼들이 사용한 것을 본 적이 없다고 생각하지만, 도우미 기능이 필요한 도전에서 몇 바이트를 절약 할 수있는 상황이있을 수 있습니다.

보다 표준적인 해결책은 다음과 같습니다.

R , 13 바이트

f=function()0

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

입력 및 출력이없는 기능 0. 이것은 입력을받지 않고 아무것도 출력하지 않는 함수보다 1 바이트 짧습니다.

f=function(){}

본문 ( f=function()) 없이 함수를 정의하려고하면 R은이를 불완전한 명령으로 해석합니다 (이전 버전의 R에서는 그렇지 않을 수 있음).

OganM이 지적했듯이 이것을 11 바이트로 줄입니다.

R , 11 바이트

function()0

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

이 함수는 (일시적으로)에 할당 되었기 때문에 어떤 종류의 변수에 함수를 할당해야하는 요구 사항을 기술적으로 준수합니다 .Last.value.


1
function()0함수의 이름을 지정할 필요가 없으므로 두 번째 답변에서 작동해야합니다. 깔끔한 트릭 body<-, 나는 body언어를 엉망으로 만드는 몇 가지 이상한 과제를 사용하려고 노력 했습니다.
Giuseppe

1
@Giuseppe "이 함수는 어떤 종류의 변수에 할당되어야합니다."따라서 나는 function()0이 도전의 규칙을 따르지 않는다고 생각 합니다. body()="트릭을 성공적으로 사용하는 답변에 현상금을 제공하게되어 기쁩니다 .
Robin Ryder

4
function()0.Last.value()그것을 밀어
붙일

@OganM 좋은 지적!
Robin Ryder

pryr::f(x)우리가 pryr를 허용한다면.
qwr


6

C (gcc) , 5 바이트

f인수를 취하지 않고 기술적으로 정의되지 않은 정수 값을 반환하는 함수 를 정의합니다 .

f(){}

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


1
"논쟁을 취하지 말라"— 심하게 거짓말한다. 이것은 C에 대한 일반적인 오해 중 하나입니다. 빈 인수 목록은 액세스 할 수있는 휴대용 방법이없는 정의되지 않은 유형의 인수를 의미합니다. 참고로, 이것은 또한 C / C ++ 비 호환성입니다.
val은


6

[Wolfram Language (Mathematica)], 1 바이트

이것은 약간 의문의 여지가 있습니다.

f

식을 "반환"하여 f"호출"할 수있는을 정의합니다 .f[]f[]


1
호출 할 수 있으며 리턴 값은 선택 사항입니다. 이것은 중요합니다.
connectyourcharger

1
이 솔루션이 수용 가능하다면, 0 바이트 응답도 좋습니다. "정의" f는 아무 것도하지 않고 "I 've를 기억하는 것"외에는 f생략 할 수 있습니다. f[]그럼에도 불구하고 여전히 평가되지 않은 상태로 반환 할 수 있습니다 f[]. 그러나 어쨌든 대부분 패턴 대체기를 사용하여 트릭을 수행하고 함수 평가를 지시하지 않습니다.
Roman

나는 제로 바이트 버전을 추가 고려했지만 결국 내가 그 더욱 의심처럼 느꼈다 @Roman이 실제로 심볼을 생성 Global`f빈 버전은 그 (당신이이 주장 할 수하지 않는 반면 Null에 할당 %1되지만 Null이다 내장 "기능"). 그러나 대답에서 언급했듯이 1 바이트 솔루션이 유효한지 여부도 완전히 명확하지 않습니다 ...
Lukas Lang


5

루아 8 바이트

f=load''

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

(전역) 기능을 정의합니다 f.

이것은 Lua load함수를 사용하여 우리의 경우 비어있는 주어진 문자열 (빈 코드는 유효한 코드입니다)을 우리 몸에 쓴 것과 정확히 일치하는 함수로 컴파일합니다 : 아무것도 없습니다.

궁금한 사람들에게는 표준 솔루션은

function f()end

그러나 이것은 더 길다 (15 바이트).


5

POSIX sh, 6 바이트

s()(1)

중괄호를 사용하려면 하나 이상의 문자가 필요합니다.


5

자바, 10 바이트

이것은 도전의 규칙과 일치해야합니다

void f(){}

1
나는 f=a->a;또한 유효하다고 확신 합니다. :)
Kevin Cruijssen

@Kevin Cruijssen 저는 Java 전문가가 아니며 Java 배열 표기법을 사용한 적이 없습니다. 솔루션을 어떻게 컴파일 할 수 있습니까? 처음에이 TIO 에서 내 방법을 "테스트" 한 다음 거기에 접근 방식을 추가했습니다. 이제 컴파일러는 식별자를 기대합니다. 나에 의한 설명이나 잘못된 사용법?
pixma140

2
Java 8 이상 람다 함수입니다. 따라서이 경우이 두 가지 중 하나 가 작동합니다. 여기에 아직 익숙하지 않은 경우를 대비 하여 Java 8 이상 람다대한 자세한 설명이 있습니다.
Kevin Cruijssen




4

C (gcc) , 14 13 바이트

(*f)()=L"Ã";

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

이것은 지정되지 않은 매개 변수 (및 유형)의 매개 변수를 f리턴 int하고 승인 하는 함수를 정의하며 , 기계 코드는 문자열 리터럴 내에 포함됩니다. 유니 코드 문자 Ã( 0xc3 0x00 0x00 0x00little endian 시스템 에서와 같이 메모리에 저장 됨 ) ret는 함수에서 리턴 하는 x86 명령에 해당합니다. x86 이외의 아키텍처는 다른 opcode를 반환해야 할 수 있습니다.

gcc-zexecstacksegfault를 피하기 위해 플래그 가 필요할 수 있습니다 .



3

Tcl , 6 5 11 바이트

set f {_ ;}

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

규칙을 준수하기 위해 바이트 수의 일부로 변수 f에 대입을 포함합니다. 이 변경으로 인해 아래의보다 일반적인 정의는 바이트 수에 대한 위의 정의와 연결됩니다.

proc f _ {}

이것이 명명 된 기능입니까? 나중에 액세스 할 수 있도록 함수를 일종의 변수에 지정해야합니다.
mbomb007

@ mbomb007 나는 당신의 점을 확인하고 적절하게 고정
SmileAndNod

3

XSLT, 134 바이트

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template name="a"></xsl:template></xsl:stylesheet>

템플릿은이 언어가 기능에 가장 가까운 것입니다. 확실히 호출 할 수 있습니다. 인수가 0이고 빈 문자열을 "반환"합니다.





3

파스칼 23 바이트

procedure A;begin end;

2

애플 스크립트, 10

on a()
end

설명, 컴파일 및 호출 포함 :

on a()    -- declare event handler "a"
end a     -- end declaration

-- invoke it:
a()


2

SmileBASIC (> = 3), 9 바이트

DEF A
END

에 의해 함수가 호출됩니다 A.


또한 DEF A*ENDSB4에서
12Me21

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.